sequel 5.20.0 → 5.49.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 (511) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +398 -1922
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +7 -7
  5. data/doc/advanced_associations.rdoc +4 -4
  6. data/doc/association_basics.rdoc +80 -16
  7. data/doc/cheat_sheet.rdoc +6 -5
  8. data/doc/code_order.rdoc +10 -12
  9. data/doc/dataset_filtering.rdoc +17 -2
  10. data/doc/fork_safety.rdoc +84 -0
  11. data/doc/migration.rdoc +11 -5
  12. data/doc/model_dataset_method_design.rdoc +1 -1
  13. data/doc/model_plugins.rdoc +1 -1
  14. data/doc/opening_databases.rdoc +10 -2
  15. data/doc/postgresql.rdoc +82 -3
  16. data/doc/querying.rdoc +4 -4
  17. data/doc/release_notes/5.21.0.txt +87 -0
  18. data/doc/release_notes/5.22.0.txt +48 -0
  19. data/doc/release_notes/5.23.0.txt +56 -0
  20. data/doc/release_notes/5.24.0.txt +56 -0
  21. data/doc/release_notes/5.25.0.txt +32 -0
  22. data/doc/release_notes/5.26.0.txt +35 -0
  23. data/doc/release_notes/5.27.0.txt +21 -0
  24. data/doc/release_notes/5.28.0.txt +16 -0
  25. data/doc/release_notes/5.29.0.txt +22 -0
  26. data/doc/release_notes/5.30.0.txt +20 -0
  27. data/doc/release_notes/5.31.0.txt +148 -0
  28. data/doc/release_notes/5.32.0.txt +46 -0
  29. data/doc/release_notes/5.33.0.txt +24 -0
  30. data/doc/release_notes/5.34.0.txt +40 -0
  31. data/doc/release_notes/5.35.0.txt +56 -0
  32. data/doc/release_notes/5.36.0.txt +60 -0
  33. data/doc/release_notes/5.37.0.txt +30 -0
  34. data/doc/release_notes/5.38.0.txt +28 -0
  35. data/doc/release_notes/5.39.0.txt +19 -0
  36. data/doc/release_notes/5.40.0.txt +40 -0
  37. data/doc/release_notes/5.41.0.txt +25 -0
  38. data/doc/release_notes/5.42.0.txt +136 -0
  39. data/doc/release_notes/5.43.0.txt +98 -0
  40. data/doc/release_notes/5.44.0.txt +32 -0
  41. data/doc/release_notes/5.45.0.txt +34 -0
  42. data/doc/release_notes/5.46.0.txt +87 -0
  43. data/doc/release_notes/5.47.0.txt +59 -0
  44. data/doc/release_notes/5.48.0.txt +14 -0
  45. data/doc/release_notes/5.49.0.txt +59 -0
  46. data/doc/sharding.rdoc +2 -0
  47. data/doc/sql.rdoc +13 -1
  48. data/doc/testing.rdoc +20 -7
  49. data/doc/transactions.rdoc +0 -8
  50. data/doc/validations.rdoc +1 -1
  51. data/doc/virtual_rows.rdoc +1 -1
  52. data/lib/sequel/adapters/ado/access.rb +1 -1
  53. data/lib/sequel/adapters/ado.rb +43 -35
  54. data/lib/sequel/adapters/ibmdb.rb +2 -2
  55. data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
  56. data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
  57. data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
  58. data/lib/sequel/adapters/jdbc.rb +24 -6
  59. data/lib/sequel/adapters/mysql.rb +1 -1
  60. data/lib/sequel/adapters/mysql2.rb +2 -3
  61. data/lib/sequel/adapters/odbc.rb +8 -6
  62. data/lib/sequel/adapters/oracle.rb +5 -4
  63. data/lib/sequel/adapters/postgres.rb +15 -9
  64. data/lib/sequel/adapters/shared/access.rb +6 -6
  65. data/lib/sequel/adapters/shared/mssql.rb +66 -21
  66. data/lib/sequel/adapters/shared/mysql.rb +27 -10
  67. data/lib/sequel/adapters/shared/oracle.rb +29 -23
  68. data/lib/sequel/adapters/shared/postgres.rb +271 -32
  69. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  70. data/lib/sequel/adapters/shared/sqlite.rb +161 -19
  71. data/lib/sequel/adapters/sqlanywhere.rb +1 -1
  72. data/lib/sequel/adapters/sqlite.rb +1 -1
  73. data/lib/sequel/adapters/tinytds.rb +15 -2
  74. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
  75. data/lib/sequel/ast_transformer.rb +6 -0
  76. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  77. data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
  78. data/lib/sequel/connection_pool/single.rb +1 -1
  79. data/lib/sequel/connection_pool/threaded.rb +2 -2
  80. data/lib/sequel/core.rb +333 -319
  81. data/lib/sequel/database/connecting.rb +3 -4
  82. data/lib/sequel/database/logging.rb +7 -1
  83. data/lib/sequel/database/misc.rb +31 -12
  84. data/lib/sequel/database/query.rb +3 -1
  85. data/lib/sequel/database/schema_generator.rb +53 -51
  86. data/lib/sequel/database/schema_methods.rb +38 -23
  87. data/lib/sequel/database/transactions.rb +17 -18
  88. data/lib/sequel/dataset/actions.rb +14 -9
  89. data/lib/sequel/dataset/features.rb +16 -0
  90. data/lib/sequel/dataset/misc.rb +2 -2
  91. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  92. data/lib/sequel/dataset/prepared_statements.rb +2 -0
  93. data/lib/sequel/dataset/query.rb +26 -9
  94. data/lib/sequel/dataset/sql.rb +76 -25
  95. data/lib/sequel/dataset.rb +4 -2
  96. data/lib/sequel/deprecated.rb +3 -1
  97. data/lib/sequel/exceptions.rb +2 -0
  98. data/lib/sequel/extensions/_pretty_table.rb +1 -2
  99. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  100. data/lib/sequel/extensions/async_thread_pool.rb +438 -0
  101. data/lib/sequel/extensions/blank.rb +8 -0
  102. data/lib/sequel/extensions/columns_introspection.rb +1 -2
  103. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  104. data/lib/sequel/extensions/connection_validator.rb +2 -2
  105. data/lib/sequel/extensions/core_refinements.rb +2 -0
  106. data/lib/sequel/extensions/date_arithmetic.rb +36 -24
  107. data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
  108. data/lib/sequel/extensions/eval_inspect.rb +2 -0
  109. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  110. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  111. data/lib/sequel/extensions/index_caching.rb +9 -7
  112. data/lib/sequel/extensions/inflector.rb +9 -1
  113. data/lib/sequel/extensions/integer64.rb +2 -0
  114. data/lib/sequel/extensions/migration.rb +11 -3
  115. data/lib/sequel/extensions/named_timezones.rb +56 -8
  116. data/lib/sequel/extensions/pagination.rb +1 -1
  117. data/lib/sequel/extensions/pg_array.rb +5 -0
  118. data/lib/sequel/extensions/pg_array_ops.rb +14 -6
  119. data/lib/sequel/extensions/pg_enum.rb +11 -3
  120. data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
  121. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  122. data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
  123. data/lib/sequel/extensions/pg_inet.rb +15 -5
  124. data/lib/sequel/extensions/pg_interval.rb +36 -8
  125. data/lib/sequel/extensions/pg_json.rb +387 -123
  126. data/lib/sequel/extensions/pg_json_ops.rb +238 -0
  127. data/lib/sequel/extensions/pg_loose_count.rb +3 -1
  128. data/lib/sequel/extensions/pg_range.rb +17 -9
  129. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  130. data/lib/sequel/extensions/pg_row.rb +4 -2
  131. data/lib/sequel/extensions/pg_row_ops.rb +24 -0
  132. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  133. data/lib/sequel/extensions/query.rb +3 -0
  134. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  135. data/lib/sequel/extensions/s.rb +2 -0
  136. data/lib/sequel/extensions/schema_dumper.rb +24 -7
  137. data/lib/sequel/extensions/server_block.rb +18 -7
  138. data/lib/sequel/extensions/sql_comments.rb +2 -2
  139. data/lib/sequel/extensions/string_agg.rb +1 -1
  140. data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
  141. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
  142. data/lib/sequel/extensions/to_dot.rb +9 -3
  143. data/lib/sequel/model/associations.rb +356 -117
  144. data/lib/sequel/model/base.rb +107 -68
  145. data/lib/sequel/model/errors.rb +10 -1
  146. data/lib/sequel/model/inflections.rb +1 -1
  147. data/lib/sequel/model/plugins.rb +9 -3
  148. data/lib/sequel/model.rb +3 -1
  149. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  150. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  151. data/lib/sequel/plugins/association_pks.rb +60 -18
  152. data/lib/sequel/plugins/association_proxies.rb +8 -2
  153. data/lib/sequel/plugins/async_thread_pool.rb +39 -0
  154. data/lib/sequel/plugins/auto_validations.rb +39 -5
  155. data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
  156. data/lib/sequel/plugins/blacklist_security.rb +1 -2
  157. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  158. data/lib/sequel/plugins/caching.rb +3 -0
  159. data/lib/sequel/plugins/class_table_inheritance.rb +33 -28
  160. data/lib/sequel/plugins/column_encryption.rb +728 -0
  161. data/lib/sequel/plugins/composition.rb +7 -2
  162. data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
  163. data/lib/sequel/plugins/constraint_validations.rb +2 -1
  164. data/lib/sequel/plugins/csv_serializer.rb +28 -9
  165. data/lib/sequel/plugins/dataset_associations.rb +4 -1
  166. data/lib/sequel/plugins/dirty.rb +60 -22
  167. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  168. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  169. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  170. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  171. data/lib/sequel/plugins/json_serializer.rb +57 -35
  172. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  173. data/lib/sequel/plugins/many_through_many.rb +108 -9
  174. data/lib/sequel/plugins/nested_attributes.rb +15 -3
  175. data/lib/sequel/plugins/pg_array_associations.rb +58 -41
  176. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
  177. data/lib/sequel/plugins/prepared_statements.rb +15 -12
  178. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
  179. data/lib/sequel/plugins/rcte_tree.rb +43 -35
  180. data/lib/sequel/plugins/serialization.rb +8 -3
  181. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  182. data/lib/sequel/plugins/sharding.rb +11 -5
  183. data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
  184. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  185. data/lib/sequel/plugins/static_cache.rb +9 -4
  186. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  187. data/lib/sequel/plugins/string_stripper.rb +1 -1
  188. data/lib/sequel/plugins/subclasses.rb +2 -0
  189. data/lib/sequel/plugins/throw_failures.rb +1 -1
  190. data/lib/sequel/plugins/timestamps.rb +1 -1
  191. data/lib/sequel/plugins/tree.rb +9 -4
  192. data/lib/sequel/plugins/typecast_on_load.rb +3 -2
  193. data/lib/sequel/plugins/unused_associations.rb +521 -0
  194. data/lib/sequel/plugins/update_or_create.rb +1 -1
  195. data/lib/sequel/plugins/validation_class_methods.rb +5 -1
  196. data/lib/sequel/plugins/validation_helpers.rb +18 -11
  197. data/lib/sequel/plugins/xml_serializer.rb +1 -1
  198. data/lib/sequel/sql.rb +20 -5
  199. data/lib/sequel/timezones.rb +63 -17
  200. data/lib/sequel/version.rb +1 -1
  201. metadata +113 -381
  202. data/Rakefile +0 -151
  203. data/doc/release_notes/4.0.0.txt +0 -262
  204. data/doc/release_notes/4.1.0.txt +0 -85
  205. data/doc/release_notes/4.10.0.txt +0 -226
  206. data/doc/release_notes/4.11.0.txt +0 -147
  207. data/doc/release_notes/4.12.0.txt +0 -105
  208. data/doc/release_notes/4.13.0.txt +0 -169
  209. data/doc/release_notes/4.14.0.txt +0 -68
  210. data/doc/release_notes/4.15.0.txt +0 -56
  211. data/doc/release_notes/4.16.0.txt +0 -36
  212. data/doc/release_notes/4.17.0.txt +0 -38
  213. data/doc/release_notes/4.18.0.txt +0 -36
  214. data/doc/release_notes/4.19.0.txt +0 -45
  215. data/doc/release_notes/4.2.0.txt +0 -129
  216. data/doc/release_notes/4.20.0.txt +0 -79
  217. data/doc/release_notes/4.21.0.txt +0 -94
  218. data/doc/release_notes/4.22.0.txt +0 -72
  219. data/doc/release_notes/4.23.0.txt +0 -65
  220. data/doc/release_notes/4.24.0.txt +0 -99
  221. data/doc/release_notes/4.25.0.txt +0 -181
  222. data/doc/release_notes/4.26.0.txt +0 -44
  223. data/doc/release_notes/4.27.0.txt +0 -78
  224. data/doc/release_notes/4.28.0.txt +0 -57
  225. data/doc/release_notes/4.29.0.txt +0 -41
  226. data/doc/release_notes/4.3.0.txt +0 -40
  227. data/doc/release_notes/4.30.0.txt +0 -37
  228. data/doc/release_notes/4.31.0.txt +0 -57
  229. data/doc/release_notes/4.32.0.txt +0 -132
  230. data/doc/release_notes/4.33.0.txt +0 -88
  231. data/doc/release_notes/4.34.0.txt +0 -86
  232. data/doc/release_notes/4.35.0.txt +0 -130
  233. data/doc/release_notes/4.36.0.txt +0 -116
  234. data/doc/release_notes/4.37.0.txt +0 -50
  235. data/doc/release_notes/4.38.0.txt +0 -67
  236. data/doc/release_notes/4.39.0.txt +0 -127
  237. data/doc/release_notes/4.4.0.txt +0 -92
  238. data/doc/release_notes/4.40.0.txt +0 -179
  239. data/doc/release_notes/4.41.0.txt +0 -77
  240. data/doc/release_notes/4.42.0.txt +0 -221
  241. data/doc/release_notes/4.43.0.txt +0 -87
  242. data/doc/release_notes/4.44.0.txt +0 -125
  243. data/doc/release_notes/4.45.0.txt +0 -370
  244. data/doc/release_notes/4.46.0.txt +0 -404
  245. data/doc/release_notes/4.47.0.txt +0 -56
  246. data/doc/release_notes/4.48.0.txt +0 -293
  247. data/doc/release_notes/4.49.0.txt +0 -222
  248. data/doc/release_notes/4.5.0.txt +0 -34
  249. data/doc/release_notes/4.6.0.txt +0 -30
  250. data/doc/release_notes/4.7.0.txt +0 -103
  251. data/doc/release_notes/4.8.0.txt +0 -175
  252. data/doc/release_notes/4.9.0.txt +0 -190
  253. data/spec/adapter_spec.rb +0 -4
  254. data/spec/adapters/db2_spec.rb +0 -170
  255. data/spec/adapters/mssql_spec.rb +0 -804
  256. data/spec/adapters/mysql_spec.rb +0 -1065
  257. data/spec/adapters/oracle_spec.rb +0 -371
  258. data/spec/adapters/postgres_spec.rb +0 -4125
  259. data/spec/adapters/spec_helper.rb +0 -44
  260. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  261. data/spec/adapters/sqlite_spec.rb +0 -652
  262. data/spec/bin_spec.rb +0 -278
  263. data/spec/core/connection_pool_spec.rb +0 -1250
  264. data/spec/core/database_spec.rb +0 -2865
  265. data/spec/core/dataset_spec.rb +0 -5515
  266. data/spec/core/deprecated_spec.rb +0 -70
  267. data/spec/core/expression_filters_spec.rb +0 -1455
  268. data/spec/core/mock_adapter_spec.rb +0 -722
  269. data/spec/core/object_graph_spec.rb +0 -336
  270. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  271. data/spec/core/schema_generator_spec.rb +0 -214
  272. data/spec/core/schema_spec.rb +0 -1826
  273. data/spec/core/spec_helper.rb +0 -24
  274. data/spec/core/version_spec.rb +0 -14
  275. data/spec/core_extensions_spec.rb +0 -763
  276. data/spec/core_model_spec.rb +0 -2
  277. data/spec/core_spec.rb +0 -1
  278. data/spec/deprecation_helper.rb +0 -30
  279. data/spec/extensions/accessed_columns_spec.rb +0 -51
  280. data/spec/extensions/active_model_spec.rb +0 -99
  281. data/spec/extensions/after_initialize_spec.rb +0 -28
  282. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  283. data/spec/extensions/association_dependencies_spec.rb +0 -125
  284. data/spec/extensions/association_pks_spec.rb +0 -423
  285. data/spec/extensions/association_proxies_spec.rb +0 -100
  286. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  287. data/spec/extensions/auto_validations_spec.rb +0 -229
  288. data/spec/extensions/blacklist_security_spec.rb +0 -95
  289. data/spec/extensions/blank_spec.rb +0 -69
  290. data/spec/extensions/boolean_readers_spec.rb +0 -93
  291. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  292. data/spec/extensions/caching_spec.rb +0 -273
  293. data/spec/extensions/caller_logging_spec.rb +0 -52
  294. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  295. data/spec/extensions/column_conflicts_spec.rb +0 -75
  296. data/spec/extensions/column_select_spec.rb +0 -129
  297. data/spec/extensions/columns_introspection_spec.rb +0 -90
  298. data/spec/extensions/columns_updated_spec.rb +0 -35
  299. data/spec/extensions/composition_spec.rb +0 -248
  300. data/spec/extensions/connection_expiration_spec.rb +0 -151
  301. data/spec/extensions/connection_validator_spec.rb +0 -144
  302. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  303. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  304. data/spec/extensions/constraint_validations_spec.rb +0 -439
  305. data/spec/extensions/core_refinements_spec.rb +0 -528
  306. data/spec/extensions/csv_serializer_spec.rb +0 -183
  307. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  308. data/spec/extensions/dataset_associations_spec.rb +0 -365
  309. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  310. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  311. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  312. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  313. data/spec/extensions/defaults_setter_spec.rb +0 -150
  314. data/spec/extensions/delay_add_association_spec.rb +0 -73
  315. data/spec/extensions/dirty_spec.rb +0 -189
  316. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  317. data/spec/extensions/eager_each_spec.rb +0 -62
  318. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  319. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  320. data/spec/extensions/error_splitter_spec.rb +0 -18
  321. data/spec/extensions/error_sql_spec.rb +0 -20
  322. data/spec/extensions/escaped_like_spec.rb +0 -40
  323. data/spec/extensions/eval_inspect_spec.rb +0 -81
  324. data/spec/extensions/finder_spec.rb +0 -260
  325. data/spec/extensions/force_encoding_spec.rb +0 -126
  326. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  327. data/spec/extensions/graph_each_spec.rb +0 -113
  328. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  329. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  330. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  331. data/spec/extensions/index_caching_spec.rb +0 -66
  332. data/spec/extensions/inflector_spec.rb +0 -183
  333. data/spec/extensions/input_transformer_spec.rb +0 -69
  334. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  335. data/spec/extensions/instance_filters_spec.rb +0 -79
  336. data/spec/extensions/instance_hooks_spec.rb +0 -246
  337. data/spec/extensions/integer64_spec.rb +0 -22
  338. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  339. data/spec/extensions/json_serializer_spec.rb +0 -336
  340. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  341. data/spec/extensions/list_spec.rb +0 -291
  342. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  343. data/spec/extensions/many_through_many_spec.rb +0 -2177
  344. data/spec/extensions/migration_spec.rb +0 -864
  345. data/spec/extensions/modification_detection_spec.rb +0 -93
  346. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  347. data/spec/extensions/named_timezones_spec.rb +0 -111
  348. data/spec/extensions/nested_attributes_spec.rb +0 -767
  349. data/spec/extensions/null_dataset_spec.rb +0 -85
  350. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  351. data/spec/extensions/pagination_spec.rb +0 -116
  352. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  353. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  354. data/spec/extensions/pg_array_spec.rb +0 -398
  355. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -172
  356. data/spec/extensions/pg_enum_spec.rb +0 -118
  357. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  358. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  359. data/spec/extensions/pg_hstore_spec.rb +0 -219
  360. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  361. data/spec/extensions/pg_inet_spec.rb +0 -72
  362. data/spec/extensions/pg_interval_spec.rb +0 -103
  363. data/spec/extensions/pg_json_ops_spec.rb +0 -289
  364. data/spec/extensions/pg_json_spec.rb +0 -262
  365. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  366. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  367. data/spec/extensions/pg_range_spec.rb +0 -519
  368. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  369. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  370. data/spec/extensions/pg_row_spec.rb +0 -363
  371. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  372. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  373. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  374. data/spec/extensions/prepared_statements_spec.rb +0 -177
  375. data/spec/extensions/pretty_table_spec.rb +0 -123
  376. data/spec/extensions/query_spec.rb +0 -94
  377. data/spec/extensions/rcte_tree_spec.rb +0 -381
  378. data/spec/extensions/round_timestamps_spec.rb +0 -39
  379. data/spec/extensions/s_spec.rb +0 -60
  380. data/spec/extensions/schema_caching_spec.rb +0 -64
  381. data/spec/extensions/schema_dumper_spec.rb +0 -870
  382. data/spec/extensions/select_remove_spec.rb +0 -38
  383. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  384. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  385. data/spec/extensions/serialization_spec.rb +0 -365
  386. data/spec/extensions/server_block_spec.rb +0 -97
  387. data/spec/extensions/server_logging_spec.rb +0 -45
  388. data/spec/extensions/sharding_spec.rb +0 -189
  389. data/spec/extensions/shared_caching_spec.rb +0 -151
  390. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  391. data/spec/extensions/singular_table_names_spec.rb +0 -22
  392. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  393. data/spec/extensions/spec_helper.rb +0 -63
  394. data/spec/extensions/split_array_nil_spec.rb +0 -24
  395. data/spec/extensions/split_values_spec.rb +0 -57
  396. data/spec/extensions/sql_comments_spec.rb +0 -33
  397. data/spec/extensions/sql_expr_spec.rb +0 -59
  398. data/spec/extensions/static_cache_spec.rb +0 -471
  399. data/spec/extensions/string_agg_spec.rb +0 -90
  400. data/spec/extensions/string_date_time_spec.rb +0 -95
  401. data/spec/extensions/string_stripper_spec.rb +0 -68
  402. data/spec/extensions/subclasses_spec.rb +0 -79
  403. data/spec/extensions/subset_conditions_spec.rb +0 -38
  404. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  405. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  406. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  407. data/spec/extensions/table_select_spec.rb +0 -83
  408. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  409. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  410. data/spec/extensions/throw_failures_spec.rb +0 -74
  411. data/spec/extensions/timestamps_spec.rb +0 -209
  412. data/spec/extensions/to_dot_spec.rb +0 -153
  413. data/spec/extensions/touch_spec.rb +0 -226
  414. data/spec/extensions/tree_spec.rb +0 -334
  415. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  416. data/spec/extensions/unlimited_update_spec.rb +0 -21
  417. data/spec/extensions/update_or_create_spec.rb +0 -83
  418. data/spec/extensions/update_primary_key_spec.rb +0 -105
  419. data/spec/extensions/update_refresh_spec.rb +0 -59
  420. data/spec/extensions/uuid_spec.rb +0 -101
  421. data/spec/extensions/validate_associated_spec.rb +0 -52
  422. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  423. data/spec/extensions/validation_contexts_spec.rb +0 -31
  424. data/spec/extensions/validation_helpers_spec.rb +0 -525
  425. data/spec/extensions/whitelist_security_spec.rb +0 -157
  426. data/spec/extensions/xml_serializer_spec.rb +0 -213
  427. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  428. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  429. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  430. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  431. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  432. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  433. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  434. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  435. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  436. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  437. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  438. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  439. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  440. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  441. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  442. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  443. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  444. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  445. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  446. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  447. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  448. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  449. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  450. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  451. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  452. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  453. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  454. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  455. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  456. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  457. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  458. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  459. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  460. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  461. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  462. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  463. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  464. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  465. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  466. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  467. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  468. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  469. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  470. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  471. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  472. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  473. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  474. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  475. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  476. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  477. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  478. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  479. data/spec/guards_helper.rb +0 -59
  480. data/spec/integration/associations_test.rb +0 -2597
  481. data/spec/integration/database_test.rb +0 -113
  482. data/spec/integration/dataset_test.rb +0 -1981
  483. data/spec/integration/eager_loader_test.rb +0 -687
  484. data/spec/integration/migrator_test.rb +0 -262
  485. data/spec/integration/model_test.rb +0 -203
  486. data/spec/integration/plugin_test.rb +0 -2396
  487. data/spec/integration/prepared_statement_test.rb +0 -405
  488. data/spec/integration/schema_test.rb +0 -889
  489. data/spec/integration/spec_helper.rb +0 -65
  490. data/spec/integration/timezone_test.rb +0 -86
  491. data/spec/integration/transaction_test.rb +0 -603
  492. data/spec/integration/type_test.rb +0 -127
  493. data/spec/model/association_reflection_spec.rb +0 -803
  494. data/spec/model/associations_spec.rb +0 -4738
  495. data/spec/model/base_spec.rb +0 -875
  496. data/spec/model/class_dataset_methods_spec.rb +0 -146
  497. data/spec/model/dataset_methods_spec.rb +0 -198
  498. data/spec/model/eager_loading_spec.rb +0 -2377
  499. data/spec/model/hooks_spec.rb +0 -370
  500. data/spec/model/inflector_spec.rb +0 -26
  501. data/spec/model/model_spec.rb +0 -956
  502. data/spec/model/plugins_spec.rb +0 -429
  503. data/spec/model/record_spec.rb +0 -2118
  504. data/spec/model/spec_helper.rb +0 -46
  505. data/spec/model/validations_spec.rb +0 -220
  506. data/spec/model_no_assoc_spec.rb +0 -1
  507. data/spec/model_spec.rb +0 -1
  508. data/spec/plugin_spec.rb +0 -1
  509. data/spec/sequel_coverage.rb +0 -15
  510. data/spec/sequel_warning.rb +0 -4
  511. data/spec/spec_config.rb +0 -12
@@ -1,603 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Database transactions" do
4
- before(:all) do
5
- @db = DB
6
- @db.create_table!(:items, :engine=>'InnoDB'){String :name; Integer :value}
7
- @d = @db[:items]
8
- end
9
- before do
10
- @d.delete
11
- end
12
- after(:all) do
13
- @db.drop_table?(:items)
14
- end
15
-
16
- it "should support transactions" do
17
- @db.transaction{@d.insert(:name => 'abc', :value => 1)}
18
- @d.count.must_equal 1
19
- end
20
-
21
- it "should have #transaction yield the connection" do
22
- @db.transaction{|conn| conn.wont_equal nil}
23
- end
24
-
25
- it "should have #in_transaction? work correctly" do
26
- @db.in_transaction?.must_equal false
27
- c = nil
28
- @db.transaction{c = @db.in_transaction?}
29
- c.must_equal true
30
- end
31
-
32
- it "should correctly rollback transactions" do
33
- proc do
34
- @db.transaction do
35
- @d.insert(:name => 'abc', :value => 1)
36
- raise Interrupt, 'asdf'
37
- end
38
- end.must_raise(Interrupt)
39
-
40
- @db.transaction do
41
- @d.insert(:name => 'abc', :value => 1)
42
- raise Sequel::Rollback
43
- end.must_be_nil
44
-
45
- proc do
46
- @db.transaction(:rollback=>:reraise) do
47
- @d.insert(:name => 'abc', :value => 1)
48
- raise Sequel::Rollback
49
- end
50
- end.must_raise(Sequel::Rollback)
51
-
52
- @db.transaction(:rollback=>:always) do
53
- @d.insert(:name => 'abc', :value => 1)
54
- 2
55
- end.must_equal 2
56
-
57
- @d.count.must_equal 0
58
- end
59
-
60
- it "should support nested transactions" do
61
- @db.transaction do
62
- @db.transaction do
63
- @d.insert(:name => 'abc', :value => 1)
64
- end
65
- end
66
- @d.count.must_equal 1
67
-
68
- @d.delete
69
- @db.transaction do
70
- @d.insert(:name => 'abc', :value => 1)
71
- @db.transaction do
72
- raise Sequel::Rollback
73
- end
74
- end
75
- @d.count.must_equal 0
76
-
77
- proc {@db.transaction do
78
- @d.insert(:name => 'abc', :value => 1)
79
- @db.transaction do
80
- raise Interrupt, 'asdf'
81
- end
82
- end}.must_raise(Interrupt)
83
- @d.count.must_equal 0
84
- end
85
-
86
- it "should support rollback_on_exit" do
87
- @db.transaction do
88
- @d.insert(:name => 'abc', :value => 1)
89
- @db.rollback_on_exit
90
- end
91
- @d.must_be_empty
92
-
93
- catch(:foo) do
94
- @db.transaction do
95
- @d.insert(:name => 'abc', :value => 1)
96
- @db.rollback_on_exit
97
- throw :foo
98
- end
99
- end
100
- @d.must_be_empty
101
-
102
- lambda do
103
- @db.transaction do
104
- @d.insert(:name => 'abc', :value => 1)
105
- @db.rollback_on_exit
106
- return true
107
- end
108
- end
109
- @d.must_be_empty
110
-
111
- @db.transaction do
112
- @d.insert(:name => 'abc', :value => 1)
113
- @db.rollback_on_exit
114
- @db.rollback_on_exit(:cancel=>true)
115
- end
116
- @d.count.must_equal 1
117
-
118
- @d.delete
119
- @db.transaction do
120
- @d.insert(:name => 'abc', :value => 1)
121
- @db.rollback_on_exit(:cancel=>true)
122
- end
123
- @d.count.must_equal 1
124
-
125
- @d.delete
126
- @db.transaction do
127
- @d.insert(:name => 'abc', :value => 1)
128
- @db.rollback_on_exit
129
- @db.rollback_on_exit(:cancel=>true)
130
- @db.rollback_on_exit
131
- end
132
- @d.must_be_empty
133
- end
134
-
135
- if DB.supports_savepoints?
136
- it "should support rollback_on_exit inside savepoints" do
137
- @db.transaction do
138
- @d.insert(:name => 'abc', :value => 1)
139
- @db.transaction(:savepoint=>true) do
140
- @d.insert(:name => 'def', :value => 2)
141
- @db.rollback_on_exit
142
- end
143
- end
144
- @d.must_be_empty
145
-
146
- @db.transaction do
147
- @d.insert(:name => 'abc', :value => 1)
148
- @db.transaction(:savepoint=>true) do
149
- @d.insert(:name => 'def', :value => 2)
150
- @db.rollback_on_exit
151
- @db.transaction(:savepoint=>true) do
152
- @d.insert(:name => 'ghi', :value => 3)
153
- end
154
- end
155
- end
156
- @d.must_be_empty
157
-
158
- @db.transaction do
159
- @d.insert(:name => 'abc', :value => 1)
160
- @db.transaction(:savepoint=>true) do
161
- @d.insert(:name => 'def', :value => 2)
162
- @db.transaction(:savepoint=>true) do
163
- @db.rollback_on_exit
164
- @d.insert(:name => 'ghi', :value => 3)
165
- end
166
- end
167
- end
168
- @d.must_be_empty
169
- end
170
-
171
- it "should support rollback_on_exit with :savepoint option" do
172
- @db.transaction do
173
- @d.insert(:name => 'abc', :value => 1)
174
- @db.transaction(:savepoint=>true) do
175
- @d.insert(:name => 'def', :value => 2)
176
- @db.rollback_on_exit(:savepoint=>true)
177
- end
178
- end
179
- @d.select_order_map(:value).must_equal [1]
180
-
181
- @d.delete
182
- @db.transaction do
183
- @d.insert(:name => 'abc', :value => 1)
184
- @db.transaction(:savepoint=>true) do
185
- @d.insert(:name => 'def', :value => 2)
186
- @db.rollback_on_exit(:savepoint=>true)
187
- @db.transaction(:savepoint=>true) do
188
- @db.rollback_on_exit(:savepoint=>true)
189
- @d.insert(:name => 'ghi', :value => 3)
190
- end
191
- end
192
- end
193
- @d.select_order_map(:value).must_equal [1]
194
- end
195
-
196
- it "should support rollback_on_exit with :savepoint=>Integer" do
197
- @db.transaction do
198
- @d.insert(:name => 'abc', :value => 1)
199
- @db.transaction(:savepoint=>true) do
200
- @d.insert(:name => 'def', :value => 2)
201
- @db.rollback_on_exit(:savepoint=>2)
202
- end
203
- end
204
- @d.must_be_empty
205
-
206
- @db.transaction do
207
- @d.insert(:name => 'abc', :value => 1)
208
- @db.transaction(:savepoint=>true) do
209
- @d.insert(:name => 'def', :value => 2)
210
- @db.rollback_on_exit(:savepoint=>3)
211
- end
212
- end
213
- @d.must_be_empty
214
-
215
- @db.transaction do
216
- @d.insert(:name => 'abc', :value => 1)
217
- @db.transaction(:savepoint=>true) do
218
- @d.insert(:name => 'def', :value => 2)
219
- @db.transaction(:savepoint=>true) do
220
- @db.rollback_on_exit(:savepoint=>2)
221
- @d.insert(:name => 'ghi', :value => 3)
222
- end
223
- end
224
- end
225
- @d.select_order_map(:value).must_equal [1]
226
- end
227
-
228
- it "should support rollback_on_exit with :savepoint=>Integer and :cancel" do
229
- @db.transaction do
230
- @d.insert(:name => 'abc', :value => 1)
231
- @db.transaction(:savepoint=>true) do
232
- @db.rollback_on_exit(:savepoint=>true)
233
- @d.insert(:name => 'def', :value => 2)
234
- @db.transaction(:savepoint=>true) do
235
- @db.rollback_on_exit(:savepoint=>2, :cancel=>true)
236
- @d.insert(:name => 'ghi', :value => 3)
237
- end
238
- end
239
- end
240
- @d.select_order_map(:value).must_equal [1, 2, 3]
241
-
242
- @d.delete
243
- @db.transaction do
244
- @db.rollback_on_exit(:savepoint=>true)
245
- @d.insert(:name => 'abc', :value => 1)
246
- @db.transaction(:savepoint=>true) do
247
- @db.rollback_on_exit(:savepoint=>true)
248
- @d.insert(:name => 'def', :value => 2)
249
- @db.transaction(:savepoint=>true) do
250
- @db.rollback_on_exit(:savepoint=>3, :cancel=>true)
251
- @d.insert(:name => 'ghi', :value => 3)
252
- end
253
- end
254
- end
255
- @d.select_order_map(:value).must_equal [1, 2, 3]
256
-
257
- @d.delete
258
- @db.transaction do
259
- @d.insert(:name => 'abc', :value => 1)
260
- @db.rollback_on_exit(:savepoint=>true)
261
- @db.transaction(:savepoint=>true) do
262
- @d.insert(:name => 'def', :value => 2)
263
- @db.transaction(:savepoint=>true) do
264
- @db.rollback_on_exit(:savepoint=>4, :cancel=>true)
265
- @d.insert(:name => 'ghi', :value => 3)
266
- end
267
- end
268
- end
269
- @d.select_order_map(:value).must_equal [1, 2, 3]
270
-
271
- @d.delete
272
- @db.transaction do
273
- @d.insert(:name => 'abc', :value => 1)
274
- @db.transaction(:savepoint=>true) do
275
- @db.rollback_on_exit(:savepoint=>2)
276
- @d.insert(:name => 'def', :value => 2)
277
- @db.transaction(:savepoint=>true) do
278
- @db.rollback_on_exit(:savepoint=>2, :cancel=>true)
279
- @d.insert(:name => 'ghi', :value => 3)
280
- end
281
- end
282
- end
283
- @d.must_be_empty
284
- end
285
-
286
- it "should handle table_exists? failures inside transactions" do
287
- @db.transaction do
288
- @d.insert(:name => '1')
289
- @db.table_exists?(:asadf098asd9asd98sa).must_equal false
290
- @d.insert(:name => '2')
291
- end
292
- @d.select_order_map(:name).must_equal %w'1 2'
293
- end
294
-
295
- it "should handle :rollback=>:always inside transactions" do
296
- @db.transaction do
297
- @db.transaction(:rollback=>:always) do
298
- @d.insert(:name => 'abc', :value => 1)
299
- 2
300
- end.must_equal 2
301
- end
302
- @d.select_order_map(:value).must_equal []
303
- end
304
-
305
- it "should handle table_exists? failures inside savepoints" do
306
- @db.transaction do
307
- @d.insert(:name => '1')
308
- @db.transaction(:savepoint=>true) do
309
- @d.insert(:name => '2')
310
- @db.table_exists?(:asadf098asd9asd98sa).must_equal false
311
- @d.insert(:name => '3')
312
- end
313
- @d.insert(:name => '4')
314
- end
315
- @d.select_order_map(:name).must_equal %w'1 2 3 4'
316
- end
317
-
318
- it "should support nested transactions through savepoints using the savepoint option" do
319
- @db.transaction do
320
- @d.insert(:name => '1')
321
- @db.transaction(:savepoint=>true) do
322
- @d.insert(:name => '2')
323
- @db.transaction do
324
- @d.insert(:name => '3')
325
- raise Sequel::Rollback
326
- end
327
- end
328
- @d.insert(:name => '4')
329
- @db.transaction do
330
- @d.insert(:name => '6')
331
- @db.transaction(:savepoint=>true) do
332
- @d.insert(:name => '7')
333
- raise Sequel::Rollback
334
- end
335
- end
336
- @d.insert(:name => '5')
337
- end
338
-
339
- @d.order(:name).map(:name).must_equal %w{1 4 5 6}
340
- end
341
-
342
- it "should support nested transactions through savepoints using the auto_savepoint option" do
343
- @db.transaction(:auto_savepoint=>true) do
344
- @d.insert(:name => '1')
345
- @db.transaction do
346
- @d.insert(:name => '2')
347
- @db.transaction do
348
- @d.insert(:name => '3')
349
- raise Sequel::Rollback
350
- end
351
- end
352
- @d.insert(:name => '4')
353
- @db.transaction(:auto_savepoint=>true) do
354
- @d.insert(:name => '6')
355
- @db.transaction do
356
- @d.insert(:name => '7')
357
- raise Sequel::Rollback
358
- end
359
- end
360
- @d.insert(:name => '5')
361
- end
362
-
363
- @d.order(:name).map(:name).must_equal %w{1 4 5 6}
364
- end
365
- end
366
-
367
- it "should handle returning inside of the block by committing" do
368
- def ret_commit
369
- @db.transaction do
370
- @db[:items].insert(:name => 'abc')
371
- return
372
- end
373
- end
374
-
375
- @d.count.must_equal 0
376
- ret_commit
377
- @d.count.must_equal 1
378
- ret_commit
379
- @d.count.must_equal 2
380
- proc do
381
- @db.transaction do
382
- raise Interrupt, 'asdf'
383
- end
384
- end.must_raise(Interrupt)
385
-
386
- @d.count.must_equal 2
387
- end
388
-
389
- if DB.supports_prepared_transactions?
390
- it "should allow saving and destroying of model objects" do
391
- c = Class.new(Sequel::Model(@d))
392
- c.set_primary_key :name
393
- c.unrestrict_primary_key
394
- @db.transaction(:prepare=>'XYZ'){c.create(:name => '1'); c.create(:name => '2').destroy}
395
- @db.commit_prepared_transaction('XYZ')
396
- @d.select_order_map(:name).must_equal ['1']
397
- end
398
-
399
- it "should commit prepared transactions using commit_prepared_transaction" do
400
- @db.transaction(:prepare=>'XYZ'){@d.insert(:name => '1')}
401
- @db.commit_prepared_transaction('XYZ')
402
- @d.select_order_map(:name).must_equal ['1']
403
- end
404
-
405
- it "should rollback prepared transactions using rollback_prepared_transaction" do
406
- @db.transaction(:prepare=>'XYZ'){@d.insert(:name => '1')}
407
- @db.rollback_prepared_transaction('XYZ')
408
- @d.select_order_map(:name).must_equal []
409
- end
410
-
411
- if DB.supports_savepoints_in_prepared_transactions?
412
- it "should support savepoints when using prepared transactions" do
413
- @db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@d.insert(:name => '1')}}
414
- @db.commit_prepared_transaction('XYZ')
415
- @d.select_order_map(:name).must_equal ['1']
416
- end
417
- end
418
- end
419
-
420
- it "should support all transaction isolation levels" do
421
- [:uncommitted, :committed, :repeatable, :serializable].each_with_index do |l, i|
422
- @db.transaction(:isolation=>l){@d.insert(:name => 'abc', :value => 1)}
423
- @d.count.must_equal i + 1
424
- end
425
- end
426
-
427
- it "should support after_commit outside transactions" do
428
- c = nil
429
- @db.after_commit{c = 1}
430
- c.must_equal 1
431
- end
432
-
433
- it "should support after_rollback outside transactions" do
434
- c = nil
435
- @db.after_rollback{c = 1}
436
- c.must_be_nil
437
- end
438
-
439
- it "should support after_commit inside transactions" do
440
- c = nil
441
- @db.transaction{@db.after_commit{c = 1}; c.must_be_nil}
442
- c.must_equal 1
443
- end
444
-
445
- it "should support after_rollback inside transactions" do
446
- c = nil
447
- @db.transaction{@db.after_rollback{c = 1}; c.must_be_nil}
448
- c.must_be_nil
449
- end
450
-
451
- it "should not call after_commit if the transaction rolls back" do
452
- c = nil
453
- @db.transaction{@db.after_commit{c = 1}; c.must_be_nil; raise Sequel::Rollback}
454
- c.must_be_nil
455
- end
456
-
457
- it "should call after_rollback if the transaction rolls back" do
458
- c = nil
459
- @db.transaction{@db.after_rollback{c = 1}; c.must_be_nil; raise Sequel::Rollback}
460
- c.must_equal 1
461
- end
462
-
463
- it "should support multiple after_commit blocks inside transactions" do
464
- c = []
465
- @db.transaction{@db.after_commit{c << 1}; @db.after_commit{c << 2}; c.must_equal []}
466
- c.must_equal [1, 2]
467
- end
468
-
469
- it "should support multiple after_rollback blocks inside transactions" do
470
- c = []
471
- @db.transaction{@db.after_rollback{c << 1}; @db.after_rollback{c << 2}; c.must_equal []; raise Sequel::Rollback}
472
- c.must_equal [1, 2]
473
- end
474
-
475
- it "should support after_commit inside nested transactions" do
476
- c = nil
477
- @db.transaction{@db.transaction{@db.after_commit{c = 1}}; c.must_be_nil}
478
- c.must_equal 1
479
- end
480
-
481
- it "should support after_rollback inside nested transactions" do
482
- c = nil
483
- @db.transaction{@db.transaction{@db.after_rollback{c = 1}}; c.must_be_nil; raise Sequel::Rollback}
484
- c.must_equal 1
485
- end
486
-
487
- if DB.supports_savepoints?
488
- it "should support after_commit inside savepoints" do
489
- c = nil
490
- @db.transaction{@db.transaction(:savepoint=>true){@db.after_commit{c = 1}}; c.must_be_nil}
491
- c.must_equal 1
492
- end
493
-
494
- it "should support after_rollback inside savepoints" do
495
- c = nil
496
- @db.transaction{@db.transaction(:savepoint=>true){@db.after_rollback{c = 1}}; c.must_be_nil; raise Sequel::Rollback}
497
- c.must_equal 1
498
- end
499
-
500
- it "should support after_commit inside savepoints with :savepoint_option" do
501
- c = nil
502
- @db.transaction{@db.transaction(:savepoint=>true){@db.after_commit(:savepoint=>true){c = 1}}; c.must_be_nil}
503
- c.must_equal 1
504
-
505
- c = nil
506
- @db.transaction{@db.transaction(:savepoint=>true){@db.transaction(:savepoint=>true){@db.after_commit(:savepoint=>true){c = 1}}}; c.must_be_nil}
507
- c.must_equal 1
508
-
509
- c = nil
510
- @db.transaction{@db.transaction(:savepoint=>true, :rollback=>:always){@db.after_commit(:savepoint=>true){c = 1}}}
511
- c.must_be_nil
512
-
513
- @db.transaction(:rollback=>:always){@db.transaction(:savepoint=>true){@db.after_commit(:savepoint=>true){c = 1}}}
514
- c.must_be_nil
515
-
516
- @db.transaction(:rollback=>:always){@db.transaction(:savepoint=>true){@db.transaction(:savepoint=>true){@db.after_commit(:savepoint=>true){c = 1}}}}
517
- c.must_be_nil
518
- end
519
-
520
- it "should support after_rollback inside savepoints with :savepoint_option" do
521
- c = nil
522
- @db.transaction{@db.transaction(:savepoint=>true, :rollback=>:always){@db.after_rollback(:savepoint=>true){c = 1}; c.must_be_nil}; c.must_equal 1}
523
- c.must_equal 1
524
-
525
- c = nil
526
- @db.transaction(:rollback=>:always){@db.transaction(:savepoint=>true){@db.after_rollback(:savepoint=>true){c = 1}}; c.must_be_nil}
527
- c.must_equal 1
528
-
529
- c = nil
530
- @db.transaction(:rollback=>:always){@db.transaction(:savepoint=>true, :rollback=>:always){@db.after_rollback(:savepoint=>true){c = 1}; c.must_be_nil}; c.must_equal 1}
531
- c.must_equal 1
532
-
533
- c = nil
534
- @db.transaction(:rollback=>:always){@db.transaction(:savepoint=>true){@db.after_rollback(:savepoint=>true){c = 1}}; c.must_be_nil}
535
- c.must_equal 1
536
-
537
- c = nil
538
- @db.transaction(:rollback=>:always){@db.transaction(:savepoint=>true){@db.transaction(:savepoint=>true){@db.after_rollback(:savepoint=>true){c = 1}}; c.must_be_nil}}
539
- c.must_equal 1
540
-
541
- c = nil
542
- @db.transaction(:rollback=>:always){@db.transaction(:savepoint=>true){@db.transaction(:savepoint=>true, :rollback=>:always){@db.after_rollback(:savepoint=>true){c = 1}; c.must_be_nil}; c.must_equal 1}}
543
- c.must_equal 1
544
-
545
- c = nil
546
- @db.transaction{@db.transaction(:savepoint=>true, :rollback=>:always){@db.transaction(:savepoint=>true){@db.after_rollback(:savepoint=>true){c = 1}}; c.must_be_nil}; c.must_equal 1}
547
- c.must_equal 1
548
- end
549
- end
550
-
551
- if DB.supports_prepared_transactions?
552
- it "should raise an error if you attempt to use after_commit or after_rollback inside a prepared transaction" do
553
- proc{@db.transaction(:prepare=>'XYZ'){@db.after_commit{}}}.must_raise(Sequel::Error)
554
- proc{@db.transaction(:prepare=>'XYZ'){@db.after_rollback{}}}.must_raise(Sequel::Error)
555
- end
556
-
557
- if DB.supports_savepoints_in_prepared_transactions?
558
- it "should raise an error if you attempt to use after_commit or after rollback inside a savepoint in a prepared transaction" do
559
- proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_commit{}}}}.must_raise(Sequel::Error)
560
- proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_rollback{}}}}.must_raise(Sequel::Error)
561
- end
562
- end
563
- end
564
- end
565
-
566
- describe "Database transaction retrying" do
567
- before(:all) do
568
- @db = DB
569
- @db.create_table!(:items, :engine=>'InnoDB'){String :a, :unique=>true, :null=>false}
570
- @d = @db[:items]
571
- end
572
- before do
573
- @d.delete
574
- end
575
- after(:all) do
576
- @db.drop_table?(:items)
577
- end
578
-
579
- it "should be supported using the :retry_on option" do
580
- @d.insert('b')
581
- @d.insert('c')
582
- s = 'a'
583
- @db.transaction(:retry_on=>Sequel::ConstraintViolation) do
584
- s = s.succ
585
- @d.insert(s)
586
- end
587
- @d.select_order_map(:a).must_equal %w'b c d'
588
- end
589
-
590
- it "should limit number of retries via the :num_retries option" do
591
- @d.insert('b')
592
- @d.insert('c')
593
- s = 'a'
594
- lambda do
595
- @db.transaction(:num_retries=>1, :retry_on=>Sequel::ConstraintViolation) do
596
- s = s.succ
597
- @d.insert(s)
598
- end
599
- end.must_raise(Sequel::UniqueConstraintViolation, Sequel::ConstraintViolation)
600
- @d.select_order_map(:a).must_equal %w'b c'
601
- end
602
- end
603
-