diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-12-14 14:57:03 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-12-14 14:57:03 -0800 |
commit | 2e7da54f770d1e076005c7670ab8d99431888faa (patch) | |
tree | 820351c7258b4d0b4478b9feead1ca9b01d51958 /activerecord/lib/active_record/relation/query_methods.rb | |
parent | 6212ecaa0be6c0f035d9be26e8693bd1f09fdfb6 (diff) | |
download | rails-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.rb | 18 |
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 |