diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2014-02-28 09:53:12 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2014-02-28 09:53:12 -0800 |
commit | 422906d06c60ee3efa54cb26960aadda1adef2ce (patch) | |
tree | 7b42180d9eb2061e39d4a6eacb256fa25817b157 /activerecord/lib | |
parent | 6ef34603d2d05a81f2f556211d9eb1c0fbb7537e (diff) | |
parent | d1e7cd14c29f1ef45f2f36e79cd99eb580036991 (diff) | |
download | rails-422906d06c60ee3efa54cb26960aadda1adef2ce.tar.gz rails-422906d06c60ee3efa54cb26960aadda1adef2ce.tar.bz2 rails-422906d06c60ee3efa54cb26960aadda1adef2ce.zip |
Merge pull request #14226 from senny/14109_partial_revert
`includes` uses SQL parsing when String joins are involved.
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index fb213dc6f7..9eaba4a655 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -617,7 +617,9 @@ module ActiveRecord def references_eager_loaded_tables? joined_tables = arel.join_sources.map do |join| - unless join.is_a?(Arel::Nodes::StringJoin) + if join.is_a?(Arel::Nodes::StringJoin) + tables_in_string(join.left) + else [join.left.table_name, join.left.table_alias] end end @@ -629,5 +631,12 @@ module ActiveRecord (references_values - joined_tables).any? end + + def tables_in_string(string) + return [] if string.blank? + # always convert table names to downcase as in Oracle quoted table names are in uppercase + # ignore raw_sql_ that is used by Oracle adapter as alias for limit/offset subqueries + string.scan(/([a-zA-Z_][.\w]+).?\./).flatten.map{ |s| s.downcase }.uniq - ['raw_sql_'] + end end end |