sequel_core 1.0.0.1 → 1.0.1

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.
@@ -80,6 +80,64 @@ context "A PostgreSQL dataset" do
80
80
  proc {@d.literal(false)}.should_not raise_error
81
81
  end
82
82
 
83
+ specify "should quote columns using double quotes" do
84
+ @d.select(:name).sql.should == \
85
+ 'SELECT "name" FROM test'
86
+
87
+ @d.select('COUNT(*)'.lit).sql.should == \
88
+ 'SELECT COUNT(*) FROM test'
89
+
90
+ @d.select(:value.MAX).sql.should == \
91
+ 'SELECT max("value") FROM test'
92
+
93
+ @d.select(:NOW[]).sql.should == \
94
+ 'SELECT NOW() FROM test'
95
+
96
+ @d.select(:items__value.MAX).sql.should == \
97
+ 'SELECT max(items."value") FROM test'
98
+
99
+ @d.order(:name.DESC).sql.should == \
100
+ 'SELECT * FROM test ORDER BY "name" DESC'
101
+
102
+ @d.select('test.name AS item_name'.lit).sql.should == \
103
+ 'SELECT test.name AS item_name FROM test'
104
+
105
+ @d.select('"name"'.lit).sql.should == \
106
+ 'SELECT "name" FROM test'
107
+
108
+ @d.select('max(test."name") AS "max_name"'.lit).sql.should == \
109
+ 'SELECT max(test."name") AS "max_name" FROM test'
110
+
111
+ @d.select(:test[:abc, 'hello']).sql.should == \
112
+ "SELECT test(\"abc\", 'hello') FROM test"
113
+
114
+ @d.select(:test[:abc__def, 'hello']).sql.should == \
115
+ "SELECT test(abc.\"def\", 'hello') FROM test"
116
+
117
+ @d.select(:test[:abc__def, 'hello'].as(:x2)).sql.should == \
118
+ "SELECT test(abc.\"def\", 'hello') AS \"x2\" FROM test"
119
+
120
+ @d.insert_sql(:value => 333).should == \
121
+ 'INSERT INTO test ("value") VALUES (333)'
122
+
123
+ @d.insert_sql(:x => :y).should == \
124
+ 'INSERT INTO test ("x") VALUES ("y")'
125
+ end
126
+
127
+ specify "should quote fields correctly when reversing the order" do
128
+ @d.reverse_order(:name).sql.should == \
129
+ 'SELECT * FROM test ORDER BY "name" DESC'
130
+
131
+ @d.reverse_order(:name.DESC).sql.should == \
132
+ 'SELECT * FROM test ORDER BY "name"'
133
+
134
+ @d.reverse_order(:name, :test.DESC).sql.should == \
135
+ 'SELECT * FROM test ORDER BY "name" DESC, "test"'
136
+
137
+ @d.reverse_order(:name.DESC, :test).sql.should == \
138
+ 'SELECT * FROM test ORDER BY "name", "test" DESC'
139
+ end
140
+
83
141
  specify "should support transactions" do
84
142
  PGSQL_DB.transaction do
85
143
  @d << {:name => 'abc', :value => 1}
@@ -132,6 +132,18 @@ context "An SQLite database" do
132
132
  SQLITE_DB[:time] << {:t => t1}
133
133
  SQLITE_DB[:time].first[:t].should == t1
134
134
  end
135
+
136
+ specify "should support sequential primary keys" do
137
+ @db.create_table!(:with_pk) {primary_key :id; text :name}
138
+ @db[:with_pk] << {:name => 'abc'}
139
+ @db[:with_pk] << {:name => 'def'}
140
+ @db[:with_pk] << {:name => 'ghi'}
141
+ @db[:with_pk].order(:name).all.should == [
142
+ {:id => 1, :name => 'abc'},
143
+ {:id => 2, :name => 'def'},
144
+ {:id => 3, :name => 'ghi'}
145
+ ]
146
+ end
135
147
  end
136
148
 
137
149
  context "An SQLite dataset" do
@@ -310,6 +322,8 @@ context "SQLite dataset" do
310
322
  end
311
323
  end
312
324
 
325
+ __END__
326
+
313
327
  context "A SQLite database" do
314
328
  setup do
315
329
  @db = SQLITE_DB
@@ -324,7 +338,7 @@ context "A SQLite database" do
324
338
  end
325
339
 
326
340
  specify "should not support drop_column operations" do
327
- proc {@db.drop_column :test2, :xyz}.should raise_error(SequelError)
341
+ proc {@db.drop_column :test2, :xyz}.should raise_error(Sequel::Error)
328
342
  end
329
343
 
330
344
  specify "should not support rename_column operations" do
@@ -333,13 +347,13 @@ context "A SQLite database" do
333
347
  @db[:test2] << {:name => 'mmm', :value => 111, :xyz => 'qqqq'}
334
348
 
335
349
  @db[:test2].columns.should == [:name, :value, :xyz]
336
- proc {@db.rename_column :test2, :xyz, :zyx}.should raise_error(SequelError)
350
+ proc {@db.rename_column :test2, :xyz, :zyx}.should raise_error(Sequel::Error)
337
351
  end
338
352
 
339
353
  specify "should not support set_column_type operations" do
340
354
  @db.add_column :test2, :xyz, :float
341
355
  @db[:test2].delete
342
356
  @db[:test2] << {:name => 'mmm', :value => 111, :xyz => 56.78}
343
- proc {@db.set_column_type :test2, :xyz, :integer}.should raise_error(SequelError)
357
+ proc {@db.set_column_type :test2, :xyz, :integer}.should raise_error(Sequel::Error)
344
358
  end
345
359
  end
@@ -810,3 +810,29 @@ context "Database#alter_table_sql" do
810
810
  proc {@db.alter_table_sql(:mau, :op => :blah)}.should raise_error(Sequel::Error)
811
811
  end
812
812
  end
813
+
814
+ context "Database.connect" do
815
+ EEE_YAML = "development:\r\n adapter: eee\r\n username: mau\r\n password: tau\r\n host: alfonso\r\n database: mydb\r\n"
816
+
817
+ setup do
818
+ class EEE < Sequel::Database
819
+ set_adapter_scheme :eee
820
+ end
821
+
822
+ @fn = File.join(File.dirname(__FILE__), 'eee.yaml')
823
+ File.open(@fn, 'w') {|f| f << EEE_YAML}
824
+ end
825
+
826
+ teardown do
827
+ FileUtils.rm(@fn)
828
+ end
829
+
830
+ specify "should accept hashes loaded from YAML files" do
831
+ db = Sequel(YAML.load_file(@fn)['development'])
832
+ db.class.should == EEE
833
+ db.opts[:database].should == 'mydb'
834
+ db.opts[:user].should == 'mau'
835
+ db.opts[:password].should == 'tau'
836
+ db.opts[:host].should == 'alfonso'
837
+ end
838
+ end
data/spec/dataset_spec.rb CHANGED
@@ -276,7 +276,9 @@ context "Dataset#where" do
276
276
  end
277
277
 
278
278
  specify "should raise if the dataset is grouped" do
279
- proc {@dataset.group(:t).where(:a => 1)}.should raise_error
279
+ proc {@dataset.group(:t).where(:a => 1)}.should_not raise_error
280
+ @dataset.group(:t).where(:a => 1).sql.should ==
281
+ "SELECT * FROM test WHERE (a = 1) GROUP BY t"
280
282
  end
281
283
 
282
284
  specify "should accept ranges" do
@@ -405,6 +407,9 @@ context "Dataset#and" do
405
407
 
406
408
  specify "should raise if no filter exists" do
407
409
  proc {@dataset.and(:a => 1)}.should raise_error(Sequel::Error)
410
+ proc {@dataset.where(:a => 1).group(:t).and(:b => 2)}.should_not raise_error(Sequel::Error)
411
+ @dataset.where(:a => 1).group(:t).and(:b => 2).sql ==
412
+ "SELECT * FROM test WHERE (a = 1) AND (b = 2) GROUP BY t"
408
413
  end
409
414
 
410
415
  specify "should add an alternative expression to the where clause" do
@@ -489,6 +494,11 @@ context "Dataset#having" do
489
494
  @grouped.having {:sum[:population] > 10}.sql.should ==
490
495
  "SELECT #{@columns} FROM test GROUP BY region HAVING (sum(population) > 10)"
491
496
  end
497
+
498
+ specify "should work with and on the having clause" do
499
+ @grouped.having{ :a > 1 }.and{ :b < 2 }.sql.should ==
500
+ "SELECT #{@columns} FROM test GROUP BY region HAVING (a > 1) AND (b < 2)"
501
+ end
492
502
  end
493
503
 
494
504
  context "a grouped dataset" do
@@ -25,7 +25,7 @@ context "Sequelizer without ParseTree" do
25
25
  end
26
26
 
27
27
  specify "should raise error when converting proc to SQL" do
28
- proc {@ds.proc_to_sql(proc {:x > 1})}.should raise_error(Sequel::Error)
28
+ proc {proc {:x > 1}.to_sql(@ds)}.should raise_error(Sequel::Error)
29
29
  end
30
30
  end
31
31
 
@@ -54,8 +54,48 @@ context "Sequelizer without Ruby2Ruby" do
54
54
  end
55
55
 
56
56
  specify "should raise error only when using external expressions" do
57
- proc {@ds.proc_to_sql(proc {:x > 1})}.should_not raise_error(Sequel::Error)
58
- proc {@ds.proc_to_sql(proc {1 + 1})}.should raise_error(Sequel::Error)
57
+ proc {proc {:x > 1}.to_sql(@ds)}.should_not raise_error(Sequel::Error)
58
+ proc {proc {1 + 1}.to_sql(@ds)}.should raise_error(Sequel::Error)
59
+ end
60
+ end
61
+
62
+ context "Proc without #to_sexp method (Ruby2Ruby missing)" do
63
+ setup do
64
+ class Proc
65
+ alias_method :orig_to_sexp, :to_sexp
66
+ remove_method :to_sexp
67
+ end
68
+
69
+ module Kernel
70
+ alias_method :orig_sq_require, :require
71
+ def require(name); raise LoadError if name == 'ruby2ruby'; end
72
+ end
73
+ old_verbose = $VERBOSE
74
+ $VERBOSE = nil
75
+ load(File.join(File.dirname(__FILE__), '../lib/sequel_core/dataset/sequelizer.rb'))
76
+ $VERBOSE = old_verbose
77
+ @db = Sequel::Database.new
78
+ @ds = @db[:items]
79
+ end
80
+
81
+ teardown do
82
+ module Kernel
83
+ alias_method :require, :orig_sq_require
84
+ end
85
+ old_verbose = $VERBOSE
86
+ $VERBOSE = nil
87
+ load(File.join(File.dirname(__FILE__), '../lib/sequel_core/dataset/sequelizer.rb'))
88
+ $VERBOSE = old_verbose
89
+
90
+ class Proc
91
+ alias_method :to_sexp, :orig_to_sexp
92
+ end
93
+ end
94
+
95
+ specify "should define a replacement Proc#to_sexp implementation" do
96
+ pr = proc {1 + 1}
97
+ proc {pr.to_sexp}.should_not raise_error
98
+ pr.to_sexp.should == [:bmethod, nil, [:call, [:lit, 1], :+, [:array, [:lit, 1]]]]
59
99
  end
60
100
  end
61
101
 
@@ -64,12 +104,12 @@ context "Proc#to_sql" do
64
104
  DS = DB[:items]
65
105
 
66
106
  class ::Proc
67
- def to_sql
68
- DS.proc_to_sql(self)
107
+ def sql
108
+ to_sql(DS)
69
109
  end
70
110
 
71
- def to_sql_comma_separated
72
- DS.proc_to_sql(self, :comma_separated => true)
111
+ def sql_comma_separated
112
+ to_sql(DS, :comma_separated => true)
73
113
  end
74
114
  end
75
115
 
@@ -85,253 +125,253 @@ context "Proc#to_sql" do
85
125
  end
86
126
 
87
127
  specify "should support <sym> <op> <lit>" do
88
- proc {:x > 100}.to_sql.should == '(x > 100)'
89
- proc {:x < 100}.to_sql.should == '(x < 100)'
90
- proc {:x >= 100}.to_sql.should == '(x >= 100)'
91
- proc {:x <= 100}.to_sql.should == '(x <= 100)'
92
- proc {:x == 100}.to_sql.should == '(x = 100)'
128
+ proc {:x > 100}.sql.should == '(x > 100)'
129
+ proc {:x < 100}.sql.should == '(x < 100)'
130
+ proc {:x >= 100}.sql.should == '(x >= 100)'
131
+ proc {:x <= 100}.sql.should == '(x <= 100)'
132
+ proc {:x == 100}.sql.should == '(x = 100)'
93
133
  end
94
134
 
95
135
  specify "should support number literals" do
96
- proc {:x > 123.45}.to_sql.should == '(x > 123.45)'
97
- proc {:x > -30_000}.to_sql.should == '(x > -30000)'
136
+ proc {:x > 123.45}.sql.should == '(x > 123.45)'
137
+ proc {:x > -30_000}.sql.should == '(x > -30000)'
98
138
  end
99
139
 
100
140
  specify "should support string literals" do
101
- proc {:x == 'abc'}.to_sql.should == "(x = 'abc')"
102
- proc {:y == "ab'cd"}.to_sql.should == "(y = 'ab''cd')"
141
+ proc {:x == 'abc'}.sql.should == "(x = 'abc')"
142
+ proc {:y == "ab'cd"}.sql.should == "(y = 'ab''cd')"
103
143
  end
104
144
 
105
145
  specify "should support boolean literals" do
106
- proc {:x == false}.to_sql.should == "(x = 'f')"
107
- proc {:x == true}.to_sql.should == "(x = 't')"
146
+ proc {:x == false}.sql.should == "(x = 'f')"
147
+ proc {:x == true}.sql.should == "(x = 't')"
108
148
  end
109
149
 
110
150
  specify "should support nil literal and nil?" do
111
- proc {:x == nil}.to_sql.should == "(x IS NULL)"
112
- proc {:x.nil?}.to_sql.should == "(x IS NULL)"
151
+ proc {:x == nil}.sql.should == "(x IS NULL)"
152
+ proc {:x.nil?}.sql.should == "(x IS NULL)"
113
153
  end
114
154
 
115
155
  specify "should support local vars or method references" do
116
- proc {proc {:x == a}.to_sql}.should raise_error(NameError)
156
+ proc {proc {:x == a}.sql}.should raise_error(NameError)
117
157
  b = 123
118
- proc {:x == b}.to_sql.should == "(x = 123)"
158
+ proc {:x == b}.sql.should == "(x = 123)"
119
159
  def xyz; 321; end
120
- proc {:x == xyz}.to_sql.should == "(x = 321)"
121
- proc {:x == xyz.to_s}.to_sql.should == "(x = '321')"
160
+ proc {:x == xyz}.sql.should == "(x = 321)"
161
+ proc {:x == xyz.to_s}.sql.should == "(x = '321')"
122
162
 
123
163
  def y1(x); x; end
124
164
  def y2; 111; end
125
165
 
126
- proc {:x == y1(222)}.to_sql.should == "(x = 222)"
127
- proc {:x == y2}.to_sql.should == "(x = 111)"
166
+ proc {:x == y1(222)}.sql.should == "(x = 222)"
167
+ proc {:x == y2}.sql.should == "(x = 111)"
128
168
  end
129
169
 
130
170
  specify "sould support subscript access on symbols" do
131
- proc {:x|1 > 0}.to_sql.should == "(x[1] > 0)"
132
- proc {:x|2|3 > 0}.to_sql.should == "(x[2, 3] > 0)"
133
- proc {:x|[4, 5] > 0}.to_sql.should == "(x[4, 5] > 0)"
171
+ proc {:x|1 > 0}.sql.should == "(x[1] > 0)"
172
+ proc {:x|2|3 > 0}.sql.should == "(x[2, 3] > 0)"
173
+ proc {:x|[4, 5] > 0}.sql.should == "(x[4, 5] > 0)"
134
174
  end
135
175
 
136
176
  specify "should support constants" do
137
177
  ZZZ = 444
138
- proc {:x == ZZZ}.to_sql.should == "(x = 444)"
178
+ proc {:x == ZZZ}.sql.should == "(x = 444)"
139
179
 
140
180
  CCCD = Module.new
141
181
  CCCD::DDD = 'hi'
142
- proc {:x == CCCD::DDD}.to_sql.should == "(x = 'hi')"
182
+ proc {:x == CCCD::DDD}.sql.should == "(x = 'hi')"
143
183
  end
144
184
 
145
185
  specify "should support instance attributes" do
146
186
  @abc = 123
147
- proc {:x == @abc}.to_sql.should == "(x = 123)"
187
+ proc {:x == @abc}.sql.should == "(x = 123)"
148
188
  end
149
189
 
150
190
  specify "should support class attributes" do
151
191
  @@abc = 321
152
- proc {:x == @@abc}.to_sql.should == "(x = 321)"
192
+ proc {:x == @@abc}.sql.should == "(x = 321)"
153
193
  end
154
194
 
155
195
  specify "should support like? pattern" do
156
- proc {:x.like? '%abc'}.to_sql.should == "(x LIKE '%abc')"
196
+ proc {:x.like? '%abc'}.sql.should == "(x LIKE '%abc')"
157
197
  end
158
198
 
159
199
  specify "should support =~ operator" do
160
200
  # stock SQL version does not know about regexps
161
- proc {:x =~ '123'}.to_sql.should == "(x LIKE '123')"
201
+ proc {:x =~ '123'}.sql.should == "(x LIKE '123')"
162
202
 
163
- proc {:x =~ /^123/}.to_sql.should == "(x ~ '^123')"
203
+ proc {:x =~ /^123/}.sql.should == "(x ~ '^123')"
164
204
  end
165
205
 
166
206
  specify "should raise on =~ operator for unsupported types" do
167
- proc {proc {:x =~ 123}.to_sql}.should raise_error(Sequel::Error)
207
+ proc {proc {:x =~ 123}.sql}.should raise_error(Sequel::Error)
168
208
  end
169
209
 
170
210
  specify "should support != operator" do
171
- proc {:x != 100}.to_sql.should == "(NOT (x = 100))"
211
+ proc {:x != 100}.sql.should == "(NOT (x = 100))"
172
212
  end
173
213
 
174
214
  specify "should support !~ operator" do
175
- proc {:x !~ '123'}.to_sql.should == "(NOT (x LIKE '123'))"
215
+ proc {:x !~ '123'}.sql.should == "(NOT (x LIKE '123'))"
176
216
  end
177
217
 
178
218
  specify "should support ! operator" do
179
- proc {!:x}.to_sql.should == "(x = 'f')"
180
- proc {!(:x > 100)}.to_sql.should == "(NOT (x > 100))"
219
+ proc {!:x}.sql.should == "(x = 'f')"
220
+ proc {!(:x > 100)}.sql.should == "(NOT (x > 100))"
181
221
  end
182
222
 
183
223
  specify "should support && operator" do
184
- proc {1 && 2}.to_sql.should == "(1 AND 2)"
185
- proc {:x > 100 && :y < 100}.to_sql.should == "((x > 100) AND (y < 100))"
186
- proc {:x && :y && :z}.to_sql.should == "(x AND (y AND z))"
224
+ proc {1 && 2}.sql.should == "(1 AND 2)"
225
+ proc {:x > 100 && :y < 100}.sql.should == "((x > 100) AND (y < 100))"
226
+ proc {:x && :y && :z}.sql.should == "(x AND (y AND z))"
187
227
  end
188
228
 
189
229
  specify "should support << operator for assignment" do
190
- proc {:x << 1}.to_sql.should == "x = 1"
230
+ proc {:x << 1}.sql.should == "x = 1"
191
231
  end
192
232
 
193
233
  specify "should concatenate separate statements using AND" do
194
- proc {:x == 20; :y == 30}.to_sql.should == "((x = 20) AND (y = 30))"
195
- proc {:x != 1; :y != 2; :z != 3}.to_sql.should == \
234
+ proc {:x == 20; :y == 30}.sql.should == "((x = 20) AND (y = 30))"
235
+ proc {:x != 1; :y != 2; :z != 3}.sql.should == \
196
236
  "((NOT (x = 1)) AND (NOT (y = 2)) AND (NOT (z = 3)))"
197
237
  end
198
238
 
199
239
  specify "should concatenate separate statements using custom join argument" do
200
- proc {:x << 20; :y << 30}.to_sql_comma_separated.should == "x = 20, y = 30"
240
+ proc {:x << 20; :y << 30}.sql_comma_separated.should == "x = 20, y = 30"
201
241
  z = 333
202
- proc {:x << :x + 1; :y << z}.to_sql_comma_separated.should == "x = (x + 1), y = 333"
242
+ proc {:x << :x + 1; :y << z}.sql_comma_separated.should == "x = (x + 1), y = 333"
203
243
  end
204
244
 
205
245
  specify "should support || operator" do
206
- proc {1 || 2}.to_sql.should == "(1 OR 2)"
207
- proc {:x > 100 || :y < 100}.to_sql.should == "((x > 100) OR (y < 100))"
208
- proc {:x || :y || :z}.to_sql.should == "(x OR (y OR z))"
246
+ proc {1 || 2}.sql.should == "(1 OR 2)"
247
+ proc {:x > 100 || :y < 100}.sql.should == "((x > 100) OR (y < 100))"
248
+ proc {:x || :y || :z}.sql.should == "(x OR (y OR z))"
209
249
  end
210
250
 
211
251
  specify "should support operator combinations" do
212
- proc {(:x > 1 || :y > 2) && (:z > 3)}.to_sql.should == "(((x > 1) OR (y > 2)) AND (z > 3))"
213
- proc {(1 && 2) || (3 || 4)}.to_sql.should == "((1 AND 2) OR (3 OR 4))"
214
- proc {(:x != 2) || (:y == 3) || !(:z == 4)}.to_sql.should == \
252
+ proc {(:x > 1 || :y > 2) && (:z > 3)}.sql.should == "(((x > 1) OR (y > 2)) AND (z > 3))"
253
+ proc {(1 && 2) || (3 || 4)}.sql.should == "((1 AND 2) OR (3 OR 4))"
254
+ proc {(:x != 2) || (:y == 3) || !(:z == 4)}.sql.should == \
215
255
  "((NOT (x = 2)) OR ((y = 3) OR (NOT (z = 4))))"
216
256
  end
217
257
 
218
258
  specify "should support late bound column references" do
219
259
  def abc; :tttt; end
220
- proc {abc > 2}.to_sql.should == "(tttt > 2)"
260
+ proc {abc > 2}.sql.should == "(tttt > 2)"
221
261
  end
222
262
 
223
263
  specify "should support qualified column references" do
224
- proc {:x__y > 3}.to_sql.should == "(x.y > 3)"
264
+ proc {:x__y > 3}.sql.should == "(x.y > 3)"
225
265
  end
226
266
 
227
267
  specify "should support functions on columns" do
228
- proc {:x.MAX > 100}.to_sql.should == "(max(x) > 100)"
229
- proc {:x.COUNT > 100}.to_sql.should == "(count(x) > 100)"
268
+ proc {:x.MAX > 100}.sql.should == "(max(x) > 100)"
269
+ proc {:x.COUNT > 100}.sql.should == "(count(x) > 100)"
230
270
  end
231
271
 
232
272
  specify "should support SQL functions" do
233
- proc {:MAX[:x] > 100}.to_sql.should == "(MAX(x) > 100)"
273
+ proc {:MAX[:x] > 100}.sql.should == "(MAX(x) > 100)"
234
274
 
235
- proc {:MAX[:x__y] > 100}.to_sql.should == "(MAX(x.y) > 100)"
275
+ proc {:MAX[:x__y] > 100}.sql.should == "(MAX(x.y) > 100)"
236
276
  end
237
277
 
238
278
  specify "should support SQL functions with multiple arguments" do
239
- proc {:sum[1, 2, 3] > 100}.to_sql.should == "(sum(1, 2, 3) > 100)"
279
+ proc {:sum[1, 2, 3] > 100}.sql.should == "(sum(1, 2, 3) > 100)"
240
280
 
241
- proc {:x[1, DB[:y].select(:z), "a'b"] > 100}.to_sql.should == \
281
+ proc {:x[1, DB[:y].select(:z), "a'b"] > 100}.sql.should == \
242
282
  "(x(1, (SELECT z FROM y), 'a''b') > 100)"
243
283
  end
244
284
 
245
285
  specify "should support SQL functions without arguments" do
246
- proc {:abc[] > 100}.to_sql.should == "(abc() > 100)"
286
+ proc {:abc[] > 100}.sql.should == "(abc() > 100)"
247
287
 
248
- proc {:now[] - :last_stamp > 100}.to_sql.should == \
288
+ proc {:now[] - :last_stamp > 100}.sql.should == \
249
289
  "((now() - last_stamp) > 100)"
250
290
  end
251
291
 
252
292
  specify "should do stuff like..." do
253
- proc {:price < 100 || :category != 'ruby'}.to_sql.should == \
293
+ proc {:price < 100 || :category != 'ruby'}.sql.should == \
254
294
  "((price < 100) OR (NOT (category = 'ruby')))"
255
295
  t = Time.now
256
- proc {:node_id == 1 && :stamp < t}.to_sql.should == \
296
+ proc {:node_id == 1 && :stamp < t}.sql.should == \
257
297
  "((node_id = 1) AND (stamp < #{DS.literal(t)}))"
258
298
 
259
- proc {1 < :x}.to_sql.should == "(1 < x)"
299
+ proc {1 < :x}.sql.should == "(1 < x)"
260
300
  end
261
301
 
262
302
  specify "should complain if someone is crazy" do
263
- proc {proc {def x; 1; end}.to_sql}.should raise_error(Sequel::Error::InvalidExpression)
303
+ proc {proc {def x; 1; end}.sql}.should raise_error(Sequel::Error::InvalidExpression)
264
304
  a = 1
265
- proc {proc {a = 1}.to_sql}.should raise_error(Sequel::Error::InvalidExpression)
305
+ proc {proc {a = 1}.sql}.should raise_error(Sequel::Error::InvalidExpression)
266
306
  end
267
307
 
268
308
  specify "should support comparison to Range objects" do
269
- proc {:x == (1..10)}.to_sql.should == \
309
+ proc {:x == (1..10)}.sql.should == \
270
310
  "(x >= 1 AND x <= 10)"
271
311
 
272
- proc {:x == (1...10)}.to_sql.should == \
312
+ proc {:x == (1...10)}.sql.should == \
273
313
  "(x >= 1 AND x < 10)"
274
314
 
275
315
  a, b = 3, 5
276
- proc {:x == (a..b)}.to_sql.should == \
316
+ proc {:x == (a..b)}.sql.should == \
277
317
  "(x >= 3 AND x <= 5)"
278
318
 
279
- proc {:x == (a...b)}.to_sql.should == \
319
+ proc {:x == (a...b)}.sql.should == \
280
320
  "(x >= 3 AND x < 5)"
281
321
 
282
322
  t1 = Time.now - 4000
283
323
  t2 = Time.now - 2000
284
324
 
285
- proc {:stamp == (t1..t2)}.to_sql.should == \
325
+ proc {:stamp == (t1..t2)}.sql.should == \
286
326
  "(stamp >= #{DS.literal(t1)} AND stamp <= #{DS.literal(t2)})"
287
327
  end
288
328
 
289
329
  specify "should support comparison to sub-queries" do
290
330
  @ds2 = DB[:test].select(:node_id)
291
331
 
292
- proc {:id == @ds2}.to_sql.should == \
332
+ proc {:id == @ds2}.sql.should == \
293
333
  "(id IN (SELECT node_id FROM test))"
294
334
 
295
- proc {:id == DB[:test].select(:node_id)}.to_sql.should == \
335
+ proc {:id == DB[:test].select(:node_id)}.sql.should == \
296
336
  "(id IN (SELECT node_id FROM test))"
297
337
 
298
- proc {:id == DB[:test].select(:node_id).filter {:active == true}}.to_sql.should == \
338
+ proc {:id == DB[:test].select(:node_id).filter {:active == true}}.sql.should == \
299
339
  "(id IN (SELECT node_id FROM test WHERE (active = 't')))"
300
340
 
301
- proc {:price >= DB[:items].select(:price)}.to_sql.should == \
341
+ proc {:price >= DB[:items].select(:price)}.sql.should == \
302
342
  "(price >= (SELECT price FROM items))"
303
343
  end
304
344
 
305
345
  specify "should support comparison to arrays" do
306
- proc {:id == [1, 3, 7, 15]}.to_sql.should == \
346
+ proc {:id == [1, 3, 7, 15]}.sql.should == \
307
347
  "(id IN (1, 3, 7, 15))"
308
348
  end
309
349
 
310
350
  specify "should not literalize String#expr and String#lit" do
311
- proc {'x'.lit == 1}.to_sql.should == "(x = 1)"
312
- proc {'x.y'.expr == 1}.to_sql.should == "(x.y = 1)"
351
+ proc {'x'.lit == 1}.sql.should == "(x = 1)"
352
+ proc {'x.y'.expr == 1}.sql.should == "(x.y = 1)"
313
353
  end
314
354
 
315
355
  specify "should support in/in? operator" do
316
- proc {:x.in [3, 4, 5]}.to_sql.should == "(x IN (3, 4, 5))"
317
- proc {:x.in?(3, 4, 5)}.to_sql.should == "(x IN (3, 4, 5))"
356
+ proc {:x.in [3, 4, 5]}.sql.should == "(x IN (3, 4, 5))"
357
+ proc {:x.in?(3, 4, 5)}.sql.should == "(x IN (3, 4, 5))"
318
358
 
319
- proc {:x.in(1..10)}.to_sql.should == "(x >= 1 AND x <= 10)"
320
- proc {:x.in?(1..10)}.to_sql.should == "(x >= 1 AND x <= 10)"
359
+ proc {:x.in(1..10)}.sql.should == "(x >= 1 AND x <= 10)"
360
+ proc {:x.in?(1..10)}.sql.should == "(x >= 1 AND x <= 10)"
321
361
 
322
362
  @ds2 = DB[:test].select(:node_id)
323
- proc {:x.in @ds2}.to_sql.should == "(x IN (SELECT node_id FROM test))"
363
+ proc {:x.in @ds2}.sql.should == "(x IN (SELECT node_id FROM test))"
324
364
  end
325
365
 
326
366
  specify "should support nested procs" do
327
- proc {:x > 10 || proc{:y > 20}}.to_sql.should == \
367
+ proc {:x > 10 || proc{:y > 20}}.sql.should == \
328
368
  "((x > 10) OR (y > 20))"
329
369
 
330
370
  def pr(&block)
331
371
  proc {:x > 10 || block}
332
372
  end
333
373
 
334
- pr {:y > 20}.to_sql.should == \
374
+ pr {:y > 20}.sql.should == \
335
375
  "((x > 10) OR (y > 20))"
336
376
  end
337
377
 
@@ -345,7 +385,7 @@ context "Proc#to_sql" do
345
385
  (p|idx) << (p|idx) + v
346
386
  end
347
387
  end
348
- pr.to_sql_comma_separated.should == \
388
+ pr.sql_comma_separated.should == \
349
389
  "day[1] = (day[1] + 2), week[1] = (week[1] + 2), month[1] = (month[1] + 2), year[1] = (year[1] + 2), alltime[1] = (alltime[1] + 2)"
350
390
  end
351
391
 
@@ -357,12 +397,12 @@ context "Proc#to_sql" do
357
397
  k << k + v
358
398
  end
359
399
  end
360
- pr.to_sql_comma_separated.should == "month = (month + 3)"
400
+ pr.sql_comma_separated.should == "month = (month + 3)"
361
401
  end
362
402
 
363
403
  specify "should support local arguments" do
364
404
  def t(x)
365
- proc {x > 10}.to_sql
405
+ proc {x > 10}.sql
366
406
  end
367
407
  t(:y).should == "(y > 10)"
368
408
  end
@@ -370,69 +410,69 @@ context "Proc#to_sql" do
370
410
  specify "should support binary operators on local context" do
371
411
  XXX = 1
372
412
  YYY = 2
373
- proc {XXX || YYY}.to_sql.should == "(1 OR 2)"
413
+ proc {XXX || YYY}.sql.should == "(1 OR 2)"
374
414
 
375
415
  xxx = 1
376
416
  yyy = 2
377
- proc {xxx && yyy}.to_sql.should == "(1 AND 2)"
417
+ proc {xxx && yyy}.sql.should == "(1 AND 2)"
378
418
  end
379
419
 
380
420
  specify "should support arithmetics" do
381
421
  zzz = 300
382
- proc {(:x + 100) > zzz}.to_sql.should == "((x + 100) > 300)"
422
+ proc {(:x + 100) > zzz}.sql.should == "((x + 100) > 300)"
383
423
 
384
- proc {(:x + :y * 100) > zzz}.to_sql.should == "((x + (y * 100)) > 300)"
424
+ proc {(:x + :y * 100) > zzz}.sql.should == "((x + (y * 100)) > 300)"
385
425
 
386
- proc {:units * :price}.to_sql.should == "(units * price)"
426
+ proc {:units * :price}.sql.should == "(units * price)"
387
427
  end
388
428
 
389
429
  specify "should support | operator" do
390
- proc {(:x | 1) > 0}.to_sql.should == "(x[1] > 0)"
391
- proc {10 | 1}.to_sql.should == 11
430
+ proc {(:x | 1) > 0}.sql.should == "(x[1] > 0)"
431
+ proc {10 | 1}.sql.should == 11
392
432
  end
393
433
 
394
434
  specify "should support globals" do
395
435
  $aaaa_zzzz = 400
396
- proc {:x > $aaaa_zzzz}.to_sql.should == "(x > 400)"
436
+ proc {:x > $aaaa_zzzz}.sql.should == "(x > 400)"
397
437
  end
398
438
 
399
439
  specify "should support Regexp macros" do
400
440
  "abc" =~ /(ab)/
401
- proc {:x == $1}.to_sql.should == "(x = 'ab')"
441
+ proc {:x == $1}.sql.should == "(x = 'ab')"
402
442
  end
403
443
 
404
444
  specify "should evaluate expression not referring to symbols or literal strings." do
405
- proc {:x > 2 * 3}.to_sql.should == "(x > 6)"
445
+ proc {:x > 2 * 3}.sql.should == "(x > 6)"
406
446
  y = 3
407
- proc {:x > y * 4}.to_sql.should == "(x > 12)"
447
+ proc {:x > y * 4}.sql.should == "(x > 12)"
408
448
 
409
- proc {:AVG[:x] > 4}.to_sql.should == "(AVG(x) > 4)"
449
+ proc {:AVG[:x] > 4}.sql.should == "(AVG(x) > 4)"
410
450
 
411
- proc {:AVG[:x] > 4}.to_sql.should == "(AVG(x) > 4)"
451
+ proc {:AVG[:x] > 4}.sql.should == "(AVG(x) > 4)"
412
452
 
413
- proc {:y == (1 > 2)}.to_sql.should == "(y = 'f')"
453
+ proc {:y == (1 > 2)}.sql.should == "(y = 'f')"
414
454
  end
415
455
 
416
456
  specify "should support ternary operator" do
417
457
  y = true
418
- proc {:x > (y ? 1 : 2)}.to_sql.should == "(x > 1)"
458
+ proc {:x > (y ? 1 : 2)}.sql.should == "(x > 1)"
419
459
 
420
- proc {((1 > 2) ? :x : :y) > 3}.to_sql.should == "(y > 3)"
460
+ proc {((1 > 2) ? :x : :y) > 3}.sql.should == "(y > 3)"
421
461
  end
422
462
 
423
463
  specify "should support strings with embedded Ruby code in them and literalize them" do
424
- proc {:n == "#{1+2}"}.to_sql.should == "(n = '3')"
464
+ proc {:n == "#{1+2}"}.sql.should == "(n = '3')"
425
465
 
426
466
  y = "12'34"
427
467
 
428
- proc {:x > "#{y}"}.to_sql.should == "(x > '12''34')"
468
+ proc {:x > "#{y}"}.sql.should == "(x > '12''34')"
429
469
  end
430
470
 
431
471
  specify "should support format strings and literalize the result" do
432
472
  prod = 1
433
- proc {:x == "abc%d" % prod}.to_sql.should == "(x = 'abc1')"
473
+ proc {:x == "abc%d" % prod}.sql.should == "(x = 'abc1')"
434
474
 
435
- proc {:x == ("%d" % prod).lit}.to_sql.should == "(x = 1)"
475
+ proc {:x == ("%d" % prod).lit}.sql.should == "(x = 1)"
436
476
  end
437
477
  end
438
478
 
@@ -442,7 +482,7 @@ context "Proc#to_sql stock" do
442
482
  ds = db[:items]
443
483
 
444
484
  p = proc {:x =~ /abc/}
445
- proc {ds.proc_to_sql(p)}.should raise_error(Sequel::Error)
485
+ proc {p.to_sql(ds)}.should raise_error(Sequel::Error)
446
486
  end
447
487
  end
448
488