sequel 2.12.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/CHANGELOG +62 -0
  2. data/README.rdoc +3 -3
  3. data/Rakefile +7 -0
  4. data/doc/advanced_associations.rdoc +44 -0
  5. data/doc/release_notes/3.0.0.txt +221 -0
  6. data/lib/sequel/adapters/amalgalite.rb +208 -0
  7. data/lib/sequel/adapters/db2.rb +3 -0
  8. data/lib/sequel/adapters/dbi.rb +9 -0
  9. data/lib/sequel/adapters/do.rb +0 -4
  10. data/lib/sequel/adapters/firebird.rb +16 -18
  11. data/lib/sequel/adapters/informix.rb +5 -3
  12. data/lib/sequel/adapters/jdbc.rb +24 -20
  13. data/lib/sequel/adapters/jdbc/h2.rb +15 -4
  14. data/lib/sequel/adapters/mysql.rb +4 -8
  15. data/lib/sequel/adapters/odbc.rb +0 -4
  16. data/lib/sequel/adapters/oracle.rb +0 -4
  17. data/lib/sequel/adapters/shared/mssql.rb +16 -5
  18. data/lib/sequel/adapters/shared/mysql.rb +87 -86
  19. data/lib/sequel/adapters/shared/oracle.rb +92 -3
  20. data/lib/sequel/adapters/shared/postgres.rb +85 -29
  21. data/lib/sequel/adapters/shared/progress.rb +8 -3
  22. data/lib/sequel/adapters/shared/sqlite.rb +53 -23
  23. data/lib/sequel/adapters/sqlite.rb +4 -7
  24. data/lib/sequel/adapters/utils/unsupported.rb +3 -3
  25. data/lib/sequel/connection_pool.rb +18 -25
  26. data/lib/sequel/core.rb +2 -21
  27. data/lib/sequel/database.rb +60 -44
  28. data/lib/sequel/database/schema_generator.rb +26 -31
  29. data/lib/sequel/database/schema_methods.rb +8 -3
  30. data/lib/sequel/database/schema_sql.rb +114 -28
  31. data/lib/sequel/dataset.rb +14 -41
  32. data/lib/sequel/dataset/convenience.rb +31 -54
  33. data/lib/sequel/dataset/graph.rb +7 -13
  34. data/lib/sequel/dataset/sql.rb +43 -54
  35. data/lib/sequel/extensions/inflector.rb +0 -5
  36. data/lib/sequel/extensions/schema_dumper.rb +238 -0
  37. data/lib/sequel/metaprogramming.rb +0 -20
  38. data/lib/sequel/model.rb +1 -2
  39. data/lib/sequel/model/base.rb +18 -16
  40. data/lib/sequel/model/inflections.rb +6 -9
  41. data/lib/sequel/plugins/caching.rb +0 -6
  42. data/lib/sequel/plugins/hook_class_methods.rb +1 -1
  43. data/lib/sequel/sql.rb +2 -0
  44. data/lib/sequel/version.rb +2 -2
  45. data/spec/adapters/firebird_spec.rb +35 -8
  46. data/spec/adapters/mysql_spec.rb +173 -266
  47. data/spec/adapters/oracle_spec.rb +13 -0
  48. data/spec/adapters/postgres_spec.rb +127 -227
  49. data/spec/adapters/sqlite_spec.rb +13 -171
  50. data/spec/core/connection_pool_spec.rb +15 -4
  51. data/spec/core/core_sql_spec.rb +14 -170
  52. data/spec/core/database_spec.rb +50 -132
  53. data/spec/core/dataset_spec.rb +47 -930
  54. data/spec/core/expression_filters_spec.rb +12 -0
  55. data/spec/core/schema_generator_spec.rb +37 -45
  56. data/spec/core/schema_spec.rb +26 -16
  57. data/spec/core/spec_helper.rb +0 -25
  58. data/spec/extensions/inflector_spec.rb +0 -3
  59. data/spec/extensions/schema_dumper_spec.rb +292 -0
  60. data/spec/extensions/serialization_spec.rb +9 -0
  61. data/spec/extensions/single_table_inheritance_spec.rb +6 -1
  62. data/spec/extensions/spec_helper.rb +1 -3
  63. data/spec/extensions/validation_helpers_spec.rb +4 -4
  64. data/spec/integration/database_test.rb +18 -0
  65. data/spec/integration/dataset_test.rb +112 -1
  66. data/spec/integration/eager_loader_test.rb +70 -9
  67. data/spec/integration/prepared_statement_test.rb +2 -2
  68. data/spec/integration/schema_test.rb +76 -27
  69. data/spec/integration/spec_helper.rb +0 -14
  70. data/spec/integration/transaction_test.rb +27 -0
  71. data/spec/model/associations_spec.rb +0 -36
  72. data/spec/model/base_spec.rb +18 -123
  73. data/spec/model/hooks_spec.rb +2 -235
  74. data/spec/model/inflector_spec.rb +15 -115
  75. data/spec/model/model_spec.rb +0 -120
  76. data/spec/model/plugins_spec.rb +0 -70
  77. data/spec/model/record_spec.rb +35 -93
  78. data/spec/model/spec_helper.rb +0 -27
  79. data/spec/model/validations_spec.rb +0 -931
  80. metadata +9 -14
  81. data/lib/sequel/deprecated.rb +0 -593
  82. data/lib/sequel/deprecated_migration.rb +0 -91
  83. data/lib/sequel/model/deprecated.rb +0 -204
  84. data/lib/sequel/model/deprecated_hooks.rb +0 -103
  85. data/lib/sequel/model/deprecated_inflector.rb +0 -335
  86. data/lib/sequel/model/deprecated_validations.rb +0 -388
  87. data/spec/core/core_ext_spec.rb +0 -156
  88. data/spec/core/migration_spec.rb +0 -263
  89. data/spec/core/pretty_table_spec.rb +0 -58
  90. data/spec/model/caching_spec.rb +0 -217
  91. data/spec/model/schema_spec.rb +0 -92
@@ -67,70 +67,6 @@ context "An SQLite database" do
67
67
  proc {@db.temp_store = :invalid}.should raise_error(Sequel::Error)
68
68
  end
69
69
 
70
- specify "should be able to execute transactions" do
71
- @db.transaction do
72
- @db.create_table!(:t) {text :name}
73
- end
74
-
75
- @db.tables.should include(:t)
76
-
77
- proc {@db.transaction do
78
- @db.create_table!(:u) {text :name}
79
- raise ArgumentError
80
- end}.should raise_error(ArgumentError)
81
- # no commit
82
- @db.tables.should_not include(:u)
83
-
84
- proc {@db.transaction do
85
- @db.create_table!(:v) {text :name}
86
- raise Sequel::Rollback
87
- end}.should_not raise_error
88
- # no commit
89
- @db.tables.should_not include(:r)
90
- end
91
-
92
- specify "should support nested transactions" do
93
- @db.transaction do
94
- @db.transaction do
95
- @db.create_table!(:t) {text :name}
96
- end
97
- end
98
-
99
- @db.tables.should include(:t)
100
-
101
- proc {@db.transaction do
102
- @db.create_table!(:v) {text :name}
103
- @db.transaction do
104
- raise Sequel::Rollback # should roll back the top-level transaction
105
- end
106
- end}.should_not raise_error
107
- # no commit
108
- @db.tables.should_not include(:v)
109
- end
110
-
111
- specify "should handle returning inside of transaction by committing" do
112
- @db.create_table!(:items2){text :name}
113
- def @db.ret_commit
114
- transaction do
115
- self[:items2] << {:name => 'abc'}
116
- return
117
- self[:items2] << {:name => 'd'}
118
- end
119
- end
120
- @db[:items2].count.should == 0
121
- @db.ret_commit
122
- @db[:items2].count.should == 1
123
- @db.ret_commit
124
- @db[:items2].count.should == 2
125
- proc do
126
- @db.transaction do
127
- raise Interrupt, 'asdf'
128
- end
129
- end.should raise_error(Interrupt)
130
-
131
- @db[:items2].count.should == 2
132
- end
133
-
134
70
  specify "should support timestamps and datetimes and respect datetime_class" do
135
71
  @db.create_table!(:time){timestamp :t; datetime :d}
136
72
  t1 = Time.at(1)
@@ -156,15 +92,6 @@ context "An SQLite database" do
156
92
  ]
157
93
  end
158
94
 
159
- specify "should catch invalid SQL errors and raise them as Error" do
160
- proc {@db.execute 'blah blah'}.should raise_error(Sequel::Error)
161
- proc {@db.execute_insert 'blah blah'}.should raise_error(Sequel::Error)
162
- end
163
-
164
- specify "should not swallow non-SQLite based exceptions" do
165
- proc {@db.pool.hold{raise Interrupt, "test"}}.should raise_error(Interrupt)
166
- end
167
-
168
95
  specify "should correctly parse the schema" do
169
96
  @db.create_table!(:time2) {timestamp :t}
170
97
  @db.schema(:time2, :reload=>true).should == [[:t, {:type=>:datetime, :allow_null=>true, :default=>nil, :db_type=>"timestamp", :primary_key=>false}]]
@@ -173,61 +100,9 @@ end
173
100
 
174
101
  context "An SQLite dataset" do
175
102
  before do
176
- SQLITE_DB.create_table! :items do
177
- integer :id, :primary_key => true, :auto_increment => true
178
- text :name
179
- float :value
180
- end
181
103
  @d = SQLITE_DB[:items]
182
- @d.delete # remove all records
183
- end
184
-
185
- specify "should return the correct records" do
186
- @d.to_a.should == []
187
- @d << {:name => 'abc', :value => 1.23}
188
- @d << {:name => 'abc', :value => 4.56}
189
- @d << {:name => 'def', :value => 7.89}
190
- @d.select(:name, :value).to_a.sort_by {|h| h[:value]}.should == [
191
- {:name => 'abc', :value => 1.23},
192
- {:name => 'abc', :value => 4.56},
193
- {:name => 'def', :value => 7.89}
194
- ]
195
- end
196
-
197
- specify "should return the correct record count" do
198
- @d.count.should == 0
199
- @d << {:name => 'abc', :value => 1.23}
200
- @d << {:name => 'abc', :value => 4.56}
201
- @d << {:name => 'def', :value => 7.89}
202
- @d.count.should == 3
203
- end
204
-
205
- specify "should return the last inserted id when inserting records" do
206
- id = @d << {:name => 'abc', :value => 1.23}
207
- id.should == @d.first[:id]
208
104
  end
209
105
 
210
- specify "should update records correctly" do
211
- @d << {:name => 'abc', :value => 1.23}
212
- @d << {:name => 'abc', :value => 4.56}
213
- @d << {:name => 'def', :value => 7.89}
214
- @d.filter(:name => 'abc').update(:value => 5.3)
215
-
216
- # the third record should stay the same
217
- @d[:name => 'def'][:value].should == 7.89
218
- @d.filter(:value => 5.3).count.should == 2
219
- end
220
-
221
- specify "should delete records correctly" do
222
- @d << {:name => 'abc', :value => 1.23}
223
- @d << {:name => 'abc', :value => 4.56}
224
- @d << {:name => 'def', :value => 7.89}
225
- @d.filter(:name => 'abc').delete
226
-
227
- @d.count.should == 1
228
- @d.first[:name].should == 'def'
229
- end
230
-
231
106
  specify "should handle string pattern matches correctly" do
232
107
  @d.literal(:x.like('a')).should == "(x LIKE 'a')"
233
108
  @d.literal(~:x.like('a')).should == "NOT (x LIKE 'a')"
@@ -283,43 +158,12 @@ context "An SQLite dataset AS clause" do
283
158
  end
284
159
  end
285
160
 
286
- context "An SQLite dataset" do
287
- before do
288
- SQLITE_DB.create_table! :items do
289
- integer :id, :primary_key => true, :auto_increment => true
290
- text :name
291
- float :value
292
- end
293
- @d = SQLITE_DB[:items]
294
- @d.delete # remove all records
295
- @d << {:name => 'abc', :value => 1.23}
296
- @d << {:name => 'def', :value => 4.56}
297
- @d << {:name => 'ghi', :value => 7.89}
298
- end
299
-
300
- specify "should correctly return avg" do
301
- @d.avg(:value).to_s.should == ((1.23 + 4.56 + 7.89) / 3).to_s
302
- end
303
-
304
- specify "should correctly return sum" do
305
- @d.sum(:value).to_s.should == (1.23 + 4.56 + 7.89).to_s
306
- end
307
-
308
- specify "should correctly return max" do
309
- @d.max(:value).to_s.should == 7.89.to_s
310
- end
311
-
312
- specify "should correctly return min" do
313
- @d.min(:value).to_s.should == 1.23.to_s
314
- end
315
- end
316
-
317
161
  context "SQLite::Dataset#delete" do
318
162
  before do
319
163
  SQLITE_DB.create_table! :items do
320
- integer :id, :primary_key => true, :auto_increment => true
321
- text :name
322
- float :value
164
+ primary_key :id
165
+ String :name
166
+ Float :value
323
167
  end
324
168
  @d = SQLITE_DB[:items]
325
169
  @d.delete # remove all records
@@ -349,9 +193,9 @@ end
349
193
  context "SQLite::Dataset#update" do
350
194
  before do
351
195
  SQLITE_DB.create_table! :items do
352
- integer :id, :primary_key => true, :auto_increment => true
353
- text :name
354
- float :value
196
+ primary_key :id
197
+ String :name
198
+ Float :value
355
199
  end
356
200
  @d = SQLITE_DB[:items]
357
201
  @d.delete # remove all records
@@ -372,24 +216,22 @@ end
372
216
  context "SQLite dataset" do
373
217
  before do
374
218
  SQLITE_DB.create_table! :test do
375
- integer :id, :primary_key => true, :auto_increment => true
376
- text :name
377
- float :value
219
+ primary_key :id
220
+ String :name
221
+ Float :value
378
222
  end
379
223
  SQLITE_DB.create_table! :items do
380
- integer :id, :primary_key => true, :auto_increment => true
381
- text :name
382
- float :value
224
+ primary_key :id
225
+ String :name
226
+ Float :value
383
227
  end
384
228
  @d = SQLITE_DB[:items]
385
- @d.delete # remove all records
386
229
  @d << {:name => 'abc', :value => 1.23}
387
230
  @d << {:name => 'def', :value => 4.56}
388
231
  @d << {:name => 'ghi', :value => 7.89}
389
232
  end
390
-
391
233
  after do
392
- SQLITE_DB.drop_table :test
234
+ SQLITE_DB.drop_table(:test, :items)
393
235
  end
394
236
 
395
237
  specify "should be able to insert from a subquery" do
@@ -55,11 +55,22 @@ context "A connection pool handling connections" do
55
55
  @cpool.hold {:block_return}.should == :block_return
56
56
  end
57
57
 
58
+ if RUBY_VERSION < '1.9.0' and (!defined?(RUBY_ENGINE) or RUBY_ENGINE != 'jruby')
59
+ specify "#hold should remove dead threads from the pool if it reaches its max_size" do
60
+ Thread.new{@cpool.hold{Thread.current.exit!}}.join
61
+ @cpool.allocated.keys.map{|t| t.alive?}.should == [false]
62
+
63
+ Thread.new{@cpool.hold{Thread.current.exit!}}.join
64
+ @cpool.allocated.keys.map{|t| t.alive?}.should == [false, false]
65
+
66
+ Thread.new{@cpool.hold{}}.join
67
+ @cpool.allocated.should == {}
68
+ end
69
+ end
70
+
58
71
  specify "#make_new should not make more than max_size connections" do
59
- @cpool.send(:make_new, :default).should == :got_connection
60
- @cpool.send(:make_new, :default).should == :got_connection
61
- @cpool.send(:make_new, :default).should == nil
62
- @cpool.created_count.should == 2
72
+ 50.times{Thread.new{@cpool.hold{sleep 0.01}}}
73
+ @cpool.created_count.should == @max_size
63
74
  end
64
75
 
65
76
  specify ":disconnection_proc option should set the disconnection proc to use" do
@@ -63,50 +63,6 @@ context "Array#sql_array" do
63
63
  end
64
64
  end
65
65
 
66
- context "Array#to_sql" do
67
- deprec_specify "should concatenate multiple lines into a single string" do
68
- "SELECT * \r\nFROM items\r\n WHERE a = 1".split.to_sql. \
69
- should == 'SELECT * FROM items WHERE a = 1'
70
- end
71
-
72
- deprec_specify "should remove superfluous white space and line breaks" do
73
- "\tSELECT * \n FROM items ".split.to_sql. \
74
- should == 'SELECT * FROM items'
75
- end
76
-
77
- deprec_specify "should remove ANSI SQL comments" do
78
- "SELECT * --comment\r\n FROM items\r\n --comment".split.to_sql. \
79
- should == 'SELECT * FROM items'
80
- end
81
-
82
- deprec_specify "should remove C-style comments" do
83
- "SELECT * \r\n /* comment comment\r\n comment\r\n FROM items */\r\n FROM items\r\n--comment".split.to_sql. \
84
- should == 'SELECT * FROM items'
85
- end
86
- end
87
-
88
- context "String#to_sql" do
89
- deprec_specify "should concatenate multiple lines into a single string" do
90
- "SELECT * \r\nFROM items\r\nWHERE a = 1".to_sql. \
91
- should == 'SELECT * FROM items WHERE a = 1'
92
- end
93
-
94
- deprec_specify "should remove superfluous white space and line breaks" do
95
- "\tSELECT * \r\n FROM items ".to_sql. \
96
- should == 'SELECT * FROM items'
97
- end
98
-
99
- deprec_specify "should remove ANSI SQL comments" do
100
- "SELECT * --comment \r\n FROM items\r\n --comment".to_sql. \
101
- should == 'SELECT * FROM items'
102
- end
103
-
104
- deprec_specify "should remove C-style comments" do
105
- "SELECT * \r\n/* comment comment\r\ncomment\r\nFROM items */\r\nFROM items\r\n--comment".to_sql. \
106
- should == 'SELECT * FROM items'
107
- end
108
- end
109
-
110
66
  context "String#lit" do
111
67
  specify "should return an LiteralString object" do
112
68
  'xyz'.lit.should be_a_kind_of(Sequel::LiteralString)
@@ -118,13 +74,6 @@ context "String#lit" do
118
74
  "UPDATE t SET stamp = NOW()"
119
75
  end
120
76
 
121
- deprec_specify "should be aliased as expr" do
122
- 'xyz'.expr.should be_a_kind_of(Sequel::LiteralString)
123
- 'xyz'.expr.to_s.should == 'xyz'
124
- Sequel::Database.new[:t].update_sql(:stamp => "NOW()".expr).should == \
125
- "UPDATE t SET stamp = NOW()"
126
- end
127
-
128
77
  specify "should return a PlaceholderLiteralString object if args are given" do
129
78
  a = 'DISTINCT ?'.lit(:a)
130
79
  a.should be_a_kind_of(Sequel::SQL::PlaceholderLiteralString)
@@ -146,18 +95,6 @@ context "String#to_sequel_blob" do
146
95
  end
147
96
  end
148
97
 
149
- context "String#split_sql" do
150
- deprec_specify "should split a string containing multiple statements" do
151
- "DROP TABLE a; DROP TABLE c".split_sql.should == \
152
- ['DROP TABLE a', 'DROP TABLE c']
153
- end
154
-
155
- deprec_specify "should remove comments from the string" do
156
- "DROP TABLE a;/* DROP TABLE b; DROP TABLE c;*/DROP TABLE d".split_sql.should == \
157
- ['DROP TABLE a', 'DROP TABLE d']
158
- end
159
- end
160
-
161
98
  context "#desc" do
162
99
  before do
163
100
  @ds = Sequel::Dataset.new(nil)
@@ -300,6 +237,10 @@ context "Symbol" do
300
237
  @ds.literal(:xyz.qualify(:abc)).should == '"ABC"."XYZ"'
301
238
  end
302
239
 
240
+ specify "#qualify should work on QualifiedIdentifiers" do
241
+ @ds.literal(:xyz.qualify(:abc).qualify(:def)).should == '"DEF"."ABC"."XYZ"'
242
+ end
243
+
303
244
  specify "should be able to qualify an identifier" do
304
245
  @ds.literal(:xyz.identifier.qualify(:xyz__abc)).should == '"XYZ"."ABC"."XYZ"'
305
246
  end
@@ -365,10 +306,12 @@ context "Symbol" do
365
306
  :abc.cast(:integer).to_s(@ds).should == "CAST(abc AS integer)"
366
307
  end
367
308
 
368
- deprec_specify "should support cast_as method" do
369
- :abc.cast_as(:integer).to_s(@ds).should == "CAST(abc AS integer)"
309
+ specify "should support sql array accesses via sql_subscript" do
310
+ @ds.literal(:abc.sql_subscript(1)).should == "abc[1]"
311
+ @ds.literal(:abc__def.sql_subscript(1)).should == "abc.def[1]"
312
+ @ds.literal(:abc.sql_subscript(1)|2).should == "abc[1, 2]"
370
313
  end
371
-
314
+
372
315
  specify "should support cast_numeric and cast_string" do
373
316
  x = :abc.cast_numeric
374
317
  x.should be_a_kind_of(Sequel::SQL::NumericExpression)
@@ -384,16 +327,16 @@ context "Symbol" do
384
327
 
385
328
  x = :abc.cast_string(:varchar)
386
329
  x.should be_a_kind_of(Sequel::SQL::StringExpression)
387
- x.to_s(@ds).should == "CAST(abc AS varchar)"
330
+ x.to_s(@ds).should == "CAST(abc AS varchar(255))"
388
331
  end
389
332
 
390
333
  specify "should allow database independent types when casting" do
391
334
  m = MockDatabase.new
392
335
  m.instance_eval do
393
- def type_literal_base(column)
394
- return :foo if column[:type] == Integer
395
- return :bar if column[:type] == String
396
- column
336
+ def cast_type_literal(type)
337
+ return :foo if type == Integer
338
+ return :bar if type == String
339
+ type
397
340
  end
398
341
  end
399
342
  @ds2 = Sequel::Dataset.new(m)
@@ -406,110 +349,11 @@ context "Symbol" do
406
349
  :abc.cast_numeric(String).to_s(@ds2).should == "CAST(abc AS bar)"
407
350
  end
408
351
 
409
- deprec_specify "should support subscript access using | operator" do
410
- (:abc|1).to_s(@ds).should == 'abc[1]'
411
- (:abc|[1]).to_s(@ds).should == 'abc[1]'
412
- (:abc|[1, 2]).to_s(@ds).should == 'abc[1, 2]'
413
- (:abc|1|2).to_s(@ds).should == 'abc[1, 2]'
414
- end
415
-
416
352
  specify "should support SQL EXTRACT function via #extract " do
417
353
  :abc.extract(:year).to_s(@ds).should == "extract(year FROM abc)"
418
354
  end
419
355
  end
420
356
 
421
- context "String#to_time" do
422
- deprec_specify "should convert the string into a Time object" do
423
- "2007-07-11".to_time.should == Time.parse("2007-07-11")
424
- "06:30".to_time.should == Time.parse("06:30")
425
- end
426
-
427
- deprec_specify "should raise InvalidValue for an invalid time" do
428
- proc {'0000-00-00'.to_time}.should raise_error(Sequel::InvalidValue)
429
- end
430
- end
431
-
432
- context "String#to_date" do
433
- after do
434
- Sequel.convert_two_digit_years = true
435
- end
436
-
437
- deprec_specify "should convert the string into a Date object" do
438
- "2007-07-11".to_date.should == Date.parse("2007-07-11")
439
- end
440
-
441
- deprec_specify "should convert 2 digit years by default" do
442
- "July 11, 07".to_date.should == Date.parse("2007-07-11")
443
- end
444
-
445
- deprec_specify "should not convert 2 digit years if set not to" do
446
- Sequel.convert_two_digit_years = false
447
- "July 11, 07".to_date.should == Date.parse("0007-07-11")
448
- end
449
-
450
- deprec_specify "should raise InvalidValue for an invalid date" do
451
- proc {'0000-00-00'.to_date}.should raise_error(Sequel::InvalidValue)
452
- end
453
- end
454
-
455
- context "String#to_datetime" do
456
- after do
457
- Sequel.convert_two_digit_years = true
458
- end
459
-
460
- deprec_specify "should convert the string into a DateTime object" do
461
- "2007-07-11 10:11:12a".to_datetime.should == DateTime.parse("2007-07-11 10:11:12a")
462
- end
463
-
464
- deprec_specify "should convert 2 digit years by default" do
465
- "July 11, 07 10:11:12a".to_datetime.should == DateTime.parse("2007-07-11 10:11:12a")
466
- end
467
-
468
- deprec_specify "should not convert 2 digit years if set not to" do
469
- Sequel.convert_two_digit_years = false
470
- "July 11, 07 10:11:12a".to_datetime.should == DateTime.parse("0007-07-11 10:11:12a")
471
- end
472
-
473
- deprec_specify "should raise InvalidValue for an invalid date" do
474
- proc {'0000-00-00'.to_datetime}.should raise_error(Sequel::InvalidValue)
475
- end
476
- end
477
-
478
- context "String#to_sequel_time" do
479
- after do
480
- Sequel.datetime_class = Time
481
- Sequel.convert_two_digit_years = true
482
- end
483
-
484
- deprec_specify "should convert the string into a Time object by default" do
485
- "2007-07-11 10:11:12a".to_sequel_time.class.should == Time
486
- "2007-07-11 10:11:12a".to_sequel_time.should == Time.parse("2007-07-11 10:11:12a")
487
- end
488
-
489
- deprec_specify "should convert the string into a DateTime object if that is set" do
490
- Sequel.datetime_class = DateTime
491
- "2007-07-11 10:11:12a".to_sequel_time.class.should == DateTime
492
- "2007-07-11 10:11:12a".to_sequel_time.should == DateTime.parse("2007-07-11 10:11:12a")
493
- end
494
-
495
- deprec_specify "should convert 2 digit years by default if using DateTime class" do
496
- Sequel.datetime_class = DateTime
497
- "July 11, 07 10:11:12a".to_sequel_time.should == DateTime.parse("2007-07-11 10:11:12a")
498
- end
499
-
500
- deprec_specify "should not convert 2 digit years if set not to when using DateTime class" do
501
- Sequel.datetime_class = DateTime
502
- Sequel.convert_two_digit_years = false
503
- "July 11, 07 10:11:12a".to_sequel_time.should == DateTime.parse("0007-07-11 10:11:12a")
504
- end
505
-
506
- deprec_specify "should raise InvalidValue for an invalid time" do
507
- proc {'0000-00-00'.to_sequel_time}.should raise_error(Sequel::InvalidValue)
508
- Sequel.datetime_class = DateTime
509
- proc {'0000-00-00'.to_sequel_time}.should raise_error(Sequel::InvalidValue)
510
- end
511
- end
512
-
513
357
  context "Sequel::SQL::Function#==" do
514
358
  specify "should be true for functions with the same name and arguments, false otherwise" do
515
359
  a = :date.sql_function(:t)