aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/query_methods.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2015-05-30 12:26:41 -0600
committerSean Griffin <sean@thoughtbot.com>2015-05-30 12:35:51 -0600
commit0ef7e73f0af752002c6150bd1cf29586d8bd21c9 (patch)
tree7dcfc25e7c52682a4343c2ba7188a69e7c06c936 /activerecord/lib/active_record/relation/query_methods.rb
parent6bd2573869eda8b1e4eaa9df2966f814fd9c5d5c (diff)
downloadrails-0ef7e73f0af752002c6150bd1cf29586d8bd21c9.tar.gz
rails-0ef7e73f0af752002c6150bd1cf29586d8bd21c9.tar.bz2
rails-0ef7e73f0af752002c6150bd1cf29586d8bd21c9.zip
Ensure symbols passed to `select` are always quoted
Our general contract in Active Record is that strings are assumed to be SQL literals, and symbols are assumed to reference a column. If a from clause is given, we shouldn't include the table name, but we should still quote the value as if it were a column. Upon fixing this, the tests were still failing on SQLite. This was because the column name being returned by the query was `"\"join\""` instead of `"join"`. This is actually a bug in SQLite that was fixed a long time ago, but I was using the version of SQLite included by OS X which has this bug. Since I'm guessing this will be a common case for contributors, I also added an explicit check with a more helpful error message. Fixes #20360
Diffstat (limited to 'activerecord/lib/active_record/relation/query_methods.rb')
-rw-r--r--activerecord/lib/active_record/relation/query_methods.rb16
1 files changed, 7 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index fd78db2e95..f85dc35e89 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -1001,15 +1001,13 @@ module ActiveRecord
end
def arel_columns(columns)
- if from_clause.value
- columns
- else
- columns.map do |field|
- if (Symbol === field || String === field) && columns_hash.key?(field.to_s)
- arel_table[field]
- else
- field
- end
+ columns.map do |field|
+ if (Symbol === field || String === field) && columns_hash.key?(field.to_s) && !from_clause.value
+ arel_table[field]
+ elsif Symbol === field
+ connection.quote_table_name(field.to_s)
+ else
+ field
end
end
end