arel 6.0.0.beta2 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +1 -1
  3. data/README.markdown +5 -5
  4. data/lib/arel.rb +1 -1
  5. data/lib/arel/collectors/sql_string.rb +7 -1
  6. data/lib/arel/expressions.rb +5 -4
  7. data/lib/arel/nodes.rb +1 -0
  8. data/lib/arel/nodes/bind_param.rb +6 -0
  9. data/lib/arel/nodes/sql_literal.rb +0 -3
  10. data/lib/arel/predications.rb +2 -2
  11. data/lib/arel/visitors/depth_first.rb +6 -0
  12. data/lib/arel/visitors/oracle.rb +4 -0
  13. data/lib/arel/visitors/postgresql.rb +4 -0
  14. data/lib/arel/visitors/reduce.rb +4 -4
  15. data/lib/arel/visitors/to_sql.rb +3 -2
  16. data/lib/arel/visitors/visitor.rb +15 -15
  17. metadata +26 -69
  18. data/.gitignore +0 -9
  19. data/.travis.yml +0 -18
  20. data/Gemfile +0 -5
  21. data/Rakefile +0 -15
  22. data/arel.gemspec +0 -24
  23. data/test/attributes/test_attribute.rb +0 -910
  24. data/test/collectors/test_bind_collector.rb +0 -70
  25. data/test/collectors/test_sql_string.rb +0 -38
  26. data/test/helper.rb +0 -22
  27. data/test/nodes/test_and.rb +0 -20
  28. data/test/nodes/test_as.rb +0 -34
  29. data/test/nodes/test_ascending.rb +0 -44
  30. data/test/nodes/test_bin.rb +0 -33
  31. data/test/nodes/test_binary.rb +0 -26
  32. data/test/nodes/test_count.rb +0 -33
  33. data/test/nodes/test_delete_statement.rb +0 -34
  34. data/test/nodes/test_descending.rb +0 -44
  35. data/test/nodes/test_distinct.rb +0 -20
  36. data/test/nodes/test_equality.rb +0 -84
  37. data/test/nodes/test_extract.rb +0 -41
  38. data/test/nodes/test_false.rb +0 -20
  39. data/test/nodes/test_grouping.rb +0 -25
  40. data/test/nodes/test_infix_operation.rb +0 -40
  41. data/test/nodes/test_insert_statement.rb +0 -42
  42. data/test/nodes/test_named_function.rb +0 -46
  43. data/test/nodes/test_node.rb +0 -39
  44. data/test/nodes/test_not.rb +0 -29
  45. data/test/nodes/test_or.rb +0 -34
  46. data/test/nodes/test_over.rb +0 -67
  47. data/test/nodes/test_select_core.rb +0 -69
  48. data/test/nodes/test_select_statement.rb +0 -49
  49. data/test/nodes/test_sql_literal.rb +0 -73
  50. data/test/nodes/test_sum.rb +0 -24
  51. data/test/nodes/test_table_alias.rb +0 -36
  52. data/test/nodes/test_true.rb +0 -21
  53. data/test/nodes/test_update_statement.rb +0 -58
  54. data/test/nodes/test_window.rb +0 -79
  55. data/test/support/fake_record.rb +0 -135
  56. data/test/test_attributes.rb +0 -66
  57. data/test/test_crud.rb +0 -63
  58. data/test/test_delete_manager.rb +0 -42
  59. data/test/test_factory_methods.rb +0 -44
  60. data/test/test_insert_manager.rb +0 -171
  61. data/test/test_select_manager.rb +0 -1181
  62. data/test/test_table.rb +0 -253
  63. data/test/test_update_manager.rb +0 -124
  64. data/test/visitors/test_bind_visitor.rb +0 -60
  65. data/test/visitors/test_depth_first.rb +0 -258
  66. data/test/visitors/test_dispatch_contamination.rb +0 -22
  67. data/test/visitors/test_dot.rb +0 -76
  68. data/test/visitors/test_ibm_db.rb +0 -33
  69. data/test/visitors/test_informix.rb +0 -58
  70. data/test/visitors/test_mssql.rb +0 -70
  71. data/test/visitors/test_mysql.rb +0 -60
  72. data/test/visitors/test_oracle.rb +0 -170
  73. data/test/visitors/test_postgres.rb +0 -122
  74. data/test/visitors/test_sqlite.rb +0 -23
  75. data/test/visitors/test_to_sql.rb +0 -598
@@ -1,253 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- describe Table do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- it 'should create join nodes' do
10
- join = @relation.create_string_join 'foo'
11
- assert_kind_of Arel::Nodes::StringJoin, join
12
- assert_equal 'foo', join.left
13
- end
14
-
15
- it 'should create join nodes' do
16
- join = @relation.create_join 'foo', 'bar'
17
- assert_kind_of Arel::Nodes::InnerJoin, join
18
- assert_equal 'foo', join.left
19
- assert_equal 'bar', join.right
20
- end
21
-
22
- it 'should create join nodes with a klass' do
23
- join = @relation.create_join 'foo', 'bar', Arel::Nodes::FullOuterJoin
24
- assert_kind_of Arel::Nodes::FullOuterJoin, join
25
- assert_equal 'foo', join.left
26
- assert_equal 'bar', join.right
27
- end
28
-
29
- it 'should create join nodes with a klass' do
30
- join = @relation.create_join 'foo', 'bar', Arel::Nodes::OuterJoin
31
- assert_kind_of Arel::Nodes::OuterJoin, join
32
- assert_equal 'foo', join.left
33
- assert_equal 'bar', join.right
34
- end
35
-
36
- it 'should create join nodes with a klass' do
37
- join = @relation.create_join 'foo', 'bar', Arel::Nodes::RightOuterJoin
38
- assert_kind_of Arel::Nodes::RightOuterJoin, join
39
- assert_equal 'foo', join.left
40
- assert_equal 'bar', join.right
41
- end
42
-
43
- it 'should return an insert manager' do
44
- im = @relation.compile_insert 'VALUES(NULL)'
45
- assert_kind_of Arel::InsertManager, im
46
- im.into Table.new(:users)
47
- assert_equal "INSERT INTO \"users\" VALUES(NULL)", im.to_sql
48
- end
49
-
50
- it 'should return IM from insert_manager' do
51
- im = @relation.insert_manager
52
- assert_kind_of Arel::InsertManager, im
53
- assert_equal im.engine, @relation.engine
54
- end
55
-
56
- describe 'skip' do
57
- it 'should add an offset' do
58
- sm = @relation.skip 2
59
- sm.to_sql.must_be_like "SELECT FROM \"users\" OFFSET 2"
60
- end
61
- end
62
-
63
- describe 'select_manager' do
64
- it 'should return an empty select manager' do
65
- sm = @relation.select_manager
66
- sm.to_sql.must_be_like 'SELECT'
67
- end
68
- end
69
-
70
- describe 'update_manager' do
71
- it 'should return an update manager' do
72
- um = @relation.update_manager
73
- assert_kind_of Arel::UpdateManager, um
74
- assert_equal um.engine, @relation.engine
75
- end
76
- end
77
-
78
- describe 'delete_manager' do
79
- it 'should return a delete manager' do
80
- dm = @relation.delete_manager
81
- assert_kind_of Arel::DeleteManager, dm
82
- assert_equal dm.engine, @relation.engine
83
- end
84
- end
85
-
86
- describe 'having' do
87
- it 'adds a having clause' do
88
- mgr = @relation.having @relation[:id].eq(10)
89
- mgr.to_sql.must_be_like %{
90
- SELECT FROM "users" HAVING "users"."id" = 10
91
- }
92
- end
93
- end
94
-
95
- describe 'backwards compat' do
96
- describe 'join' do
97
- it 'noops on nil' do
98
- mgr = @relation.join nil
99
-
100
- mgr.to_sql.must_be_like %{ SELECT FROM "users" }
101
- end
102
-
103
- it 'takes a second argument for join type' do
104
- right = @relation.alias
105
- predicate = @relation[:id].eq(right[:id])
106
- mgr = @relation.join(right, Nodes::OuterJoin).on(predicate)
107
-
108
- mgr.to_sql.must_be_like %{
109
- SELECT FROM "users"
110
- LEFT OUTER JOIN "users" "users_2"
111
- ON "users"."id" = "users_2"."id"
112
- }
113
- end
114
- end
115
-
116
- describe 'join' do
117
- it 'creates an outer join' do
118
- right = @relation.alias
119
- predicate = @relation[:id].eq(right[:id])
120
- mgr = @relation.outer_join(right).on(predicate)
121
-
122
- mgr.to_sql.must_be_like %{
123
- SELECT FROM "users"
124
- LEFT OUTER JOIN "users" "users_2"
125
- ON "users"."id" = "users_2"."id"
126
- }
127
- end
128
- end
129
- end
130
-
131
- describe 'group' do
132
- it 'should create a group' do
133
- manager = @relation.group @relation[:id]
134
- manager.to_sql.must_be_like %{
135
- SELECT FROM "users" GROUP BY "users"."id"
136
- }
137
- end
138
- end
139
-
140
- describe 'alias' do
141
- it 'should create a node that proxies to a table' do
142
- @relation.aliases.must_equal []
143
-
144
- node = @relation.alias
145
- @relation.aliases.must_equal [node]
146
- node.name.must_equal 'users_2'
147
- node[:id].relation.must_equal node
148
- end
149
- end
150
-
151
- describe 'new' do
152
- it 'should accept an engine' do
153
- rel = Table.new :users, 'foo'
154
- rel.engine.must_equal 'foo'
155
- end
156
-
157
- it 'should accept a hash' do
158
- rel = Table.new :users, :engine => 'foo'
159
- rel.engine.must_equal 'foo'
160
- end
161
-
162
- it 'ignores as if it equals name' do
163
- rel = Table.new :users, :as => 'users'
164
- rel.table_alias.must_be_nil
165
- end
166
- end
167
-
168
- describe 'order' do
169
- it "should take an order" do
170
- manager = @relation.order "foo"
171
- manager.to_sql.must_be_like %{ SELECT FROM "users" ORDER BY foo }
172
- end
173
- end
174
-
175
- describe 'take' do
176
- it "should add a limit" do
177
- manager = @relation.take 1
178
- manager.project Nodes::SqlLiteral.new '*'
179
- manager.to_sql.must_be_like %{ SELECT * FROM "users" LIMIT 1 }
180
- end
181
- end
182
-
183
- describe 'project' do
184
- it 'can project' do
185
- manager = @relation.project Nodes::SqlLiteral.new '*'
186
- manager.to_sql.must_be_like %{ SELECT * FROM "users" }
187
- end
188
-
189
- it 'takes multiple parameters' do
190
- manager = @relation.project Nodes::SqlLiteral.new('*'), Nodes::SqlLiteral.new('*')
191
- manager.to_sql.must_be_like %{ SELECT *, * FROM "users" }
192
- end
193
- end
194
-
195
- describe 'where' do
196
- it "returns a tree manager" do
197
- manager = @relation.where @relation[:id].eq 1
198
- manager.project @relation[:id]
199
- manager.must_be_kind_of TreeManager
200
- manager.to_sql.must_be_like %{
201
- SELECT "users"."id"
202
- FROM "users"
203
- WHERE "users"."id" = 1
204
- }
205
- end
206
- end
207
-
208
- it "should have a name" do
209
- @relation.name.must_equal 'users'
210
- end
211
-
212
- it "should have a table name" do
213
- @relation.table_name.must_equal 'users'
214
- end
215
-
216
- it "should have an engine" do
217
- @relation.engine.must_equal Table.engine
218
- end
219
-
220
- describe '[]' do
221
- describe 'when given a Symbol' do
222
- it "manufactures an attribute if the symbol names an attribute within the relation" do
223
- column = @relation[:id]
224
- column.name.must_equal :id
225
- end
226
- end
227
- end
228
-
229
- describe 'equality' do
230
- it 'is equal with equal ivars' do
231
- relation1 = Table.new(:users, 'vroom')
232
- relation1.aliases = %w[a b c]
233
- relation1.table_alias = 'zomg'
234
- relation2 = Table.new(:users, 'vroom')
235
- relation2.aliases = %w[a b c]
236
- relation2.table_alias = 'zomg'
237
- array = [relation1, relation2]
238
- assert_equal 1, array.uniq.size
239
- end
240
-
241
- it 'is not equal with different ivars' do
242
- relation1 = Table.new(:users, 'vroom')
243
- relation1.aliases = %w[a b c]
244
- relation1.table_alias = 'zomg'
245
- relation2 = Table.new(:users, 'vroom')
246
- relation2.aliases = %w[x y z]
247
- relation2.table_alias = 'zomg'
248
- array = [relation1, relation2]
249
- assert_equal 2, array.uniq.size
250
- end
251
- end
252
- end
253
- end
@@ -1,124 +0,0 @@
1
- require 'helper'
2
-
3
- module Arel
4
- describe 'update manager' do
5
- describe 'new' do
6
- it 'takes an engine' do
7
- Arel::UpdateManager.new Table.engine
8
- end
9
- end
10
-
11
- it "should not quote sql literals" do
12
- table = Table.new(:users)
13
- um = Arel::UpdateManager.new Table.engine
14
- um.table table
15
- um.set [[table[:name], (Arel::Nodes::BindParam.new '?')]]
16
- um.to_sql.must_be_like %{ UPDATE "users" SET "name" = ? }
17
- end
18
-
19
- it 'handles limit properly' do
20
- table = Table.new(:users)
21
- um = Arel::UpdateManager.new Table.engine
22
- um.key = 'id'
23
- um.take 10
24
- um.table table
25
- um.set [[table[:name], nil]]
26
- assert_match(/LIMIT 10/, um.to_sql)
27
- end
28
-
29
- describe 'set' do
30
- it "updates with null" do
31
- table = Table.new(:users)
32
- um = Arel::UpdateManager.new Table.engine
33
- um.table table
34
- um.set [[table[:name], nil]]
35
- um.to_sql.must_be_like %{ UPDATE "users" SET "name" = NULL }
36
- end
37
-
38
- it 'takes a string' do
39
- table = Table.new(:users)
40
- um = Arel::UpdateManager.new Table.engine
41
- um.table table
42
- um.set Nodes::SqlLiteral.new "foo = bar"
43
- um.to_sql.must_be_like %{ UPDATE "users" SET foo = bar }
44
- end
45
-
46
- it 'takes a list of lists' do
47
- table = Table.new(:users)
48
- um = Arel::UpdateManager.new Table.engine
49
- um.table table
50
- um.set [[table[:id], 1], [table[:name], 'hello']]
51
- um.to_sql.must_be_like %{
52
- UPDATE "users" SET "id" = 1, "name" = 'hello'
53
- }
54
- end
55
-
56
- it 'chains' do
57
- table = Table.new(:users)
58
- um = Arel::UpdateManager.new Table.engine
59
- um.set([[table[:id], 1], [table[:name], 'hello']]).must_equal um
60
- end
61
- end
62
-
63
- describe 'table' do
64
- it 'generates an update statement' do
65
- um = Arel::UpdateManager.new Table.engine
66
- um.table Table.new(:users)
67
- um.to_sql.must_be_like %{ UPDATE "users" }
68
- end
69
-
70
- it 'chains' do
71
- um = Arel::UpdateManager.new Table.engine
72
- um.table(Table.new(:users)).must_equal um
73
- end
74
-
75
- it 'generates an update statement with joins' do
76
- um = Arel::UpdateManager.new Table.engine
77
-
78
- table = Table.new(:users)
79
- join_source = Arel::Nodes::JoinSource.new(
80
- table,
81
- [table.create_join(Table.new(:posts))]
82
- )
83
-
84
- um.table join_source
85
- um.to_sql.must_be_like %{ UPDATE "users" INNER JOIN "posts" }
86
- end
87
- end
88
-
89
- describe 'where' do
90
- it 'generates a where clause' do
91
- table = Table.new :users
92
- um = Arel::UpdateManager.new Table.engine
93
- um.table table
94
- um.where table[:id].eq(1)
95
- um.to_sql.must_be_like %{
96
- UPDATE "users" WHERE "users"."id" = 1
97
- }
98
- end
99
-
100
- it 'chains' do
101
- table = Table.new :users
102
- um = Arel::UpdateManager.new Table.engine
103
- um.table table
104
- um.where(table[:id].eq(1)).must_equal um
105
- end
106
- end
107
-
108
- describe 'key' do
109
- before do
110
- @table = Table.new :users
111
- @um = Arel::UpdateManager.new Table.engine
112
- @um.key = @table[:foo]
113
- end
114
-
115
- it 'can be set' do
116
- @um.ast.key.must_equal @table[:foo]
117
- end
118
-
119
- it 'can be accessed' do
120
- @um.key.must_equal @table[:foo]
121
- end
122
- end
123
- end
124
- end
@@ -1,60 +0,0 @@
1
- require 'helper'
2
- require 'arel/visitors/bind_visitor'
3
- require 'support/fake_record'
4
-
5
- module Arel
6
- module Visitors
7
- class TestBindVisitor < Arel::Test
8
- attr_reader :collector
9
-
10
- def setup
11
- @collector = Collectors::SQLString.new
12
- super
13
- end
14
-
15
- ##
16
- # Tests visit_Arel_Nodes_Assignment correctly
17
- # substitutes binds with values from block
18
- def test_assignment_binds_are_substituted
19
- table = Table.new(:users)
20
- um = Arel::UpdateManager.new Table.engine
21
- bp = Nodes::BindParam.new '?'
22
- um.set [[table[:name], bp]]
23
- visitor = Class.new(Arel::Visitors::ToSql) {
24
- include Arel::Visitors::BindVisitor
25
- }.new Table.engine.connection
26
-
27
- assignment = um.ast.values[0]
28
- actual = visitor.accept(assignment, collector) {
29
- "replace"
30
- }
31
- assert actual
32
- value = actual.value
33
- assert_like "\"name\" = replace", value
34
- end
35
-
36
- def test_visitor_yields_on_binds
37
- visitor = Class.new(Arel::Visitors::ToSql) {
38
- include Arel::Visitors::BindVisitor
39
- }.new nil
40
-
41
- bp = Nodes::BindParam.new 'omg'
42
- called = false
43
- visitor.accept(bp, collector) { called = true }
44
- assert called
45
- end
46
-
47
- def test_visitor_only_yields_on_binds
48
- visitor = Class.new(Arel::Visitors::ToSql) {
49
- include Arel::Visitors::BindVisitor
50
- }.new(nil)
51
-
52
- bp = Arel.sql 'omg'
53
- called = false
54
-
55
- visitor.accept(bp, collector) { called = true }
56
- refute called
57
- end
58
- end
59
- end
60
- end
@@ -1,258 +0,0 @@
1
- require 'helper'
2
- require 'set'
3
-
4
- module Arel
5
- module Visitors
6
- class TestDepthFirst < Minitest::Test
7
- Collector = Struct.new(:calls) do
8
- def call object
9
- calls << object
10
- end
11
- end
12
-
13
- def setup
14
- @collector = Collector.new []
15
- @visitor = Visitors::DepthFirst.new @collector
16
- end
17
-
18
- def test_raises_with_object
19
- assert_raises(TypeError) do
20
- @visitor.accept(Object.new)
21
- end
22
- end
23
-
24
-
25
- # unary ops
26
- [
27
- Arel::Nodes::Not,
28
- Arel::Nodes::Group,
29
- Arel::Nodes::On,
30
- Arel::Nodes::Grouping,
31
- Arel::Nodes::Offset,
32
- Arel::Nodes::Ordering,
33
- Arel::Nodes::Having,
34
- Arel::Nodes::StringJoin,
35
- Arel::Nodes::UnqualifiedColumn,
36
- Arel::Nodes::Top,
37
- Arel::Nodes::Limit,
38
- ].each do |klass|
39
- define_method("test_#{klass.name.gsub('::', '_')}") do
40
- op = klass.new(:a)
41
- @visitor.accept op
42
- assert_equal [:a, op], @collector.calls
43
- end
44
- end
45
-
46
- # functions
47
- [
48
- Arel::Nodes::Exists,
49
- Arel::Nodes::Avg,
50
- Arel::Nodes::Min,
51
- Arel::Nodes::Max,
52
- Arel::Nodes::Sum,
53
- ].each do |klass|
54
- define_method("test_#{klass.name.gsub('::', '_')}") do
55
- func = klass.new(:a, "b")
56
- @visitor.accept func
57
- assert_equal [:a, "b", false, func], @collector.calls
58
- end
59
- end
60
-
61
- def test_named_function
62
- func = Arel::Nodes::NamedFunction.new(:a, :b, "c")
63
- @visitor.accept func
64
- assert_equal [:a, :b, false, "c", func], @collector.calls
65
- end
66
-
67
- def test_lock
68
- lock = Nodes::Lock.new true
69
- @visitor.accept lock
70
- assert_equal [lock], @collector.calls
71
- end
72
-
73
- def test_count
74
- count = Nodes::Count.new :a, :b, "c"
75
- @visitor.accept count
76
- assert_equal [:a, "c", :b, count], @collector.calls
77
- end
78
-
79
- def test_inner_join
80
- join = Nodes::InnerJoin.new :a, :b
81
- @visitor.accept join
82
- assert_equal [:a, :b, join], @collector.calls
83
- end
84
-
85
- def test_full_outer_join
86
- join = Nodes::FullOuterJoin.new :a, :b
87
- @visitor.accept join
88
- assert_equal [:a, :b, join], @collector.calls
89
- end
90
-
91
- def test_outer_join
92
- join = Nodes::OuterJoin.new :a, :b
93
- @visitor.accept join
94
- assert_equal [:a, :b, join], @collector.calls
95
- end
96
-
97
- def test_right_outer_join
98
- join = Nodes::RightOuterJoin.new :a, :b
99
- @visitor.accept join
100
- assert_equal [:a, :b, join], @collector.calls
101
- end
102
-
103
- [
104
- Arel::Nodes::Assignment,
105
- Arel::Nodes::Between,
106
- Arel::Nodes::DoesNotMatch,
107
- Arel::Nodes::Equality,
108
- Arel::Nodes::GreaterThan,
109
- Arel::Nodes::GreaterThanOrEqual,
110
- Arel::Nodes::In,
111
- Arel::Nodes::LessThan,
112
- Arel::Nodes::LessThanOrEqual,
113
- Arel::Nodes::Matches,
114
- Arel::Nodes::NotEqual,
115
- Arel::Nodes::NotIn,
116
- Arel::Nodes::Or,
117
- Arel::Nodes::TableAlias,
118
- Arel::Nodes::Values,
119
- Arel::Nodes::As,
120
- Arel::Nodes::DeleteStatement,
121
- Arel::Nodes::JoinSource,
122
- ].each do |klass|
123
- define_method("test_#{klass.name.gsub('::', '_')}") do
124
- binary = klass.new(:a, :b)
125
- @visitor.accept binary
126
- assert_equal [:a, :b, binary], @collector.calls
127
- end
128
- end
129
-
130
- def test_Arel_Nodes_InfixOperation
131
- binary = Arel::Nodes::InfixOperation.new(:o, :a, :b)
132
- @visitor.accept binary
133
- assert_equal [:a, :b, binary], @collector.calls
134
- end
135
-
136
- # N-ary
137
- [
138
- Arel::Nodes::And,
139
- ].each do |klass|
140
- define_method("test_#{klass.name.gsub('::', '_')}") do
141
- binary = klass.new([:a, :b, :c])
142
- @visitor.accept binary
143
- assert_equal [:a, :b, :c, binary], @collector.calls
144
- end
145
- end
146
-
147
- [
148
- Arel::Attributes::Integer,
149
- Arel::Attributes::Float,
150
- Arel::Attributes::String,
151
- Arel::Attributes::Time,
152
- Arel::Attributes::Boolean,
153
- Arel::Attributes::Attribute
154
- ].each do |klass|
155
- define_method("test_#{klass.name.gsub('::', '_')}") do
156
- binary = klass.new(:a, :b)
157
- @visitor.accept binary
158
- assert_equal [:a, :b, binary], @collector.calls
159
- end
160
- end
161
-
162
- def test_table
163
- relation = Arel::Table.new(:users)
164
- @visitor.accept relation
165
- assert_equal ['users', relation], @collector.calls
166
- end
167
-
168
- def test_array
169
- node = Nodes::Or.new(:a, :b)
170
- list = [node]
171
- @visitor.accept list
172
- assert_equal [:a, :b, node, list], @collector.calls
173
- end
174
-
175
- def test_set
176
- node = Nodes::Or.new(:a, :b)
177
- set = Set.new([node])
178
- @visitor.accept set
179
- assert_equal [:a, :b, node, set], @collector.calls
180
- end
181
-
182
- def test_hash
183
- node = Nodes::Or.new(:a, :b)
184
- hash = { node => node }
185
- @visitor.accept hash
186
- assert_equal [:a, :b, node, :a, :b, node, hash], @collector.calls
187
- end
188
-
189
- def test_update_statement
190
- stmt = Nodes::UpdateStatement.new
191
- stmt.relation = :a
192
- stmt.values << :b
193
- stmt.wheres << :c
194
- stmt.orders << :d
195
- stmt.limit = :e
196
-
197
- @visitor.accept stmt
198
- assert_equal [:a, :b, stmt.values, :c, stmt.wheres, :d, stmt.orders,
199
- :e, stmt], @collector.calls
200
- end
201
-
202
- def test_select_core
203
- core = Nodes::SelectCore.new
204
- core.projections << :a
205
- core.froms = :b
206
- core.wheres << :c
207
- core.groups << :d
208
- core.windows << :e
209
- core.having = :f
210
-
211
- @visitor.accept core
212
- assert_equal [
213
- :a, core.projections,
214
- :b, [],
215
- core.source,
216
- :c, core.wheres,
217
- :d, core.groups,
218
- :e, core.windows,
219
- :f,
220
- core], @collector.calls
221
- end
222
-
223
- def test_select_statement
224
- ss = Nodes::SelectStatement.new
225
- ss.cores.replace [:a]
226
- ss.orders << :b
227
- ss.limit = :c
228
- ss.lock = :d
229
- ss.offset = :e
230
-
231
- @visitor.accept ss
232
- assert_equal [
233
- :a, ss.cores,
234
- :b, ss.orders,
235
- :c,
236
- :d,
237
- :e,
238
- ss], @collector.calls
239
- end
240
-
241
- def test_insert_statement
242
- stmt = Nodes::InsertStatement.new
243
- stmt.relation = :a
244
- stmt.columns << :b
245
- stmt.values = :c
246
-
247
- @visitor.accept stmt
248
- assert_equal [:a, :b, stmt.columns, :c, stmt], @collector.calls
249
- end
250
-
251
- def test_node
252
- node = Nodes::Node.new
253
- @visitor.accept node
254
- assert_equal [node], @collector.calls
255
- end
256
- end
257
- end
258
- end