arel 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. data/.autotest +26 -0
  2. data/History.txt +18 -0
  3. data/Manifest.txt +31 -30
  4. data/README.markdown +7 -99
  5. data/Rakefile +3 -2
  6. data/arel.gemspec +18 -11
  7. data/lib/arel.rb +2 -1
  8. data/lib/arel/attributes/attribute.rb +1 -174
  9. data/lib/arel/crud.rb +2 -2
  10. data/lib/arel/delete_manager.rb +4 -4
  11. data/lib/arel/insert_manager.rb +8 -8
  12. data/lib/arel/nodes/exists.rb +2 -6
  13. data/lib/arel/nodes/sql_literal.rb +1 -0
  14. data/lib/arel/predications.rb +177 -0
  15. data/lib/arel/select_manager.rb +17 -11
  16. data/lib/arel/table.rb +4 -0
  17. data/lib/arel/tree_manager.rb +4 -3
  18. data/lib/arel/update_manager.rb +8 -8
  19. data/lib/arel/visitors.rb +4 -0
  20. data/lib/arel/visitors/dot.rb +3 -3
  21. data/lib/arel/visitors/join_sql.rb +2 -0
  22. data/lib/arel/visitors/mysql.rb +14 -0
  23. data/lib/arel/visitors/oracle.rb +31 -1
  24. data/lib/arel/visitors/order_clauses.rb +2 -0
  25. data/lib/arel/visitors/sqlite.rb +11 -0
  26. data/lib/arel/visitors/to_sql.rb +8 -11
  27. data/lib/arel/visitors/visitor.rb +19 -0
  28. data/{spec/attributes/attribute_spec.rb → test/attributes/test_attribute.rb} +84 -84
  29. data/test/helper.rb +13 -0
  30. data/{spec/nodes/count_spec.rb → test/nodes/test_count.rb} +3 -3
  31. data/{spec/nodes/delete_statement_spec.rb → test/nodes/test_delete_statement.rb} +3 -4
  32. data/{spec/nodes/equality_spec.rb → test/nodes/test_equality.rb} +10 -8
  33. data/{spec/nodes/insert_statement_spec.rb → test/nodes/test_insert_statement.rb} +6 -6
  34. data/{spec/nodes/or_spec.rb → test/nodes/test_or.rb} +6 -4
  35. data/test/nodes/test_select_core.rb +22 -0
  36. data/{spec/nodes/select_statement_spec.rb → test/nodes/test_select_statement.rb} +3 -4
  37. data/test/nodes/test_sql_literal.rb +52 -0
  38. data/{spec/nodes/sum_spec.rb → test/nodes/test_sum.rb} +2 -2
  39. data/{spec/nodes/update_statement_spec.rb → test/nodes/test_update_statement.rb} +6 -6
  40. data/{spec → test}/support/fake_record.rb +4 -2
  41. data/{spec/activerecord_compat_spec.rb → test/test_activerecord_compat.rb} +3 -3
  42. data/{spec/attributes_spec.rb → test/test_attributes.rb} +7 -7
  43. data/{spec/crud_spec.rb → test/test_crud.rb} +4 -4
  44. data/{spec/delete_manager_spec.rb → test/test_delete_manager.rb} +5 -16
  45. data/{spec/insert_manager_spec.rb → test/test_insert_manager.rb} +15 -31
  46. data/{spec/select_manager_spec.rb → test/test_select_manager.rb} +95 -77
  47. data/{spec/table_spec.rb → test/test_table.rb} +38 -32
  48. data/{spec/update_manager_spec.rb → test/test_update_manager.rb} +9 -21
  49. data/{spec/visitors/join_sql_spec.rb → test/visitors/test_join_sql.rb} +3 -3
  50. data/test/visitors/test_mysql.rb +27 -0
  51. data/{spec/visitors/oracle_spec.rb → test/visitors/test_oracle.rb} +26 -10
  52. data/{spec/visitors/postgres_spec.rb → test/visitors/test_postgres.rb} +2 -2
  53. data/test/visitors/test_sqlite.rb +18 -0
  54. data/{spec/visitors/to_sql_spec.rb → test/visitors/test_to_sql.rb} +25 -18
  55. metadata +101 -43
  56. data/spec/nodes/select_core_spec.rb +0 -21
  57. data/spec/nodes/sql_literal_spec.rb +0 -26
  58. data/spec/spec.opts +0 -3
  59. data/spec/spec_helper.rb +0 -18
  60. data/spec/support/check.rb +0 -6
  61. data/spec/support/matchers.rb +0 -4
  62. data/spec/support/matchers/be_like.rb +0 -24
  63. data/spec/support/shared/tree_manager_shared.rb +0 -9
data/lib/arel/visitors.rb CHANGED
@@ -1,4 +1,6 @@
1
+ require 'arel/visitors/visitor'
1
2
  require 'arel/visitors/to_sql'
3
+ require 'arel/visitors/sqlite'
2
4
  require 'arel/visitors/postgresql'
3
5
  require 'arel/visitors/mysql'
4
6
  require 'arel/visitors/oracle'
@@ -14,6 +16,8 @@ module Arel
14
16
  'mysql' => Arel::Visitors::MySQL,
15
17
  'mysql2' => Arel::Visitors::MySQL,
16
18
  'oracle_enhanced' => Arel::Visitors::Oracle,
19
+ 'sqlite' => Arel::Visitors::SQLite,
20
+ 'sqlite3' => Arel::Visitors::SQLite,
17
21
  }
18
22
 
19
23
  ENGINE_VISITORS = Hash.new do |hash, engine|
@@ -1,6 +1,6 @@
1
1
  module Arel
2
2
  module Visitors
3
- class Dot
3
+ class Dot < Arel::Visitors::Visitor
4
4
  class Node # :nodoc:
5
5
  attr_accessor :name, :id, :fields
6
6
 
@@ -23,7 +23,7 @@ module Arel
23
23
  end
24
24
 
25
25
  def accept object
26
- visit object
26
+ super
27
27
  to_dot
28
28
  end
29
29
 
@@ -188,7 +188,7 @@ module Arel
188
188
  @seen[node.id] = node
189
189
  @nodes << node
190
190
  with_node node do
191
- send "visit_#{o.class.name.gsub('::', '_')}", o
191
+ super
192
192
  end
193
193
  end
194
194
 
@@ -9,6 +9,8 @@ module Arel
9
9
  # This visitor is used in SelectManager#join_sql and is for backwards
10
10
  # compatibility with Arel V1.0
11
11
  class JoinSql < Arel::Visitors::ToSql
12
+ private
13
+
12
14
  def visit_Arel_Nodes_SelectCore o
13
15
  [o.froms].grep(Nodes::Join).map { |x| visit x }.join ', '
14
16
  end
@@ -1,6 +1,20 @@
1
1
  module Arel
2
2
  module Visitors
3
3
  class MySQL < Arel::Visitors::ToSql
4
+ private
5
+ ###
6
+ # :'(
7
+ # http://dev.mysql.com/doc/refman/5.0/en/select.html#id3482214
8
+ def visit_Arel_Nodes_SelectStatement o
9
+ o.limit = 18446744073709551615 if o.offset && !o.limit
10
+ super
11
+ end
12
+
13
+ def visit_Arel_Nodes_SelectCore o
14
+ o.froms ||= Arel.sql('DUAL')
15
+ super
16
+ end
17
+
4
18
  def visit_Arel_Nodes_UpdateStatement o
5
19
  [
6
20
  "UPDATE #{visit o.relation}",
@@ -40,6 +40,20 @@ module Arel
40
40
  return "SELECT * FROM (#{super(o)}) WHERE ROWNUM <= #{limit}"
41
41
  end
42
42
 
43
+ if o.offset
44
+ o = o.dup
45
+ offset = o.offset
46
+ o.offset = nil
47
+ sql = super(o)
48
+ return <<-eosql
49
+ SELECT * FROM (
50
+ SELECT raw_sql_.*, rownum raw_rnum_
51
+ FROM (#{sql}) raw_sql_
52
+ )
53
+ WHERE #{visit offset}
54
+ eosql
55
+ end
56
+
43
57
  super
44
58
  end
45
59
 
@@ -56,7 +70,23 @@ module Arel
56
70
  /DISTINCT.*FIRST_VALUE/ === projection
57
71
  end
58
72
  end
59
- orders = o.orders.map { |x| visit x }.join(', ').split(',')
73
+ # FIXME: previous version with join and split broke ORDER BY clause
74
+ # if it contained functions with several arguments (separated by ',').
75
+ # Currently splitting is done only if there is no function calls
76
+ #
77
+ # orders = o.orders.map { |x| visit x }.join(', ').split(',')
78
+ orders = o.orders.map do |x|
79
+ string = visit x
80
+ # if there is function call
81
+ if string.include?('(')
82
+ string
83
+ # if no function call then comma splits several ORDER BY columns
84
+ elsif string.include?(',')
85
+ string.split(',')
86
+ else
87
+ string
88
+ end
89
+ end.flatten
60
90
  o.orders = []
61
91
  orders.each_with_index do |order, i|
62
92
  o.orders <<
@@ -1,6 +1,8 @@
1
1
  module Arel
2
2
  module Visitors
3
3
  class OrderClauses < Arel::Visitors::ToSql
4
+ private
5
+
4
6
  def visit_Arel_Nodes_SelectStatement o
5
7
  o.orders.map { |x| visit x }
6
8
  end
@@ -0,0 +1,11 @@
1
+ module Arel
2
+ module Visitors
3
+ class SQLite < Arel::Visitors::ToSql
4
+ private
5
+ def visit_Arel_Nodes_SelectStatement o
6
+ o.limit = -1 if o.offset && !o.limit
7
+ super
8
+ end
9
+ end
10
+ end
11
+ end
@@ -3,7 +3,7 @@ require 'date'
3
3
 
4
4
  module Arel
5
5
  module Visitors
6
- class ToSql
6
+ class ToSql < Arel::Visitors::Visitor
7
7
  def initialize engine
8
8
  @engine = engine
9
9
  @connection = nil
@@ -16,7 +16,7 @@ module Arel
16
16
  @last_column = nil
17
17
  @engine.connection_pool.with_connection do |conn|
18
18
  @connection = conn
19
- visit object
19
+ super
20
20
  end
21
21
  end
22
22
 
@@ -48,6 +48,7 @@ module Arel
48
48
  ("WHERE #{wheres.map { |x| visit x }.join ' AND '}" unless wheres.empty?)
49
49
  ].compact.join ' '
50
50
  end
51
+
51
52
  def visit_Arel_Nodes_InsertStatement o
52
53
  [
53
54
  "INSERT INTO #{visit o.relation}",
@@ -61,7 +62,8 @@ module Arel
61
62
  end
62
63
 
63
64
  def visit_Arel_Nodes_Exists o
64
- "EXISTS (#{visit o.select_stmt})"
65
+ "EXISTS (#{visit o.select_stmt})#{
66
+ o.alias ? " AS #{visit o.alias}" : ''}"
65
67
  end
66
68
 
67
69
  def visit_Arel_Nodes_Values o
@@ -263,6 +265,7 @@ module Arel
263
265
  def visit_Fixnum o; o end
264
266
  alias :visit_Arel_Nodes_SqlLiteral :visit_Fixnum
265
267
  alias :visit_Arel_SqlLiteral :visit_Fixnum # This is deprecated
268
+ alias :visit_Bignum :visit_Fixnum
266
269
 
267
270
  def visit_String o; quote(o, @last_column) end
268
271
 
@@ -276,14 +279,8 @@ module Arel
276
279
  alias :visit_Symbol :visit_String
277
280
  alias :visit_Time :visit_String
278
281
  alias :visit_TrueClass :visit_String
279
-
280
- DISPATCH = Hash.new do |hash, klass|
281
- hash[klass] = "visit_#{klass.name.gsub('::', '_')}"
282
- end
283
-
284
- def visit object
285
- send DISPATCH[object.class], object
286
- end
282
+ alias :visit_NilClass :visit_String
283
+ alias :visit_ActiveSupport_StringInquirer :visit_String
287
284
 
288
285
  def quote value, column = nil
289
286
  @connection.quote value, column
@@ -0,0 +1,19 @@
1
+ module Arel
2
+ module Visitors
3
+ class Visitor
4
+ def accept object
5
+ visit object
6
+ end
7
+
8
+ private
9
+
10
+ DISPATCH = Hash.new do |hash, klass|
11
+ hash[klass] = "visit_#{klass.name.gsub('::', '_')}"
12
+ end
13
+
14
+ def visit object
15
+ send DISPATCH[object.class], object
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'helper'
2
2
 
3
3
  module Arel
4
4
  module Attributes
@@ -6,14 +6,14 @@ module Arel
6
6
  describe '#not_eq' do
7
7
  it 'should create a NotEqual node' do
8
8
  relation = Table.new(:users)
9
- relation[:id].not_eq(10).should be_kind_of Nodes::NotEqual
9
+ relation[:id].not_eq(10).must_be_kind_of Nodes::NotEqual
10
10
  end
11
11
 
12
12
  it 'should generate != in sql' do
13
13
  relation = Table.new(:users)
14
14
  mgr = relation.project relation[:id]
15
15
  mgr.where relation[:id].not_eq(10)
16
- mgr.to_sql.should be_like %{
16
+ mgr.to_sql.must_be_like %{
17
17
  SELECT "users"."id" FROM "users" WHERE "users"."id" != 10
18
18
  }
19
19
  end
@@ -22,7 +22,7 @@ module Arel
22
22
  relation = Table.new(:users)
23
23
  mgr = relation.project relation[:id]
24
24
  mgr.where relation[:id].not_eq(nil)
25
- mgr.to_sql.should be_like %{
25
+ mgr.to_sql.must_be_like %{
26
26
  SELECT "users"."id" FROM "users" WHERE "users"."id" IS NOT NULL
27
27
  }
28
28
  end
@@ -31,14 +31,14 @@ module Arel
31
31
  describe '#not_eq_any' do
32
32
  it 'should create a Grouping node' do
33
33
  relation = Table.new(:users)
34
- relation[:id].not_eq_any([1,2]).should be_kind_of Nodes::Grouping
34
+ relation[:id].not_eq_any([1,2]).must_be_kind_of Nodes::Grouping
35
35
  end
36
36
 
37
37
  it 'should generate ORs in sql' do
38
38
  relation = Table.new(:users)
39
39
  mgr = relation.project relation[:id]
40
40
  mgr.where relation[:id].not_eq_any([1,2])
41
- mgr.to_sql.should be_like %{
41
+ mgr.to_sql.must_be_like %{
42
42
  SELECT "users"."id" FROM "users" WHERE ("users"."id" != 1 OR "users"."id" != 2)
43
43
  }
44
44
  end
@@ -47,14 +47,14 @@ module Arel
47
47
  describe '#not_eq_all' do
48
48
  it 'should create a Grouping node' do
49
49
  relation = Table.new(:users)
50
- relation[:id].not_eq_all([1,2]).should be_kind_of Nodes::Grouping
50
+ relation[:id].not_eq_all([1,2]).must_be_kind_of Nodes::Grouping
51
51
  end
52
52
 
53
53
  it 'should generate ANDs in sql' do
54
54
  relation = Table.new(:users)
55
55
  mgr = relation.project relation[:id]
56
56
  mgr.where relation[:id].not_eq_all([1,2])
57
- mgr.to_sql.should be_like %{
57
+ mgr.to_sql.must_be_like %{
58
58
  SELECT "users"."id" FROM "users" WHERE ("users"."id" != 1 AND "users"."id" != 2)
59
59
  }
60
60
  end
@@ -63,14 +63,14 @@ module Arel
63
63
  describe '#gt' do
64
64
  it 'should create a GreaterThan node' do
65
65
  relation = Table.new(:users)
66
- relation[:id].gt(10).should be_kind_of Nodes::GreaterThan
66
+ relation[:id].gt(10).must_be_kind_of Nodes::GreaterThan
67
67
  end
68
68
 
69
69
  it 'should generate >= in sql' do
70
70
  relation = Table.new(:users)
71
71
  mgr = relation.project relation[:id]
72
72
  mgr.where relation[:id].gt(10)
73
- mgr.to_sql.should be_like %{
73
+ mgr.to_sql.must_be_like %{
74
74
  SELECT "users"."id" FROM "users" WHERE "users"."id" > 10
75
75
  }
76
76
  end
@@ -79,14 +79,14 @@ module Arel
79
79
  describe '#gt_any' do
80
80
  it 'should create a Grouping node' do
81
81
  relation = Table.new(:users)
82
- relation[:id].gt_any([1,2]).should be_kind_of Nodes::Grouping
82
+ relation[:id].gt_any([1,2]).must_be_kind_of Nodes::Grouping
83
83
  end
84
84
 
85
85
  it 'should generate ORs in sql' do
86
86
  relation = Table.new(:users)
87
87
  mgr = relation.project relation[:id]
88
88
  mgr.where relation[:id].gt_any([1,2])
89
- mgr.to_sql.should be_like %{
89
+ mgr.to_sql.must_be_like %{
90
90
  SELECT "users"."id" FROM "users" WHERE ("users"."id" > 1 OR "users"."id" > 2)
91
91
  }
92
92
  end
@@ -95,14 +95,14 @@ module Arel
95
95
  describe '#gt_all' do
96
96
  it 'should create a Grouping node' do
97
97
  relation = Table.new(:users)
98
- relation[:id].gt_all([1,2]).should be_kind_of Nodes::Grouping
98
+ relation[:id].gt_all([1,2]).must_be_kind_of Nodes::Grouping
99
99
  end
100
100
 
101
101
  it 'should generate ANDs in sql' do
102
102
  relation = Table.new(:users)
103
103
  mgr = relation.project relation[:id]
104
104
  mgr.where relation[:id].gt_all([1,2])
105
- mgr.to_sql.should be_like %{
105
+ mgr.to_sql.must_be_like %{
106
106
  SELECT "users"."id" FROM "users" WHERE ("users"."id" > 1 AND "users"."id" > 2)
107
107
  }
108
108
  end
@@ -111,14 +111,14 @@ module Arel
111
111
  describe '#gteq' do
112
112
  it 'should create a GreaterThanOrEqual node' do
113
113
  relation = Table.new(:users)
114
- relation[:id].gteq(10).should be_kind_of Nodes::GreaterThanOrEqual
114
+ relation[:id].gteq(10).must_be_kind_of Nodes::GreaterThanOrEqual
115
115
  end
116
116
 
117
117
  it 'should generate >= in sql' do
118
118
  relation = Table.new(:users)
119
119
  mgr = relation.project relation[:id]
120
120
  mgr.where relation[:id].gteq(10)
121
- mgr.to_sql.should be_like %{
121
+ mgr.to_sql.must_be_like %{
122
122
  SELECT "users"."id" FROM "users" WHERE "users"."id" >= 10
123
123
  }
124
124
  end
@@ -127,14 +127,14 @@ module Arel
127
127
  describe '#gteq_any' do
128
128
  it 'should create a Grouping node' do
129
129
  relation = Table.new(:users)
130
- relation[:id].gteq_any([1,2]).should be_kind_of Nodes::Grouping
130
+ relation[:id].gteq_any([1,2]).must_be_kind_of Nodes::Grouping
131
131
  end
132
132
 
133
133
  it 'should generate ORs in sql' do
134
134
  relation = Table.new(:users)
135
135
  mgr = relation.project relation[:id]
136
136
  mgr.where relation[:id].gteq_any([1,2])
137
- mgr.to_sql.should be_like %{
137
+ mgr.to_sql.must_be_like %{
138
138
  SELECT "users"."id" FROM "users" WHERE ("users"."id" >= 1 OR "users"."id" >= 2)
139
139
  }
140
140
  end
@@ -143,14 +143,14 @@ module Arel
143
143
  describe '#gteq_all' do
144
144
  it 'should create a Grouping node' do
145
145
  relation = Table.new(:users)
146
- relation[:id].gteq_all([1,2]).should be_kind_of Nodes::Grouping
146
+ relation[:id].gteq_all([1,2]).must_be_kind_of Nodes::Grouping
147
147
  end
148
148
 
149
149
  it 'should generate ANDs in sql' do
150
150
  relation = Table.new(:users)
151
151
  mgr = relation.project relation[:id]
152
152
  mgr.where relation[:id].gteq_all([1,2])
153
- mgr.to_sql.should be_like %{
153
+ mgr.to_sql.must_be_like %{
154
154
  SELECT "users"."id" FROM "users" WHERE ("users"."id" >= 1 AND "users"."id" >= 2)
155
155
  }
156
156
  end
@@ -159,14 +159,14 @@ module Arel
159
159
  describe '#lt' do
160
160
  it 'should create a LessThan node' do
161
161
  relation = Table.new(:users)
162
- relation[:id].lt(10).should be_kind_of Nodes::LessThan
162
+ relation[:id].lt(10).must_be_kind_of Nodes::LessThan
163
163
  end
164
164
 
165
165
  it 'should generate < in sql' do
166
166
  relation = Table.new(:users)
167
167
  mgr = relation.project relation[:id]
168
168
  mgr.where relation[:id].lt(10)
169
- mgr.to_sql.should be_like %{
169
+ mgr.to_sql.must_be_like %{
170
170
  SELECT "users"."id" FROM "users" WHERE "users"."id" < 10
171
171
  }
172
172
  end
@@ -175,14 +175,14 @@ module Arel
175
175
  describe '#lt_any' do
176
176
  it 'should create a Grouping node' do
177
177
  relation = Table.new(:users)
178
- relation[:id].lt_any([1,2]).should be_kind_of Nodes::Grouping
178
+ relation[:id].lt_any([1,2]).must_be_kind_of Nodes::Grouping
179
179
  end
180
180
 
181
181
  it 'should generate ORs in sql' do
182
182
  relation = Table.new(:users)
183
183
  mgr = relation.project relation[:id]
184
184
  mgr.where relation[:id].lt_any([1,2])
185
- mgr.to_sql.should be_like %{
185
+ mgr.to_sql.must_be_like %{
186
186
  SELECT "users"."id" FROM "users" WHERE ("users"."id" < 1 OR "users"."id" < 2)
187
187
  }
188
188
  end
@@ -191,14 +191,14 @@ module Arel
191
191
  describe '#lt_all' do
192
192
  it 'should create a Grouping node' do
193
193
  relation = Table.new(:users)
194
- relation[:id].lt_all([1,2]).should be_kind_of Nodes::Grouping
194
+ relation[:id].lt_all([1,2]).must_be_kind_of Nodes::Grouping
195
195
  end
196
196
 
197
197
  it 'should generate ANDs in sql' do
198
198
  relation = Table.new(:users)
199
199
  mgr = relation.project relation[:id]
200
200
  mgr.where relation[:id].lt_all([1,2])
201
- mgr.to_sql.should be_like %{
201
+ mgr.to_sql.must_be_like %{
202
202
  SELECT "users"."id" FROM "users" WHERE ("users"."id" < 1 AND "users"."id" < 2)
203
203
  }
204
204
  end
@@ -207,14 +207,14 @@ module Arel
207
207
  describe '#lteq' do
208
208
  it 'should create a LessThanOrEqual node' do
209
209
  relation = Table.new(:users)
210
- relation[:id].lteq(10).should be_kind_of Nodes::LessThanOrEqual
210
+ relation[:id].lteq(10).must_be_kind_of Nodes::LessThanOrEqual
211
211
  end
212
212
 
213
213
  it 'should generate <= in sql' do
214
214
  relation = Table.new(:users)
215
215
  mgr = relation.project relation[:id]
216
216
  mgr.where relation[:id].lteq(10)
217
- mgr.to_sql.should be_like %{
217
+ mgr.to_sql.must_be_like %{
218
218
  SELECT "users"."id" FROM "users" WHERE "users"."id" <= 10
219
219
  }
220
220
  end
@@ -223,14 +223,14 @@ module Arel
223
223
  describe '#lteq_any' do
224
224
  it 'should create a Grouping node' do
225
225
  relation = Table.new(:users)
226
- relation[:id].lteq_any([1,2]).should be_kind_of Nodes::Grouping
226
+ relation[:id].lteq_any([1,2]).must_be_kind_of Nodes::Grouping
227
227
  end
228
228
 
229
229
  it 'should generate ORs in sql' do
230
230
  relation = Table.new(:users)
231
231
  mgr = relation.project relation[:id]
232
232
  mgr.where relation[:id].lteq_any([1,2])
233
- mgr.to_sql.should be_like %{
233
+ mgr.to_sql.must_be_like %{
234
234
  SELECT "users"."id" FROM "users" WHERE ("users"."id" <= 1 OR "users"."id" <= 2)
235
235
  }
236
236
  end
@@ -239,14 +239,14 @@ module Arel
239
239
  describe '#lteq_all' do
240
240
  it 'should create a Grouping node' do
241
241
  relation = Table.new(:users)
242
- relation[:id].lteq_all([1,2]).should be_kind_of Nodes::Grouping
242
+ relation[:id].lteq_all([1,2]).must_be_kind_of Nodes::Grouping
243
243
  end
244
244
 
245
245
  it 'should generate ANDs in sql' do
246
246
  relation = Table.new(:users)
247
247
  mgr = relation.project relation[:id]
248
248
  mgr.where relation[:id].lteq_all([1,2])
249
- mgr.to_sql.should be_like %{
249
+ mgr.to_sql.must_be_like %{
250
250
  SELECT "users"."id" FROM "users" WHERE ("users"."id" <= 1 AND "users"."id" <= 2)
251
251
  }
252
252
  end
@@ -255,14 +255,14 @@ module Arel
255
255
  describe '#average' do
256
256
  it 'should create a AVG node' do
257
257
  relation = Table.new(:users)
258
- relation[:id].average.should be_kind_of Nodes::Avg
258
+ relation[:id].average.must_be_kind_of Nodes::Avg
259
259
  end
260
260
 
261
261
  # FIXME: backwards compat. Is this really necessary?
262
262
  it 'should set the alias to "avg_id"' do
263
263
  relation = Table.new(:users)
264
264
  mgr = relation.project relation[:id].average
265
- mgr.to_sql.should be_like %{
265
+ mgr.to_sql.must_be_like %{
266
266
  SELECT AVG("users"."id") AS avg_id
267
267
  FROM "users"
268
268
  }
@@ -272,14 +272,14 @@ module Arel
272
272
  describe '#maximum' do
273
273
  it 'should create a MAX node' do
274
274
  relation = Table.new(:users)
275
- relation[:id].maximum.should be_kind_of Nodes::Max
275
+ relation[:id].maximum.must_be_kind_of Nodes::Max
276
276
  end
277
277
 
278
278
  # FIXME: backwards compat. Is this really necessary?
279
279
  it 'should set the alias to "max_id"' do
280
280
  relation = Table.new(:users)
281
281
  mgr = relation.project relation[:id].maximum
282
- mgr.to_sql.should be_like %{
282
+ mgr.to_sql.must_be_like %{
283
283
  SELECT MAX("users"."id") AS max_id
284
284
  FROM "users"
285
285
  }
@@ -289,21 +289,21 @@ module Arel
289
289
  describe '#minimum' do
290
290
  it 'should create a Min node' do
291
291
  relation = Table.new(:users)
292
- relation[:id].minimum.should be_kind_of Nodes::Min
292
+ relation[:id].minimum.must_be_kind_of Nodes::Min
293
293
  end
294
294
  end
295
295
 
296
296
  describe '#sum' do
297
297
  it 'should create a SUM node' do
298
298
  relation = Table.new(:users)
299
- relation[:id].sum.should be_kind_of Nodes::Sum
299
+ relation[:id].sum.must_be_kind_of Nodes::Sum
300
300
  end
301
301
 
302
302
  # FIXME: backwards compat. Is this really necessary?
303
303
  it 'should set the alias to "sum_id"' do
304
304
  relation = Table.new(:users)
305
305
  mgr = relation.project relation[:id].sum
306
- mgr.to_sql.should be_like %{
306
+ mgr.to_sql.must_be_like %{
307
307
  SELECT SUM("users"."id") AS sum_id
308
308
  FROM "users"
309
309
  }
@@ -313,14 +313,14 @@ module Arel
313
313
  describe '#count' do
314
314
  it 'should return a count node' do
315
315
  relation = Table.new(:users)
316
- relation[:id].count.should be_kind_of Nodes::Count
316
+ relation[:id].count.must_be_kind_of Nodes::Count
317
317
  end
318
318
 
319
319
  it 'should take a distinct param' do
320
320
  relation = Table.new(:users)
321
321
  count = relation[:id].count(nil)
322
- count.should be_kind_of Nodes::Count
323
- count.distinct.should be_nil
322
+ count.must_be_kind_of Nodes::Count
323
+ count.distinct.must_be_nil
324
324
  end
325
325
  end
326
326
 
@@ -328,16 +328,16 @@ module Arel
328
328
  it 'should return an equality node' do
329
329
  attribute = Attribute.new nil, nil, nil
330
330
  equality = attribute.eq 1
331
- check equality.left.should == attribute
332
- check equality.right.should == 1
333
- equality.should be_kind_of Nodes::Equality
331
+ equality.left.must_equal attribute
332
+ equality.right.must_equal 1
333
+ equality.must_be_kind_of Nodes::Equality
334
334
  end
335
335
 
336
336
  it 'should generate = in sql' do
337
337
  relation = Table.new(:users)
338
338
  mgr = relation.project relation[:id]
339
339
  mgr.where relation[:id].eq(10)
340
- mgr.to_sql.should be_like %{
340
+ mgr.to_sql.must_be_like %{
341
341
  SELECT "users"."id" FROM "users" WHERE "users"."id" = 10
342
342
  }
343
343
  end
@@ -346,7 +346,7 @@ module Arel
346
346
  relation = Table.new(:users)
347
347
  mgr = relation.project relation[:id]
348
348
  mgr.where relation[:id].eq(nil)
349
- mgr.to_sql.should be_like %{
349
+ mgr.to_sql.must_be_like %{
350
350
  SELECT "users"."id" FROM "users" WHERE "users"."id" IS NULL
351
351
  }
352
352
  end
@@ -355,14 +355,14 @@ module Arel
355
355
  describe '#eq_any' do
356
356
  it 'should create a Grouping node' do
357
357
  relation = Table.new(:users)
358
- relation[:id].eq_any([1,2]).should be_kind_of Nodes::Grouping
358
+ relation[:id].eq_any([1,2]).must_be_kind_of Nodes::Grouping
359
359
  end
360
360
 
361
361
  it 'should generate ORs in sql' do
362
362
  relation = Table.new(:users)
363
363
  mgr = relation.project relation[:id]
364
364
  mgr.where relation[:id].eq_any([1,2])
365
- mgr.to_sql.should be_like %{
365
+ mgr.to_sql.must_be_like %{
366
366
  SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 OR "users"."id" = 2)
367
367
  }
368
368
  end
@@ -371,14 +371,14 @@ module Arel
371
371
  describe '#eq_all' do
372
372
  it 'should create a Grouping node' do
373
373
  relation = Table.new(:users)
374
- relation[:id].eq_all([1,2]).should be_kind_of Nodes::Grouping
374
+ relation[:id].eq_all([1,2]).must_be_kind_of Nodes::Grouping
375
375
  end
376
376
 
377
377
  it 'should generate ANDs in sql' do
378
378
  relation = Table.new(:users)
379
379
  mgr = relation.project relation[:id]
380
380
  mgr.where relation[:id].eq_all([1,2])
381
- mgr.to_sql.should be_like %{
381
+ mgr.to_sql.must_be_like %{
382
382
  SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 AND "users"."id" = 2)
383
383
  }
384
384
  end
@@ -387,14 +387,14 @@ module Arel
387
387
  describe '#matches' do
388
388
  it 'should create a Matches node' do
389
389
  relation = Table.new(:users)
390
- relation[:name].matches('%bacon%').should be_kind_of Nodes::Matches
390
+ relation[:name].matches('%bacon%').must_be_kind_of Nodes::Matches
391
391
  end
392
392
 
393
393
  it 'should generate LIKE in sql' do
394
394
  relation = Table.new(:users)
395
395
  mgr = relation.project relation[:id]
396
396
  mgr.where relation[:name].matches('%bacon%')
397
- mgr.to_sql.should be_like %{
397
+ mgr.to_sql.must_be_like %{
398
398
  SELECT "users"."id" FROM "users" WHERE "users"."name" LIKE '%bacon%'
399
399
  }
400
400
  end
@@ -403,14 +403,14 @@ module Arel
403
403
  describe '#matches_any' do
404
404
  it 'should create a Grouping node' do
405
405
  relation = Table.new(:users)
406
- relation[:name].matches_any(['%chunky%','%bacon%']).should be_kind_of Nodes::Grouping
406
+ relation[:name].matches_any(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
407
407
  end
408
408
 
409
409
  it 'should generate ORs in sql' do
410
410
  relation = Table.new(:users)
411
411
  mgr = relation.project relation[:id]
412
412
  mgr.where relation[:name].matches_any(['%chunky%','%bacon%'])
413
- mgr.to_sql.should be_like %{
413
+ mgr.to_sql.must_be_like %{
414
414
  SELECT "users"."id" FROM "users" WHERE ("users"."name" LIKE '%chunky%' OR "users"."name" LIKE '%bacon%')
415
415
  }
416
416
  end
@@ -419,14 +419,14 @@ module Arel
419
419
  describe '#matches_all' do
420
420
  it 'should create a Grouping node' do
421
421
  relation = Table.new(:users)
422
- relation[:name].matches_all(['%chunky%','%bacon%']).should be_kind_of Nodes::Grouping
422
+ relation[:name].matches_all(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
423
423
  end
424
424
 
425
425
  it 'should generate ANDs in sql' do
426
426
  relation = Table.new(:users)
427
427
  mgr = relation.project relation[:id]
428
428
  mgr.where relation[:name].matches_all(['%chunky%','%bacon%'])
429
- mgr.to_sql.should be_like %{
429
+ mgr.to_sql.must_be_like %{
430
430
  SELECT "users"."id" FROM "users" WHERE ("users"."name" LIKE '%chunky%' AND "users"."name" LIKE '%bacon%')
431
431
  }
432
432
  end
@@ -435,14 +435,14 @@ module Arel
435
435
  describe '#does_not_match' do
436
436
  it 'should create a DoesNotMatch node' do
437
437
  relation = Table.new(:users)
438
- relation[:name].does_not_match('%bacon%').should be_kind_of Nodes::DoesNotMatch
438
+ relation[:name].does_not_match('%bacon%').must_be_kind_of Nodes::DoesNotMatch
439
439
  end
440
440
 
441
441
  it 'should generate NOT LIKE in sql' do
442
442
  relation = Table.new(:users)
443
443
  mgr = relation.project relation[:id]
444
444
  mgr.where relation[:name].does_not_match('%bacon%')
445
- mgr.to_sql.should be_like %{
445
+ mgr.to_sql.must_be_like %{
446
446
  SELECT "users"."id" FROM "users" WHERE "users"."name" NOT LIKE '%bacon%'
447
447
  }
448
448
  end
@@ -451,14 +451,14 @@ module Arel
451
451
  describe '#does_not_match_any' do
452
452
  it 'should create a Grouping node' do
453
453
  relation = Table.new(:users)
454
- relation[:name].does_not_match_any(['%chunky%','%bacon%']).should be_kind_of Nodes::Grouping
454
+ relation[:name].does_not_match_any(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
455
455
  end
456
456
 
457
457
  it 'should generate ORs in sql' do
458
458
  relation = Table.new(:users)
459
459
  mgr = relation.project relation[:id]
460
460
  mgr.where relation[:name].does_not_match_any(['%chunky%','%bacon%'])
461
- mgr.to_sql.should be_like %{
461
+ mgr.to_sql.must_be_like %{
462
462
  SELECT "users"."id" FROM "users" WHERE ("users"."name" NOT LIKE '%chunky%' OR "users"."name" NOT LIKE '%bacon%')
463
463
  }
464
464
  end
@@ -467,14 +467,14 @@ module Arel
467
467
  describe '#does_not_match_all' do
468
468
  it 'should create a Grouping node' do
469
469
  relation = Table.new(:users)
470
- relation[:name].does_not_match_all(['%chunky%','%bacon%']).should be_kind_of Nodes::Grouping
470
+ relation[:name].does_not_match_all(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
471
471
  end
472
472
 
473
473
  it 'should generate ANDs in sql' do
474
474
  relation = Table.new(:users)
475
475
  mgr = relation.project relation[:id]
476
476
  mgr.where relation[:name].does_not_match_all(['%chunky%','%bacon%'])
477
- mgr.to_sql.should be_like %{
477
+ mgr.to_sql.must_be_like %{
478
478
  SELECT "users"."id" FROM "users" WHERE ("users"."name" NOT LIKE '%chunky%' AND "users"."name" NOT LIKE '%bacon%')
479
479
  }
480
480
  end
@@ -487,15 +487,15 @@ module Arel
487
487
  it 'should return an in node' do
488
488
  attribute = Attribute.new nil, nil, nil
489
489
  node = Nodes::In.new attribute, [1,2,3]
490
- check node.left.should == attribute
491
- check node.right.should == [1, 2, 3]
490
+ node.left.must_equal attribute
491
+ node.right.must_equal [1, 2, 3]
492
492
  end
493
493
 
494
494
  it 'should generate IN in sql' do
495
495
  relation = Table.new(:users)
496
496
  mgr = relation.project relation[:id]
497
497
  mgr.where relation[:id].in([1,2,3])
498
- mgr.to_sql.should be_like %{
498
+ mgr.to_sql.must_be_like %{
499
499
  SELECT "users"."id" FROM "users" WHERE "users"."id" IN (1, 2, 3)
500
500
  }
501
501
  end
@@ -504,14 +504,14 @@ module Arel
504
504
  describe '#in_any' do
505
505
  it 'should create a Grouping node' do
506
506
  relation = Table.new(:users)
507
- relation[:id].in_any([1,2]).should be_kind_of Nodes::Grouping
507
+ relation[:id].in_any([1,2]).must_be_kind_of Nodes::Grouping
508
508
  end
509
509
 
510
510
  it 'should generate ORs in sql' do
511
511
  relation = Table.new(:users)
512
512
  mgr = relation.project relation[:id]
513
513
  mgr.where relation[:id].in_any([[1,2], [3,4]])
514
- mgr.to_sql.should be_like %{
514
+ mgr.to_sql.must_be_like %{
515
515
  SELECT "users"."id" FROM "users" WHERE ("users"."id" IN (1, 2) OR "users"."id" IN (3, 4))
516
516
  }
517
517
  end
@@ -520,14 +520,14 @@ module Arel
520
520
  describe '#in_all' do
521
521
  it 'should create a Grouping node' do
522
522
  relation = Table.new(:users)
523
- relation[:id].in_all([1,2]).should be_kind_of Nodes::Grouping
523
+ relation[:id].in_all([1,2]).must_be_kind_of Nodes::Grouping
524
524
  end
525
525
 
526
526
  it 'should generate ANDs in sql' do
527
527
  relation = Table.new(:users)
528
528
  mgr = relation.project relation[:id]
529
529
  mgr.where relation[:id].in_all([[1,2], [3,4]])
530
- mgr.to_sql.should be_like %{
530
+ mgr.to_sql.must_be_like %{
531
531
  SELECT "users"."id" FROM "users" WHERE ("users"."id" IN (1, 2) AND "users"."id" IN (3, 4))
532
532
  }
533
533
  end
@@ -540,15 +540,15 @@ module Arel
540
540
  it 'should return a NotIn node' do
541
541
  attribute = Attribute.new nil, nil, nil
542
542
  node = Nodes::NotIn.new attribute, [1,2,3]
543
- check node.left.should == attribute
544
- check node.right.should == [1, 2, 3]
543
+ node.left.must_equal attribute
544
+ node.right.must_equal [1, 2, 3]
545
545
  end
546
546
 
547
547
  it 'should generate NOT IN in sql' do
548
548
  relation = Table.new(:users)
549
549
  mgr = relation.project relation[:id]
550
550
  mgr.where relation[:id].not_in([1,2,3])
551
- mgr.to_sql.should be_like %{
551
+ mgr.to_sql.must_be_like %{
552
552
  SELECT "users"."id" FROM "users" WHERE "users"."id" NOT IN (1, 2, 3)
553
553
  }
554
554
  end
@@ -557,14 +557,14 @@ module Arel
557
557
  describe '#not_in_any' do
558
558
  it 'should create a Grouping node' do
559
559
  relation = Table.new(:users)
560
- relation[:id].not_in_any([1,2]).should be_kind_of Nodes::Grouping
560
+ relation[:id].not_in_any([1,2]).must_be_kind_of Nodes::Grouping
561
561
  end
562
562
 
563
563
  it 'should generate ORs in sql' do
564
564
  relation = Table.new(:users)
565
565
  mgr = relation.project relation[:id]
566
566
  mgr.where relation[:id].not_in_any([[1,2], [3,4]])
567
- mgr.to_sql.should be_like %{
567
+ mgr.to_sql.must_be_like %{
568
568
  SELECT "users"."id" FROM "users" WHERE ("users"."id" NOT IN (1, 2) OR "users"."id" NOT IN (3, 4))
569
569
  }
570
570
  end
@@ -573,14 +573,14 @@ module Arel
573
573
  describe '#not_in_all' do
574
574
  it 'should create a Grouping node' do
575
575
  relation = Table.new(:users)
576
- relation[:id].not_in_all([1,2]).should be_kind_of Nodes::Grouping
576
+ relation[:id].not_in_all([1,2]).must_be_kind_of Nodes::Grouping
577
577
  end
578
578
 
579
579
  it 'should generate ANDs in sql' do
580
580
  relation = Table.new(:users)
581
581
  mgr = relation.project relation[:id]
582
582
  mgr.where relation[:id].not_in_all([[1,2], [3,4]])
583
- mgr.to_sql.should be_like %{
583
+ mgr.to_sql.must_be_like %{
584
584
  SELECT "users"."id" FROM "users" WHERE ("users"."id" NOT IN (1, 2) AND "users"."id" NOT IN (3, 4))
585
585
  }
586
586
  end
@@ -589,14 +589,14 @@ module Arel
589
589
  describe '#eq_all' do
590
590
  it 'should create a Grouping node' do
591
591
  relation = Table.new(:users)
592
- relation[:id].eq_all([1,2]).should be_kind_of Nodes::Grouping
592
+ relation[:id].eq_all([1,2]).must_be_kind_of Nodes::Grouping
593
593
  end
594
594
 
595
595
  it 'should generate ANDs in sql' do
596
596
  relation = Table.new(:users)
597
597
  mgr = relation.project relation[:id]
598
598
  mgr.where relation[:id].eq_all([1,2])
599
- mgr.to_sql.should be_like %{
599
+ mgr.to_sql.must_be_like %{
600
600
  SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 AND "users"."id" = 2)
601
601
  }
602
602
  end
@@ -605,14 +605,14 @@ module Arel
605
605
  describe '#asc' do
606
606
  it 'should create an Ordering node' do
607
607
  relation = Table.new(:users)
608
- relation[:id].asc.should be_kind_of Nodes::Ordering
608
+ relation[:id].asc.must_be_kind_of Nodes::Ordering
609
609
  end
610
610
 
611
611
  it 'should generate ASC in sql' do
612
612
  relation = Table.new(:users)
613
613
  mgr = relation.project relation[:id]
614
614
  mgr.order relation[:id].asc
615
- mgr.to_sql.should be_like %{
615
+ mgr.to_sql.must_be_like %{
616
616
  SELECT "users"."id" FROM "users" ORDER BY "users"."id" ASC
617
617
  }
618
618
  end
@@ -621,14 +621,14 @@ module Arel
621
621
  describe '#desc' do
622
622
  it 'should create an Ordering node' do
623
623
  relation = Table.new(:users)
624
- relation[:id].desc.should be_kind_of Nodes::Ordering
624
+ relation[:id].desc.must_be_kind_of Nodes::Ordering
625
625
  end
626
626
 
627
627
  it 'should generate DESC in sql' do
628
628
  relation = Table.new(:users)
629
629
  mgr = relation.project relation[:id]
630
630
  mgr.order relation[:id].desc
631
- mgr.to_sql.should be_like %{
631
+ mgr.to_sql.must_be_like %{
632
632
  SELECT "users"."id" FROM "users" ORDER BY "users"."id" DESC
633
633
  }
634
634
  end
@@ -640,7 +640,7 @@ module Arel
640
640
  it 'should produce sql' do
641
641
  table = Table.new :users
642
642
  condition = table['id'].eq 1
643
- condition.to_sql.should == '"users"."id" = 1'
643
+ condition.to_sql.must_equal '"users"."id" = 1'
644
644
  end
645
645
  end
646
646
  end