aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2014-04-08 16:20:48 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2014-04-08 16:20:48 -0700
commitc8140beae74bd63f2c1edd31d6e7ce9bcd31169d (patch)
treed1d5aed6ab16adada7807bd34964f31464c01931 /test
parent4e2e1cc63a81bf549712c4cacfe1f3dc32e632a2 (diff)
parent55c0071ce3685a78b4f039be24b2ab40b8779467 (diff)
downloadrails-c8140beae74bd63f2c1edd31d6e7ce9bcd31169d.tar.gz
rails-c8140beae74bd63f2c1edd31d6e7ce9bcd31169d.tar.bz2
rails-c8140beae74bd63f2c1edd31d6e7ce9bcd31169d.zip
Merge branch 'master' into collector
* master: remove order_clauses since we do not use it fix whitespace and unsupported method args Add Regexp and NotRegexp nodes for PostgreSQL Revert "Merge pull request #253 from corrupt952/master" flatten object.children in visit_Arel_Node_And Added right and full outer joins Conflicts: lib/arel/visitors/to_sql.rb lib/arel/visitors/visitor.rb
Diffstat (limited to 'test')
-rw-r--r--test/test_select_manager.rb26
-rw-r--r--test/test_table.rb14
-rw-r--r--test/visitors/test_depth_first.rb12
-rw-r--r--test/visitors/test_join_sql.rb26
-rw-r--r--test/visitors/test_postgres.rb34
-rw-r--r--test/visitors/test_to_sql.rb20
6 files changed, 122 insertions, 10 deletions
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index 7f025f7a02..6258705e2f 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -519,12 +519,28 @@ module Arel
it 'should create join nodes with a klass' do
relation = Arel::SelectManager.new Table.engine
+ join = relation.create_join 'foo', 'bar', Arel::Nodes::FullOuterJoin
+ assert_kind_of Arel::Nodes::FullOuterJoin, join
+ assert_equal 'foo', join.left
+ assert_equal 'bar', join.right
+ end
+
+ it 'should create join nodes with a klass' do
+ relation = Arel::SelectManager.new Table.engine
join = relation.create_join 'foo', 'bar', Arel::Nodes::OuterJoin
assert_kind_of Arel::Nodes::OuterJoin, join
assert_equal 'foo', join.left
assert_equal 'bar', join.right
end
+ it 'should create join nodes with a klass' do
+ relation = Arel::SelectManager.new Table.engine
+ join = relation.create_join 'foo', 'bar', Arel::Nodes::RightOuterJoin
+ assert_kind_of Arel::Nodes::RightOuterJoin, join
+ assert_equal 'foo', join.left
+ assert_equal 'bar', join.right
+ end
+
describe 'join' do
it 'responds to join' do
left = Table.new :users
@@ -612,16 +628,6 @@ module Arel
end
end
- describe 'order_clauses' do
- it 'returns order clauses as a list' do
- table = Table.new :users
- manager = Arel::SelectManager.new Table.engine
- manager.from table
- manager.order table[:id]
- manager.order_clauses.first.must_be_like %{ "users"."id" }
- end
- end
-
describe 'group' do
it 'takes an attribute' do
table = Table.new :users
diff --git a/test/test_table.rb b/test/test_table.rb
index 431a919de1..b4c2a65fcd 100644
--- a/test/test_table.rb
+++ b/test/test_table.rb
@@ -20,12 +20,26 @@ module Arel
end
it 'should create join nodes with a klass' do
+ join = @relation.create_join 'foo', 'bar', Arel::Nodes::FullOuterJoin
+ assert_kind_of Arel::Nodes::FullOuterJoin, join
+ assert_equal 'foo', join.left
+ assert_equal 'bar', join.right
+ end
+
+ it 'should create join nodes with a klass' do
join = @relation.create_join 'foo', 'bar', Arel::Nodes::OuterJoin
assert_kind_of Arel::Nodes::OuterJoin, join
assert_equal 'foo', join.left
assert_equal 'bar', join.right
end
+ it 'should create join nodes with a klass' do
+ join = @relation.create_join 'foo', 'bar', Arel::Nodes::RightOuterJoin
+ assert_kind_of Arel::Nodes::RightOuterJoin, join
+ assert_equal 'foo', join.left
+ assert_equal 'bar', join.right
+ end
+
it 'should return an insert manager' do
im = @relation.compile_insert 'VALUES(NULL)'
assert_kind_of Arel::InsertManager, im
diff --git a/test/visitors/test_depth_first.rb b/test/visitors/test_depth_first.rb
index cbaa780dae..baa8f64184 100644
--- a/test/visitors/test_depth_first.rb
+++ b/test/visitors/test_depth_first.rb
@@ -81,12 +81,24 @@ module Arel
assert_equal [:a, :b, join], @collector.calls
end
+ def test_full_outer_join
+ join = Nodes::FullOuterJoin.new :a, :b
+ @visitor.accept join
+ assert_equal [:a, :b, join], @collector.calls
+ end
+
def test_outer_join
join = Nodes::OuterJoin.new :a, :b
@visitor.accept join
assert_equal [:a, :b, join], @collector.calls
end
+ def test_right_outer_join
+ join = Nodes::RightOuterJoin.new :a, :b
+ @visitor.accept join
+ assert_equal [:a, :b, join], @collector.calls
+ end
+
[
Arel::Nodes::Assignment,
Arel::Nodes::Between,
diff --git a/test/visitors/test_join_sql.rb b/test/visitors/test_join_sql.rb
index ea71c05d79..34378dafe7 100644
--- a/test/visitors/test_join_sql.rb
+++ b/test/visitors/test_join_sql.rb
@@ -25,6 +25,19 @@ module Arel
end
end
+ describe 'FULL outer join' do
+ it 'should visit left if left is a join' do
+ t = Table.new :users
+ sm = t.select_manager
+ sm.join(t, Nodes::FullOuterJoin).on(t[:id]).join(
+ t, Nodes::FullOuterJoin).on(t[:id])
+ sm.join_sql.must_be_like %{
+ FULL OUTER JOIN "users" ON "users"."id"
+ FULL OUTER JOIN "users" ON "users"."id"
+ }
+ end
+ end
+
describe 'outer join' do
it 'should visit left if left is a join' do
t = Table.new :users
@@ -37,6 +50,19 @@ module Arel
}
end
end
+
+ describe 'right outer join' do
+ it 'should visit left if left is a join' do
+ t = Table.new :users
+ sm = t.select_manager
+ sm.join(t, Nodes::RightOuterJoin).on(t[:id]).join(
+ t, Nodes::RightOuterJoin).on(t[:id])
+ sm.join_sql.must_be_like %{
+ RIGHT OUTER JOIN "users" ON "users"."id"
+ RIGHT OUTER JOIN "users" ON "users"."id"
+ }
+ end
+ end
end
end
end
diff --git a/test/visitors/test_postgres.rb b/test/visitors/test_postgres.rb
index 4287baaf14..995e9bf515 100644
--- a/test/visitors/test_postgres.rb
+++ b/test/visitors/test_postgres.rb
@@ -79,6 +79,40 @@ module Arel
}
end
end
+
+ describe "Nodes::Regexp" do
+ it "should know how to visit" do
+ node = Arel::Nodes::Regexp.new(@table[:name], Nodes.build_quoted('foo%'))
+ @visitor.accept(node).must_be_like %{
+ "users"."name" ~ 'foo%'
+ }
+ end
+
+ it 'can handle subqueries' do
+ subquery = @table.project(:id).where(Arel::Nodes::Regexp.new(@table[:name], Nodes.build_quoted('foo%')))
+ node = @attr.in subquery
+ @visitor.accept(node).must_be_like %{
+ "users"."id" IN (SELECT id FROM "users" WHERE "users"."name" ~ 'foo%')
+ }
+ end
+ end
+
+ describe "Nodes::NotRegexp" do
+ it "should know how to visit" do
+ node = Arel::Nodes::NotRegexp.new(@table[:name], Nodes.build_quoted('foo%'))
+ @visitor.accept(node).must_be_like %{
+ "users"."name" !~ 'foo%'
+ }
+ end
+
+ it 'can handle subqueries' do
+ subquery = @table.project(:id).where(Arel::Nodes::NotRegexp.new(@table[:name], Nodes.build_quoted('foo%')))
+ node = @attr.in subquery
+ @visitor.accept(node).must_be_like %{
+ "users"."id" IN (SELECT id FROM "users" WHERE "users"."name" !~ 'foo%')
+ }
+ end
+ end
end
end
end
diff --git a/test/visitors/test_to_sql.rb b/test/visitors/test_to_sql.rb
index 33c7bb9e93..b6d91046b8 100644
--- a/test/visitors/test_to_sql.rb
+++ b/test/visitors/test_to_sql.rb
@@ -531,6 +531,26 @@ module Arel
end
end
end
+
+ describe 'Nodes::Regexp' do
+ it 'raises not implemented error' do
+ node = Arel::Nodes::Regexp.new(@table[:name], Nodes.build_quoted('foo%'))
+
+ assert_raises(NotImplementedError) do
+ compile(node)
+ end
+ end
+ end
+
+ describe 'Nodes::NotRegexp' do
+ it 'raises not implemented error' do
+ node = Arel::Nodes::NotRegexp.new(@table[:name], Nodes.build_quoted('foo%'))
+
+ assert_raises(NotImplementedError) do
+ compile(node)
+ end
+ end
+ end
end
end
end