From 9376459a7186b794b29e11c55186135004e8f3b8 Mon Sep 17 00:00:00 2001 From: Nick Kallen Date: Wed, 14 May 2008 20:33:23 -0700 Subject: fixed defect with select inside of alias joined to the same table (yikes) --- lib/arel/primitives/attribute.rb | 8 ++------ lib/arel/relations/join.rb | 4 ++-- lib/arel/relations/selection.rb | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/arel/primitives/attribute.rb b/lib/arel/primitives/attribute.rb index 5f8618ddfc..22ee37524e 100644 --- a/lib/arel/primitives/attribute.rb +++ b/lib/arel/primitives/attribute.rb @@ -47,11 +47,7 @@ module Arel module Transformations def self.included(klass) - alias_method :eql?, :== - end - - def hash - name.hash + history.size.hash + klass.hash_on :name end def as(aliaz = nil) @@ -70,7 +66,7 @@ module Arel module Congruence def history - @history ||= [self] + (ancestor ? [ancestor, ancestor.history].flatten : []) + @history ||= [self] + (ancestor ? ancestor.history : []) end def match?(other) diff --git a/lib/arel/relations/join.rb b/lib/arel/relations/join.rb index b7c5c3f39b..14903cf01d 100644 --- a/lib/arel/relations/join.rb +++ b/lib/arel/relations/join.rb @@ -21,7 +21,7 @@ module Arel join_sql, externalize(relation2).table_sql(formatter), ("ON" unless predicates.blank?), - predicates.collect { |p| p.bind(environment).to_sql }.join(' AND ') + (predicates + externalize(relation2).selects).collect { |p| p.bind(environment).to_sql }.join(' AND ') ].compact.join(" ") [relation1.joins(environment), this_join, relation2.joins(environment)].compact.join(" ") end @@ -32,7 +32,7 @@ module Arel end def selects - (externalize(relation1).selects + externalize(relation2).selects).collect { |s| s.bind(self) } + (externalize(relation1).selects).collect { |s| s.bind(self) } end def table diff --git a/lib/arel/relations/selection.rb b/lib/arel/relations/selection.rb index 38a40e1b76..0e7615a83c 100644 --- a/lib/arel/relations/selection.rb +++ b/lib/arel/relations/selection.rb @@ -15,7 +15,7 @@ module Arel end def selects - relation.selects + [predicate] + (relation.selects + [predicate]).collect { |p| p.bind(self) } end end end \ No newline at end of file -- cgit v1.2.3