sequel 0.5.0.2 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/COPYING +18 -18
  2. data/Rakefile +17 -98
  3. data/lib/sequel.rb +2 -71
  4. metadata +10 -108
  5. data/CHANGELOG +0 -989
  6. data/bin/sequel +0 -41
  7. data/lib/sequel/adapters/adapter_skeleton.rb +0 -68
  8. data/lib/sequel/adapters/ado.rb +0 -100
  9. data/lib/sequel/adapters/db2.rb +0 -158
  10. data/lib/sequel/adapters/dbi.rb +0 -126
  11. data/lib/sequel/adapters/informix.rb +0 -87
  12. data/lib/sequel/adapters/jdbc.rb +0 -108
  13. data/lib/sequel/adapters/mysql.rb +0 -269
  14. data/lib/sequel/adapters/odbc.rb +0 -145
  15. data/lib/sequel/adapters/odbc_mssql.rb +0 -93
  16. data/lib/sequel/adapters/openbase.rb +0 -90
  17. data/lib/sequel/adapters/oracle.rb +0 -99
  18. data/lib/sequel/adapters/postgres.rb +0 -519
  19. data/lib/sequel/adapters/sqlite.rb +0 -192
  20. data/lib/sequel/ado.rb +0 -6
  21. data/lib/sequel/array_keys.rb +0 -296
  22. data/lib/sequel/connection_pool.rb +0 -152
  23. data/lib/sequel/core_ext.rb +0 -59
  24. data/lib/sequel/core_sql.rb +0 -191
  25. data/lib/sequel/database.rb +0 -433
  26. data/lib/sequel/dataset.rb +0 -409
  27. data/lib/sequel/dataset/convenience.rb +0 -321
  28. data/lib/sequel/dataset/sequelizer.rb +0 -354
  29. data/lib/sequel/dataset/sql.rb +0 -586
  30. data/lib/sequel/db2.rb +0 -6
  31. data/lib/sequel/dbi.rb +0 -6
  32. data/lib/sequel/exceptions.rb +0 -45
  33. data/lib/sequel/informix.rb +0 -6
  34. data/lib/sequel/migration.rb +0 -191
  35. data/lib/sequel/model.rb +0 -8
  36. data/lib/sequel/mysql.rb +0 -6
  37. data/lib/sequel/odbc.rb +0 -6
  38. data/lib/sequel/oracle.rb +0 -6
  39. data/lib/sequel/postgres.rb +0 -6
  40. data/lib/sequel/pretty_table.rb +0 -73
  41. data/lib/sequel/schema.rb +0 -8
  42. data/lib/sequel/schema/schema_generator.rb +0 -131
  43. data/lib/sequel/schema/schema_sql.rb +0 -131
  44. data/lib/sequel/sqlite.rb +0 -6
  45. data/lib/sequel/worker.rb +0 -58
  46. data/spec/adapters/informix_spec.rb +0 -139
  47. data/spec/adapters/mysql_spec.rb +0 -330
  48. data/spec/adapters/oracle_spec.rb +0 -130
  49. data/spec/adapters/postgres_spec.rb +0 -189
  50. data/spec/adapters/sqlite_spec.rb +0 -345
  51. data/spec/array_keys_spec.rb +0 -679
  52. data/spec/connection_pool_spec.rb +0 -356
  53. data/spec/core_ext_spec.rb +0 -67
  54. data/spec/core_sql_spec.rb +0 -301
  55. data/spec/database_spec.rb +0 -811
  56. data/spec/dataset_spec.rb +0 -2381
  57. data/spec/migration_spec.rb +0 -261
  58. data/spec/pretty_table_spec.rb +0 -66
  59. data/spec/rcov.opts +0 -4
  60. data/spec/schema_generator_spec.rb +0 -86
  61. data/spec/schema_spec.rb +0 -230
  62. data/spec/sequel_spec.rb +0 -10
  63. data/spec/sequelizer_spec.rb +0 -389
  64. data/spec/spec.opts +0 -5
  65. data/spec/spec_helper.rb +0 -44
  66. data/spec/worker_spec.rb +0 -96
data/spec/sequel_spec.rb DELETED
@@ -1,10 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- describe "Sequel::Model()" do
4
- specify "should auto-load sequel_model and create a sequel model" do
5
- db = Sequel::Database.new
6
- Sequel::Model.instance_eval {@db = db}
7
- c = Class.new(Sequel::Model(:items))
8
- c.dataset.sql.should == "SELECT * FROM items"
9
- end
10
- end
@@ -1,389 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'spec_helper')
2
-
3
- context "Proc#to_sql" do
4
- DB = Sequel::Database.new
5
- DS = DB[:items]
6
-
7
- class ::Proc
8
- def to_sql
9
- DS.proc_to_sql(self)
10
- end
11
-
12
- def to_sql_comma_separated
13
- DS.proc_to_sql(self, :comma_separated => true)
14
- end
15
- end
16
-
17
- def DS.match_expr(l, r)
18
- case r
19
- when String
20
- "(#{literal(l)} LIKE #{literal(r)})"
21
- when Regexp
22
- "(#{literal(l)} ~ #{literal(r.source)})"
23
- else
24
- raise Sequel::Error, "Unsupported match pattern class (#{r.class})."
25
- end
26
- end
27
-
28
- specify "should support <sym> <op> <lit>" do
29
- proc {:x > 100}.to_sql.should == '(x > 100)'
30
- proc {:x < 100}.to_sql.should == '(x < 100)'
31
- proc {:x >= 100}.to_sql.should == '(x >= 100)'
32
- proc {:x <= 100}.to_sql.should == '(x <= 100)'
33
- proc {:x == 100}.to_sql.should == '(x = 100)'
34
- end
35
-
36
- specify "should support number literals" do
37
- proc {:x > 123.45}.to_sql.should == '(x > 123.45)'
38
- proc {:x > -30_000}.to_sql.should == '(x > -30000)'
39
- end
40
-
41
- specify "should support string literals" do
42
- proc {:x == 'abc'}.to_sql.should == "(x = 'abc')"
43
- proc {:y == "ab'cd"}.to_sql.should == "(y = 'ab''cd')"
44
- end
45
-
46
- specify "should support boolean literals" do
47
- proc {:x == false}.to_sql.should == "(x = 'f')"
48
- proc {:x == true}.to_sql.should == "(x = 't')"
49
- end
50
-
51
- specify "should support nil literal and nil?" do
52
- proc {:x == nil}.to_sql.should == "(x IS NULL)"
53
- proc {:x.nil?}.to_sql.should == "(x IS NULL)"
54
- end
55
-
56
- specify "should support local vars or method references" do
57
- proc {proc {:x == a}.to_sql}.should raise_error(NameError)
58
- b = 123
59
- proc {:x == b}.to_sql.should == "(x = 123)"
60
- def xyz; 321; end
61
- proc {:x == xyz}.to_sql.should == "(x = 321)"
62
- proc {:x == xyz.to_s}.to_sql.should == "(x = '321')"
63
-
64
- def y1(x); x; end
65
- def y2; 111; end
66
-
67
- proc {:x == y1(222)}.to_sql.should == "(x = 222)"
68
- proc {:x == y2}.to_sql.should == "(x = 111)"
69
- end
70
-
71
- specify "sould support subscript access on symbols" do
72
- proc {:x|1 > 0}.to_sql.should == "(x[1] > 0)"
73
- proc {:x|2|3 > 0}.to_sql.should == "(x[2, 3] > 0)"
74
- proc {:x|[4, 5] > 0}.to_sql.should == "(x[4, 5] > 0)"
75
- end
76
-
77
- specify "should support constants" do
78
- ZZZ = 444
79
- proc {:x == ZZZ}.to_sql.should == "(x = 444)"
80
-
81
- CCCD = Module.new
82
- CCCD::DDD = 'hi'
83
- proc {:x == CCCD::DDD}.to_sql.should == "(x = 'hi')"
84
- end
85
-
86
- specify "should support instance attributes" do
87
- @abc = 123
88
- proc {:x == @abc}.to_sql.should == "(x = 123)"
89
- end
90
-
91
- specify "should support class attributes" do
92
- @@abc = 321
93
- proc {:x == @@abc}.to_sql.should == "(x = 321)"
94
- end
95
-
96
- specify "should support like? pattern" do
97
- proc {:x.like? '%abc'}.to_sql.should == "(x LIKE '%abc')"
98
- end
99
-
100
- specify "should support =~ operator" do
101
- # stock SQL version does not know about regexps
102
- proc {:x =~ '123'}.to_sql.should == "(x LIKE '123')"
103
-
104
- proc {:x =~ /^123/}.to_sql.should == "(x ~ '^123')"
105
- end
106
-
107
- specify "should raise on =~ operator for unsupported types" do
108
- proc {proc {:x =~ 123}.to_sql}.should raise_error(Sequel::Error)
109
- end
110
-
111
- specify "should support != operator" do
112
- proc {:x != 100}.to_sql.should == "(NOT (x = 100))"
113
- end
114
-
115
- specify "should support !~ operator" do
116
- proc {:x !~ '123'}.to_sql.should == "(NOT (x LIKE '123'))"
117
- end
118
-
119
- specify "should support ! operator" do
120
- proc {!:x}.to_sql.should == "(x = 'f')"
121
- proc {!(:x > 100)}.to_sql.should == "(NOT (x > 100))"
122
- end
123
-
124
- specify "should support && operator" do
125
- proc {1 && 2}.to_sql.should == "(1 AND 2)"
126
- proc {:x > 100 && :y < 100}.to_sql.should == "((x > 100) AND (y < 100))"
127
- proc {:x && :y && :z}.to_sql.should == "(x AND (y AND z))"
128
- end
129
-
130
- specify "should support << operator for assignment" do
131
- proc {:x << 1}.to_sql.should == "x = 1"
132
- end
133
-
134
- specify "should concatenate separate statements using AND" do
135
- proc {:x == 20; :y == 30}.to_sql.should == "((x = 20) AND (y = 30))"
136
- proc {:x != 1; :y != 2; :z != 3}.to_sql.should == \
137
- "((NOT (x = 1)) AND (NOT (y = 2)) AND (NOT (z = 3)))"
138
- end
139
-
140
- specify "should concatenate separate statements using custom join argument" do
141
- proc {:x << 20; :y << 30}.to_sql_comma_separated.should == "x = 20, y = 30"
142
- z = 333
143
- proc {:x << :x + 1; :y << z}.to_sql_comma_separated.should == "x = (x + 1), y = 333"
144
- end
145
-
146
- specify "should support || operator" do
147
- proc {1 || 2}.to_sql.should == "(1 OR 2)"
148
- proc {:x > 100 || :y < 100}.to_sql.should == "((x > 100) OR (y < 100))"
149
- proc {:x || :y || :z}.to_sql.should == "(x OR (y OR z))"
150
- end
151
-
152
- specify "should support operator combinations" do
153
- proc {(:x > 1 || :y > 2) && (:z > 3)}.to_sql.should == "(((x > 1) OR (y > 2)) AND (z > 3))"
154
- proc {(1 && 2) || (3 || 4)}.to_sql.should == "((1 AND 2) OR (3 OR 4))"
155
- proc {(:x != 2) || (:y == 3) || !(:z == 4)}.to_sql.should == \
156
- "((NOT (x = 2)) OR ((y = 3) OR (NOT (z = 4))))"
157
- end
158
-
159
- specify "should support late bound column references" do
160
- def abc; :tttt; end
161
- proc {abc > 2}.to_sql.should == "(tttt > 2)"
162
- end
163
-
164
- specify "should support qualified column references" do
165
- proc {:x__y > 3}.to_sql.should == "(x.y > 3)"
166
- end
167
-
168
- specify "should support functions on columns" do
169
- proc {:x.MAX > 100}.to_sql.should == "(max(x) > 100)"
170
- proc {:x.COUNT > 100}.to_sql.should == "(count(x) > 100)"
171
- end
172
-
173
- specify "should support SQL functions" do
174
- proc {:MAX[:x] > 100}.to_sql.should == "(MAX(x) > 100)"
175
-
176
- proc {:MAX[:x__y] > 100}.to_sql.should == "(MAX(x.y) > 100)"
177
- end
178
-
179
- specify "should support SQL functions with multiple arguments" do
180
- proc {:sum[1, 2, 3] > 100}.to_sql.should == "(sum(1, 2, 3) > 100)"
181
-
182
- proc {:x[1, DB[:y].select(:z), "a'b"] > 100}.to_sql.should == \
183
- "(x(1, (SELECT z FROM y), 'a''b') > 100)"
184
- end
185
-
186
- specify "should support SQL functions without arguments" do
187
- proc {:abc[] > 100}.to_sql.should == "(abc() > 100)"
188
-
189
- proc {:now[] - :last_stamp > 100}.to_sql.should == \
190
- "((now() - last_stamp) > 100)"
191
- end
192
-
193
- specify "should do stuff like..." do
194
- proc {:price < 100 || :category != 'ruby'}.to_sql.should == \
195
- "((price < 100) OR (NOT (category = 'ruby')))"
196
- t = Time.now
197
- proc {:node_id == 1 && :stamp < t}.to_sql.should == \
198
- "((node_id = 1) AND (stamp < #{DS.literal(t)}))"
199
-
200
- proc {1 < :x}.to_sql.should == "(1 < x)"
201
- end
202
-
203
- specify "should complain if someone is crazy" do
204
- proc {proc {def x; 1; end}.to_sql}.should raise_error(Sequel::Error::InvalidExpression)
205
- a = 1
206
- proc {proc {a = 1}.to_sql}.should raise_error(Sequel::Error::InvalidExpression)
207
- end
208
-
209
- specify "should support comparison to Range objects" do
210
- proc {:x == (1..10)}.to_sql.should == \
211
- "(x >= 1 AND x <= 10)"
212
-
213
- proc {:x == (1...10)}.to_sql.should == \
214
- "(x >= 1 AND x < 10)"
215
-
216
- a, b = 3, 5
217
- proc {:x == (a..b)}.to_sql.should == \
218
- "(x >= 3 AND x <= 5)"
219
-
220
- proc {:x == (a...b)}.to_sql.should == \
221
- "(x >= 3 AND x < 5)"
222
-
223
- t1 = Time.now - 4000
224
- t2 = Time.now - 2000
225
-
226
- proc {:stamp == (t1..t2)}.to_sql.should == \
227
- "(stamp >= #{DS.literal(t1)} AND stamp <= #{DS.literal(t2)})"
228
- end
229
-
230
- specify "should support comparison to sub-queries" do
231
- @ds2 = DB[:test].select(:node_id)
232
-
233
- proc {:id == @ds2}.to_sql.should == \
234
- "(id IN (SELECT node_id FROM test))"
235
-
236
- proc {:id == DB[:test].select(:node_id)}.to_sql.should == \
237
- "(id IN (SELECT node_id FROM test))"
238
-
239
- proc {:id == DB[:test].select(:node_id).filter {:active == true}}.to_sql.should == \
240
- "(id IN (SELECT node_id FROM test WHERE (active = 't')))"
241
-
242
- proc {:price >= DB[:items].select(:price)}.to_sql.should == \
243
- "(price >= (SELECT price FROM items))"
244
- end
245
-
246
- specify "should support comparison to arrays" do
247
- proc {:id == [1, 3, 7, 15]}.to_sql.should == \
248
- "(id IN (1, 3, 7, 15))"
249
- end
250
-
251
- specify "should not literalize String#expr and String#lit" do
252
- proc {'x'.lit == 1}.to_sql.should == "(x = 1)"
253
- proc {'x.y'.expr == 1}.to_sql.should == "(x.y = 1)"
254
- end
255
-
256
- specify "should support in/in? operator" do
257
- proc {:x.in [3, 4, 5]}.to_sql.should == "(x IN (3, 4, 5))"
258
- proc {:x.in?(3, 4, 5)}.to_sql.should == "(x IN (3, 4, 5))"
259
-
260
- proc {:x.in(1..10)}.to_sql.should == "(x >= 1 AND x <= 10)"
261
- proc {:x.in?(1..10)}.to_sql.should == "(x >= 1 AND x <= 10)"
262
-
263
- @ds2 = DB[:test].select(:node_id)
264
- proc {:x.in @ds2}.to_sql.should == "(x IN (SELECT node_id FROM test))"
265
- end
266
-
267
- specify "should support nested procs" do
268
- proc {:x > 10 || proc{:y > 20}}.to_sql.should == \
269
- "((x > 10) OR (y > 20))"
270
-
271
- def pr(&block)
272
- proc {:x > 10 || block}
273
- end
274
-
275
- pr {:y > 20}.to_sql.should == \
276
- "((x > 10) OR (y > 20))"
277
- end
278
-
279
- specify "should support unfolding of calls to #each" do
280
- # from http://groups.google.com/group/sequel-talk/browse_thread/thread/54a660568515fbb7
281
- periods = [:day, :week, :month, :year, :alltime]
282
- idx = 1
283
- v = 2
284
- pr = proc do
285
- periods.each do |p|
286
- (p|idx) << (p|idx) + v
287
- end
288
- end
289
- pr.to_sql_comma_separated.should == \
290
- "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)"
291
- end
292
-
293
- specify "should support unfolding of calls to Hash#each" do
294
- periods = {:month => 3}
295
- idx = 1
296
- pr = proc do
297
- periods.each do |k, v|
298
- k << k + v
299
- end
300
- end
301
- pr.to_sql_comma_separated.should == "month = (month + 3)"
302
- end
303
-
304
- specify "should support local arguments" do
305
- def t(x)
306
- proc {x > 10}.to_sql
307
- end
308
- t(:y).should == "(y > 10)"
309
- end
310
-
311
- specify "should support binary operators on local context" do
312
- XXX = 1
313
- YYY = 2
314
- proc {XXX || YYY}.to_sql.should == "(1 OR 2)"
315
-
316
- xxx = 1
317
- yyy = 2
318
- proc {xxx && yyy}.to_sql.should == "(1 AND 2)"
319
- end
320
-
321
- specify "should support arithmetics" do
322
- zzz = 300
323
- proc {(:x + 100) > zzz}.to_sql.should == "((x + 100) > 300)"
324
-
325
- proc {(:x + :y * 100) > zzz}.to_sql.should == "((x + (y * 100)) > 300)"
326
-
327
- proc {:units * :price}.to_sql.should == "(units * price)"
328
- end
329
-
330
- specify "should support | operator" do
331
- proc {(:x | 1) > 0}.to_sql.should == "(x[1] > 0)"
332
- proc {10 | 1}.to_sql.should == 11
333
- end
334
-
335
- specify "should support globals" do
336
- $aaaa_zzzz = 400
337
- proc {:x > $aaaa_zzzz}.to_sql.should == "(x > 400)"
338
- end
339
-
340
- specify "should support Regexp macros" do
341
- "abc" =~ /(ab)/
342
- proc {:x == $1}.to_sql.should == "(x = 'ab')"
343
- end
344
-
345
- specify "should evaluate expression not referring to symbols or literal strings." do
346
- proc {:x > 2 * 3}.to_sql.should == "(x > 6)"
347
- y = 3
348
- proc {:x > y * 4}.to_sql.should == "(x > 12)"
349
-
350
- proc {:AVG[:x] > 4}.to_sql.should == "(AVG(x) > 4)"
351
-
352
- proc {:AVG[:x] > 4}.to_sql.should == "(AVG(x) > 4)"
353
-
354
- proc {:y == (1 > 2)}.to_sql.should == "(y = 'f')"
355
- end
356
-
357
- specify "should support ternary operator" do
358
- y = true
359
- proc {:x > (y ? 1 : 2)}.to_sql.should == "(x > 1)"
360
-
361
- proc {((1 > 2) ? :x : :y) > 3}.to_sql.should == "(y > 3)"
362
- end
363
-
364
- specify "should support strings with embedded Ruby code in them and literalize them" do
365
- proc {:n == "#{1+2}"}.to_sql.should == "(n = '3')"
366
-
367
- y = "12'34"
368
-
369
- proc {:x > "#{y}"}.to_sql.should == "(x > '12''34')"
370
- end
371
-
372
- specify "should support format strings and literalize the result" do
373
- prod = 1
374
- proc {:x == "abc%d" % prod}.to_sql.should == "(x = 'abc1')"
375
-
376
- proc {:x == ("%d" % prod).lit}.to_sql.should == "(x = 1)"
377
- end
378
- end
379
-
380
- context "Proc#to_sql stock" do
381
- specify "should not support regexps" do
382
- db = Sequel::Database.new
383
- ds = db[:items]
384
-
385
- p = proc {:x =~ /abc/}
386
- proc {ds.proc_to_sql(p)}.should raise_error(Sequel::Error)
387
- end
388
- end
389
-
data/spec/spec.opts DELETED
@@ -1,5 +0,0 @@
1
- --colour
2
- --backtrace
3
- --format
4
- specdoc
5
- --diff
data/spec/spec_helper.rb DELETED
@@ -1,44 +0,0 @@
1
- require 'rubygems'
2
- require File.join(File.dirname(__FILE__), "../lib/sequel")
3
-
4
- class MockDataset < Sequel::Dataset
5
- def insert(*args)
6
- @db.execute insert_sql(*args)
7
- end
8
-
9
- def update(*args)
10
- @db.execute update_sql(*args)
11
- end
12
-
13
- def fetch_rows(sql)
14
- @db.execute(sql)
15
- yield({:id => 1, :x => 1})
16
- end
17
- end
18
-
19
- class MockDatabase < Sequel::Database
20
- attr_reader :sqls
21
-
22
- def execute(sql)
23
- @sqls ||= []
24
- @sqls << sql
25
- end
26
-
27
- def reset
28
- @sqls = []
29
- end
30
-
31
- def transaction; yield; end
32
-
33
- def dataset; MockDataset.new(self); end
34
- end
35
-
36
- class SchemaDummyDatabase < Sequel::Database
37
- attr_reader :sqls
38
-
39
- def execute(sql)
40
- @sqls ||= []
41
- @sqls << sql
42
- end
43
- end
44
-