aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/query_methods.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-12-14 14:57:03 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2010-12-14 14:57:03 -0800
commit2e7da54f770d1e076005c7670ab8d99431888faa (patch)
tree820351c7258b4d0b4478b9feead1ca9b01d51958 /activerecord/lib/active_record/relation/query_methods.rb
parent6212ecaa0be6c0f035d9be26e8693bd1f09fdfb6 (diff)
downloadrails-2e7da54f770d1e076005c7670ab8d99431888faa.tar.gz
rails-2e7da54f770d1e076005c7670ab8d99431888faa.tar.bz2
rails-2e7da54f770d1e076005c7670ab8d99431888faa.zip
supporting arel AST nodes when building join statements
Diffstat (limited to 'activerecord/lib/active_record/relation/query_methods.rb')
-rw-r--r--activerecord/lib/active_record/relation/query_methods.rb18
1 files changed, 15 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index ef14f48a8f..8e50f4a9bc 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -247,6 +247,8 @@ module ActiveRecord
'association_join'
when ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation
'stashed_join'
+ when Arel::Nodes::Join
+ 'join_node'
else
raise 'unknown class: %s' % join.class.name
end
@@ -254,12 +256,22 @@ module ActiveRecord
association_joins = buckets['association_join'] || []
stashed_association_joins = buckets['stashed_join'] || []
+ join_nodes = buckets['join_node'] || []
string_joins = (buckets['string_join'] || []).map { |x|
x.strip
}.uniq
+
join_list = custom_join_ast(manager, string_joins)
- join_dependency = ActiveRecord::Associations::ClassMethods::JoinDependency.new(@klass, association_joins, join_list)
+ join_dependency = ActiveRecord::Associations::ClassMethods::JoinDependency.new(
+ @klass,
+ association_joins,
+ join_list
+ )
+
+ join_nodes.each do |join|
+ join_dependency.table_aliases[join.left.name.downcase] = 1
+ end
join_dependency.graft(*stashed_association_joins)
@@ -270,9 +282,9 @@ module ActiveRecord
association.join_to(manager)
end
- return manager unless join_list
+ manager.join_sources.concat join_nodes
+ manager.join_sources.concat join_list
- join_list.each { |j| manager.from j }
manager
end