aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel
diff options
context:
space:
mode:
authorNick Kallen <nkallen@nick-kallens-computer-2.local>2008-05-14 20:33:23 -0700
committerNick Kallen <nkallen@nick-kallens-computer-2.local>2008-05-14 20:33:23 -0700
commit9376459a7186b794b29e11c55186135004e8f3b8 (patch)
tree37b2905882277e25be9c6d1940be5bc625724711 /lib/arel
parent16730fdbd0ab630320aba225314aa6a1a3b450fe (diff)
downloadrails-9376459a7186b794b29e11c55186135004e8f3b8.tar.gz
rails-9376459a7186b794b29e11c55186135004e8f3b8.tar.bz2
rails-9376459a7186b794b29e11c55186135004e8f3b8.zip
fixed defect with select inside of alias joined to the same table (yikes)
Diffstat (limited to 'lib/arel')
-rw-r--r--lib/arel/primitives/attribute.rb8
-rw-r--r--lib/arel/relations/join.rb4
-rw-r--r--lib/arel/relations/selection.rb2
3 files changed, 5 insertions, 9 deletions
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