@@ -1959,10 +1959,10 @@ def arel_columns_from_hash(fields)
1959
1959
table_name = table_name . name if table_name . is_a? ( Symbol )
1960
1960
case columns
1961
1961
when Symbol , String
1962
- arel_column_with_table ( table_name , columns . to_s )
1962
+ arel_column_with_table ( table_name , columns )
1963
1963
when Array
1964
1964
columns . map do |column |
1965
- arel_column_with_table ( table_name , column . to_s )
1965
+ arel_column_with_table ( table_name , column )
1966
1966
end
1967
1967
else
1968
1968
raise TypeError , "Expected Symbol, String or Array, got: #{ columns . class } "
@@ -1972,8 +1972,13 @@ def arel_columns_from_hash(fields)
1972
1972
1973
1973
def arel_column_with_table ( table_name , column_name )
1974
1974
self . references_values |= [ Arel . sql ( table_name , retryable : true ) ]
1975
- predicate_builder . resolve_arel_attribute ( table_name , column_name ) do
1976
- lookup_table_klass_from_join_dependencies ( table_name )
1975
+
1976
+ if column_name . is_a? ( Symbol ) || !column_name . match? ( /\W / )
1977
+ predicate_builder . resolve_arel_attribute ( table_name , column_name ) do
1978
+ lookup_table_klass_from_join_dependencies ( table_name )
1979
+ end
1980
+ else
1981
+ Arel . sql ( "#{ model . adapter_class . quote_table_name ( table_name ) } .#{ column_name } " )
1977
1982
end
1978
1983
end
1979
1984
@@ -1989,6 +1994,8 @@ def arel_column(field)
1989
1994
arel_column_with_table ( table , column )
1990
1995
elsif block_given?
1991
1996
yield field
1997
+ elsif Arel . arel_node? ( field )
1998
+ field
1992
1999
else
1993
2000
Arel . sql ( is_symbol ? model . adapter_class . quote_table_name ( field ) : field )
1994
2001
end
@@ -2225,12 +2232,12 @@ def arel_column_aliases_from_hash(fields)
2225
2232
case columns_aliases
2226
2233
when Hash
2227
2234
columns_aliases . map do |column , column_alias |
2228
- arel_column_with_table ( table_name , column . to_s )
2235
+ arel_column_with_table ( table_name , column )
2229
2236
. as ( model . adapter_class . quote_column_name ( column_alias . to_s ) )
2230
2237
end
2231
2238
when Array
2232
2239
columns_aliases . map do |column |
2233
- arel_column_with_table ( table_name , column . to_s )
2240
+ arel_column_with_table ( table_name , column )
2234
2241
end
2235
2242
when String , Symbol
2236
2243
arel_column ( key )
0 commit comments