sequel 4.44.0 → 4.45.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +110 -0
  3. data/README.rdoc +8 -9
  4. data/doc/active_record.rdoc +2 -3
  5. data/doc/model_plugins.rdoc +1 -1
  6. data/doc/opening_databases.rdoc +0 -46
  7. data/doc/release_notes/4.45.0.txt +370 -0
  8. data/lib/sequel/adapters/cubrid.rb +2 -0
  9. data/lib/sequel/adapters/do.rb +2 -0
  10. data/lib/sequel/adapters/jdbc/as400.rb +2 -0
  11. data/lib/sequel/adapters/jdbc/cubrid.rb +2 -0
  12. data/lib/sequel/adapters/jdbc/firebirdsql.rb +2 -0
  13. data/lib/sequel/adapters/jdbc/informix-sqli.rb +2 -0
  14. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +2 -0
  15. data/lib/sequel/adapters/jdbc/mysql.rb +1 -0
  16. data/lib/sequel/adapters/jdbc/postgresql.rb +5 -0
  17. data/lib/sequel/adapters/mysql.rb +1 -0
  18. data/lib/sequel/adapters/mysql2.rb +1 -0
  19. data/lib/sequel/adapters/odbc/oracle.rb +11 -0
  20. data/lib/sequel/adapters/odbc/progress.rb +2 -0
  21. data/lib/sequel/adapters/postgres.rb +0 -2
  22. data/lib/sequel/adapters/shared/cubrid.rb +2 -0
  23. data/lib/sequel/adapters/shared/firebird.rb +2 -0
  24. data/lib/sequel/adapters/shared/informix.rb +2 -0
  25. data/lib/sequel/adapters/shared/mssql.rb +47 -7
  26. data/lib/sequel/adapters/shared/mysql.rb +16 -1
  27. data/lib/sequel/adapters/shared/postgres.rb +9 -1
  28. data/lib/sequel/adapters/shared/progress.rb +2 -0
  29. data/lib/sequel/adapters/shared/sqlanywhere.rb +1 -1
  30. data/lib/sequel/adapters/swift.rb +2 -0
  31. data/lib/sequel/ast_transformer.rb +13 -6
  32. data/lib/sequel/core.rb +13 -16
  33. data/lib/sequel/database/connecting.rb +25 -10
  34. data/lib/sequel/database/dataset.rb +6 -1
  35. data/lib/sequel/database/dataset_defaults.rb +9 -2
  36. data/lib/sequel/database/misc.rb +10 -3
  37. data/lib/sequel/database/schema_methods.rb +4 -0
  38. data/lib/sequel/dataset/mutation.rb +8 -20
  39. data/lib/sequel/dataset/prepared_statements.rb +2 -0
  40. data/lib/sequel/dataset/query.rb +32 -7
  41. data/lib/sequel/dataset/sql.rb +13 -3
  42. data/lib/sequel/deprecated.rb +9 -1
  43. data/lib/sequel/exceptions.rb +37 -8
  44. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +117 -0
  45. data/lib/sequel/extensions/date_arithmetic.rb +1 -0
  46. data/lib/sequel/extensions/identifier_mangling.rb +3 -2
  47. data/lib/sequel/extensions/pg_hstore.rb +1 -5
  48. data/lib/sequel/extensions/schema_dumper.rb +3 -1
  49. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +2 -2
  50. data/lib/sequel/extensions/string_agg.rb +1 -0
  51. data/lib/sequel/model.rb +23 -10
  52. data/lib/sequel/model/associations.rb +17 -5
  53. data/lib/sequel/model/base.rb +115 -62
  54. data/lib/sequel/model/dataset_module.rb +10 -3
  55. data/lib/sequel/model/exceptions.rb +7 -5
  56. data/lib/sequel/plugins/association_pks.rb +13 -1
  57. data/lib/sequel/plugins/association_proxies.rb +8 -1
  58. data/lib/sequel/plugins/before_after_save.rb +1 -0
  59. data/lib/sequel/plugins/class_table_inheritance.rb +7 -3
  60. data/lib/sequel/plugins/columns_updated.rb +42 -0
  61. data/lib/sequel/plugins/composition.rb +10 -5
  62. data/lib/sequel/plugins/error_splitter.rb +1 -1
  63. data/lib/sequel/plugins/hook_class_methods.rb +39 -5
  64. data/lib/sequel/plugins/instance_hooks.rb +58 -5
  65. data/lib/sequel/plugins/lazy_attributes.rb +10 -5
  66. data/lib/sequel/plugins/nested_attributes.rb +10 -5
  67. data/lib/sequel/plugins/prepared_statements.rb +7 -0
  68. data/lib/sequel/plugins/prepared_statements_associations.rb +2 -0
  69. data/lib/sequel/plugins/prepared_statements_with_pk.rb +2 -0
  70. data/lib/sequel/plugins/schema.rb +2 -0
  71. data/lib/sequel/plugins/scissors.rb +2 -0
  72. data/lib/sequel/plugins/serialization.rb +10 -5
  73. data/lib/sequel/plugins/split_values.rb +5 -1
  74. data/lib/sequel/plugins/static_cache.rb +2 -2
  75. data/lib/sequel/plugins/tactical_eager_loading.rb +1 -1
  76. data/lib/sequel/plugins/validation_contexts.rb +49 -0
  77. data/lib/sequel/plugins/validation_helpers.rb +1 -0
  78. data/lib/sequel/sql.rb +1 -1
  79. data/lib/sequel/version.rb +1 -1
  80. data/spec/adapters/mssql_spec.rb +31 -0
  81. data/spec/adapters/mysql_spec.rb +20 -2
  82. data/spec/adapters/postgres_spec.rb +43 -12
  83. data/spec/adapters/spec_helper.rb +5 -8
  84. data/spec/core/database_spec.rb +47 -12
  85. data/spec/core/dataset_mutation_spec.rb +22 -22
  86. data/spec/core/dataset_spec.rb +88 -20
  87. data/spec/core/deprecated_spec.rb +1 -1
  88. data/spec/core/expression_filters_spec.rb +1 -1
  89. data/spec/core/mock_adapter_spec.rb +0 -3
  90. data/spec/core/placeholder_literalizer_spec.rb +1 -1
  91. data/spec/core/schema_spec.rb +8 -1
  92. data/spec/core/spec_helper.rb +6 -1
  93. data/spec/core_extensions_spec.rb +4 -0
  94. data/spec/deprecation_helper.rb +17 -0
  95. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +314 -0
  96. data/spec/extensions/association_pks_spec.rb +61 -13
  97. data/spec/extensions/association_proxies_spec.rb +3 -3
  98. data/spec/extensions/class_table_inheritance_spec.rb +39 -0
  99. data/spec/extensions/columns_updated_spec.rb +35 -0
  100. data/spec/extensions/composition_spec.rb +6 -1
  101. data/spec/extensions/hook_class_methods_spec.rb +114 -26
  102. data/spec/extensions/identifier_mangling_spec.rb +107 -73
  103. data/spec/extensions/instance_hooks_spec.rb +78 -14
  104. data/spec/extensions/lazy_attributes_spec.rb +8 -2
  105. data/spec/extensions/many_through_many_spec.rb +2 -2
  106. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  107. data/spec/extensions/nested_attributes_spec.rb +8 -2
  108. data/spec/extensions/pg_array_spec.rb +18 -4
  109. data/spec/extensions/prepared_statements_associations_spec.rb +48 -39
  110. data/spec/extensions/prepared_statements_with_pk_spec.rb +13 -11
  111. data/spec/extensions/query_spec.rb +1 -1
  112. data/spec/extensions/schema_dumper_spec.rb +34 -6
  113. data/spec/extensions/schema_spec.rb +13 -7
  114. data/spec/extensions/scissors_spec.rb +3 -1
  115. data/spec/extensions/sequel_3_dataset_methods_spec.rb +4 -4
  116. data/spec/extensions/serialization_spec.rb +7 -1
  117. data/spec/extensions/set_overrides_spec.rb +2 -2
  118. data/spec/extensions/shared_caching_spec.rb +19 -15
  119. data/spec/extensions/spec_helper.rb +7 -3
  120. data/spec/extensions/split_values_spec.rb +45 -10
  121. data/spec/extensions/string_agg_spec.rb +2 -2
  122. data/spec/extensions/subset_conditions_spec.rb +3 -3
  123. data/spec/extensions/tactical_eager_loading_spec.rb +1 -1
  124. data/spec/extensions/validation_contexts_spec.rb +31 -0
  125. data/spec/guards_helper.rb +2 -0
  126. data/spec/integration/associations_test.rb +22 -20
  127. data/spec/integration/dataset_test.rb +25 -2
  128. data/spec/integration/model_test.rb +1 -1
  129. data/spec/integration/plugin_test.rb +11 -16
  130. data/spec/integration/prepared_statement_test.rb +40 -32
  131. data/spec/integration/spec_helper.rb +5 -8
  132. data/spec/model/association_reflection_spec.rb +4 -0
  133. data/spec/model/associations_spec.rb +37 -10
  134. data/spec/model/base_spec.rb +6 -0
  135. data/spec/model/hooks_spec.rb +56 -35
  136. data/spec/model/model_spec.rb +21 -5
  137. data/spec/model/record_spec.rb +14 -11
  138. data/spec/model/spec_helper.rb +7 -1
  139. data/spec/sequel_warning.rb +11 -0
  140. metadata +13 -3
@@ -44,13 +44,13 @@ describe "Sequel::Plugins::AssociationProxies" do
44
44
  proxy_block = opts[:proxy_block]
45
45
  cached = opts[:instance].associations[opts[:reflection][:name]]
46
46
  is_size = opts[:method] == :size
47
- is_size && !cached && !proxy_arg && !proxy_block
47
+ is_size && !cached && !proxy_arg[:reload] && !proxy_block
48
48
  end
49
49
  @t.size.must_equal 1
50
50
  Item.db.sqls.must_equal ["SELECT count(*) AS count FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE (items_tags.item_id = 1) LIMIT 1"]
51
51
  @i.tags{|ds| ds}.size.must_equal 1
52
52
  Item.db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE (items_tags.item_id = 1)"]
53
- @i.tags(true).size.must_equal 1
53
+ @i.tags(:reload=>true).size.must_equal 1
54
54
  Item.db.sqls.must_equal ["SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE (items_tags.item_id = 1)"]
55
55
  @t.size.must_equal 1
56
56
  Item.db.sqls.must_equal []
@@ -61,7 +61,7 @@ describe "Sequel::Plugins::AssociationProxies" do
61
61
  Item.db.sqls.length.must_equal 1
62
62
  @t.select{|x| false}.must_equal []
63
63
  Item.db.sqls.length.must_equal 0
64
- @i.tags(true).select{|x| false}.must_equal []
64
+ @i.tags(:reload=>true).select{|x| false}.must_equal []
65
65
  Item.db.sqls.length.must_equal 1
66
66
  @t.filter(:a=>1).sql.must_equal "SELECT tags.* FROM tags INNER JOIN items_tags ON (items_tags.tag_id = tags.id) WHERE ((items_tags.item_id = 1) AND (a = 1))"
67
67
  Item.db.sqls.length.must_equal 0
@@ -457,3 +457,42 @@ describe "class_table_inheritance plugin without sti_key" do
457
457
  @db.sqls.must_equal ['SELECT employees.id, employees.name, staff.manager_id FROM employees INNER JOIN staff ON (staff.id = employees.id) WHERE (staff.manager_id = 3)']
458
458
  end
459
459
  end
460
+
461
+ describe "class_table_inheritance plugin with duplicate columns" do
462
+ before do
463
+ @db = Sequel.mock(:autoid=>proc{|sql| 1})
464
+ def @db.supports_schema_parsing?() true end
465
+ def @db.schema(table, opts={})
466
+ {:employees=>[[:id, {:primary_key=>true, :type=>:integer}], [:name, {:type=>:string}], [:kind, {:type=>:string}]],
467
+ :managers=>[[:id, {:type=>:integer}], [:name, {:type=>:string}]],
468
+ }[table.is_a?(Sequel::Dataset) ? table.first_source_table : table]
469
+ end
470
+ @db.extend_datasets do
471
+ def columns
472
+ {[:employees]=>[:id, :name, :kind],
473
+ [:managers]=>[:id, :name],
474
+ }[opts[:from] + (opts[:join] || []).map{|x| x.table}]
475
+ end
476
+ end
477
+ class ::Employee < Sequel::Model(@db)
478
+ def _save_refresh; @values[:id] = 1 end
479
+ def self.columns
480
+ dataset.columns
481
+ end
482
+ plugin :class_table_inheritance, :key=>:kind, :table_map=>{:Staff=>:staff}
483
+ end
484
+ deprecated do
485
+ class ::Manager < Employee; end
486
+ end
487
+ @ds = Employee.dataset
488
+ @db.sqls
489
+ end
490
+ after do
491
+ Object.send(:remove_const, :Manager)
492
+ Object.send(:remove_const, :Employee)
493
+ end
494
+
495
+ it "should select names from both tables" do
496
+ Manager.dataset.sql.must_equal 'SELECT employees.id, employees.name, employees.kind, managers.name FROM employees INNER JOIN managers ON (managers.id = employees.id)'
497
+ end
498
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
+
3
+ describe "Sequel::Plugins::ColumnsUpdated" do
4
+ before do
5
+ @c = Class.new(Sequel::Model(DB[:items].with_autoid(13)))
6
+ @c.columns :id, :x, :y
7
+ @c.plugin :columns_updated
8
+ end
9
+
10
+ it "should make hash used for updating available in columns_updated until after hooks finish running" do
11
+ res = nil
12
+ @c.send(:define_method, :after_save){res = columns_updated}
13
+ o = @c.new(:x => 1, :y => nil)
14
+ o[:x] = 2
15
+ o.save
16
+ res.must_be_nil
17
+ o.after_save
18
+ res.must_be_nil
19
+
20
+ o = @c.load(:id => 23,:x => 1, :y => nil)
21
+ o[:x] = 2
22
+ o.save
23
+ res.must_equal(:x=>2, :y=>nil)
24
+ o.after_save
25
+ res.must_be_nil
26
+
27
+ o = @c.load(:id => 23,:x => 2, :y => nil)
28
+ o[:x] = 2
29
+ o[:y] = 22
30
+ o.save(:columns=>:x)
31
+ res.must_equal(:x=>2)
32
+ o.after_save
33
+ res.must_be_nil
34
+ end
35
+ end
@@ -9,6 +9,12 @@ describe "Composition plugin" do
9
9
  DB.reset
10
10
  end
11
11
 
12
+ deprecated "should allow access to composition_module" do
13
+ @c.composition_module.must_be_kind_of Module
14
+ @c.composition_module = v = Module.new
15
+ @c.composition_module.must_equal v
16
+ end
17
+
12
18
  it ".composition should add compositions" do
13
19
  @o.wont_respond_to(:date)
14
20
  @c.composition :date, :mapping=>[:year, :month, :day]
@@ -247,6 +253,5 @@ describe "Composition plugin" do
247
253
  @c.freeze
248
254
  @c.compositions.frozen?.must_equal true
249
255
  @c.compositions[:date].frozen?.must_equal true
250
- @c.composition_module.frozen?.must_equal true
251
256
  end
252
257
  end
@@ -140,7 +140,7 @@ describe Sequel::Model, "hook_class_methods plugin" do
140
140
  adds.must_equal ['456']
141
141
  end
142
142
 
143
- it "should stop processing if a before hook returns false" do
143
+ deprecated "should stop processing if a before hook returns false" do
144
144
  flag = true
145
145
  adds = []
146
146
 
@@ -172,6 +172,40 @@ describe Sequel::Model, "hook_class_methods plugin" do
172
172
  b.new.before_save
173
173
  adds.must_equal ['mau', 'blah']
174
174
  end
175
+
176
+ it "should stop processing if a before hook calls cancel_action" do
177
+ flag = true
178
+ adds = []
179
+
180
+ a = model_class.call Sequel::Model(:items) do
181
+ before_save{adds << 'cruel'; cancel_action if flag == false}
182
+ before_save{adds << 'blah'; cancel_action if flag == false}
183
+ end
184
+
185
+ a.raise_on_save_failure = false
186
+ a.new.save
187
+ adds.must_equal ['blah', 'cruel']
188
+
189
+ # chain should not break on nil
190
+ adds = []
191
+ flag = nil
192
+ a.new.save
193
+ adds.must_equal ['blah', 'cruel']
194
+
195
+ adds = []
196
+ flag = false
197
+ a.new.save
198
+ adds.must_equal ['blah']
199
+
200
+ b = Class.new(a)
201
+ b.class_eval do
202
+ before_save{adds << 'mau'}
203
+ end
204
+
205
+ adds = []
206
+ b.new.save
207
+ adds.must_equal ['mau', 'blah']
208
+ end
175
209
  end
176
210
 
177
211
  describe "Model#before_create && Model#after_create" do
@@ -192,7 +226,7 @@ describe "Model#before_create && Model#after_create" do
192
226
  DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after']
193
227
  end
194
228
 
195
- it ".create should cancel the save and raise an error if before_create returns false and raise_on_save_failure is true" do
229
+ deprecated ".create should cancel the save and raise an error if before_create returns false and raise_on_save_failure is true" do
196
230
  @c.before_create{false}
197
231
  proc{@c.create(:x => 2)}.must_raise(Sequel::HookFailed)
198
232
  DB.sqls.must_equal []
@@ -204,7 +238,7 @@ describe "Model#before_create && Model#after_create" do
204
238
  DB.sqls.must_equal []
205
239
  end
206
240
 
207
- it ".create should cancel the save and return nil if before_create returns false and raise_on_save_failure is false" do
241
+ deprecated ".create should cancel the save and return nil if before_create returns false and raise_on_save_failure is false" do
208
242
  @c.before_create{false}
209
243
  @c.raise_on_save_failure = false
210
244
  @c.create(:x => 2).must_be_nil
@@ -235,18 +269,31 @@ describe "Model#before_update && Model#after_update" do
235
269
  DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
236
270
  end
237
271
 
238
- it "#save should cancel the save and raise an error if before_update returns false and raise_on_save_failure is true" do
272
+ deprecated "#save should cancel the save and raise an error if before_update returns false and raise_on_save_failure is true" do
239
273
  @c.before_update{false}
240
274
  proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
241
275
  DB.sqls.must_equal []
242
276
  end
243
277
 
244
- it "#save should cancel the save and return nil if before_update returns false and raise_on_save_failure is false" do
278
+ it "#save should cancel the save and raise an error if before_update calls cancel_action and raise_on_save_failure is true" do
279
+ @c.before_update{cancel_action}
280
+ proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
281
+ DB.sqls.must_equal []
282
+ end
283
+
284
+ deprecated "#save should cancel the save and return nil if before_update returns false and raise_on_save_failure is false" do
245
285
  @c.before_update{false}
246
286
  @c.raise_on_save_failure = false
247
287
  @c.load(:id => 2233).save.must_be_nil
248
288
  DB.sqls.must_equal []
249
289
  end
290
+
291
+ it "#save should cancel the save and return nil if before_update calls cancel_action and raise_on_save_failure is false" do
292
+ @c.before_update{cancel_action}
293
+ @c.raise_on_save_failure = false
294
+ @c.load(:id => 2233).save.must_be_nil
295
+ DB.sqls.must_equal []
296
+ end
250
297
  end
251
298
 
252
299
  describe "Model#before_save && Model#after_save" do
@@ -273,18 +320,31 @@ describe "Model#before_save && Model#after_save" do
273
320
  DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after']
274
321
  end
275
322
 
276
- it "#save should cancel the save and raise an error if before_save returns false and raise_on_save_failure is true" do
323
+ deprecated "#save should cancel the save and raise an error if before_save returns false and raise_on_save_failure is true" do
277
324
  @c.before_save{false}
278
325
  proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
279
326
  DB.sqls.must_equal []
280
327
  end
281
328
 
282
- it "#save should cancel the save and return nil if before_save returns false and raise_on_save_failure is false" do
329
+ it "#save should cancel the save and raise an error if before_save calls cancel_action and raise_on_save_failure is true" do
330
+ @c.before_save{cancel_action}
331
+ proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
332
+ DB.sqls.must_equal []
333
+ end
334
+
335
+ deprecated "#save should cancel the save and return nil if before_save returns false and raise_on_save_failure is false" do
283
336
  @c.before_save{false}
284
337
  @c.raise_on_save_failure = false
285
338
  @c.load(:id => 2233).save.must_be_nil
286
339
  DB.sqls.must_equal []
287
340
  end
341
+
342
+ it "#save should cancel the save and return nil if before_save calls cancel_action and raise_on_save_failure is false" do
343
+ @c.before_save{cancel_action}
344
+ @c.raise_on_save_failure = false
345
+ @c.load(:id => 2233).save.must_be_nil
346
+ DB.sqls.must_equal []
347
+ end
288
348
  end
289
349
 
290
350
  describe "Model#before_destroy && Model#after_destroy" do
@@ -303,18 +363,31 @@ describe "Model#before_destroy && Model#after_destroy" do
303
363
  DB.sqls.must_equal ['BLAH before', "DELETE FROM items WHERE id = 2233", 'BLAH after']
304
364
  end
305
365
 
306
- it "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_save_failure is true" do
366
+ deprecated "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_save_failure is true" do
307
367
  @c.before_destroy{false}
308
368
  proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
309
369
  DB.sqls.must_equal []
310
370
  end
311
371
 
312
- it "#destroy should cancel the destroy and return nil if before_destroy returns false and raise_on_save_failure is false" do
372
+ it "#destroy should cancel the destroy and raise an error if before_destroy calls cancel_action and raise_on_save_failure is true" do
373
+ @c.before_destroy{cancel_action}
374
+ proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
375
+ DB.sqls.must_equal []
376
+ end
377
+
378
+ deprecated "#destroy should cancel the destroy and return nil if before_destroy returns false and raise_on_save_failure is false" do
313
379
  @c.before_destroy{false}
314
380
  @c.raise_on_save_failure = false
315
381
  @c.load(:id => 2233).destroy.must_be_nil
316
382
  DB.sqls.must_equal []
317
383
  end
384
+
385
+ it "#destroy should cancel the destroy and return nil if before_destroy calls cancel_action and raise_on_save_failure is false" do
386
+ @c.before_destroy{cancel_action}
387
+ @c.raise_on_save_failure = false
388
+ @c.load(:id => 2233).destroy.must_be_nil
389
+ DB.sqls.must_equal []
390
+ end
318
391
  end
319
392
 
320
393
  describe "Model#before_validation && Model#after_validation" do
@@ -357,18 +430,31 @@ describe "Model#before_validation && Model#after_validation" do
357
430
  DB.sqls.must_equal ['BLAH before', 'BLAH after']
358
431
  end
359
432
 
360
- it "#save should cancel the save and raise an error if before_validation returns false and raise_on_save_failure is true" do
433
+ deprecated "#save should cancel the save and raise an error if before_validation returns false and raise_on_save_failure is true" do
361
434
  @c.before_validation{false}
362
435
  proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
363
436
  DB.sqls.must_equal []
364
437
  end
365
438
 
366
- it "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
439
+ it "#save should cancel the save and raise an error if before_validation calls cancel_action and raise_on_save_failure is true" do
440
+ @c.before_validation{cancel_action}
441
+ proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
442
+ DB.sqls.must_equal []
443
+ end
444
+
445
+ deprecated "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
367
446
  @c.before_validation{false}
368
447
  @c.raise_on_save_failure = false
369
448
  @c.load(:id => 2233).save.must_be_nil
370
449
  DB.sqls.must_equal []
371
450
  end
451
+
452
+ it "#save should cancel the save and return nil if before_validation calls cancel_action and raise_on_save_failure is false" do
453
+ @c.before_validation{cancel_action}
454
+ @c.raise_on_save_failure = false
455
+ @c.load(:id => 2233).save.must_be_nil
456
+ DB.sqls.must_equal []
457
+ end
372
458
  end
373
459
 
374
460
  describe "Model transaction hooks" do
@@ -383,7 +469,7 @@ describe "Model transaction hooks" do
383
469
  end
384
470
  end
385
471
 
386
- it "should call after_commit or after_rollback depending on whether the transaction commits or rolls back" do
472
+ deprecated "should call after_commit or after_rollback depending on whether the transaction commits or rolls back" do
387
473
  @c.after_commit{DB << 'AC'}
388
474
  @c.after_rollback{DB << 'AR'}
389
475
  m = @c.load(:id => 2233, :x=>123)
@@ -400,7 +486,7 @@ describe "Model transaction hooks" do
400
486
  end
401
487
  end
402
488
 
403
- it "should call after_destroy_commit or after_destroy_rollback depending on whether the transaction commits or rolls back" do
489
+ deprecated "should call after_destroy_commit or after_destroy_rollback depending on whether the transaction commits or rolls back" do
404
490
  @c.after_destroy_commit {DB << 'ADC'}
405
491
  @c.after_destroy_rollback{DB << 'ADR'}
406
492
 
@@ -439,33 +525,35 @@ end
439
525
 
440
526
  describe "Model#add_hook_type" do
441
527
  before do
442
- class ::Foo < Sequel::Model(:items)
443
- plugin :hook_class_methods
444
- add_hook_type :before_bar, :after_bar
445
-
446
- def bar
447
- return :b if before_bar == false
448
- return :a if after_bar == false
449
- true
528
+ deprecated do
529
+ class ::Foo < Sequel::Model(:items)
530
+ plugin :hook_class_methods
531
+ add_hook_type :before_bar, :after_bar
532
+
533
+ def bar
534
+ return :b if before_bar == false
535
+ return :a if after_bar == false
536
+ true
537
+ end
450
538
  end
539
+ @f = Class.new(Foo)
451
540
  end
452
- @f = Class.new(Foo)
453
541
  end
454
542
  after do
455
543
  Object.send(:remove_const, :Foo)
456
544
  end
457
545
 
458
- it "should have before_bar and after_bar class methods" do
546
+ deprecated "should have before_bar and after_bar class methods" do
459
547
  @f.must_respond_to(:before_bar)
460
548
  @f.must_respond_to(:before_bar)
461
549
  end
462
550
 
463
- it "should have before_bar and after_bar instance methods" do
551
+ deprecated "should have before_bar and after_bar instance methods" do
464
552
  @f.new.must_respond_to(:before_bar)
465
553
  @f.new.must_respond_to(:before_bar)
466
554
  end
467
555
 
468
- it "it should return true for bar when before_bar and after_bar hooks are returing true" do
556
+ deprecated "it should return true for bar when before_bar and after_bar hooks are returing true" do
469
557
  a = 1
470
558
  @f.before_bar { a += 1}
471
559
  @f.new.bar.must_equal true
@@ -475,7 +563,7 @@ describe "Model#add_hook_type" do
475
563
  a.must_equal 6
476
564
  end
477
565
 
478
- it "it should return nil for bar when before_bar and after_bar hooks are returing false" do
566
+ deprecated "it should return nil for bar when before_bar and after_bar hooks are returing false" do
479
567
  @f.new.bar.must_equal true
480
568
  @f.after_bar { false }
481
569
  @f.new.bar.must_equal :a
@@ -2,117 +2,149 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
2
 
3
3
  describe "identifier_mangling extension" do
4
4
  after do
5
- Sequel.quote_identifiers = false
6
- Sequel.identifier_input_method = nil
7
- Sequel.identifier_output_method = nil
5
+ deprecated do
6
+ Sequel.quote_identifiers = false
7
+ Sequel.identifier_input_method = nil
8
+ Sequel.identifier_output_method = nil
9
+ end
8
10
  end
9
11
 
10
12
  it "should respect the :quote_identifiers option" do
11
- db = Sequel::Database.new(:quote_identifiers=>false, :identifier_mangling=>true)
13
+ db = Sequel::Database.new(:quote_identifiers=>false).extension(:identifier_mangling)
12
14
  db.quote_identifiers?.must_equal false
13
- db = Sequel::Database.new(:quote_identifiers=>true, :identifier_mangling=>true)
15
+ db = Sequel::Database.new(:quote_identifiers=>true).extension(:identifier_mangling)
14
16
  db.quote_identifiers?.must_equal true
15
17
  end
16
18
 
17
19
  it "should respect the :quote_identifiers setting" do
18
- db = Sequel::Database.new(:identifier_mangling=>true)
20
+ db = Sequel::Database.new.extension(:identifier_mangling)
19
21
  db.quote_identifiers?.must_equal false
20
22
  db.quote_identifiers = true
21
23
  db.quote_identifiers?.must_equal true
22
24
  end
23
25
 
24
26
  it "should upcase on input and downcase on output by default" do
25
- db = Sequel::Database.new(:identifier_mangling=>true)
27
+ db = Sequel::Database.new.extension(:identifier_mangling)
26
28
  db.send(:identifier_input_method_default).must_equal :upcase
27
29
  db.send(:identifier_output_method_default).must_equal :downcase
28
30
  end
29
31
 
30
32
  it "should respect the :identifier_input_method option" do
31
- Sequel.identifier_input_method = nil
32
- Sequel::Database.identifier_input_method.must_equal false
33
- db = Sequel::Database.new(:identifier_input_method=>nil, :identifier_mangling=>true)
33
+ db = Sequel::Database.new.extension(:identifier_mangling)
34
34
  db.identifier_input_method.must_be_nil
35
35
  db.identifier_input_method = :downcase
36
36
  db.identifier_input_method.must_equal :downcase
37
- db = Sequel::Database.new(:identifier_input_method=>:upcase, :identifier_mangling=>true)
37
+ db = Sequel::Database.new(:identifier_input_method=>nil).extension(:identifier_mangling)
38
+ db.identifier_input_method.must_be_nil
39
+ db.identifier_input_method = :downcase
40
+ db.identifier_input_method.must_equal :downcase
41
+ db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
38
42
  db.identifier_input_method.must_equal :upcase
39
43
  db.identifier_input_method = nil
40
44
  db.identifier_input_method.must_be_nil
45
+ end
46
+
47
+ deprecated "should default to Sequel.identifier_input_method" do
41
48
  Sequel.identifier_input_method = :downcase
42
49
  Sequel::Database.identifier_input_method.must_equal :downcase
43
- db = Sequel::Database.new(:identifier_input_method=>nil, :identifier_mangling=>true)
50
+ db = Sequel::Database.new.extension(:identifier_mangling)
51
+ db.identifier_input_method.must_equal :downcase
52
+ db.identifier_input_method = :upcase
53
+ db.identifier_input_method.must_equal :upcase
54
+ db = Sequel::Database.new(:identifier_input_method=>nil).extension(:identifier_mangling)
44
55
  db.identifier_input_method.must_be_nil
45
56
  db.identifier_input_method = :upcase
46
57
  db.identifier_input_method.must_equal :upcase
47
- db = Sequel::Database.new(:identifier_input_method=>:upcase, :identifier_mangling=>true)
58
+ db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
48
59
  db.identifier_input_method.must_equal :upcase
49
60
  db.identifier_input_method = nil
50
61
  db.identifier_input_method.must_be_nil
62
+ Sequel.identifier_input_method = nil
63
+ Sequel::Database.identifier_input_method.must_equal false
64
+ db = Sequel::Database.new.extension(:identifier_mangling)
65
+ db.identifier_input_method.must_be_nil
66
+ db.identifier_input_method = :upcase
67
+ db.identifier_input_method.must_equal :upcase
51
68
  end
52
69
 
53
70
  it "should respect the :identifier_output_method option" do
54
- Sequel.identifier_output_method = nil
55
- Sequel::Database.identifier_output_method.must_equal false
56
- db = Sequel::Database.new(:identifier_output_method=>nil, :identifier_mangling=>true)
71
+ db = Sequel::Database.new.extension(:identifier_mangling)
72
+ db.identifier_output_method.must_be_nil
73
+ db.identifier_output_method = :upcase
74
+ db.identifier_output_method.must_equal :upcase
75
+ db = Sequel::Database.new(:identifier_output_method=>nil).extension(:identifier_mangling)
57
76
  db.identifier_output_method.must_be_nil
58
77
  db.identifier_output_method = :downcase
59
78
  db.identifier_output_method.must_equal :downcase
60
- db = Sequel::Database.new(:identifier_output_method=>:upcase, :identifier_mangling=>true)
79
+ db = Sequel::Database.new(:identifier_output_method=>:upcase).extension(:identifier_mangling)
61
80
  db.identifier_output_method.must_equal :upcase
62
81
  db.identifier_output_method = nil
63
82
  db.identifier_output_method.must_be_nil
64
- Sequel.identifier_output_method = :downcase
65
- Sequel::Database.identifier_output_method.must_equal :downcase
66
- db = Sequel::Database.new(:identifier_output_method=>nil, :identifier_mangling=>true)
67
- db.identifier_output_method.must_be_nil
68
- db.identifier_output_method = :upcase
83
+ end
84
+
85
+ deprecated "should default to Sequel.identifier_output_method" do
86
+ Sequel.identifier_output_method = :upcase
87
+ Sequel::Database.identifier_output_method.must_equal :upcase
88
+ db = Sequel::Database.new.extension(:identifier_mangling)
69
89
  db.identifier_output_method.must_equal :upcase
70
- db = Sequel::Database.new(:identifier_output_method=>:upcase, :identifier_mangling=>true)
90
+ db.identifier_output_method = :downcase
91
+ db.identifier_output_method.must_equal :downcase
92
+ db = Sequel::Database.new(:identifier_output_method=>nil).extension(:identifier_mangling)
93
+ db.identifier_output_method.must_be_nil
94
+ db.identifier_output_method = :downcase
95
+ db.identifier_output_method.must_equal :downcase
96
+ db = Sequel::Database.new(:identifier_output_method=>:upcase).extension(:identifier_mangling)
71
97
  db.identifier_output_method.must_equal :upcase
72
98
  db.identifier_output_method = nil
73
99
  db.identifier_output_method.must_be_nil
100
+ Sequel.identifier_output_method = nil
101
+ Sequel::Database.identifier_output_method.must_equal false
102
+ db = Sequel::Database.new.extension(:identifier_mangling)
103
+ db.identifier_output_method.must_be_nil
104
+ db.identifier_output_method = :downcase
105
+ db.identifier_output_method.must_equal :downcase
74
106
  end
75
107
 
76
- it "should use the default Sequel.quote_identifiers value" do
108
+ deprecated "should use the default Sequel.quote_identifiers value" do
77
109
  Sequel.quote_identifiers = true
78
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal true
110
+ Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal true
79
111
  Sequel.quote_identifiers = false
80
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal false
112
+ Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal false
81
113
  Sequel::Database.quote_identifiers = true
82
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal true
114
+ Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal true
83
115
  Sequel::Database.quote_identifiers = false
84
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal false
116
+ Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal false
85
117
  end
86
118
 
87
- it "should use the default Sequel.identifier_input_method value" do
119
+ deprecated "should use the default Sequel.identifier_input_method value" do
88
120
  Sequel.identifier_input_method = :downcase
89
- Sequel::Database.new(:identifier_mangling=>true).identifier_input_method.must_equal :downcase
121
+ Sequel::Database.new.extension(:identifier_mangling).identifier_input_method.must_equal :downcase
90
122
  Sequel.identifier_input_method = :upcase
91
- Sequel::Database.new(:identifier_mangling=>true).identifier_input_method.must_equal :upcase
123
+ Sequel::Database.new.extension(:identifier_mangling).identifier_input_method.must_equal :upcase
92
124
  Sequel::Database.identifier_input_method = :downcase
93
- Sequel::Database.new(:identifier_mangling=>true).identifier_input_method.must_equal :downcase
125
+ Sequel::Database.new.extension(:identifier_mangling).identifier_input_method.must_equal :downcase
94
126
  Sequel::Database.identifier_input_method = :upcase
95
- Sequel::Database.new(:identifier_mangling=>true).identifier_input_method.must_equal :upcase
127
+ Sequel::Database.new.extension(:identifier_mangling).identifier_input_method.must_equal :upcase
96
128
  end
97
129
 
98
- it "should use the default Sequel.identifier_output_method value" do
130
+ deprecated "should use the default Sequel.identifier_output_method value" do
99
131
  Sequel.identifier_output_method = :downcase
100
- Sequel::Database.new(:identifier_mangling=>true).identifier_output_method.must_equal :downcase
132
+ Sequel::Database.new.extension(:identifier_mangling).identifier_output_method.must_equal :downcase
101
133
  Sequel.identifier_output_method = :upcase
102
- Sequel::Database.new(:identifier_mangling=>true).identifier_output_method.must_equal :upcase
134
+ Sequel::Database.new.extension(:identifier_mangling).identifier_output_method.must_equal :upcase
103
135
  Sequel::Database.identifier_output_method = :downcase
104
- Sequel::Database.new(:identifier_mangling=>true).identifier_output_method.must_equal :downcase
136
+ Sequel::Database.new.extension(:identifier_mangling).identifier_output_method.must_equal :downcase
105
137
  Sequel::Database.identifier_output_method = :upcase
106
- Sequel::Database.new(:identifier_mangling=>true).identifier_output_method.must_equal :upcase
138
+ Sequel::Database.new.extension(:identifier_mangling).identifier_output_method.must_equal :upcase
107
139
  end
108
140
 
109
- it "should respect the quote_indentifiers_default method if Sequel.quote_identifiers = nil" do
141
+ deprecated "should respect the quote_indentifiers_default method if Sequel.quote_identifiers = nil" do
110
142
  Sequel.quote_identifiers = nil
111
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal true
143
+ Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal true
112
144
  x = Class.new(Sequel::Database){def quote_identifiers_default; false end}
113
- x.new(:identifier_mangling=>true).quote_identifiers?.must_equal false
145
+ x.new.extension(:identifier_mangling).quote_identifiers?.must_equal false
114
146
  y = Class.new(Sequel::Database){def quote_identifiers_default; true end}
115
- y.new(:identifier_mangling=>true).quote_identifiers?.must_equal true
147
+ y.new.extension(:identifier_mangling).quote_identifiers?.must_equal true
116
148
  end
117
149
 
118
150
  it "should respect the identifier_input_method_default method if Sequel.identifier_input_method is not called" do
@@ -120,9 +152,9 @@ describe "identifier_mangling extension" do
120
152
  @identifier_input_method = nil
121
153
  end
122
154
  x = Class.new(Sequel::Database){def identifier_input_method_default; :downcase end}
123
- x.new(:identifier_mangling=>true).identifier_input_method.must_equal :downcase
155
+ x.new.extension(:identifier_mangling).identifier_input_method.must_equal :downcase
124
156
  y = Class.new(Sequel::Database){def identifier_input_method_default; :camelize end}
125
- y.new(:identifier_mangling=>true).identifier_input_method.must_equal :camelize
157
+ y.new.extension(:identifier_mangling).identifier_input_method.must_equal :camelize
126
158
  end
127
159
 
128
160
  it "should respect the identifier_output_method_default method if Sequel.identifier_output_method is not called" do
@@ -130,15 +162,15 @@ describe "identifier_mangling extension" do
130
162
  @identifier_output_method = nil
131
163
  end
132
164
  x = Class.new(Sequel::Database){def identifier_output_method_default; :upcase end}
133
- x.new(:identifier_mangling=>true).identifier_output_method.must_equal :upcase
165
+ x.new.extension(:identifier_mangling).identifier_output_method.must_equal :upcase
134
166
  y = Class.new(Sequel::Database){def identifier_output_method_default; :underscore end}
135
- y.new(:identifier_mangling=>true).identifier_output_method.must_equal :underscore
167
+ y.new.extension(:identifier_mangling).identifier_output_method.must_equal :underscore
136
168
  end
137
169
  end
138
170
 
139
171
  describe "Database#input_identifier_meth" do
140
172
  it "should be the input_identifer method of a default dataset for this database" do
141
- db = Sequel::Database.new(:identifier_mangling=>true)
173
+ db = Sequel::Database.new.extension(:identifier_mangling)
142
174
  db.send(:input_identifier_meth).call(:a).must_equal 'a'
143
175
  db.identifier_input_method = :upcase
144
176
  db.send(:input_identifier_meth).call(:a).must_equal 'A'
@@ -147,7 +179,7 @@ end
147
179
 
148
180
  describe "Database#output_identifier_meth" do
149
181
  it "should be the output_identifer method of a default dataset for this database" do
150
- db = Sequel::Database.new(:identifier_mangling=>true)
182
+ db = Sequel::Database.new.extension(:identifier_mangling)
151
183
  db.send(:output_identifier_meth).call('A').must_equal :A
152
184
  db.identifier_output_method = :downcase
153
185
  db.send(:output_identifier_meth).call('A').must_equal :a
@@ -156,7 +188,7 @@ end
156
188
 
157
189
  describe "Database#metadata_dataset" do
158
190
  it "should be a dataset with the default settings for identifier_mangling" do
159
- ds = Sequel::Database.new(:identifier_mangling=>true).send(:metadata_dataset)
191
+ ds = Sequel::Database.new.extension(:identifier_mangling).send(:metadata_dataset)
160
192
  ds.literal(:a).must_equal 'A'
161
193
  ds.send(:output_identifier, 'A').must_equal :a
162
194
  end
@@ -164,40 +196,40 @@ end
164
196
 
165
197
  describe "Dataset" do
166
198
  before do
167
- @dataset = Sequel.mock(:identifier_mangling=>true).dataset
199
+ @dataset = Sequel.mock.extension(:identifier_mangling).dataset
168
200
  end
169
201
 
170
202
  it "should get quote_identifiers default from database" do
171
- db = Sequel::Database.new(:quote_identifiers=>true, :identifier_mangling=>true)
203
+ db = Sequel::Database.new(:quote_identifiers=>true).extension(:identifier_mangling)
172
204
  db[:a].quote_identifiers?.must_equal true
173
- db = Sequel::Database.new(:quote_identifiers=>false, :identifier_mangling=>true)
205
+ db = Sequel::Database.new(:quote_identifiers=>false).extension(:identifier_mangling)
174
206
  db[:a].quote_identifiers?.must_equal false
175
207
  end
176
208
 
177
209
  it "should get identifier_input_method default from database" do
178
- db = Sequel::Database.new(:identifier_input_method=>:upcase, :identifier_mangling=>true)
210
+ db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
179
211
  db[:a].identifier_input_method.must_equal :upcase
180
- db = Sequel::Database.new(:identifier_input_method=>:downcase, :identifier_mangling=>true)
212
+ db = Sequel::Database.new(:identifier_input_method=>:downcase).extension(:identifier_mangling)
181
213
  db[:a].identifier_input_method.must_equal :downcase
182
214
  end
183
215
 
184
216
  it "should get identifier_output_method default from database" do
185
- db = Sequel::Database.new(:identifier_output_method=>:upcase, :identifier_mangling=>true)
217
+ db = Sequel::Database.new(:identifier_output_method=>:upcase).extension(:identifier_mangling)
186
218
  db[:a].identifier_output_method.must_equal :upcase
187
- db = Sequel::Database.new(:identifier_output_method=>:downcase, :identifier_mangling=>true)
219
+ db = Sequel::Database.new(:identifier_output_method=>:downcase).extension(:identifier_mangling)
188
220
  db[:a].identifier_output_method.must_equal :downcase
189
221
  end
190
222
 
191
223
  # SEQUEL5: Remove
192
224
  unless Sequel.mock(:identifier_mangling=>true).dataset.frozen?
193
- it "should have quote_identifiers= method which changes literalization of identifiers" do
225
+ deprecated "should have quote_identifiers= method which changes literalization of identifiers" do
194
226
  @dataset.quote_identifiers = true
195
227
  @dataset.literal(:a).must_equal '"a"'
196
228
  @dataset.quote_identifiers = false
197
229
  @dataset.literal(:a).must_equal 'a'
198
230
  end
199
231
 
200
- it "should have identifier_input_method= method which changes literalization of identifiers" do
232
+ deprecated "should have identifier_input_method= method which changes literalization of identifiers" do
201
233
  @dataset.identifier_input_method = :upcase
202
234
  @dataset.literal(:a).must_equal 'A'
203
235
  @dataset.identifier_input_method = :downcase
@@ -206,7 +238,7 @@ describe "Dataset" do
206
238
  @dataset.literal(:at_b).must_equal 'b_ta'
207
239
  end
208
240
 
209
- it "should have identifier_output_method= method which changes identifiers returned from the database" do
241
+ deprecated "should have identifier_output_method= method which changes identifiers returned from the database" do
210
242
  @dataset.send(:output_identifier, "at_b_C").must_equal :at_b_C
211
243
  @dataset.identifier_output_method = :upcase
212
244
  @dataset.send(:output_identifier, "at_b_C").must_equal :AT_B_C
@@ -257,7 +289,7 @@ describe "Frozen Datasets" do
257
289
  @ds = Sequel.mock(:identifier_mangling=>true)[:test].freeze
258
290
  end
259
291
 
260
- it "should raise an error when calling mutation methods" do
292
+ deprecated "should raise an error when calling mutation methods" do
261
293
  proc{@ds.identifier_input_method = :a}.must_raise RuntimeError
262
294
  proc{@ds.identifier_output_method = :a}.must_raise RuntimeError
263
295
  proc{@ds.quote_identifiers = false}.must_raise RuntimeError
@@ -267,17 +299,17 @@ end
267
299
  describe "identifier_mangling extension" do
268
300
  it "should be able to load dialects based on the database name" do
269
301
  begin
270
- qi = class Sequel::Database; @quote_identifiers; end
271
- ii = class Sequel::Database; @identifier_input_method; end
272
- io = class Sequel::Database; @identifier_output_method; end
273
- Sequel.quote_identifiers = nil
274
- class Sequel::Database; @identifier_input_method=nil; end
275
- class Sequel::Database; @identifier_output_method=nil; end
302
+ qi, ii, io = nil
303
+ deprecated do
304
+ qi = class Sequel::Database; @quote_identifiers; end
305
+ ii = class Sequel::Database; @identifier_input_method; end
306
+ io = class Sequel::Database; @identifier_output_method; end
307
+ Sequel.quote_identifiers = nil
308
+ class Sequel::Database; @identifier_input_method=nil; end
309
+ class Sequel::Database; @identifier_output_method=nil; end
310
+ end
276
311
  Sequel.mock(:host=>'access').select(Date.new(2011, 12, 13)).sql.must_equal 'SELECT #2011-12-13#'
277
- Sequel.mock(:host=>'cubrid').from(:a).offset(1).sql.must_equal 'SELECT * FROM "a" LIMIT 1,4294967295'
278
312
  Sequel.mock(:host=>'db2').select(1).sql.must_equal 'SELECT 1 FROM "SYSIBM"."SYSDUMMY1"'
279
- Sequel.mock(:host=>'firebird')[:a].distinct.limit(1, 2).sql.must_equal 'SELECT DISTINCT FIRST 1 SKIP 2 * FROM "A"'
280
- Sequel.mock(:host=>'informix')[:a].distinct.limit(1, 2).sql.must_equal 'SELECT SKIP 2 FIRST 1 DISTINCT * FROM A'
281
313
  Sequel.mock(:host=>'mssql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM [A] WHERE (CONTAINS ([B], 'c'))"
282
314
  Sequel.mock(:host=>'mysql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM `a` WHERE (MATCH (`b`) AGAINST ('c'))"
283
315
  Sequel.mock(:host=>'oracle')[:a].limit(1).sql.must_equal 'SELECT * FROM (SELECT * FROM "A") "T1" WHERE (ROWNUM <= 1)'
@@ -285,16 +317,18 @@ describe "identifier_mangling extension" do
285
317
  Sequel.mock(:host=>'sqlanywhere').from(:a).offset(1).sql.must_equal 'SELECT TOP 2147483647 START AT (1 + 1) * FROM "A"'
286
318
  Sequel.mock(:host=>'sqlite')[:a___b].sql.must_equal "SELECT * FROM `a` AS 'b'"
287
319
  ensure
288
- Sequel.quote_identifiers = qi
289
- Sequel::Database.send(:instance_variable_set, :@identifier_input_method, ii)
290
- Sequel::Database.send(:instance_variable_set, :@identifier_output_method, io)
320
+ deprecated do
321
+ Sequel.quote_identifiers = qi
322
+ Sequel::Database.send(:instance_variable_set, :@identifier_input_method, ii)
323
+ Sequel::Database.send(:instance_variable_set, :@identifier_output_method, io)
324
+ end
291
325
  end
292
326
  end
293
327
  end
294
328
 
295
329
  describe Sequel::Model, ".[] optimization" do
296
330
  before do
297
- @db = Sequel.mock(:identifier_mangling=>true, :quote_identifiers=>true)
331
+ @db = Sequel.mock(:quote_identifiers=>true).extension(:identifier_mangling)
298
332
  def @db.schema(*) [[:id, {:primary_key=>true}]] end
299
333
  def @db.supports_schema_parsing?() true end
300
334
  @c = Class.new(Sequel::Model(@db))