diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-12-07 17:05:15 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-12-07 17:05:15 -0800 |
commit | d98cb5153dad97cde82ec91a1993043cfa9bc0e4 (patch) | |
tree | 7f11d288aceebb754c11c44156d94f0186d6ecb2 /activerecord/lib/active_record/relation | |
parent | 2d9d6cd4c263f639adf8e26c7d95e7772e0c4eb7 (diff) | |
download | rails-d98cb5153dad97cde82ec91a1993043cfa9bc0e4.tar.gz rails-d98cb5153dad97cde82ec91a1993043cfa9bc0e4.tar.bz2 rails-d98cb5153dad97cde82ec91a1993043cfa9bc0e4.zip |
JoinDependency is always created with an AST now
Diffstat (limited to 'activerecord/lib/active_record/relation')
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 2933d427f0..194ce881e0 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -185,6 +185,20 @@ module ActiveRecord arel.join_sql end + def custom_join_ast(joins) + joins = joins.reject { |join| join.blank? } + + return if joins.empty? + + @implicit_readonly = true + + head = table.create_string_join(table, joins.shift) + + joins.inject(head) do |ast, join| + ast.right = table.create_string_join(ast.right, join) + end + end + def build_arel arel = table @@ -256,7 +270,7 @@ module ActiveRecord non_association_joins = (joins - association_joins - stashed_association_joins) custom_joins = custom_join_sql(non_association_joins) - join_dependency = ActiveRecord::Associations::ClassMethods::JoinDependency.new(@klass, association_joins, custom_joins) + join_dependency = ActiveRecord::Associations::ClassMethods::JoinDependency.new(@klass, association_joins, custom_join_ast(non_association_joins)) join_dependency.graft(*stashed_association_joins) |