aboutsummaryrefslogtreecommitdiffstats
path: root/spec
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 /spec
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 'spec')
-rw-r--r--spec/arel/unit/relations/join_spec.rb23
1 files changed, 18 insertions, 5 deletions
diff --git a/spec/arel/unit/relations/join_spec.rb b/spec/arel/unit/relations/join_spec.rb
index d517da8c1f..b5c5dc8e33 100644
--- a/spec/arel/unit/relations/join_spec.rb
+++ b/spec/arel/unit/relations/join_spec.rb
@@ -56,14 +56,13 @@ module Arel
")
end
- it 'manufactures sql joining the two tables, merging any selects' do
+ it 'manufactures sql joining the two tables, with selects from the right table in the ON clause' do
Join.new("INNER JOIN", @relation1.select(@relation1[:id].eq(1)),
@relation2.select(@relation2[:id].eq(2)), @predicate).to_sql.should be_like("
SELECT `users`.`id`, `users`.`name`, `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id`
FROM `users`
- INNER JOIN `photos` ON `users`.`id` = `photos`.`user_id`
+ INNER JOIN `photos` ON `users`.`id` = `photos`.`user_id` AND `photos`.`id` = 2
WHERE `users`.`id` = 1
- AND `photos`.`id` = 2
")
end
end
@@ -158,10 +157,24 @@ module Arel
SELECT `users`.`id`, `users`.`name`, `users_2`.`id`, `users_2`.`name`
FROM `users`
INNER JOIN `users` AS `users_2`
- ON `users`.`id` = `users_2`.`id`
- WHERE `users_2`.`id` = 1
+ ON `users`.`id` = `users_2`.`id` AND `users_2`.`id` = 1
")
end
+
+ describe 'when the selection occurs before the alias' do
+ it 'manufactures sql aliasing the predicates properly' do
+ aliased_relation = @relation1.select(@relation1[:id].eq(1)).alias
+ @relation1 \
+ .join(aliased_relation) \
+ .on(aliased_relation[:id].eq(@relation1[:id])) \
+ .to_sql.should be_like("
+ SELECT `users`.`id`, `users`.`name`, `users_2`.`id`, `users_2`.`name`
+ FROM `users`
+ INNER JOIN `users` AS `users_2`
+ ON `users_2`.`id` = `users`.`id` AND `users_2`.`id` = 1
+ ")
+ end
+ end
end
describe 'when joining the relation to itself multiple times' do