sequel 3.21.0 → 3.36.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 (311) hide show
  1. data/CHANGELOG +855 -3
  2. data/MIT-LICENSE +1 -1
  3. data/README.rdoc +23 -7
  4. data/Rakefile +42 -24
  5. data/bin/sequel +26 -8
  6. data/doc/active_record.rdoc +1 -0
  7. data/doc/advanced_associations.rdoc +171 -11
  8. data/doc/association_basics.rdoc +293 -43
  9. data/doc/dataset_basics.rdoc +5 -5
  10. data/doc/dataset_filtering.rdoc +8 -0
  11. data/doc/mass_assignment.rdoc +56 -0
  12. data/doc/migration.rdoc +85 -552
  13. data/doc/model_hooks.rdoc +78 -27
  14. data/doc/object_model.rdoc +541 -0
  15. data/doc/opening_databases.rdoc +97 -50
  16. data/doc/prepared_statements.rdoc +40 -14
  17. data/doc/querying.rdoc +28 -4
  18. data/doc/reflection.rdoc +30 -4
  19. data/doc/release_notes/3.22.0.txt +39 -0
  20. data/doc/release_notes/3.23.0.txt +172 -0
  21. data/doc/release_notes/3.24.0.txt +420 -0
  22. data/doc/release_notes/3.25.0.txt +88 -0
  23. data/doc/release_notes/3.26.0.txt +88 -0
  24. data/doc/release_notes/3.27.0.txt +82 -0
  25. data/doc/release_notes/3.28.0.txt +304 -0
  26. data/doc/release_notes/3.29.0.txt +459 -0
  27. data/doc/release_notes/3.30.0.txt +135 -0
  28. data/doc/release_notes/3.31.0.txt +146 -0
  29. data/doc/release_notes/3.32.0.txt +202 -0
  30. data/doc/release_notes/3.33.0.txt +157 -0
  31. data/doc/release_notes/3.34.0.txt +671 -0
  32. data/doc/release_notes/3.35.0.txt +144 -0
  33. data/doc/release_notes/3.36.0.txt +245 -0
  34. data/doc/schema_modification.rdoc +572 -0
  35. data/doc/sharding.rdoc +95 -3
  36. data/doc/testing.rdoc +129 -0
  37. data/doc/thread_safety.rdoc +17 -0
  38. data/doc/transactions.rdoc +137 -0
  39. data/doc/virtual_rows.rdoc +51 -2
  40. data/lib/sequel/adapters/ado/mssql.rb +18 -6
  41. data/lib/sequel/adapters/ado.rb +40 -18
  42. data/lib/sequel/adapters/amalgalite.rb +17 -9
  43. data/lib/sequel/adapters/db2.rb +175 -86
  44. data/lib/sequel/adapters/dbi.rb +15 -15
  45. data/lib/sequel/adapters/do/mysql.rb +17 -11
  46. data/lib/sequel/adapters/do/postgres.rb +1 -57
  47. data/lib/sequel/adapters/do/sqlite.rb +0 -10
  48. data/lib/sequel/adapters/do.rb +18 -36
  49. data/lib/sequel/adapters/firebird.rb +27 -208
  50. data/lib/sequel/adapters/ibmdb.rb +453 -0
  51. data/lib/sequel/adapters/informix.rb +6 -23
  52. data/lib/sequel/adapters/jdbc/as400.rb +16 -34
  53. data/lib/sequel/adapters/jdbc/db2.rb +47 -0
  54. data/lib/sequel/adapters/jdbc/derby.rb +287 -0
  55. data/lib/sequel/adapters/jdbc/firebird.rb +24 -0
  56. data/lib/sequel/adapters/jdbc/h2.rb +73 -31
  57. data/lib/sequel/adapters/jdbc/hsqldb.rb +184 -0
  58. data/lib/sequel/adapters/jdbc/informix.rb +21 -0
  59. data/lib/sequel/adapters/jdbc/jtds.rb +29 -0
  60. data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
  61. data/lib/sequel/adapters/jdbc/mysql.rb +7 -24
  62. data/lib/sequel/adapters/jdbc/oracle.rb +88 -25
  63. data/lib/sequel/adapters/jdbc/postgresql.rb +58 -48
  64. data/lib/sequel/adapters/jdbc/progress.rb +21 -0
  65. data/lib/sequel/adapters/jdbc/sqlite.rb +20 -10
  66. data/lib/sequel/adapters/jdbc/sqlserver.rb +66 -0
  67. data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
  68. data/lib/sequel/adapters/jdbc.rb +265 -94
  69. data/lib/sequel/adapters/mock.rb +361 -0
  70. data/lib/sequel/adapters/mysql.rb +118 -222
  71. data/lib/sequel/adapters/mysql2.rb +58 -57
  72. data/lib/sequel/adapters/odbc/mssql.rb +15 -7
  73. data/lib/sequel/adapters/odbc.rb +28 -9
  74. data/lib/sequel/adapters/openbase.rb +3 -5
  75. data/lib/sequel/adapters/oracle.rb +349 -53
  76. data/lib/sequel/adapters/postgres.rb +356 -107
  77. data/lib/sequel/adapters/shared/access.rb +32 -9
  78. data/lib/sequel/adapters/shared/db2.rb +342 -0
  79. data/lib/sequel/adapters/shared/firebird.rb +221 -0
  80. data/lib/sequel/adapters/shared/informix.rb +53 -0
  81. data/lib/sequel/adapters/shared/mssql.rb +335 -118
  82. data/lib/sequel/adapters/shared/mysql.rb +340 -76
  83. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +155 -0
  84. data/lib/sequel/adapters/shared/oracle.rb +243 -45
  85. data/lib/sequel/adapters/shared/postgres.rb +524 -279
  86. data/lib/sequel/adapters/shared/progress.rb +5 -8
  87. data/lib/sequel/adapters/shared/sqlite.rb +265 -89
  88. data/lib/sequel/adapters/sqlite.rb +101 -39
  89. data/lib/sequel/adapters/swift/mysql.rb +9 -12
  90. data/lib/sequel/adapters/swift/postgres.rb +9 -74
  91. data/lib/sequel/adapters/swift/sqlite.rb +8 -6
  92. data/lib/sequel/adapters/swift.rb +8 -7
  93. data/lib/sequel/adapters/tinytds.rb +161 -21
  94. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +66 -0
  95. data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
  96. data/lib/sequel/ast_transformer.rb +194 -0
  97. data/lib/sequel/connection_pool/sharded_single.rb +11 -1
  98. data/lib/sequel/connection_pool/sharded_threaded.rb +28 -2
  99. data/lib/sequel/connection_pool/single.rb +5 -0
  100. data/lib/sequel/connection_pool/threaded.rb +38 -14
  101. data/lib/sequel/connection_pool.rb +10 -2
  102. data/lib/sequel/core.rb +118 -11
  103. data/lib/sequel/database/connecting.rb +38 -28
  104. data/lib/sequel/database/dataset.rb +4 -4
  105. data/lib/sequel/database/dataset_defaults.rb +63 -2
  106. data/lib/sequel/database/logging.rb +7 -2
  107. data/lib/sequel/database/misc.rb +150 -46
  108. data/lib/sequel/database/query.rb +215 -65
  109. data/lib/sequel/database/schema_generator.rb +64 -20
  110. data/lib/sequel/database/schema_methods.rb +212 -54
  111. data/lib/sequel/dataset/actions.rb +322 -85
  112. data/lib/sequel/dataset/features.rb +96 -8
  113. data/lib/sequel/dataset/graph.rb +38 -11
  114. data/lib/sequel/dataset/misc.rb +50 -23
  115. data/lib/sequel/dataset/mutation.rb +12 -7
  116. data/lib/sequel/dataset/prepared_statements.rb +68 -30
  117. data/lib/sequel/dataset/query.rb +237 -44
  118. data/lib/sequel/dataset/sql.rb +698 -278
  119. data/lib/sequel/dataset.rb +8 -0
  120. data/lib/sequel/exceptions.rb +4 -0
  121. data/lib/sequel/extensions/_pretty_table.rb +79 -0
  122. data/lib/sequel/extensions/arbitrary_servers.rb +108 -0
  123. data/lib/sequel/extensions/columns_introspection.rb +61 -0
  124. data/lib/sequel/{core_sql.rb → extensions/core_extensions.rb} +16 -34
  125. data/lib/sequel/extensions/migration.rb +97 -11
  126. data/lib/sequel/extensions/named_timezones.rb +5 -0
  127. data/lib/sequel/extensions/null_dataset.rb +90 -0
  128. data/lib/sequel/extensions/pg_array.rb +460 -0
  129. data/lib/sequel/extensions/pg_array_ops.rb +220 -0
  130. data/lib/sequel/extensions/pg_auto_parameterize.rb +169 -0
  131. data/lib/sequel/extensions/pg_hstore.rb +296 -0
  132. data/lib/sequel/extensions/pg_hstore_ops.rb +259 -0
  133. data/lib/sequel/extensions/pg_inet.rb +89 -0
  134. data/lib/sequel/extensions/pg_json.rb +178 -0
  135. data/lib/sequel/extensions/pg_statement_cache.rb +316 -0
  136. data/lib/sequel/extensions/pretty_table.rb +5 -71
  137. data/lib/sequel/extensions/query.rb +1 -1
  138. data/lib/sequel/extensions/query_literals.rb +79 -0
  139. data/lib/sequel/extensions/schema_caching.rb +76 -0
  140. data/lib/sequel/extensions/schema_dumper.rb +251 -37
  141. data/lib/sequel/extensions/select_remove.rb +35 -0
  142. data/lib/sequel/extensions/server_block.rb +139 -0
  143. data/lib/sequel/extensions/sql_expr.rb +4 -110
  144. data/lib/sequel/extensions/thread_local_timezones.rb +1 -1
  145. data/lib/sequel/extensions/to_dot.rb +95 -83
  146. data/lib/sequel/model/associations.rb +1187 -393
  147. data/lib/sequel/model/base.rb +578 -170
  148. data/lib/sequel/model/errors.rb +1 -1
  149. data/lib/sequel/model/exceptions.rb +5 -1
  150. data/lib/sequel/model/inflections.rb +1 -1
  151. data/lib/sequel/model.rb +30 -11
  152. data/lib/sequel/no_core_ext.rb +2 -0
  153. data/lib/sequel/plugins/active_model.rb +13 -1
  154. data/lib/sequel/plugins/association_pks.rb +22 -4
  155. data/lib/sequel/plugins/caching.rb +25 -18
  156. data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
  157. data/lib/sequel/plugins/composition.rb +44 -12
  158. data/lib/sequel/plugins/dataset_associations.rb +100 -0
  159. data/lib/sequel/plugins/defaults_setter.rb +58 -0
  160. data/lib/sequel/plugins/dirty.rb +214 -0
  161. data/lib/sequel/plugins/eager_each.rb +59 -0
  162. data/lib/sequel/plugins/force_encoding.rb +6 -6
  163. data/lib/sequel/plugins/hook_class_methods.rb +1 -1
  164. data/lib/sequel/plugins/identity_map.rb +123 -8
  165. data/lib/sequel/plugins/instance_filters.rb +10 -0
  166. data/lib/sequel/plugins/instance_hooks.rb +1 -1
  167. data/lib/sequel/plugins/json_serializer.rb +58 -6
  168. data/lib/sequel/plugins/list.rb +12 -2
  169. data/lib/sequel/plugins/many_through_many.rb +79 -28
  170. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +71 -0
  171. data/lib/sequel/plugins/nested_attributes.rb +139 -63
  172. data/lib/sequel/plugins/optimistic_locking.rb +8 -0
  173. data/lib/sequel/plugins/prepared_statements.rb +167 -0
  174. data/lib/sequel/plugins/prepared_statements_associations.rb +87 -0
  175. data/lib/sequel/plugins/prepared_statements_safe.rb +82 -0
  176. data/lib/sequel/plugins/prepared_statements_with_pk.rb +59 -0
  177. data/lib/sequel/plugins/rcte_tree.rb +29 -15
  178. data/lib/sequel/plugins/schema.rb +7 -2
  179. data/lib/sequel/plugins/serialization.rb +98 -49
  180. data/lib/sequel/plugins/serialization_modification_detection.rb +63 -0
  181. data/lib/sequel/plugins/sharding.rb +21 -54
  182. data/lib/sequel/plugins/single_table_inheritance.rb +5 -3
  183. data/lib/sequel/plugins/static_cache.rb +99 -0
  184. data/lib/sequel/plugins/subclasses.rb +10 -2
  185. data/lib/sequel/plugins/tactical_eager_loading.rb +7 -7
  186. data/lib/sequel/plugins/timestamps.rb +1 -1
  187. data/lib/sequel/plugins/typecast_on_load.rb +9 -12
  188. data/lib/sequel/plugins/update_primary_key.rb +2 -2
  189. data/lib/sequel/plugins/validation_class_methods.rb +1 -1
  190. data/lib/sequel/plugins/xml_serializer.rb +15 -4
  191. data/lib/sequel/sql.rb +526 -59
  192. data/lib/sequel/timezones.rb +57 -38
  193. data/lib/sequel/version.rb +1 -1
  194. data/spec/adapters/db2_spec.rb +146 -0
  195. data/spec/adapters/firebird_spec.rb +1 -1
  196. data/spec/adapters/mssql_spec.rb +142 -40
  197. data/spec/adapters/mysql_spec.rb +380 -234
  198. data/spec/adapters/oracle_spec.rb +67 -77
  199. data/spec/adapters/postgres_spec.rb +1050 -212
  200. data/spec/adapters/spec_helper.rb +8 -5
  201. data/spec/adapters/sqlite_spec.rb +139 -27
  202. data/spec/core/connection_pool_spec.rb +196 -93
  203. data/spec/core/database_spec.rb +879 -510
  204. data/spec/core/dataset_spec.rb +1415 -1086
  205. data/spec/core/expression_filters_spec.rb +554 -109
  206. data/spec/core/mock_adapter_spec.rb +449 -0
  207. data/spec/core/object_graph_spec.rb +86 -114
  208. data/spec/core/schema_generator_spec.rb +4 -4
  209. data/spec/core/schema_spec.rb +482 -38
  210. data/spec/core/spec_helper.rb +6 -48
  211. data/spec/extensions/active_model_spec.rb +13 -0
  212. data/spec/extensions/arbitrary_servers_spec.rb +110 -0
  213. data/spec/extensions/association_autoreloading_spec.rb +18 -10
  214. data/spec/extensions/association_dependencies_spec.rb +15 -25
  215. data/spec/extensions/association_pks_spec.rb +66 -32
  216. data/spec/extensions/association_proxies_spec.rb +4 -4
  217. data/spec/extensions/caching_spec.rb +47 -51
  218. data/spec/extensions/class_table_inheritance_spec.rb +31 -83
  219. data/spec/extensions/columns_introspection_spec.rb +91 -0
  220. data/spec/extensions/composition_spec.rb +18 -13
  221. data/spec/{core/core_sql_spec.rb → extensions/core_extensions_spec.rb} +119 -139
  222. data/spec/extensions/dataset_associations_spec.rb +199 -0
  223. data/spec/extensions/defaults_setter_spec.rb +64 -0
  224. data/spec/extensions/dirty_spec.rb +155 -0
  225. data/spec/extensions/eager_each_spec.rb +34 -0
  226. data/spec/extensions/force_encoding_spec.rb +4 -2
  227. data/spec/extensions/hook_class_methods_spec.rb +69 -92
  228. data/spec/extensions/identity_map_spec.rb +131 -22
  229. data/spec/extensions/inflector_spec.rb +0 -4
  230. data/spec/extensions/instance_filters_spec.rb +11 -21
  231. data/spec/extensions/instance_hooks_spec.rb +72 -0
  232. data/spec/extensions/json_serializer_spec.rb +49 -6
  233. data/spec/extensions/lazy_attributes_spec.rb +16 -20
  234. data/spec/extensions/list_spec.rb +48 -39
  235. data/spec/extensions/many_through_many_spec.rb +283 -250
  236. data/spec/extensions/many_to_one_pk_lookup_spec.rb +140 -0
  237. data/spec/extensions/migration_spec.rb +140 -35
  238. data/spec/extensions/named_timezones_spec.rb +29 -11
  239. data/spec/extensions/nested_attributes_spec.rb +251 -89
  240. data/spec/extensions/null_dataset_spec.rb +85 -0
  241. data/spec/extensions/optimistic_locking_spec.rb +24 -21
  242. data/spec/extensions/pg_array_ops_spec.rb +105 -0
  243. data/spec/extensions/pg_array_spec.rb +196 -0
  244. data/spec/extensions/pg_auto_parameterize_spec.rb +65 -0
  245. data/spec/extensions/pg_hstore_ops_spec.rb +136 -0
  246. data/spec/extensions/pg_hstore_spec.rb +195 -0
  247. data/spec/extensions/pg_inet_spec.rb +44 -0
  248. data/spec/extensions/pg_json_spec.rb +101 -0
  249. data/spec/extensions/pg_statement_cache_spec.rb +209 -0
  250. data/spec/extensions/prepared_statements_associations_spec.rb +111 -0
  251. data/spec/extensions/prepared_statements_safe_spec.rb +61 -0
  252. data/spec/extensions/prepared_statements_spec.rb +87 -0
  253. data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
  254. data/spec/extensions/pretty_table_spec.rb +7 -6
  255. data/spec/extensions/query_literals_spec.rb +168 -0
  256. data/spec/extensions/query_spec.rb +6 -0
  257. data/spec/extensions/rcte_tree_spec.rb +50 -43
  258. data/spec/extensions/schema_caching_spec.rb +41 -0
  259. data/spec/extensions/schema_dumper_spec.rb +429 -22
  260. data/spec/extensions/schema_spec.rb +25 -21
  261. data/spec/extensions/select_remove_spec.rb +38 -0
  262. data/spec/extensions/serialization_modification_detection_spec.rb +72 -0
  263. data/spec/extensions/serialization_spec.rb +85 -43
  264. data/spec/extensions/server_block_spec.rb +90 -0
  265. data/spec/extensions/sharding_spec.rb +69 -143
  266. data/spec/extensions/single_table_inheritance_spec.rb +23 -29
  267. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  268. data/spec/extensions/spec_helper.rb +22 -61
  269. data/spec/extensions/sql_expr_spec.rb +29 -60
  270. data/spec/extensions/static_cache_spec.rb +145 -0
  271. data/spec/extensions/tactical_eager_loading_spec.rb +17 -19
  272. data/spec/extensions/thread_local_timezones_spec.rb +22 -2
  273. data/spec/extensions/timestamps_spec.rb +6 -6
  274. data/spec/extensions/to_dot_spec.rb +4 -7
  275. data/spec/extensions/touch_spec.rb +13 -14
  276. data/spec/extensions/tree_spec.rb +11 -26
  277. data/spec/extensions/typecast_on_load_spec.rb +9 -6
  278. data/spec/extensions/update_primary_key_spec.rb +30 -24
  279. data/spec/extensions/validation_class_methods_spec.rb +30 -51
  280. data/spec/extensions/validation_helpers_spec.rb +16 -35
  281. data/spec/extensions/xml_serializer_spec.rb +29 -4
  282. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +4 -0
  283. data/spec/files/transaction_specified_migrations/002_create_basic.rb +4 -0
  284. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +3 -0
  285. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +3 -0
  286. data/spec/integration/associations_test.rb +659 -21
  287. data/spec/integration/database_test.rb +9 -3
  288. data/spec/integration/dataset_test.rb +605 -91
  289. data/spec/integration/eager_loader_test.rb +19 -21
  290. data/spec/integration/migrator_test.rb +2 -3
  291. data/spec/integration/model_test.rb +81 -2
  292. data/spec/integration/plugin_test.rb +454 -143
  293. data/spec/integration/prepared_statement_test.rb +263 -128
  294. data/spec/integration/schema_test.rb +309 -43
  295. data/spec/integration/spec_helper.rb +40 -30
  296. data/spec/integration/timezone_test.rb +38 -12
  297. data/spec/integration/transaction_test.rb +183 -8
  298. data/spec/integration/type_test.rb +18 -4
  299. data/spec/model/association_reflection_spec.rb +201 -7
  300. data/spec/model/associations_spec.rb +1067 -661
  301. data/spec/model/base_spec.rb +329 -95
  302. data/spec/model/dataset_methods_spec.rb +7 -27
  303. data/spec/model/eager_loading_spec.rb +677 -676
  304. data/spec/model/hooks_spec.rb +349 -67
  305. data/spec/model/model_spec.rb +240 -168
  306. data/spec/model/plugins_spec.rb +24 -13
  307. data/spec/model/record_spec.rb +490 -232
  308. data/spec/model/spec_helper.rb +14 -71
  309. data/spec/model/validations_spec.rb +11 -0
  310. data/spec/rcov.opts +2 -0
  311. metadata +178 -80
@@ -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)
@@ -7,7 +7,7 @@ describe Sequel::Migrator do
7
7
  @m = Sequel::Migrator
8
8
  end
9
9
  after do
10
- [:schema_info, :schema_migrations, :sm1111, :sm1122, :sm2222, :sm2233, :sm3333, :sm11111, :sm22222].each{|n| @db.drop_table(n) rescue nil}
10
+ @db.drop_table?(:schema_info, :schema_migrations, :sm1111, :sm1122, :sm2222, :sm2233, :sm3333, :sm11111, :sm22222)
11
11
  end
12
12
 
13
13
  specify "should be able to migrate up and down all the way successfully" do
@@ -187,8 +187,7 @@ describe Sequel::Migrator do
187
187
 
188
188
  specify "should handle reversible migrations" do
189
189
  @dir = 'spec/files/reversible_migrations'
190
- @db.drop_table(:a) rescue nil
191
- @db.drop_table(:b) rescue nil
190
+ @db.drop_table?(:a, :b)
192
191
  @m.apply(@db, @dir, 1)
193
192
  [:schema_info, :a].each{|n| @db.table_exists?(n).should be_true}
194
193
  [:schema_migrations, :b].each{|n| @db.table_exists?(n).should be_false}
@@ -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
@@ -11,7 +11,7 @@ describe "Sequel::Model basic support" do
11
11
  end
12
12
  end
13
13
  after do
14
- @db.drop_table(:items)
14
+ @db.drop_table?(:items)
15
15
  Object.send(:remove_const, :Item)
16
16
  end
17
17
 
@@ -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)
206
+ proc{class ::Item < Sequel::Model(db); end; Object.send(:remove_const, :Item)}.should_not raise_error
207
+ proc{c = Class.new(Sequel::Model); c.set_dataset(db[:items])}.should_not raise_error
208
+ end
209
+ end