sequel 3.21.0 → 3.32.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 (234) hide show
  1. data/CHANGELOG +539 -3
  2. data/MIT-LICENSE +1 -1
  3. data/README.rdoc +20 -6
  4. data/Rakefile +37 -19
  5. data/bin/sequel +1 -5
  6. data/doc/advanced_associations.rdoc +17 -0
  7. data/doc/association_basics.rdoc +293 -43
  8. data/doc/dataset_basics.rdoc +4 -4
  9. data/doc/dataset_filtering.rdoc +8 -0
  10. data/doc/mass_assignment.rdoc +54 -0
  11. data/doc/migration.rdoc +15 -538
  12. data/doc/model_hooks.rdoc +72 -27
  13. data/doc/opening_databases.rdoc +89 -50
  14. data/doc/prepared_statements.rdoc +40 -13
  15. data/doc/reflection.rdoc +8 -2
  16. data/doc/release_notes/3.22.0.txt +39 -0
  17. data/doc/release_notes/3.23.0.txt +172 -0
  18. data/doc/release_notes/3.24.0.txt +420 -0
  19. data/doc/release_notes/3.25.0.txt +88 -0
  20. data/doc/release_notes/3.26.0.txt +88 -0
  21. data/doc/release_notes/3.27.0.txt +82 -0
  22. data/doc/release_notes/3.28.0.txt +304 -0
  23. data/doc/release_notes/3.29.0.txt +459 -0
  24. data/doc/release_notes/3.30.0.txt +135 -0
  25. data/doc/release_notes/3.31.0.txt +146 -0
  26. data/doc/release_notes/3.32.0.txt +202 -0
  27. data/doc/schema_modification.rdoc +547 -0
  28. data/doc/sharding.rdoc +7 -1
  29. data/doc/testing.rdoc +129 -0
  30. data/doc/transactions.rdoc +137 -0
  31. data/doc/virtual_rows.rdoc +2 -2
  32. data/lib/sequel/adapters/ado/mssql.rb +18 -6
  33. data/lib/sequel/adapters/ado.rb +40 -18
  34. data/lib/sequel/adapters/amalgalite.rb +17 -9
  35. data/lib/sequel/adapters/db2.rb +175 -86
  36. data/lib/sequel/adapters/dbi.rb +15 -15
  37. data/lib/sequel/adapters/do/mysql.rb +5 -7
  38. data/lib/sequel/adapters/do/postgres.rb +0 -5
  39. data/lib/sequel/adapters/do/sqlite.rb +0 -5
  40. data/lib/sequel/adapters/do.rb +17 -36
  41. data/lib/sequel/adapters/firebird.rb +27 -208
  42. data/lib/sequel/adapters/ibmdb.rb +448 -0
  43. data/lib/sequel/adapters/informix.rb +6 -23
  44. data/lib/sequel/adapters/jdbc/as400.rb +16 -34
  45. data/lib/sequel/adapters/jdbc/db2.rb +52 -0
  46. data/lib/sequel/adapters/jdbc/derby.rb +260 -0
  47. data/lib/sequel/adapters/jdbc/firebird.rb +29 -0
  48. data/lib/sequel/adapters/jdbc/h2.rb +66 -30
  49. data/lib/sequel/adapters/jdbc/hsqldb.rb +177 -0
  50. data/lib/sequel/adapters/jdbc/informix.rb +26 -0
  51. data/lib/sequel/adapters/jdbc/jtds.rb +34 -0
  52. data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
  53. data/lib/sequel/adapters/jdbc/mysql.rb +11 -11
  54. data/lib/sequel/adapters/jdbc/oracle.rb +88 -25
  55. data/lib/sequel/adapters/jdbc/postgresql.rb +9 -13
  56. data/lib/sequel/adapters/jdbc/sqlite.rb +2 -6
  57. data/lib/sequel/adapters/jdbc/sqlserver.rb +71 -0
  58. data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
  59. data/lib/sequel/adapters/jdbc.rb +231 -78
  60. data/lib/sequel/adapters/mock.rb +339 -0
  61. data/lib/sequel/adapters/mysql.rb +85 -184
  62. data/lib/sequel/adapters/mysql2.rb +26 -25
  63. data/lib/sequel/adapters/odbc/db2.rb +17 -0
  64. data/lib/sequel/adapters/odbc/mssql.rb +1 -6
  65. data/lib/sequel/adapters/odbc.rb +28 -9
  66. data/lib/sequel/adapters/openbase.rb +3 -5
  67. data/lib/sequel/adapters/oracle.rb +355 -53
  68. data/lib/sequel/adapters/postgres.rb +194 -33
  69. data/lib/sequel/adapters/shared/access.rb +32 -9
  70. data/lib/sequel/adapters/shared/db2.rb +328 -0
  71. data/lib/sequel/adapters/shared/firebird.rb +221 -0
  72. data/lib/sequel/adapters/shared/informix.rb +53 -0
  73. data/lib/sequel/adapters/shared/mssql.rb +278 -107
  74. data/lib/sequel/adapters/shared/mysql.rb +203 -65
  75. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +149 -0
  76. data/lib/sequel/adapters/shared/oracle.rb +237 -46
  77. data/lib/sequel/adapters/shared/postgres.rb +214 -82
  78. data/lib/sequel/adapters/shared/progress.rb +5 -8
  79. data/lib/sequel/adapters/shared/sqlite.rb +200 -50
  80. data/lib/sequel/adapters/sqlite.rb +29 -21
  81. data/lib/sequel/adapters/swift/mysql.rb +12 -7
  82. data/lib/sequel/adapters/swift/postgres.rb +0 -5
  83. data/lib/sequel/adapters/swift/sqlite.rb +8 -6
  84. data/lib/sequel/adapters/swift.rb +5 -5
  85. data/lib/sequel/adapters/tinytds.rb +160 -19
  86. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +66 -0
  87. data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
  88. data/lib/sequel/ast_transformer.rb +190 -0
  89. data/lib/sequel/connection_pool/threaded.rb +3 -2
  90. data/lib/sequel/connection_pool.rb +1 -1
  91. data/lib/sequel/core.rb +68 -5
  92. data/lib/sequel/database/connecting.rb +5 -6
  93. data/lib/sequel/database/dataset.rb +4 -4
  94. data/lib/sequel/database/dataset_defaults.rb +59 -1
  95. data/lib/sequel/database/logging.rb +1 -1
  96. data/lib/sequel/database/misc.rb +104 -19
  97. data/lib/sequel/database/query.rb +163 -59
  98. data/lib/sequel/database/schema_generator.rb +17 -7
  99. data/lib/sequel/database/schema_methods.rb +59 -29
  100. data/lib/sequel/dataset/actions.rb +240 -76
  101. data/lib/sequel/dataset/features.rb +91 -8
  102. data/lib/sequel/dataset/graph.rb +38 -11
  103. data/lib/sequel/dataset/misc.rb +50 -23
  104. data/lib/sequel/dataset/mutation.rb +12 -7
  105. data/lib/sequel/dataset/prepared_statements.rb +59 -27
  106. data/lib/sequel/dataset/query.rb +236 -43
  107. data/lib/sequel/dataset/sql.rb +676 -267
  108. data/lib/sequel/dataset.rb +8 -0
  109. data/lib/sequel/exceptions.rb +4 -0
  110. data/lib/sequel/extensions/columns_introspection.rb +61 -0
  111. data/lib/sequel/extensions/migration.rb +6 -4
  112. data/lib/sequel/extensions/named_timezones.rb +5 -0
  113. data/lib/sequel/extensions/query.rb +1 -1
  114. data/lib/sequel/extensions/thread_local_timezones.rb +1 -1
  115. data/lib/sequel/extensions/to_dot.rb +95 -83
  116. data/lib/sequel/model/associations.rb +1081 -344
  117. data/lib/sequel/model/base.rb +420 -133
  118. data/lib/sequel/model/errors.rb +1 -1
  119. data/lib/sequel/model/exceptions.rb +5 -1
  120. data/lib/sequel/model.rb +20 -10
  121. data/lib/sequel/plugins/active_model.rb +13 -1
  122. data/lib/sequel/plugins/association_pks.rb +22 -4
  123. data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
  124. data/lib/sequel/plugins/composition.rb +43 -10
  125. data/lib/sequel/plugins/dataset_associations.rb +100 -0
  126. data/lib/sequel/plugins/defaults_setter.rb +58 -0
  127. data/lib/sequel/plugins/force_encoding.rb +6 -6
  128. data/lib/sequel/plugins/identity_map.rb +114 -7
  129. data/lib/sequel/plugins/many_through_many.rb +68 -7
  130. data/lib/sequel/plugins/nested_attributes.rb +65 -10
  131. data/lib/sequel/plugins/prepared_statements.rb +151 -0
  132. data/lib/sequel/plugins/prepared_statements_associations.rb +84 -0
  133. data/lib/sequel/plugins/prepared_statements_safe.rb +82 -0
  134. data/lib/sequel/plugins/prepared_statements_with_pk.rb +59 -0
  135. data/lib/sequel/plugins/rcte_tree.rb +29 -15
  136. data/lib/sequel/plugins/serialization.rb +98 -49
  137. data/lib/sequel/plugins/serialization_modification_detection.rb +63 -0
  138. data/lib/sequel/plugins/sharding.rb +21 -54
  139. data/lib/sequel/plugins/single_table_inheritance.rb +3 -1
  140. data/lib/sequel/plugins/typecast_on_load.rb +9 -12
  141. data/lib/sequel/plugins/update_primary_key.rb +2 -2
  142. data/lib/sequel/plugins/xml_serializer.rb +3 -3
  143. data/lib/sequel/sql.rb +109 -52
  144. data/lib/sequel/timezones.rb +57 -38
  145. data/lib/sequel/version.rb +1 -1
  146. data/spec/adapters/db2_spec.rb +146 -0
  147. data/spec/adapters/mssql_spec.rb +135 -30
  148. data/spec/adapters/mysql_spec.rb +244 -212
  149. data/spec/adapters/oracle_spec.rb +67 -77
  150. data/spec/adapters/postgres_spec.rb +267 -78
  151. data/spec/adapters/spec_helper.rb +6 -5
  152. data/spec/adapters/sqlite_spec.rb +35 -21
  153. data/spec/core/connection_pool_spec.rb +71 -92
  154. data/spec/core/core_sql_spec.rb +21 -30
  155. data/spec/core/database_spec.rb +789 -512
  156. data/spec/core/dataset_spec.rb +1176 -1061
  157. data/spec/core/expression_filters_spec.rb +159 -42
  158. data/spec/core/mock_adapter_spec.rb +419 -0
  159. data/spec/core/object_graph_spec.rb +86 -114
  160. data/spec/core/schema_generator_spec.rb +3 -3
  161. data/spec/core/schema_spec.rb +298 -38
  162. data/spec/core/spec_helper.rb +6 -48
  163. data/spec/extensions/active_model_spec.rb +13 -0
  164. data/spec/extensions/association_autoreloading_spec.rb +1 -10
  165. data/spec/extensions/association_dependencies_spec.rb +2 -12
  166. data/spec/extensions/association_pks_spec.rb +66 -32
  167. data/spec/extensions/caching_spec.rb +23 -50
  168. data/spec/extensions/class_table_inheritance_spec.rb +31 -83
  169. data/spec/extensions/columns_introspection_spec.rb +91 -0
  170. data/spec/extensions/composition_spec.rb +18 -13
  171. data/spec/extensions/dataset_associations_spec.rb +199 -0
  172. data/spec/extensions/defaults_setter_spec.rb +64 -0
  173. data/spec/extensions/hook_class_methods_spec.rb +65 -91
  174. data/spec/extensions/identity_map_spec.rb +114 -22
  175. data/spec/extensions/instance_filters_spec.rb +11 -21
  176. data/spec/extensions/instance_hooks_spec.rb +53 -0
  177. data/spec/extensions/json_serializer_spec.rb +4 -5
  178. data/spec/extensions/lazy_attributes_spec.rb +16 -20
  179. data/spec/extensions/list_spec.rb +17 -39
  180. data/spec/extensions/many_through_many_spec.rb +283 -250
  181. data/spec/extensions/migration_spec.rb +35 -32
  182. data/spec/extensions/named_timezones_spec.rb +23 -3
  183. data/spec/extensions/nested_attributes_spec.rb +97 -88
  184. data/spec/extensions/optimistic_locking_spec.rb +9 -20
  185. data/spec/extensions/prepared_statements_associations_spec.rb +111 -0
  186. data/spec/extensions/prepared_statements_safe_spec.rb +61 -0
  187. data/spec/extensions/prepared_statements_spec.rb +53 -0
  188. data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
  189. data/spec/extensions/pretty_table_spec.rb +1 -6
  190. data/spec/extensions/query_spec.rb +6 -0
  191. data/spec/extensions/rcte_tree_spec.rb +41 -43
  192. data/spec/extensions/schema_dumper_spec.rb +5 -8
  193. data/spec/extensions/schema_spec.rb +13 -21
  194. data/spec/extensions/serialization_modification_detection_spec.rb +72 -0
  195. data/spec/extensions/serialization_spec.rb +81 -43
  196. data/spec/extensions/sharding_spec.rb +66 -140
  197. data/spec/extensions/single_table_inheritance_spec.rb +18 -29
  198. data/spec/extensions/spec_helper.rb +13 -61
  199. data/spec/extensions/sql_expr_spec.rb +20 -60
  200. data/spec/extensions/tactical_eager_loading_spec.rb +9 -19
  201. data/spec/extensions/thread_local_timezones_spec.rb +22 -2
  202. data/spec/extensions/timestamps_spec.rb +6 -6
  203. data/spec/extensions/to_dot_spec.rb +4 -7
  204. data/spec/extensions/touch_spec.rb +13 -14
  205. data/spec/extensions/tree_spec.rb +11 -26
  206. data/spec/extensions/typecast_on_load_spec.rb +1 -6
  207. data/spec/extensions/update_primary_key_spec.rb +30 -24
  208. data/spec/extensions/validation_class_methods_spec.rb +30 -51
  209. data/spec/extensions/validation_helpers_spec.rb +16 -35
  210. data/spec/extensions/xml_serializer_spec.rb +16 -4
  211. data/spec/integration/associations_test.rb +661 -21
  212. data/spec/integration/database_test.rb +4 -2
  213. data/spec/integration/dataset_test.rb +500 -67
  214. data/spec/integration/eager_loader_test.rb +19 -21
  215. data/spec/integration/model_test.rb +80 -1
  216. data/spec/integration/plugin_test.rb +367 -119
  217. data/spec/integration/prepared_statement_test.rb +222 -125
  218. data/spec/integration/schema_test.rb +217 -39
  219. data/spec/integration/spec_helper.rb +39 -30
  220. data/spec/integration/timezone_test.rb +38 -12
  221. data/spec/integration/transaction_test.rb +182 -5
  222. data/spec/integration/type_test.rb +17 -3
  223. data/spec/model/association_reflection_spec.rb +201 -7
  224. data/spec/model/associations_spec.rb +955 -662
  225. data/spec/model/base_spec.rb +275 -95
  226. data/spec/model/dataset_methods_spec.rb +7 -27
  227. data/spec/model/eager_loading_spec.rb +677 -676
  228. data/spec/model/hooks_spec.rb +349 -67
  229. data/spec/model/model_spec.rb +222 -168
  230. data/spec/model/plugins_spec.rb +24 -13
  231. data/spec/model/record_spec.rb +381 -218
  232. data/spec/model/spec_helper.rb +13 -71
  233. data/spec/model/validations_spec.rb +11 -0
  234. metadata +117 -73
@@ -1,7 +1,7 @@
1
1
  require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
2
2
 
3
3
  describe "Eagerly loading a tree structure" do
4
- before do
4
+ before(:all) do
5
5
  INTEGRATION_DB.instance_variable_set(:@schemas, {})
6
6
  INTEGRATION_DB.create_table!(:nodes) do
7
7
  primary_key :id
@@ -66,9 +66,8 @@ describe "Eagerly loading a tree structure" do
66
66
  Node.insert(:parent_id=>4)
67
67
  Node.insert(:parent_id=>5)
68
68
  Node.insert(:parent_id=>6)
69
- clear_sqls
70
69
  end
71
- after do
70
+ after(:all) do
72
71
  INTEGRATION_DB.drop_table :nodes
73
72
  Object.send(:remove_const, :Node)
74
73
  end
@@ -145,7 +144,6 @@ describe "Association Extensions" do
145
144
  many_to_one :author
146
145
  end
147
146
  @author = Author.create
148
- clear_sqls
149
147
  end
150
148
  after do
151
149
  INTEGRATION_DB.drop_table :authorships, :authors
@@ -172,7 +170,7 @@ describe "Association Extensions" do
172
170
  end
173
171
 
174
172
  describe "has_many :through has_many and has_one :through belongs_to" do
175
- before do
173
+ before(:all) do
176
174
  INTEGRATION_DB.instance_variable_set(:@schemas, {})
177
175
  INTEGRATION_DB.create_table!(:firms) do
178
176
  primary_key :id
@@ -251,9 +249,8 @@ describe "has_many :through has_many and has_one :through belongs_to" do
251
249
  @invoice3 = Invoice.create(:client => @client2)
252
250
  @invoice4 = Invoice.create(:client => @client3)
253
251
  @invoice5 = Invoice.create(:client => @client3)
254
- clear_sqls
255
252
  end
256
- after do
253
+ after(:all) do
257
254
  INTEGRATION_DB.drop_table :invoices, :clients, :firms
258
255
  Object.send(:remove_const, :Firm)
259
256
  Object.send(:remove_const, :Client)
@@ -324,7 +321,7 @@ describe "has_many :through has_many and has_one :through belongs_to" do
324
321
  end
325
322
 
326
323
  describe "Polymorphic Associations" do
327
- before do
324
+ before(:all) do
328
325
  INTEGRATION_DB.instance_variable_set(:@schemas, {})
329
326
  INTEGRATION_DB.create_table!(:assets) do
330
327
  primary_key :id
@@ -413,6 +410,9 @@ describe "Polymorphic Associations" do
413
410
  .update(:attachable_id=>nil, :attachable_type=>nil)
414
411
  end
415
412
  end
413
+ end
414
+ before do
415
+ [:assets, :posts, :notes].each{|t| INTEGRATION_DB[t].delete}
416
416
  @post = Post.create
417
417
  Note.create
418
418
  @note = Note.create
@@ -420,9 +420,8 @@ describe "Polymorphic Associations" do
420
420
  @asset2 = Asset.create(:attachable=>@note)
421
421
  @asset1.associations.clear
422
422
  @asset2.associations.clear
423
- clear_sqls
424
423
  end
425
- after do
424
+ after(:all) do
426
425
  INTEGRATION_DB.drop_table :assets, :posts, :notes
427
426
  Object.send(:remove_const, :Asset)
428
427
  Object.send(:remove_const, :Post)
@@ -483,7 +482,7 @@ describe "Polymorphic Associations" do
483
482
  end
484
483
 
485
484
  describe "many_to_one/one_to_many not referencing primary key" do
486
- before do
485
+ before(:all) do
487
486
  INTEGRATION_DB.instance_variable_set(:@schemas, {})
488
487
  INTEGRATION_DB.create_table!(:clients) do
489
488
  primary_key :id
@@ -540,14 +539,16 @@ describe "many_to_one/one_to_many not referencing primary key" do
540
539
  self.client_name = (client.name if client)
541
540
  end
542
541
  end
543
-
542
+ end
543
+ before do
544
+ Client.delete
545
+ Invoice.delete
544
546
  @client1 = Client.create(:name=>'X')
545
547
  @client2 = Client.create(:name=>'Y')
546
548
  @invoice1 = Invoice.create(:client_name=>'X')
547
549
  @invoice2 = Invoice.create(:client_name=>'X')
548
- clear_sqls
549
550
  end
550
- after do
551
+ after(:all) do
551
552
  INTEGRATION_DB.drop_table :invoices, :clients
552
553
  Object.send(:remove_const, :Client)
553
554
  Object.send(:remove_const, :Invoice)
@@ -618,7 +619,7 @@ describe "many_to_one/one_to_many not referencing primary key" do
618
619
  end
619
620
 
620
621
  describe "statistics associations" do
621
- before do
622
+ before(:all) do
622
623
  INTEGRATION_DB.create_table!(:projects) do
623
624
  primary_key :id
624
625
  String :name
@@ -658,9 +659,8 @@ describe "statistics associations" do
658
659
  @ticket2 = Ticket.create(:project=>@project1, :hours=>10)
659
660
  @ticket3 = Ticket.create(:project=>@project2, :hours=>2)
660
661
  @ticket4 = Ticket.create(:project=>@project2, :hours=>20)
661
- clear_sqls
662
662
  end
663
- after do
663
+ after(:all) do
664
664
  INTEGRATION_DB.drop_table :tickets, :projects
665
665
  Object.send(:remove_const, :Project)
666
666
  Object.send(:remove_const, :Ticket)
@@ -679,7 +679,7 @@ describe "statistics associations" do
679
679
  end
680
680
 
681
681
  describe "one to one associations" do
682
- before do
682
+ before(:all) do
683
683
  INTEGRATION_DB.create_table!(:books) do
684
684
  primary_key :id
685
685
  end
@@ -703,10 +703,8 @@ describe "one to one associations" do
703
703
  @page2 = Page.create(:book=>@book1, :page_number=>2)
704
704
  @page3 = Page.create(:book=>@book2, :page_number=>1)
705
705
  @page4 = Page.create(:book=>@book2, :page_number=>2)
706
- clear_sqls
707
706
  end
708
-
709
- after do
707
+ after(:all) do
710
708
  INTEGRATION_DB.drop_table :pages, :books
711
709
  Object.send(:remove_const, :Book)
712
710
  Object.send(:remove_const, :Page)
@@ -3,7 +3,7 @@ require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
3
3
  describe "Sequel::Model basic support" do
4
4
  before do
5
5
  @db = INTEGRATION_DB
6
- @db.create_table!(:items) do
6
+ @db.create_table!(:items, :engine=>:InnoDB) do
7
7
  primary_key :id
8
8
  String :name
9
9
  end
@@ -38,6 +38,14 @@ describe "Sequel::Model basic support" do
38
38
  Item::Thing.first.should == Item::Thing.load(:id=>1, :name=>'J')
39
39
  end
40
40
 
41
+ specify "should create accessors for all table columns even if all dataset columns aren't selected" do
42
+ c = Class.new(Sequel::Model(@db[:items].select(:id)))
43
+ o = c.new
44
+ o.name = 'A'
45
+ o.save.should == c.load(:id=>1)
46
+ c.select_map(:name).should == ['A']
47
+ end
48
+
41
49
  specify "should work correctly when a dataset restricts the colums it selects" do
42
50
  class ::Item::Thing < Sequel::Model(@db[:items].select(:name))
43
51
  end
@@ -52,6 +60,68 @@ describe "Sequel::Model basic support" do
52
60
  Item.count.should == 0
53
61
  end
54
62
 
63
+ specify "#save should return nil if raise_on_save_failure is false and save isn't successful" do
64
+ i = Item.new(:name=>'J')
65
+ i.use_transactions = true
66
+ def i.after_save
67
+ raise Sequel::Rollback
68
+ end
69
+ i.save.should be_nil
70
+ end
71
+
72
+ specify "#should respect after_commit, after_rollback, after_destroy_commit, and after_destroy_rollback hooks" do
73
+ i = Item.create(:name=>'J')
74
+ i.use_transactions = true
75
+ def i.hooks
76
+ @hooks
77
+ end
78
+ def i.rb=(x)
79
+ @hooks = []
80
+ @rb = x
81
+ end
82
+ def i.after_save
83
+ @hooks << :as
84
+ raise Sequel::Rollback if @rb
85
+ end
86
+ def i.after_destroy
87
+ @hooks << :ad
88
+ raise Sequel::Rollback if @rb
89
+ end
90
+ def i.after_commit
91
+ @hooks << :ac
92
+ end
93
+ def i.after_rollback
94
+ @hooks << :ar
95
+ end
96
+ def i.after_destroy_commit
97
+ @hooks << :adc
98
+ end
99
+ def i.after_destroy_rollback
100
+ @hooks << :adr
101
+ end
102
+ i.name = 'K'
103
+ i.rb = true
104
+ i.save.should be_nil
105
+ i.reload.name.should == 'J'
106
+ i.hooks.should == [:as, :ar]
107
+
108
+ i.rb = true
109
+ i.destroy.should be_nil
110
+ i.exists?.should be_true
111
+ i.hooks.should == [:ad, :adr]
112
+
113
+ i.name = 'K'
114
+ i.rb = false
115
+ i.save.should_not be_nil
116
+ i.reload.name.should == 'K'
117
+ i.hooks.should == [:as, :ac]
118
+
119
+ i.rb = false
120
+ i.destroy.should_not be_nil
121
+ i.exists?.should be_false
122
+ i.hooks.should == [:ad, :adc]
123
+ end
124
+
55
125
  specify "#exists? should return whether the item is still in the database" do
56
126
  i = Item.create(:name=>'J')
57
127
  i.exists?.should == true
@@ -128,3 +198,12 @@ describe "Sequel::Model basic support" do
128
198
  end
129
199
  end
130
200
  end
201
+
202
+ describe "Sequel::Model with no existing table" do
203
+ specify "should not raise an error when setting the dataset" do
204
+ db = INTEGRATION_DB
205
+ db.drop_table(:items) if db.table_exists?(:items)
206
+ proc{class ::Item < Sequel::Model(db); end}.should_not raise_error
207
+ proc{c = Class.new(Sequel::Model); c.set_dataset(db[:items])}.should_not raise_error
208
+ end
209
+ end