sequel 0.5.0.2 → 1.0

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 (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
-