sequel 2.11.0 → 2.12.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 (162) hide show
  1. data/CHANGELOG +168 -0
  2. data/README.rdoc +77 -95
  3. data/Rakefile +100 -80
  4. data/bin/sequel +2 -1
  5. data/doc/advanced_associations.rdoc +23 -32
  6. data/doc/cheat_sheet.rdoc +23 -40
  7. data/doc/dataset_filtering.rdoc +6 -6
  8. data/doc/prepared_statements.rdoc +22 -22
  9. data/doc/release_notes/2.12.0.txt +534 -0
  10. data/doc/schema.rdoc +3 -1
  11. data/doc/sharding.rdoc +8 -8
  12. data/doc/virtual_rows.rdoc +65 -0
  13. data/lib/sequel.rb +1 -1
  14. data/lib/{sequel_core → sequel}/adapters/ado.rb +3 -3
  15. data/lib/{sequel_core → sequel}/adapters/db2.rb +0 -0
  16. data/lib/{sequel_core → sequel}/adapters/dbi.rb +1 -1
  17. data/lib/{sequel_core → sequel}/adapters/do.rb +9 -5
  18. data/lib/{sequel_core → sequel}/adapters/do/mysql.rb +1 -1
  19. data/lib/{sequel_core → sequel}/adapters/do/postgres.rb +1 -1
  20. data/lib/{sequel_core → sequel}/adapters/do/sqlite.rb +1 -1
  21. data/lib/{sequel_core → sequel}/adapters/firebird.rb +84 -80
  22. data/lib/{sequel_core → sequel}/adapters/informix.rb +1 -1
  23. data/lib/{sequel_core → sequel}/adapters/jdbc.rb +21 -14
  24. data/lib/{sequel_core → sequel}/adapters/jdbc/h2.rb +14 -13
  25. data/lib/{sequel_core → sequel}/adapters/jdbc/mysql.rb +1 -1
  26. data/lib/{sequel_core → sequel}/adapters/jdbc/oracle.rb +1 -1
  27. data/lib/{sequel_core → sequel}/adapters/jdbc/postgresql.rb +1 -1
  28. data/lib/{sequel_core → sequel}/adapters/jdbc/sqlite.rb +1 -1
  29. data/lib/{sequel_core → sequel}/adapters/mysql.rb +60 -39
  30. data/lib/{sequel_core → sequel}/adapters/odbc.rb +8 -4
  31. data/lib/{sequel_core → sequel}/adapters/openbase.rb +0 -0
  32. data/lib/{sequel_core → sequel}/adapters/oracle.rb +38 -7
  33. data/lib/{sequel_core → sequel}/adapters/postgres.rb +24 -24
  34. data/lib/{sequel_core → sequel}/adapters/shared/mssql.rb +5 -5
  35. data/lib/{sequel_core → sequel}/adapters/shared/mysql.rb +126 -71
  36. data/lib/{sequel_core → sequel}/adapters/shared/oracle.rb +7 -10
  37. data/lib/{sequel_core → sequel}/adapters/shared/postgres.rb +159 -125
  38. data/lib/{sequel_core → sequel}/adapters/shared/progress.rb +1 -2
  39. data/lib/{sequel_core → sequel}/adapters/shared/sqlite.rb +72 -67
  40. data/lib/{sequel_core → sequel}/adapters/sqlite.rb +11 -7
  41. data/lib/{sequel_core → sequel}/adapters/utils/date_format.rb +0 -0
  42. data/lib/{sequel_core → sequel}/adapters/utils/stored_procedures.rb +0 -0
  43. data/lib/{sequel_core → sequel}/adapters/utils/unsupported.rb +19 -0
  44. data/lib/{sequel_core → sequel}/connection_pool.rb +7 -5
  45. data/lib/sequel/core.rb +221 -0
  46. data/lib/{sequel_core → sequel}/core_sql.rb +91 -49
  47. data/lib/{sequel_core → sequel}/database.rb +264 -149
  48. data/lib/{sequel_core/schema/generator.rb → sequel/database/schema_generator.rb} +6 -2
  49. data/lib/{sequel_core/database/schema.rb → sequel/database/schema_methods.rb} +12 -12
  50. data/lib/sequel/database/schema_sql.rb +224 -0
  51. data/lib/{sequel_core → sequel}/dataset.rb +78 -236
  52. data/lib/{sequel_core → sequel}/dataset/convenience.rb +99 -61
  53. data/lib/{sequel_core/object_graph.rb → sequel/dataset/graph.rb} +16 -14
  54. data/lib/{sequel_core → sequel}/dataset/prepared_statements.rb +1 -1
  55. data/lib/{sequel_core → sequel}/dataset/sql.rb +150 -99
  56. data/lib/sequel/deprecated.rb +593 -0
  57. data/lib/sequel/deprecated_migration.rb +91 -0
  58. data/lib/sequel/exceptions.rb +48 -0
  59. data/lib/sequel/extensions/blank.rb +42 -0
  60. data/lib/{sequel_model → sequel/extensions}/inflector.rb +8 -1
  61. data/lib/{sequel_core → sequel/extensions}/migration.rb +1 -1
  62. data/lib/{sequel_core/dataset → sequel/extensions}/pagination.rb +0 -0
  63. data/lib/{sequel_core → sequel/extensions}/pretty_table.rb +7 -0
  64. data/lib/{sequel_core/dataset → sequel/extensions}/query.rb +7 -0
  65. data/lib/sequel/extensions/string_date_time.rb +47 -0
  66. data/lib/sequel/metaprogramming.rb +43 -0
  67. data/lib/sequel/model.rb +110 -0
  68. data/lib/sequel/model/associations.rb +1300 -0
  69. data/lib/sequel/model/base.rb +937 -0
  70. data/lib/sequel/model/deprecated.rb +204 -0
  71. data/lib/sequel/model/deprecated_hooks.rb +103 -0
  72. data/lib/sequel/model/deprecated_inflector.rb +335 -0
  73. data/lib/sequel/model/deprecated_validations.rb +388 -0
  74. data/lib/sequel/model/errors.rb +39 -0
  75. data/lib/{sequel_model → sequel/model}/exceptions.rb +4 -4
  76. data/lib/sequel/model/inflections.rb +208 -0
  77. data/lib/sequel/model/plugins.rb +76 -0
  78. data/lib/sequel/plugins/caching.rb +122 -0
  79. data/lib/sequel/plugins/hook_class_methods.rb +122 -0
  80. data/lib/sequel/plugins/schema.rb +53 -0
  81. data/lib/sequel/plugins/serialization.rb +117 -0
  82. data/lib/sequel/plugins/single_table_inheritance.rb +63 -0
  83. data/lib/sequel/plugins/validation_class_methods.rb +384 -0
  84. data/lib/sequel/plugins/validation_helpers.rb +150 -0
  85. data/lib/{sequel_core → sequel}/sql.rb +125 -190
  86. data/lib/{sequel_core → sequel}/version.rb +2 -1
  87. data/lib/sequel_core.rb +1 -172
  88. data/lib/sequel_model.rb +1 -91
  89. data/spec/adapters/firebird_spec.rb +5 -5
  90. data/spec/adapters/informix_spec.rb +1 -1
  91. data/spec/adapters/mysql_spec.rb +128 -42
  92. data/spec/adapters/oracle_spec.rb +47 -19
  93. data/spec/adapters/postgres_spec.rb +64 -52
  94. data/spec/adapters/spec_helper.rb +1 -1
  95. data/spec/adapters/sqlite_spec.rb +12 -17
  96. data/spec/{sequel_core → core}/connection_pool_spec.rb +10 -10
  97. data/spec/{sequel_core → core}/core_ext_spec.rb +19 -19
  98. data/spec/{sequel_core → core}/core_sql_spec.rb +68 -71
  99. data/spec/{sequel_core → core}/database_spec.rb +135 -99
  100. data/spec/{sequel_core → core}/dataset_spec.rb +398 -242
  101. data/spec/{sequel_core → core}/expression_filters_spec.rb +13 -13
  102. data/spec/core/migration_spec.rb +263 -0
  103. data/spec/{sequel_core → core}/object_graph_spec.rb +10 -10
  104. data/spec/{sequel_core → core}/pretty_table_spec.rb +2 -2
  105. data/spec/{sequel_core → core}/schema_generator_spec.rb +0 -0
  106. data/spec/{sequel_core → core}/schema_spec.rb +8 -10
  107. data/spec/{sequel_core → core}/spec_helper.rb +29 -2
  108. data/spec/{sequel_core → core}/version_spec.rb +0 -0
  109. data/spec/extensions/blank_spec.rb +67 -0
  110. data/spec/extensions/caching_spec.rb +201 -0
  111. data/spec/{sequel_model/hooks_spec.rb → extensions/hook_class_methods_spec.rb} +8 -23
  112. data/spec/{sequel_model → extensions}/inflector_spec.rb +3 -0
  113. data/spec/{sequel_core → extensions}/migration_spec.rb +4 -4
  114. data/spec/extensions/pagination_spec.rb +99 -0
  115. data/spec/extensions/pretty_table_spec.rb +91 -0
  116. data/spec/extensions/query_spec.rb +85 -0
  117. data/spec/{sequel_model → extensions}/schema_spec.rb +22 -1
  118. data/spec/extensions/serialization_spec.rb +109 -0
  119. data/spec/extensions/single_table_inheritance_spec.rb +53 -0
  120. data/spec/{sequel_model → extensions}/spec_helper.rb +13 -4
  121. data/spec/extensions/string_date_time_spec.rb +93 -0
  122. data/spec/{sequel_model/validations_spec.rb → extensions/validation_class_methods_spec.rb} +15 -103
  123. data/spec/extensions/validation_helpers_spec.rb +291 -0
  124. data/spec/integration/dataset_test.rb +31 -0
  125. data/spec/integration/eager_loader_test.rb +17 -30
  126. data/spec/integration/schema_test.rb +8 -5
  127. data/spec/integration/spec_helper.rb +17 -0
  128. data/spec/integration/transaction_test.rb +68 -0
  129. data/spec/{sequel_model → model}/association_reflection_spec.rb +0 -0
  130. data/spec/{sequel_model → model}/associations_spec.rb +23 -10
  131. data/spec/{sequel_model → model}/base_spec.rb +29 -20
  132. data/spec/{sequel_model → model}/caching_spec.rb +16 -14
  133. data/spec/{sequel_model → model}/dataset_methods_spec.rb +0 -0
  134. data/spec/{sequel_model → model}/eager_loading_spec.rb +8 -8
  135. data/spec/model/hooks_spec.rb +472 -0
  136. data/spec/model/inflector_spec.rb +126 -0
  137. data/spec/{sequel_model → model}/model_spec.rb +25 -20
  138. data/spec/model/plugins_spec.rb +142 -0
  139. data/spec/{sequel_model → model}/record_spec.rb +121 -62
  140. data/spec/model/schema_spec.rb +92 -0
  141. data/spec/model/spec_helper.rb +124 -0
  142. data/spec/model/validations_spec.rb +1080 -0
  143. metadata +136 -107
  144. data/lib/sequel_core/core_ext.rb +0 -217
  145. data/lib/sequel_core/dataset/callback.rb +0 -13
  146. data/lib/sequel_core/dataset/schema.rb +0 -15
  147. data/lib/sequel_core/deprecated.rb +0 -26
  148. data/lib/sequel_core/exceptions.rb +0 -44
  149. data/lib/sequel_core/schema.rb +0 -2
  150. data/lib/sequel_core/schema/sql.rb +0 -325
  151. data/lib/sequel_model/association_reflection.rb +0 -267
  152. data/lib/sequel_model/associations.rb +0 -499
  153. data/lib/sequel_model/base.rb +0 -539
  154. data/lib/sequel_model/caching.rb +0 -82
  155. data/lib/sequel_model/dataset_methods.rb +0 -26
  156. data/lib/sequel_model/eager_loading.rb +0 -370
  157. data/lib/sequel_model/hooks.rb +0 -101
  158. data/lib/sequel_model/plugins.rb +0 -62
  159. data/lib/sequel_model/record.rb +0 -568
  160. data/lib/sequel_model/schema.rb +0 -49
  161. data/lib/sequel_model/validations.rb +0 -429
  162. data/spec/sequel_model/plugins_spec.rb +0 -80
@@ -1,10 +1,10 @@
1
1
  require File.join(File.dirname(__FILE__), 'spec_helper')
2
2
 
3
3
  context "A new Database" do
4
- setup do
4
+ before do
5
5
  @db = Sequel::Database.new(1 => 2, :logger => 3)
6
6
  end
7
- teardown do
7
+ after do
8
8
  Sequel.quote_identifiers = false
9
9
  Sequel.identifier_input_method = nil
10
10
  Sequel.identifier_output_method = nil
@@ -15,15 +15,10 @@ context "A new Database" do
15
15
  end
16
16
 
17
17
  specify "should set the logger from opts[:logger] and opts[:loggers]" do
18
- @db.logger.should == 3
19
18
  @db.loggers.should == [3]
20
- Sequel::Database.new(1 => 2, :loggers => 3).logger.should == 3
21
19
  Sequel::Database.new(1 => 2, :loggers => 3).loggers.should == [3]
22
- Sequel::Database.new(1 => 2, :loggers => [3]).logger.should == 3
23
20
  Sequel::Database.new(1 => 2, :loggers => [3]).loggers.should == [3]
24
- Sequel::Database.new(1 => 2, :logger => 4, :loggers => 3).logger.should == 4
25
21
  Sequel::Database.new(1 => 2, :logger => 4, :loggers => 3).loggers.should == [4,3]
26
- Sequel::Database.new(1 => 2, :logger => [4], :loggers => [3]).logger.should == 4
27
22
  Sequel::Database.new(1 => 2, :logger => [4], :loggers => [3]).loggers.should == [4,3]
28
23
  end
29
24
 
@@ -61,7 +56,7 @@ context "A new Database" do
61
56
  db.send(:identifier_output_method_default).should == :downcase
62
57
  end
63
58
 
64
- specify "should respect the :upcase_identifiers option" do
59
+ deprec_specify "should respect the :upcase_identifiers option" do
65
60
  Sequel.upcase_identifiers = false
66
61
  db = Sequel::Database.new(:upcase_identifiers=>false)
67
62
  db.upcase_identifiers?.should == false
@@ -139,7 +134,7 @@ context "A new Database" do
139
134
  Sequel::Database.new({}).quote_identifiers?.should == false
140
135
  end
141
136
 
142
- specify "should use the default Sequel.upcase_identifiers value" do
137
+ deprec_specify "should use the default Sequel.upcase_identifiers value" do
143
138
  Sequel.upcase_identifiers = true
144
139
  Sequel::Database.new({}).upcase_identifiers?.should == true
145
140
  Sequel.upcase_identifiers = false
@@ -191,7 +186,7 @@ context "A new Database" do
191
186
  y.new({}).identifier_input_method.should == :camelize
192
187
  end
193
188
 
194
- specify "should respect the identifier_output_method_default method if Sequel.upcase_identifiers = nil" do
189
+ specify "should respect the identifier_output_method_default method if Sequel.identifier_output_method is not called" do
195
190
  class Sequel::Database
196
191
  @@identifier_output_method = nil
197
192
  end
@@ -220,21 +215,19 @@ context "Database#disconnect" do
220
215
  specify "should call pool.disconnect" do
221
216
  d = Sequel::Database.new
222
217
  p = d.pool
223
- a = 1
224
- p.meta_def(:disconnect){a += 1}
218
+ p.should_receive(:disconnect).once.and_return(2)
225
219
  d.disconnect.should == 2
226
- a.should == 2
227
220
  end
228
221
  end
229
222
 
230
223
  context "Database#connect" do
231
- specify "should raise Sequel::Error::NotImplemented" do
224
+ specify "should raise NotImplementedError" do
232
225
  proc {Sequel::Database.new.connect}.should raise_error(NotImplementedError)
233
226
  end
234
227
  end
235
228
 
236
229
  context "Database#uri" do
237
- setup do
230
+ before do
238
231
  @c = Class.new(Sequel::Database) do
239
232
  set_adapter_scheme :mau
240
233
  end
@@ -264,7 +257,7 @@ context "Database.adapter_scheme" do
264
257
  end
265
258
 
266
259
  context "Database#dataset" do
267
- setup do
260
+ before do
268
261
  @db = Sequel::Database.new
269
262
  @ds = @db.dataset
270
263
  end
@@ -296,17 +289,23 @@ context "Database#dataset" do
296
289
  d.should be_a_kind_of(Sequel::Dataset)
297
290
  d.sql.should == 'SELECT a, b, c FROM mau'
298
291
  end
292
+
293
+ specify "should allow #select to take a block" do
294
+ d = @db.select(:a, :b){c}.from(:mau)
295
+ d.should be_a_kind_of(Sequel::Dataset)
296
+ d.sql.should == 'SELECT a, b, c FROM mau'
297
+ end
299
298
  end
300
299
 
301
300
  context "Database#execute" do
302
- specify "should raise Sequel::Error::NotImplemented" do
301
+ specify "should raise NotImplementedError" do
303
302
  proc {Sequel::Database.new.execute('blah blah')}.should raise_error(NotImplementedError)
304
303
  proc {Sequel::Database.new << 'blah blah'}.should raise_error(NotImplementedError)
305
304
  end
306
305
  end
307
306
 
308
307
  context "Database#<<" do
309
- setup do
308
+ before do
310
309
  @c = Class.new(Sequel::Database) do
311
310
  define_method(:execute) {|sql, opts| sql}
312
311
  end
@@ -317,7 +316,7 @@ context "Database#<<" do
317
316
  (@db << "DELETE FROM items").should == "DELETE FROM items"
318
317
  end
319
318
 
320
- specify "should accept an array and convert it to SQL" do
319
+ deprec_specify "should accept an array and convert it to SQL" do
321
320
  a = %[
322
321
  --
323
322
  CREATE TABLE items (a integer, /*b integer*/
@@ -328,7 +327,7 @@ context "Database#<<" do
328
327
  "CREATE TABLE items (a integer, b text, c integer); DROP TABLE old_items;"
329
328
  end
330
329
 
331
- specify "should remove comments and whitespace from arrays" do
330
+ deprec_specify "should remove comments and whitespace from arrays" do
332
331
  s = %[
333
332
  --
334
333
  CREATE TABLE items (a integer, /*b integer*/
@@ -346,7 +345,7 @@ context "Database#<<" do
346
345
  end
347
346
 
348
347
  context "Database#synchronize" do
349
- setup do
348
+ before do
350
349
  @db = Sequel::Database.new(:max_connections => 1)
351
350
  @db.pool.connection_proc = proc {12345}
352
351
  end
@@ -370,7 +369,7 @@ context "Database#synchronize" do
370
369
  end
371
370
 
372
371
  context "Database#test_connection" do
373
- setup do
372
+ before do
374
373
  @db = Sequel::Database.new
375
374
  @test = nil
376
375
  @db.pool.connection_proc = proc {@test = rand(100)}
@@ -409,7 +408,7 @@ class DummyDatabase < Sequel::Database
409
408
  end
410
409
 
411
410
  context "Database#create_table" do
412
- setup do
411
+ before do
413
412
  @db = DummyDatabase.new
414
413
  end
415
414
 
@@ -427,7 +426,7 @@ context "Database#create_table" do
427
426
  end
428
427
 
429
428
  context "Database#alter_table" do
430
- setup do
429
+ before do
431
430
  @db = DummyDatabase.new
432
431
  end
433
432
 
@@ -457,7 +456,7 @@ context "Database#alter_table" do
457
456
  end
458
457
 
459
458
  context "Database#add_column" do
460
- setup do
459
+ before do
461
460
  @db = DummyDatabase.new
462
461
  end
463
462
 
@@ -470,7 +469,7 @@ context "Database#add_column" do
470
469
  end
471
470
 
472
471
  context "Database#drop_column" do
473
- setup do
472
+ before do
474
473
  @db = DummyDatabase.new
475
474
  end
476
475
 
@@ -483,7 +482,7 @@ context "Database#drop_column" do
483
482
  end
484
483
 
485
484
  context "Database#rename_column" do
486
- setup do
485
+ before do
487
486
  @db = DummyDatabase.new
488
487
  end
489
488
 
@@ -496,7 +495,7 @@ context "Database#rename_column" do
496
495
  end
497
496
 
498
497
  context "Database#set_column_type" do
499
- setup do
498
+ before do
500
499
  @db = DummyDatabase.new
501
500
  end
502
501
 
@@ -509,7 +508,7 @@ context "Database#set_column_type" do
509
508
  end
510
509
 
511
510
  context "Database#set_column_default" do
512
- setup do
511
+ before do
513
512
  @db = DummyDatabase.new
514
513
  end
515
514
 
@@ -522,7 +521,7 @@ context "Database#set_column_default" do
522
521
  end
523
522
 
524
523
  context "Database#add_index" do
525
- setup do
524
+ before do
526
525
  @db = DummyDatabase.new
527
526
  end
528
527
 
@@ -542,7 +541,7 @@ context "Database#add_index" do
542
541
  end
543
542
 
544
543
  context "Database#drop_index" do
545
- setup do
544
+ before do
546
545
  @db = DummyDatabase.new
547
546
  end
548
547
 
@@ -562,7 +561,7 @@ class Dummy2Database < Sequel::Database
562
561
  end
563
562
 
564
563
  context "Database#drop_table" do
565
- setup do
564
+ before do
566
565
  @db = DummyDatabase.new
567
566
  end
568
567
 
@@ -582,7 +581,7 @@ context "Database#drop_table" do
582
581
  end
583
582
 
584
583
  context "Database#rename_table" do
585
- setup do
584
+ before do
586
585
  @db = DummyDatabase.new
587
586
  end
588
587
 
@@ -593,7 +592,7 @@ context "Database#rename_table" do
593
592
  end
594
593
 
595
594
  context "Database#table_exists?" do
596
- setup do
595
+ before do
597
596
  @db = DummyDatabase.new
598
597
  @db.instance_variable_set(:@schemas, {:a=>[]})
599
598
  @db2 = DummyDatabase.new
@@ -620,7 +619,7 @@ class Dummy3Database < Sequel::Database
620
619
  end
621
620
 
622
621
  context "Database#transaction" do
623
- setup do
622
+ before do
624
623
  @db = Dummy3Database.new
625
624
  @db.pool.connection_proc = proc {Dummy3Database::DummyConnection.new(@db)}
626
625
  end
@@ -649,10 +648,10 @@ context "Database#transaction" do
649
648
  proc {@db.transaction {raise RuntimeError}}.should raise_error(RuntimeError)
650
649
  end
651
650
 
652
- specify "should issue ROLLBACK if Sequel::Error::Rollback is called in the transaction" do
651
+ specify "should issue ROLLBACK if Sequel::Rollback is called in the transaction" do
653
652
  @db.transaction do
654
653
  @db.drop_table(:a)
655
- raise Sequel::Error::Rollback
654
+ raise Sequel::Rollback
656
655
  @db.drop_table(:b)
657
656
  end
658
657
 
@@ -677,12 +676,8 @@ context "Database#transaction" do
677
676
  end
678
677
  end
679
678
 
680
- class Sequel::Database
681
- def self.get_adapters; @@adapters; end
682
- end
683
-
684
679
  context "A Database adapter with a scheme" do
685
- setup do
680
+ before do
686
681
  class CCC < Sequel::Database
687
682
  if defined?(DISCONNECTS)
688
683
  DISCONNECTS.clear
@@ -696,8 +691,8 @@ context "A Database adapter with a scheme" do
696
691
  end
697
692
  end
698
693
 
699
- specify "should be registered in adapters" do
700
- Sequel::Database.get_adapters[:ccc].should == CCC
694
+ specify "should be registered in the ADAPTER_MAP" do
695
+ Sequel::ADAPTER_MAP[:ccc].should == CCC
701
696
  end
702
697
 
703
698
  specify "should be instantiated when its scheme is specified" do
@@ -738,7 +733,7 @@ context "A Database adapter with a scheme" do
738
733
  CCC::DISCONNECTS.should == [z, y, x]
739
734
  end
740
735
 
741
- specify "should be accessible through Sequel.open" do
736
+ deprec_specify "should be accessible through Sequel.open" do
742
737
  c = Sequel.open 'ccc://localhost/db'
743
738
  c.should be_a_kind_of(CCC)
744
739
  c.opts[:host].should == 'localhost'
@@ -786,35 +781,31 @@ end
786
781
 
787
782
  context "An unknown database scheme" do
788
783
  specify "should raise an error in Sequel::Database.connect" do
789
- proc {Sequel::Database.connect('ddd://localhost/db')}.should raise_error(Sequel::Error::AdapterNotFound)
784
+ proc {Sequel::Database.connect('ddd://localhost/db')}.should raise_error(Sequel::AdapterNotFound)
790
785
  end
791
786
 
792
787
  specify "should raise an error in Sequel.connect" do
793
- proc {Sequel.connect('ddd://localhost/db')}.should raise_error(Sequel::Error::AdapterNotFound)
794
- end
795
-
796
- specify "should raise an error in Sequel.open" do
797
- proc {Sequel.open('ddd://localhost/db')}.should raise_error(Sequel::Error::AdapterNotFound)
788
+ proc {Sequel.connect('ddd://localhost/db')}.should raise_error(Sequel::AdapterNotFound)
798
789
  end
799
790
  end
800
791
 
801
792
  context "A broken adapter (lib is there but the class is not)" do
802
- setup do
803
- @fn = File.join(File.dirname(__FILE__), '../../lib/sequel_core/adapters/blah.rb')
793
+ before do
794
+ @fn = File.join(File.dirname(__FILE__), '../../lib/sequel/adapters/blah.rb')
804
795
  File.open(@fn,'a'){}
805
796
  end
806
797
 
807
- teardown do
798
+ after do
808
799
  File.delete(@fn)
809
800
  end
810
801
 
811
802
  specify "should raise an error" do
812
- proc {Sequel.connect('blah://blow')}.should raise_error(Sequel::Error::AdapterNotFound)
803
+ proc {Sequel.connect('blah://blow')}.should raise_error(Sequel::AdapterNotFound)
813
804
  end
814
805
  end
815
806
 
816
807
  context "A single threaded database" do
817
- teardown do
808
+ after do
818
809
  Sequel::Database.single_threaded = false
819
810
  end
820
811
 
@@ -842,7 +833,7 @@ context "A single threaded database" do
842
833
  end
843
834
 
844
835
  context "A single threaded database" do
845
- setup do
836
+ before do
846
837
  conn = 1234567
847
838
  @db = Sequel::Database.new(:single_threaded => true) do
848
839
  conn += 1
@@ -864,71 +855,91 @@ context "A single threaded database" do
864
855
  end
865
856
 
866
857
  context "A database" do
867
- setup do
858
+ before do
868
859
  Sequel::Database.single_threaded = false
869
860
  end
870
861
 
871
- teardown do
862
+ after do
872
863
  Sequel::Database.single_threaded = false
873
864
  end
874
865
 
875
- specify "should be either single_threaded? or multi_threaded?" do
866
+ deprec_specify "should have a multi_threaded? method" do
876
867
  db = Sequel::Database.new(:single_threaded => true)
877
- db.should be_single_threaded
878
868
  db.should_not be_multi_threaded
879
869
 
880
870
  db = Sequel::Database.new(:max_options => 1)
881
- db.should_not be_single_threaded
882
871
  db.should be_multi_threaded
872
+
873
+ db = Sequel::Database.new
874
+ db.should be_multi_threaded
875
+
876
+ Sequel::Database.single_threaded = true
877
+
878
+ db = Sequel::Database.new
879
+ db.should_not be_multi_threaded
880
+
881
+ db = Sequel::Database.new(:max_options => 4)
882
+ db.should_not be_multi_threaded
883
+ end
884
+
885
+ specify "should have single_threaded? respond to true if in single threaded mode" do
886
+ db = Sequel::Database.new(:single_threaded => true)
887
+ db.should be_single_threaded
888
+
889
+ db = Sequel::Database.new(:max_options => 1)
890
+ db.should_not be_single_threaded
883
891
 
884
892
  db = Sequel::Database.new
885
893
  db.should_not be_single_threaded
886
- db.should be_multi_threaded
887
894
 
888
895
  Sequel::Database.single_threaded = true
889
896
 
890
897
  db = Sequel::Database.new
891
898
  db.should be_single_threaded
892
- db.should_not be_multi_threaded
893
899
 
894
900
  db = Sequel::Database.new(:max_options => 4)
895
901
  db.should be_single_threaded
896
- db.should_not be_multi_threaded
897
902
  end
898
903
 
899
- specify "should accept a logger object" do
904
+ deprec_specify "should have a logger method" do
900
905
  db = Sequel::Database.new
901
906
  s = "I'm a logger"
902
907
  db.logger = s
903
908
  db.logger.should == s
904
- db.loggers.should == [s]
905
909
  db.logger = nil
906
910
  db.logger.should == nil
911
+ db.loggers = []
912
+ db.logger.should == nil
913
+ t = "I'm also a logger"
914
+ db.loggers = [s, t]
915
+ db.logger.should == s
916
+ end
917
+
918
+ specify "should be able to set loggers via the logger= and loggers= methods" do
919
+ db = Sequel::Database.new
920
+ s = "I'm a logger"
921
+ db.logger = s
922
+ db.loggers.should == [s]
923
+ db.logger = nil
907
924
  db.loggers.should == []
908
925
 
909
926
  db.loggers = [s]
910
- db.logger.should == s
911
927
  db.loggers.should == [s]
912
928
  db.loggers = []
913
- db.logger.should == nil
914
929
  db.loggers.should == []
915
930
 
916
931
  t = "I'm also a logger"
917
932
  db.loggers = [s, t]
918
- db.logger.should == s
919
933
  db.loggers.should == [s,t]
920
- db.loggers = []
921
- db.logger.should == nil
922
- db.loggers.should == []
923
934
  end
924
935
  end
925
936
 
926
937
  context "Database#dataset" do
927
- setup do
938
+ before do
928
939
  @db = Sequel::Database.new
929
940
  end
930
941
 
931
- specify "should delegate to Dataset#query if block is provided" do
942
+ deprec_specify "should delegate to Dataset#query if block is provided" do
932
943
  @d = @db.query {select :x; from :y}
933
944
  @d.should be_a_kind_of(Sequel::Dataset)
934
945
  @d.sql.should == "SELECT x FROM y"
@@ -936,7 +947,7 @@ context "Database#dataset" do
936
947
  end
937
948
 
938
949
  context "Database#fetch" do
939
- setup do
950
+ before do
940
951
  @db = Sequel::Database.new
941
952
  c = Class.new(Sequel::Dataset) do
942
953
  def fetch_rows(sql); yield({:sql => sql}); end
@@ -983,7 +994,7 @@ end
983
994
 
984
995
 
985
996
  context "Database#[]" do
986
- setup do
997
+ before do
987
998
  @db = Sequel::Database.new
988
999
  end
989
1000
 
@@ -1006,63 +1017,77 @@ context "Database#[]" do
1006
1017
  end
1007
1018
 
1008
1019
  context "Database#create_view" do
1009
- setup do
1020
+ before do
1010
1021
  @db = DummyDatabase.new
1011
1022
  end
1012
1023
 
1013
1024
  specify "should construct proper SQL with raw SQL" do
1014
1025
  @db.create_view :test, "SELECT * FROM xyz"
1015
1026
  @db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
1027
+ @db.sqls.clear
1028
+ @db.create_view :test.identifier, "SELECT * FROM xyz"
1029
+ @db.sqls.should == ['CREATE VIEW test AS SELECT * FROM xyz']
1016
1030
  end
1017
1031
 
1018
1032
  specify "should construct proper SQL with dataset" do
1019
1033
  @db.create_view :test, @db[:items].select(:a, :b).order(:c)
1020
1034
  @db.sqls.should == ['CREATE VIEW test AS SELECT a, b FROM items ORDER BY c']
1035
+ @db.sqls.clear
1036
+ @db.create_view :test.qualify(:sch), @db[:items].select(:a, :b).order(:c)
1037
+ @db.sqls.should == ['CREATE VIEW sch.test AS SELECT a, b FROM items ORDER BY c']
1021
1038
  end
1022
1039
  end
1023
1040
 
1024
1041
  context "Database#create_or_replace_view" do
1025
- setup do
1042
+ before do
1026
1043
  @db = DummyDatabase.new
1027
1044
  end
1028
1045
 
1029
1046
  specify "should construct proper SQL with raw SQL" do
1030
1047
  @db.create_or_replace_view :test, "SELECT * FROM xyz"
1031
1048
  @db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT * FROM xyz']
1049
+ @db.sqls.clear
1050
+ @db.create_or_replace_view :sch__test, "SELECT * FROM xyz"
1051
+ @db.sqls.should == ['CREATE OR REPLACE VIEW sch.test AS SELECT * FROM xyz']
1032
1052
  end
1033
1053
 
1034
1054
  specify "should construct proper SQL with dataset" do
1035
1055
  @db.create_or_replace_view :test, @db[:items].select(:a, :b).order(:c)
1036
1056
  @db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
1057
+ @db.sqls.clear
1058
+ @db.create_or_replace_view :test.identifier, @db[:items].select(:a, :b).order(:c)
1059
+ @db.sqls.should == ['CREATE OR REPLACE VIEW test AS SELECT a, b FROM items ORDER BY c']
1037
1060
  end
1038
1061
  end
1039
1062
 
1040
1063
  context "Database#drop_view" do
1041
- setup do
1064
+ before do
1042
1065
  @db = DummyDatabase.new
1043
1066
  end
1044
1067
 
1045
1068
  specify "should construct proper SQL" do
1046
1069
  @db.drop_view :test
1047
- @db.sqls.should == ['DROP VIEW test']
1070
+ @db.drop_view :test.identifier
1071
+ @db.drop_view :sch__test
1072
+ @db.drop_view :test.qualify(:sch)
1073
+ @db.sqls.should == ['DROP VIEW test', 'DROP VIEW test', 'DROP VIEW sch.test', 'DROP VIEW sch.test']
1048
1074
  end
1049
1075
  end
1050
1076
 
1051
- # TODO: beaf this up with specs for all supported ops
1052
1077
  context "Database#alter_table_sql" do
1053
- setup do
1078
+ before do
1054
1079
  @db = DummyDatabase.new
1055
1080
  end
1056
1081
 
1057
1082
  specify "should raise error for an invalid op" do
1058
- proc {@db.alter_table_sql(:mau, :op => :blah)}.should raise_error(Sequel::Error)
1083
+ proc {@db.send(:alter_table_sql, :mau, :op => :blah)}.should raise_error(Sequel::Error)
1059
1084
  end
1060
1085
  end
1061
1086
 
1062
1087
  context "Database.connect" do
1063
1088
  EEE_YAML = "development:\r\n adapter: eee\r\n username: mau\r\n password: tau\r\n host: alfonso\r\n database: mydb\r\n"
1064
1089
 
1065
- setup do
1090
+ before do
1066
1091
  class EEE < Sequel::Database
1067
1092
  set_adapter_scheme :eee
1068
1093
  end
@@ -1071,7 +1096,7 @@ context "Database.connect" do
1071
1096
  File.open(@fn, 'wb') {|f| f << EEE_YAML}
1072
1097
  end
1073
1098
 
1074
- teardown do
1099
+ after do
1075
1100
  File.delete(@fn)
1076
1101
  end
1077
1102
 
@@ -1086,7 +1111,7 @@ context "Database.connect" do
1086
1111
  end
1087
1112
 
1088
1113
  context "Database#inspect" do
1089
- setup do
1114
+ before do
1090
1115
  @db = DummyDatabase.new
1091
1116
 
1092
1117
  @db.meta_def(:uri) {'blah://blahblah/blah'}
@@ -1098,11 +1123,14 @@ context "Database#inspect" do
1098
1123
  end
1099
1124
 
1100
1125
  context "Database#get" do
1101
- setup do
1126
+ before do
1102
1127
  @c = Class.new(DummyDatabase) do
1103
1128
  def dataset
1104
1129
  ds = super
1105
- ds.meta_def(:get) {|c| @db.execute select(c).sql; c}
1130
+ def ds.get(*args, &block)
1131
+ @db.execute select(*args, &block).sql
1132
+ args
1133
+ end
1106
1134
  ds
1107
1135
  end
1108
1136
  end
@@ -1111,12 +1139,20 @@ context "Database#get" do
1111
1139
  end
1112
1140
 
1113
1141
  specify "should use Dataset#get to get a single value" do
1114
- @db.get(1).should == 1
1142
+ @db.get(1).should == [1]
1115
1143
  @db.sqls.last.should == 'SELECT 1'
1116
1144
 
1117
1145
  @db.get(:version.sql_function)
1118
1146
  @db.sqls.last.should == 'SELECT version()'
1119
1147
  end
1148
+
1149
+ specify "should accept a block" do
1150
+ @db.get{1}
1151
+ @db.sqls.last.should == 'SELECT 1'
1152
+
1153
+ @db.get{version(1)}
1154
+ @db.sqls.last.should == 'SELECT version(1)'
1155
+ end
1120
1156
  end
1121
1157
 
1122
1158
  context "Database#call" do
@@ -1173,16 +1209,16 @@ context "Database#raise_error" do
1173
1209
  end
1174
1210
 
1175
1211
  context "Database#typecast_value" do
1176
- setup do
1212
+ before do
1177
1213
  @db = Sequel::Database.new
1178
1214
  end
1179
- specify "should raise an Error::InvalidValue when given an invalid value" do
1180
- proc{@db.typecast_value(:integer, "13a")}.should raise_error(Sequel::Error::InvalidValue)
1181
- proc{@db.typecast_value(:float, "4.e2")}.should raise_error(Sequel::Error::InvalidValue)
1182
- proc{@db.typecast_value(:decimal, :invalid_value)}.should raise_error(Sequel::Error::InvalidValue)
1183
- proc{@db.typecast_value(:date, Object.new)}.should raise_error(Sequel::Error::InvalidValue)
1184
- proc{@db.typecast_value(:date, 'a')}.should raise_error(Sequel::Error::InvalidValue)
1185
- proc{@db.typecast_value(:time, Date.new)}.should raise_error(Sequel::Error::InvalidValue)
1186
- proc{@db.typecast_value(:datetime, 4)}.should raise_error(Sequel::Error::InvalidValue)
1215
+ specify "should raise an InvalidValue when given an invalid value" do
1216
+ proc{@db.typecast_value(:integer, "13a")}.should raise_error(Sequel::InvalidValue)
1217
+ proc{@db.typecast_value(:float, "4.e2")}.should raise_error(Sequel::InvalidValue)
1218
+ proc{@db.typecast_value(:decimal, :invalid_value)}.should raise_error(Sequel::InvalidValue)
1219
+ proc{@db.typecast_value(:date, Object.new)}.should raise_error(Sequel::InvalidValue)
1220
+ proc{@db.typecast_value(:date, 'a')}.should raise_error(Sequel::InvalidValue)
1221
+ proc{@db.typecast_value(:time, Date.new)}.should raise_error(Sequel::InvalidValue)
1222
+ proc{@db.typecast_value(:datetime, 4)}.should raise_error(Sequel::InvalidValue)
1187
1223
  end
1188
1224
  end