sequel 5.29.0 → 5.34.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 (387) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -1922
  3. data/README.rdoc +1 -1
  4. data/doc/advanced_associations.rdoc +4 -4
  5. data/doc/association_basics.rdoc +3 -3
  6. data/doc/code_order.rdoc +12 -2
  7. data/doc/model_dataset_method_design.rdoc +1 -1
  8. data/doc/postgresql.rdoc +71 -0
  9. data/doc/release_notes/5.30.0.txt +20 -0
  10. data/doc/release_notes/5.31.0.txt +148 -0
  11. data/doc/release_notes/5.32.0.txt +46 -0
  12. data/doc/release_notes/5.33.0.txt +24 -0
  13. data/doc/release_notes/5.34.0.txt +40 -0
  14. data/doc/testing.rdoc +1 -1
  15. data/lib/sequel/adapters/shared/access.rb +6 -6
  16. data/lib/sequel/adapters/shared/mssql.rb +5 -5
  17. data/lib/sequel/adapters/shared/mysql.rb +9 -9
  18. data/lib/sequel/adapters/shared/oracle.rb +16 -16
  19. data/lib/sequel/adapters/shared/postgres.rb +169 -14
  20. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  21. data/lib/sequel/adapters/shared/sqlite.rb +32 -5
  22. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  23. data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
  24. data/lib/sequel/connection_pool/single.rb +1 -1
  25. data/lib/sequel/connection_pool/threaded.rb +2 -2
  26. data/lib/sequel/core.rb +318 -314
  27. data/lib/sequel/database/connecting.rb +1 -1
  28. data/lib/sequel/database/misc.rb +16 -10
  29. data/lib/sequel/database/query.rb +3 -1
  30. data/lib/sequel/database/schema_generator.rb +0 -1
  31. data/lib/sequel/database/schema_methods.rb +15 -16
  32. data/lib/sequel/database/transactions.rb +12 -13
  33. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  34. data/lib/sequel/dataset/query.rb +4 -3
  35. data/lib/sequel/deprecated.rb +2 -0
  36. data/lib/sequel/exceptions.rb +2 -0
  37. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  38. data/lib/sequel/extensions/connection_validator.rb +2 -2
  39. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  40. data/lib/sequel/extensions/index_caching.rb +9 -7
  41. data/lib/sequel/extensions/integer64.rb +2 -0
  42. data/lib/sequel/extensions/migration.rb +1 -1
  43. data/lib/sequel/extensions/pg_enum.rb +5 -2
  44. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  45. data/lib/sequel/extensions/pg_inet.rb +13 -5
  46. data/lib/sequel/extensions/pg_interval.rb +2 -0
  47. data/lib/sequel/extensions/pg_range.rb +2 -0
  48. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  49. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  50. data/lib/sequel/extensions/schema_dumper.rb +10 -4
  51. data/lib/sequel/extensions/server_block.rb +3 -3
  52. data/lib/sequel/model.rb +2 -0
  53. data/lib/sequel/model/associations.rb +30 -18
  54. data/lib/sequel/model/base.rb +64 -55
  55. data/lib/sequel/model/plugins.rb +3 -3
  56. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  57. data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
  58. data/lib/sequel/plugins/association_pks.rb +57 -16
  59. data/lib/sequel/plugins/association_proxies.rb +2 -0
  60. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  61. data/lib/sequel/plugins/class_table_inheritance.rb +26 -26
  62. data/lib/sequel/plugins/dirty.rb +13 -13
  63. data/lib/sequel/plugins/forbid_lazy_load.rb +214 -0
  64. data/lib/sequel/plugins/json_serializer.rb +3 -7
  65. data/lib/sequel/plugins/rcte_tree.rb +2 -2
  66. data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
  67. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  68. data/lib/sequel/plugins/subclasses.rb +2 -0
  69. data/lib/sequel/timezones.rb +6 -4
  70. data/lib/sequel/version.rb +1 -1
  71. metadata +17 -368
  72. data/Rakefile +0 -151
  73. data/doc/release_notes/4.0.0.txt +0 -262
  74. data/doc/release_notes/4.1.0.txt +0 -85
  75. data/doc/release_notes/4.10.0.txt +0 -226
  76. data/doc/release_notes/4.11.0.txt +0 -147
  77. data/doc/release_notes/4.12.0.txt +0 -105
  78. data/doc/release_notes/4.13.0.txt +0 -169
  79. data/doc/release_notes/4.14.0.txt +0 -68
  80. data/doc/release_notes/4.15.0.txt +0 -56
  81. data/doc/release_notes/4.16.0.txt +0 -36
  82. data/doc/release_notes/4.17.0.txt +0 -38
  83. data/doc/release_notes/4.18.0.txt +0 -36
  84. data/doc/release_notes/4.19.0.txt +0 -45
  85. data/doc/release_notes/4.2.0.txt +0 -129
  86. data/doc/release_notes/4.20.0.txt +0 -79
  87. data/doc/release_notes/4.21.0.txt +0 -94
  88. data/doc/release_notes/4.22.0.txt +0 -72
  89. data/doc/release_notes/4.23.0.txt +0 -65
  90. data/doc/release_notes/4.24.0.txt +0 -99
  91. data/doc/release_notes/4.25.0.txt +0 -181
  92. data/doc/release_notes/4.26.0.txt +0 -44
  93. data/doc/release_notes/4.27.0.txt +0 -78
  94. data/doc/release_notes/4.28.0.txt +0 -57
  95. data/doc/release_notes/4.29.0.txt +0 -41
  96. data/doc/release_notes/4.3.0.txt +0 -40
  97. data/doc/release_notes/4.30.0.txt +0 -37
  98. data/doc/release_notes/4.31.0.txt +0 -57
  99. data/doc/release_notes/4.32.0.txt +0 -132
  100. data/doc/release_notes/4.33.0.txt +0 -88
  101. data/doc/release_notes/4.34.0.txt +0 -86
  102. data/doc/release_notes/4.35.0.txt +0 -130
  103. data/doc/release_notes/4.36.0.txt +0 -116
  104. data/doc/release_notes/4.37.0.txt +0 -50
  105. data/doc/release_notes/4.38.0.txt +0 -67
  106. data/doc/release_notes/4.39.0.txt +0 -127
  107. data/doc/release_notes/4.4.0.txt +0 -92
  108. data/doc/release_notes/4.40.0.txt +0 -179
  109. data/doc/release_notes/4.41.0.txt +0 -77
  110. data/doc/release_notes/4.42.0.txt +0 -221
  111. data/doc/release_notes/4.43.0.txt +0 -87
  112. data/doc/release_notes/4.44.0.txt +0 -125
  113. data/doc/release_notes/4.45.0.txt +0 -370
  114. data/doc/release_notes/4.46.0.txt +0 -404
  115. data/doc/release_notes/4.47.0.txt +0 -56
  116. data/doc/release_notes/4.48.0.txt +0 -293
  117. data/doc/release_notes/4.49.0.txt +0 -222
  118. data/doc/release_notes/4.5.0.txt +0 -34
  119. data/doc/release_notes/4.6.0.txt +0 -30
  120. data/doc/release_notes/4.7.0.txt +0 -103
  121. data/doc/release_notes/4.8.0.txt +0 -175
  122. data/doc/release_notes/4.9.0.txt +0 -190
  123. data/spec/adapter_spec.rb +0 -4
  124. data/spec/adapters/db2_spec.rb +0 -170
  125. data/spec/adapters/mssql_spec.rb +0 -828
  126. data/spec/adapters/mysql_spec.rb +0 -1060
  127. data/spec/adapters/oracle_spec.rb +0 -371
  128. data/spec/adapters/postgres_spec.rb +0 -4476
  129. data/spec/adapters/spec_helper.rb +0 -44
  130. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  131. data/spec/adapters/sqlite_spec.rb +0 -652
  132. data/spec/bin_spec.rb +0 -278
  133. data/spec/core/connection_pool_spec.rb +0 -1250
  134. data/spec/core/database_spec.rb +0 -2915
  135. data/spec/core/dataset_spec.rb +0 -5544
  136. data/spec/core/deprecated_spec.rb +0 -70
  137. data/spec/core/expression_filters_spec.rb +0 -1498
  138. data/spec/core/mock_adapter_spec.rb +0 -722
  139. data/spec/core/object_graph_spec.rb +0 -336
  140. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  141. data/spec/core/schema_generator_spec.rb +0 -214
  142. data/spec/core/schema_spec.rb +0 -1844
  143. data/spec/core/spec_helper.rb +0 -24
  144. data/spec/core/version_spec.rb +0 -14
  145. data/spec/core_extensions_spec.rb +0 -763
  146. data/spec/core_model_spec.rb +0 -2
  147. data/spec/core_spec.rb +0 -1
  148. data/spec/deprecation_helper.rb +0 -30
  149. data/spec/extensions/accessed_columns_spec.rb +0 -51
  150. data/spec/extensions/active_model_spec.rb +0 -99
  151. data/spec/extensions/after_initialize_spec.rb +0 -28
  152. data/spec/extensions/any_not_empty_spec.rb +0 -23
  153. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  154. data/spec/extensions/association_dependencies_spec.rb +0 -125
  155. data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
  156. data/spec/extensions/association_pks_spec.rb +0 -423
  157. data/spec/extensions/association_proxies_spec.rb +0 -100
  158. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  159. data/spec/extensions/auto_validations_spec.rb +0 -229
  160. data/spec/extensions/blacklist_security_spec.rb +0 -95
  161. data/spec/extensions/blank_spec.rb +0 -69
  162. data/spec/extensions/boolean_readers_spec.rb +0 -93
  163. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  164. data/spec/extensions/caching_spec.rb +0 -273
  165. data/spec/extensions/caller_logging_spec.rb +0 -52
  166. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  167. data/spec/extensions/column_conflicts_spec.rb +0 -75
  168. data/spec/extensions/column_select_spec.rb +0 -129
  169. data/spec/extensions/columns_introspection_spec.rb +0 -90
  170. data/spec/extensions/columns_updated_spec.rb +0 -35
  171. data/spec/extensions/composition_spec.rb +0 -248
  172. data/spec/extensions/connection_expiration_spec.rb +0 -151
  173. data/spec/extensions/connection_validator_spec.rb +0 -144
  174. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  175. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  176. data/spec/extensions/constraint_validations_spec.rb +0 -439
  177. data/spec/extensions/core_refinements_spec.rb +0 -528
  178. data/spec/extensions/csv_serializer_spec.rb +0 -183
  179. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  180. data/spec/extensions/dataset_associations_spec.rb +0 -365
  181. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  182. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  183. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  184. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  185. data/spec/extensions/defaults_setter_spec.rb +0 -150
  186. data/spec/extensions/delay_add_association_spec.rb +0 -73
  187. data/spec/extensions/dirty_spec.rb +0 -222
  188. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  189. data/spec/extensions/eager_each_spec.rb +0 -62
  190. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  191. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  192. data/spec/extensions/empty_failure_backtraces_spec.rb +0 -60
  193. data/spec/extensions/error_splitter_spec.rb +0 -18
  194. data/spec/extensions/error_sql_spec.rb +0 -20
  195. data/spec/extensions/escaped_like_spec.rb +0 -40
  196. data/spec/extensions/eval_inspect_spec.rb +0 -81
  197. data/spec/extensions/exclude_or_null_spec.rb +0 -15
  198. data/spec/extensions/finder_spec.rb +0 -260
  199. data/spec/extensions/force_encoding_spec.rb +0 -126
  200. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  201. data/spec/extensions/graph_each_spec.rb +0 -113
  202. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  203. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  204. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  205. data/spec/extensions/index_caching_spec.rb +0 -66
  206. data/spec/extensions/inflector_spec.rb +0 -183
  207. data/spec/extensions/input_transformer_spec.rb +0 -69
  208. data/spec/extensions/insert_conflict_spec.rb +0 -103
  209. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  210. data/spec/extensions/instance_filters_spec.rb +0 -79
  211. data/spec/extensions/instance_hooks_spec.rb +0 -246
  212. data/spec/extensions/integer64_spec.rb +0 -22
  213. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  214. data/spec/extensions/json_serializer_spec.rb +0 -346
  215. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  216. data/spec/extensions/list_spec.rb +0 -291
  217. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  218. data/spec/extensions/many_through_many_spec.rb +0 -2177
  219. data/spec/extensions/migration_spec.rb +0 -864
  220. data/spec/extensions/modification_detection_spec.rb +0 -93
  221. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  222. data/spec/extensions/named_timezones_spec.rb +0 -218
  223. data/spec/extensions/nested_attributes_spec.rb +0 -815
  224. data/spec/extensions/null_dataset_spec.rb +0 -85
  225. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  226. data/spec/extensions/pagination_spec.rb +0 -116
  227. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  228. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  229. data/spec/extensions/pg_array_spec.rb +0 -398
  230. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
  231. data/spec/extensions/pg_enum_spec.rb +0 -118
  232. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  233. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  234. data/spec/extensions/pg_hstore_spec.rb +0 -219
  235. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  236. data/spec/extensions/pg_inet_spec.rb +0 -72
  237. data/spec/extensions/pg_interval_spec.rb +0 -103
  238. data/spec/extensions/pg_json_ops_spec.rb +0 -356
  239. data/spec/extensions/pg_json_spec.rb +0 -451
  240. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  241. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  242. data/spec/extensions/pg_range_spec.rb +0 -600
  243. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  244. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  245. data/spec/extensions/pg_row_spec.rb +0 -363
  246. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  247. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  248. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  249. data/spec/extensions/prepared_statements_spec.rb +0 -177
  250. data/spec/extensions/pretty_table_spec.rb +0 -123
  251. data/spec/extensions/query_spec.rb +0 -94
  252. data/spec/extensions/rcte_tree_spec.rb +0 -387
  253. data/spec/extensions/round_timestamps_spec.rb +0 -39
  254. data/spec/extensions/s_spec.rb +0 -60
  255. data/spec/extensions/schema_caching_spec.rb +0 -64
  256. data/spec/extensions/schema_dumper_spec.rb +0 -870
  257. data/spec/extensions/select_remove_spec.rb +0 -38
  258. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  259. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  260. data/spec/extensions/serialization_spec.rb +0 -365
  261. data/spec/extensions/server_block_spec.rb +0 -135
  262. data/spec/extensions/server_logging_spec.rb +0 -45
  263. data/spec/extensions/sharding_spec.rb +0 -197
  264. data/spec/extensions/shared_caching_spec.rb +0 -151
  265. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  266. data/spec/extensions/singular_table_names_spec.rb +0 -22
  267. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  268. data/spec/extensions/spec_helper.rb +0 -70
  269. data/spec/extensions/split_array_nil_spec.rb +0 -24
  270. data/spec/extensions/split_values_spec.rb +0 -57
  271. data/spec/extensions/sql_comments_spec.rb +0 -33
  272. data/spec/extensions/sql_expr_spec.rb +0 -59
  273. data/spec/extensions/static_cache_cache_spec.rb +0 -35
  274. data/spec/extensions/static_cache_spec.rb +0 -471
  275. data/spec/extensions/string_agg_spec.rb +0 -90
  276. data/spec/extensions/string_date_time_spec.rb +0 -95
  277. data/spec/extensions/string_stripper_spec.rb +0 -68
  278. data/spec/extensions/subclasses_spec.rb +0 -79
  279. data/spec/extensions/subset_conditions_spec.rb +0 -38
  280. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  281. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  282. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  283. data/spec/extensions/table_select_spec.rb +0 -83
  284. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  285. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  286. data/spec/extensions/throw_failures_spec.rb +0 -74
  287. data/spec/extensions/timestamps_spec.rb +0 -209
  288. data/spec/extensions/to_dot_spec.rb +0 -153
  289. data/spec/extensions/touch_spec.rb +0 -226
  290. data/spec/extensions/tree_spec.rb +0 -334
  291. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  292. data/spec/extensions/unlimited_update_spec.rb +0 -21
  293. data/spec/extensions/update_or_create_spec.rb +0 -83
  294. data/spec/extensions/update_primary_key_spec.rb +0 -105
  295. data/spec/extensions/update_refresh_spec.rb +0 -59
  296. data/spec/extensions/uuid_spec.rb +0 -101
  297. data/spec/extensions/validate_associated_spec.rb +0 -52
  298. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  299. data/spec/extensions/validation_contexts_spec.rb +0 -31
  300. data/spec/extensions/validation_helpers_spec.rb +0 -525
  301. data/spec/extensions/whitelist_security_spec.rb +0 -157
  302. data/spec/extensions/xml_serializer_spec.rb +0 -213
  303. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  304. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  305. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  306. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  307. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  308. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  309. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  310. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  311. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  312. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  313. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  314. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  315. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  316. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  317. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  318. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  319. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  320. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  321. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  322. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  323. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  324. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  325. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  326. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  327. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  328. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  329. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  330. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  331. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  332. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  333. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  334. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  335. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  336. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  337. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  338. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  339. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  340. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  341. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  342. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  343. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  344. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  345. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  346. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  347. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  348. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  349. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  350. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  351. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  352. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  353. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  354. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  355. data/spec/guards_helper.rb +0 -59
  356. data/spec/integration/associations_test.rb +0 -2597
  357. data/spec/integration/database_test.rb +0 -113
  358. data/spec/integration/dataset_test.rb +0 -2037
  359. data/spec/integration/eager_loader_test.rb +0 -687
  360. data/spec/integration/migrator_test.rb +0 -262
  361. data/spec/integration/model_test.rb +0 -203
  362. data/spec/integration/plugin_test.rb +0 -2423
  363. data/spec/integration/prepared_statement_test.rb +0 -405
  364. data/spec/integration/schema_test.rb +0 -903
  365. data/spec/integration/spec_helper.rb +0 -71
  366. data/spec/integration/timezone_test.rb +0 -86
  367. data/spec/integration/transaction_test.rb +0 -603
  368. data/spec/integration/type_test.rb +0 -127
  369. data/spec/model/association_reflection_spec.rb +0 -803
  370. data/spec/model/associations_spec.rb +0 -4738
  371. data/spec/model/base_spec.rb +0 -875
  372. data/spec/model/class_dataset_methods_spec.rb +0 -146
  373. data/spec/model/dataset_methods_spec.rb +0 -198
  374. data/spec/model/eager_loading_spec.rb +0 -2377
  375. data/spec/model/hooks_spec.rb +0 -370
  376. data/spec/model/inflector_spec.rb +0 -26
  377. data/spec/model/model_spec.rb +0 -956
  378. data/spec/model/plugins_spec.rb +0 -429
  379. data/spec/model/record_spec.rb +0 -2118
  380. data/spec/model/spec_helper.rb +0 -46
  381. data/spec/model/validations_spec.rb +0 -220
  382. data/spec/model_no_assoc_spec.rb +0 -1
  383. data/spec/model_spec.rb +0 -1
  384. data/spec/plugin_spec.rb +0 -1
  385. data/spec/sequel_coverage.rb +0 -15
  386. data/spec/sequel_warning.rb +0 -5
  387. data/spec/spec_config.rb +0 -12
@@ -1,864 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- Sequel.extension :migration
4
-
5
- describe "Migration.descendants" do
6
- before do
7
- Sequel::Migration.descendants.clear
8
- end
9
-
10
- it "should include Migration subclasses" do
11
- @class = Class.new(Sequel::Migration)
12
-
13
- Sequel::Migration.descendants.must_equal [@class]
14
- end
15
-
16
- it "should include Migration subclasses in order of creation" do
17
- @c1 = Class.new(Sequel::Migration)
18
- @c2 = Class.new(Sequel::Migration)
19
- @c3 = Class.new(Sequel::Migration)
20
-
21
- Sequel::Migration.descendants.must_equal [@c1, @c2, @c3]
22
- end
23
-
24
- it "should include SimpleMigration instances created by migration DSL" do
25
- i1 = Sequel.migration{}
26
- i2 = Sequel.migration{}
27
- i3 = Sequel.migration{}
28
-
29
- Sequel::Migration.descendants.must_equal [i1, i2, i3]
30
- end
31
- end
32
-
33
- describe "Migration.apply" do
34
- before do
35
- @c = Class.new do
36
- define_method(:one) {|x| [1111, x]}
37
- define_method(:two) {|x| [2222, x]}
38
- end
39
- @db = @c.new
40
- end
41
-
42
- it "should raise for an invalid direction" do
43
- proc {Sequel::Migration.apply(@db, :hahaha)}.must_raise(ArgumentError)
44
- end
45
-
46
- it "should apply the up and down directions correctly" do
47
- m = Class.new(Sequel::Migration) do
48
- define_method(:up) {one(3333)}
49
- define_method(:down) {two(4444)}
50
- end
51
- m.apply(@db, :up).must_equal [1111, 3333]
52
- m.apply(@db, :down).must_equal [2222, 4444]
53
- end
54
-
55
- it "should have default up and down actions that do nothing" do
56
- m = Class.new(Sequel::Migration)
57
- m.apply(@db, :up).must_be_nil
58
- m.apply(@db, :down).must_be_nil
59
- end
60
-
61
- it "should respond to the methods the database responds to" do
62
- m = Sequel::Migration.new(Sequel.mock)
63
- m.respond_to?(:foo).must_equal false
64
- m.respond_to?(:execute).must_equal true
65
- end
66
- end
67
-
68
- describe "SimpleMigration#apply" do
69
- before do
70
- @c = Class.new do
71
- define_method(:one) {|x| [1111, x]}
72
- define_method(:two) {|x| [2222, x]}
73
- end
74
- @db = @c.new
75
- end
76
-
77
- it "should raise for an invalid direction" do
78
- proc {Sequel.migration{}.apply(@db, :hahaha)}.must_raise(ArgumentError)
79
- end
80
-
81
- it "should apply the up and down directions correctly" do
82
- m = Sequel.migration do
83
- up{one(3333)}
84
- down{two(4444)}
85
- end
86
- m.apply(@db, :up).must_equal [1111, 3333]
87
- m.apply(@db, :down).must_equal [2222, 4444]
88
- end
89
-
90
- it "should have default up and down actions that do nothing" do
91
- m = Sequel.migration{}
92
- m.apply(@db, :up).must_be_nil
93
- m.apply(@db, :down).must_be_nil
94
- end
95
- end
96
-
97
- describe "Reversible Migrations with Sequel.migration{change{}}" do
98
- before do
99
- @c = Class.new do
100
- self::AT = Class.new do
101
- attr_reader :actions
102
- def initialize(&block)
103
- @actions = []
104
- instance_eval(&block)
105
- end
106
- def method_missing(*args)
107
- @actions << args
108
- end
109
- self
110
- end
111
- attr_reader :actions
112
- def initialize
113
- @actions = []
114
- end
115
- def method_missing(*args)
116
- @actions << args
117
- end
118
- def alter_table(*args, &block)
119
- @actions << [:alter_table, self.class::AT.new(&block).actions]
120
- end
121
- end
122
- @db = @c.new
123
- @p = proc do
124
- create_table(:a, :foo=>:bar){Integer :a}
125
- add_column :a, :b, String
126
- add_index :a, :b
127
- rename_column :a, :b, :c
128
- rename_table :a, :b
129
- alter_table(:b) do
130
- add_column :d, String
131
- add_constraint :blah, 'd IS NOT NULL'
132
- add_constraint({:name=>:merp}, 'a > 1')
133
- add_foreign_key :e, :b
134
- add_foreign_key [:e], :b, :name=>'e_fk'
135
- add_foreign_key [:e, :a], :b
136
- add_primary_key :f, :b
137
- add_index :e, :name=>'e_n'
138
- add_full_text_index :e, :name=>'e_ft'
139
- add_spatial_index :e, :name=>'e_s'
140
- rename_column :e, :g
141
- end
142
- create_view(:c, 'SELECT * FROM b', :foo=>:bar)
143
- create_join_table(:cat_id=>:cats, :dog_id=>:dogs)
144
- end
145
- end
146
-
147
- it "should apply up with normal actions in normal order" do
148
- p = @p
149
- Sequel.migration{change(&p)}.apply(@db, :up)
150
- @db.actions.must_equal [[:create_table, :a, {:foo=>:bar}],
151
- [:add_column, :a, :b, String],
152
- [:add_index, :a, :b],
153
- [:rename_column, :a, :b, :c],
154
- [:rename_table, :a, :b],
155
- [:alter_table, [
156
- [:add_column, :d, String],
157
- [:add_constraint, :blah, "d IS NOT NULL"],
158
- [:add_constraint, {:name=>:merp}, "a > 1"],
159
- [:add_foreign_key, :e, :b],
160
- [:add_foreign_key, [:e], :b, {:name=>"e_fk"}],
161
- [:add_foreign_key, [:e, :a], :b],
162
- [:add_primary_key, :f, :b],
163
- [:add_index, :e, {:name=>"e_n"}],
164
- [:add_full_text_index, :e, {:name=>"e_ft"}],
165
- [:add_spatial_index, :e, {:name=>"e_s"}],
166
- [:rename_column, :e, :g]]
167
- ],
168
- [:create_view, :c, "SELECT * FROM b", {:foo=>:bar}],
169
- [:create_join_table, {:cat_id=>:cats, :dog_id=>:dogs}]]
170
- end
171
-
172
- it "should execute down with reversing actions in reverse order" do
173
- p = @p
174
- Sequel.migration{change(&p)}.apply(@db, :down)
175
- @db.actions.must_equal [
176
- [:drop_join_table, {:cat_id=>:cats, :dog_id=>:dogs}],
177
- [:drop_view, :c, {:foo=>:bar}],
178
- [:alter_table, [
179
- [:rename_column, :g, :e],
180
- [:drop_index, :e, {:name=>"e_s"}],
181
- [:drop_index, :e, {:name=>"e_ft"}],
182
- [:drop_index, :e, {:name=>"e_n"}],
183
- [:drop_column, :f],
184
- [:drop_foreign_key, [:e, :a]],
185
- [:drop_foreign_key, [:e], {:name=>"e_fk"}],
186
- [:drop_foreign_key, :e],
187
- [:drop_constraint, :merp],
188
- [:drop_constraint, :blah],
189
- [:drop_column, :d]]
190
- ],
191
- [:rename_table, :b, :a],
192
- [:rename_column, :a, :c, :b],
193
- [:drop_index, :a, :b],
194
- [:drop_column, :a, :b],
195
- [:drop_table, :a, {:foo=>:bar}]]
196
- end
197
-
198
- it "should reverse add_foreign_key with :type option" do
199
- Sequel.migration{change{alter_table(:t){add_foreign_key :b, :c, :type=>:f}}}.apply(@db, :down)
200
- actions = @db.actions
201
- actions.must_equal [[:alter_table, [[:drop_foreign_key, :b, {:type=>:f}]]]]
202
- @db.sqls
203
- db = Sequel.mock
204
- args = nil
205
- db.define_singleton_method(:foreign_key_list){|*a| args = a; [{:name=>:fbc, :columns=>[:b]}]}
206
- db.alter_table(:t){send(*actions[0][1][0])}
207
- db.sqls.must_equal ["ALTER TABLE t DROP CONSTRAINT fbc", "ALTER TABLE t DROP COLUMN b"]
208
- args.must_equal [:t]
209
- end
210
-
211
- it "should reverse add_foreign_key with :foreign_key_constraint_name option" do
212
- Sequel.migration{change{alter_table(:t){add_foreign_key :b, :c, :foreign_key_constraint_name=>:f}}}.apply(@db, :down)
213
- actions = @db.actions
214
- actions.must_equal [[:alter_table, [[:drop_foreign_key, :b, {:foreign_key_constraint_name=>:f}]]]]
215
- @db.sqls
216
- db = Sequel.mock
217
- db.alter_table(:t){send(*actions[0][1][0])}
218
- db.sqls.must_equal ["ALTER TABLE t DROP CONSTRAINT f", "ALTER TABLE t DROP COLUMN b"]
219
- end
220
-
221
- it "should raise in the down direction if migration uses unsupported method" do
222
- m = Sequel.migration{change{run 'SQL'}}
223
- m.apply(@db, :up)
224
- proc{m.apply(@db, :down)}.must_raise(Sequel::Error)
225
- end
226
-
227
- it "should raise in the down direction if migration uses add_primary_key with an array" do
228
- m = Sequel.migration{change{alter_table(:a){add_primary_key [:b]}}}
229
- m.apply(@db, :up)
230
- proc{m.apply(@db, :down)}.must_raise(Sequel::Error)
231
- end
232
-
233
- it "should raise in the down direction if migration uses add_foreign_key with an array" do
234
- m = Sequel.migration{change{alter_table(:a){add_foreign_key [:b]}}}
235
- m.apply(@db, :up)
236
- proc{m.apply(@db, :down)}.must_raise(Sequel::Error)
237
- end
238
- end
239
-
240
- describe "Sequel::Migrator.migrator_class" do
241
- it "should return IntegerMigrator if not using timestamp migrations" do
242
- Sequel::Migrator.migrator_class("spec/files/integer_migrations").must_equal Sequel::IntegerMigrator
243
- end
244
-
245
- it "should return TimestampMigrator if using timestamp migrations" do
246
- Sequel::Migrator.migrator_class('spec/files/timestamped_migrations').must_equal Sequel::TimestampMigrator
247
- end
248
-
249
- it "should return self if run on a subclass" do
250
- Sequel::IntegerMigrator.migrator_class("spec/files/timestamped_migrations").must_equal Sequel::IntegerMigrator
251
- Sequel::TimestampMigrator.migrator_class("spec/files/integer_migrations").must_equal Sequel::TimestampMigrator
252
- end
253
-
254
- it "should raise an error if the migration folder does not exist" do
255
- proc{Sequel::Migrator.apply(@db, "spec/files/nonexistant_migration_path")}.must_raise(Sequel::Migrator::Error)
256
- end
257
-
258
- end
259
-
260
- describe "Sequel::IntegerMigrator" do
261
- before do
262
- dbc = Class.new(Sequel::Mock::Database) do
263
- attr_reader :drops, :tables_created, :columns_created, :versions
264
- def initialize(*args)
265
- super
266
- @drops = []
267
- @tables_created = []
268
- @columns_created = []
269
- @versions = Hash.new{|h,k| h[k.to_sym]}
270
- end
271
-
272
- def version; versions.values.first || 0; end
273
- def creates; @tables_created.map{|x| y = x.to_s; y !~ /\Asm(\d+)/; $1.to_i if $1}.compact; end
274
- def drop_table(*a); super; @drops.concat(a.map{|x| y = x.to_s; y !~ /\Asm(\d+)/; $1.to_i if $1}.compact); end
275
-
276
- def create_table(name, opts={}, &block)
277
- super
278
- @columns_created << / \(?(\w+) integer.*\)?\z/.match(@sqls.last)[1].to_sym
279
- @tables_created << name.to_sym
280
- end
281
-
282
- def dataset
283
- super.with_extend do
284
- def count; 1; end
285
- def columns; db.columns_created end
286
- def insert(h); db.versions.merge!(h); db.run insert_sql(h) end
287
- def update(h); db.versions.merge!(h); db.run update_sql(h) end
288
- def fetch_rows(sql); db.execute(sql); yield(db.versions) unless db.versions.empty? end
289
- end
290
- end
291
-
292
- def table_exists?(name)
293
- @tables_created.include?(name.to_sym)
294
- end
295
- end
296
- @db = dbc.new
297
-
298
- @dirname = "spec/files/integer_migrations"
299
- end
300
-
301
- after do
302
- Object.send(:remove_const, "CreateSessions") if Object.const_defined?("CreateSessions")
303
- end
304
-
305
- it "should raise an error if there is a missing integer migration version" do
306
- proc{Sequel::Migrator.apply(@db, "spec/files/missing_integer_migrations")}.must_raise(Sequel::Migrator::Error)
307
- end
308
-
309
- it "should not raise an error if there is a missing integer migration version and allow_missing_migration_files is true" do
310
- Sequel::Migrator.run(@db, "spec/files/missing_integer_migrations", :allow_missing_migration_files => true)
311
- @db.sqls.last.must_equal "UPDATE schema_info SET version = 3"
312
- Sequel::Migrator.run(@db, "spec/files/missing_integer_migrations", :allow_missing_migration_files => true, :target=>0)
313
- @db.sqls.last.must_equal "UPDATE schema_info SET version = 0"
314
- end
315
-
316
- it "should raise an error if there is a duplicate integer migration version" do
317
- proc{Sequel::Migrator.apply(@db, "spec/files/duplicate_integer_migrations")}.must_raise(Sequel::Migrator::Error)
318
- end
319
-
320
- it "should raise an error if there is an empty migration file" do
321
- proc{Sequel::Migrator.apply(@db, "spec/files/empty_migration")}.must_raise(Sequel::Migrator::Error)
322
- end
323
-
324
- it "should raise an error if there is a migration file with multiple migrations" do
325
- proc{Sequel::Migrator.apply(@db, "spec/files/double_migration")}.must_raise(Sequel::Migrator::Error)
326
- end
327
-
328
- it "should raise an error if the most recent migration can't be detected" do
329
- # Have to specify a target version, otherwise an earlier check (inability
330
- # to detect the target) would raise an error, falsely matching the check.
331
- proc{Sequel::Migrator.apply(@db, "spec/files/empty_migration_folder", 2)}.must_raise(Sequel::Migrator::Error)
332
- end
333
-
334
- it "should add a column name if it doesn't already exist in the schema_info table" do
335
- @db.create_table(:schema_info){Integer :v}
336
- def @db.alter_table(*); end
337
- Sequel::Migrator.apply(@db, @dirname)
338
- end
339
-
340
- it "should automatically create the schema_info table with the version column" do
341
- @db.table_exists?(:schema_info).must_equal false
342
- Sequel::Migrator.run(@db, @dirname, :target=>0)
343
- @db.table_exists?(:schema_info).must_equal true
344
- @db.dataset.columns.must_equal [:version]
345
- end
346
-
347
- it "should allow specifying the table and columns" do
348
- @db.table_exists?(:si).must_equal false
349
- Sequel::Migrator.run(@db, @dirname, :target=>0, :table=>:si, :column=>:sic)
350
- @db.table_exists?(:si).must_equal true
351
- @db.dataset.columns.must_equal [:sic]
352
- end
353
-
354
- it "should support :relative option for running relative migrations" do
355
- Sequel::Migrator.run(@db, @dirname, :relative=>2).must_equal 2
356
- @db.creates.must_equal [1111, 2222]
357
- @db.version.must_equal 2
358
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1, 2]
359
-
360
- Sequel::Migrator.run(@db, @dirname, :relative=>-1).must_equal 1
361
- @db.drops.must_equal [2222]
362
- @db.version.must_equal 1
363
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1]
364
-
365
- Sequel::Migrator.run(@db, @dirname, :relative=>2).must_equal 3
366
- @db.creates.must_equal [1111, 2222, 2222, 3333]
367
- @db.version.must_equal 3
368
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [2, 3]
369
-
370
- Sequel::Migrator.run(@db, @dirname, :relative=>-3).must_equal 0
371
- @db.drops.must_equal [2222, 3333, 2222, 1111]
372
- @db.version.must_equal 0
373
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [2, 1, 0]
374
- end
375
-
376
- it "should handle :relative option beyond the upper and lower limit" do
377
- Sequel::Migrator.run(@db, @dirname, :relative=>100).must_equal 3
378
- @db.creates.must_equal [1111, 2222, 3333]
379
- @db.version.must_equal 3
380
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1, 2, 3]
381
-
382
- Sequel::Migrator.run(@db, @dirname, :relative=>-200).must_equal 0
383
- @db.drops.must_equal [3333, 2222, 1111]
384
- @db.version.must_equal 0
385
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [2, 1, 0]
386
- end
387
-
388
- it "should correctly handle migration target versions beyond the upper and lower limits" do
389
- Sequel::Migrator.run(@db, @dirname, :target=>100).must_equal 3
390
- @db.creates.must_equal [1111, 2222, 3333]
391
- @db.version.must_equal 3
392
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1, 2, 3]
393
-
394
- Sequel::Migrator.run(@db, @dirname, :target=>-100).must_equal 0
395
- @db.drops.must_equal [3333, 2222, 1111]
396
- @db.version.must_equal 0
397
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [2, 1, 0]
398
- end
399
-
400
- it "should apply migrations correctly in the up direction if no target is given" do
401
- Sequel::Migrator.apply(@db, @dirname)
402
- @db.creates.must_equal [1111, 2222, 3333]
403
- @db.version.must_equal 3
404
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1, 2, 3]
405
- end
406
-
407
- it "should be able to tell whether there are outstanding migrations" do
408
- Sequel::Migrator.is_current?(@db, @dirname).must_equal false
409
- Sequel::Migrator.apply(@db, @dirname)
410
- Sequel::Migrator.is_current?(@db, @dirname).must_equal true
411
- end
412
-
413
- it "should have #check_current raise an exception if the migrator is not current" do
414
- proc{Sequel::Migrator.check_current(@db, @dirname)}.must_raise(Sequel::Migrator::NotCurrentError)
415
- Sequel::Migrator.apply(@db, @dirname)
416
- Sequel::Migrator.check_current(@db, @dirname)
417
- end
418
-
419
- it "should apply migrations correctly in the up direction with target" do
420
- Sequel::Migrator.apply(@db, @dirname, 2)
421
- @db.creates.must_equal [1111, 2222]
422
- @db.version.must_equal 2
423
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1, 2]
424
- end
425
-
426
- it "should apply migrations correctly in the up direction with target and existing" do
427
- Sequel::Migrator.apply(@db, @dirname, 2, 1)
428
- @db.creates.must_equal [2222]
429
- @db.version.must_equal 2
430
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [2]
431
- end
432
-
433
- it "should apply migrations correctly in the down direction with target" do
434
- @db.create_table(:schema_info){Integer :version, :default=>0}
435
- @db[:schema_info].insert(:version=>3)
436
- @db.version.must_equal 3
437
- Sequel::Migrator.apply(@db, @dirname, 0)
438
- @db.drops.must_equal [3333, 2222, 1111]
439
- @db.version.must_equal 0
440
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [2, 1, 0]
441
- end
442
-
443
- it "should apply migrations correctly in the down direction with target and existing" do
444
- Sequel::Migrator.apply(@db, @dirname, 1, 2)
445
- @db.drops.must_equal [2222]
446
- @db.version.must_equal 1
447
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1]
448
- end
449
-
450
- it "should return the target version" do
451
- Sequel::Migrator.apply(@db, @dirname, 3, 2).must_equal 3
452
- Sequel::Migrator.apply(@db, @dirname, 0).must_equal 0
453
- Sequel::Migrator.apply(@db, @dirname).must_equal 3
454
- end
455
-
456
- it "should use IntegerMigrator if IntegerMigrator.apply called, even for timestamped migration directory" do
457
- proc{Sequel::IntegerMigrator.apply(@db, "spec/files/timestamped_migrations")}.must_raise(Sequel::Migrator::Error)
458
- end
459
-
460
- it "should not use transactions by default" do
461
- Sequel::Migrator.apply(@db, "spec/files/transaction_unspecified_migrations")
462
- @db.sqls.must_equal ["CREATE TABLE schema_info (version integer DEFAULT 0 NOT NULL)", "SELECT 1 AS one FROM schema_info LIMIT 1", "INSERT INTO schema_info (version) VALUES (0)", "SELECT version FROM schema_info LIMIT 1", "CREATE TABLE sm11111 (smc1 integer)", "UPDATE schema_info SET version = 1", "CREATE TABLE sm (smc1 integer)", "UPDATE schema_info SET version = 2"]
463
- end
464
-
465
- it "should use transactions by default if the database supports transactional ddl" do
466
- def @db.supports_transactional_ddl?; true end
467
- Sequel::Migrator.apply(@db, "spec/files/transaction_unspecified_migrations")
468
- @db.sqls.must_equal ["CREATE TABLE schema_info (version integer DEFAULT 0 NOT NULL)", "SELECT 1 AS one FROM schema_info LIMIT 1", "INSERT INTO schema_info (version) VALUES (0)", "SELECT version FROM schema_info LIMIT 1", "BEGIN", "CREATE TABLE sm11111 (smc1 integer)", "UPDATE schema_info SET version = 1", "COMMIT", "BEGIN", "CREATE TABLE sm (smc1 integer)", "UPDATE schema_info SET version = 2", "COMMIT"]
469
- end
470
-
471
- it "should respect transaction use on a per migration basis" do
472
- def @db.supports_transactional_ddl?; true end
473
- Sequel::Migrator.apply(@db, "spec/files/transaction_specified_migrations")
474
- @db.sqls.must_equal ["CREATE TABLE schema_info (version integer DEFAULT 0 NOT NULL)", "SELECT 1 AS one FROM schema_info LIMIT 1", "INSERT INTO schema_info (version) VALUES (0)", "SELECT version FROM schema_info LIMIT 1", "BEGIN", "CREATE TABLE sm11111 (smc1 integer)", "UPDATE schema_info SET version = 1", "COMMIT", "CREATE TABLE sm (smc1 integer)", "UPDATE schema_info SET version = 2"]
475
- end
476
-
477
- it "should force transactions if enabled in the migrator" do
478
- Sequel::Migrator.run(@db, "spec/files/transaction_specified_migrations", :use_transactions=>true)
479
- @db.sqls.must_equal ["CREATE TABLE schema_info (version integer DEFAULT 0 NOT NULL)", "SELECT 1 AS one FROM schema_info LIMIT 1", "INSERT INTO schema_info (version) VALUES (0)", "SELECT version FROM schema_info LIMIT 1", "BEGIN", "CREATE TABLE sm11111 (smc1 integer)", "UPDATE schema_info SET version = 1", "COMMIT", "BEGIN", "CREATE TABLE sm (smc1 integer)", "UPDATE schema_info SET version = 2", "COMMIT"]
480
- end
481
-
482
- it "should not use transactions if disabled in the migrator" do
483
- Sequel::Migrator.run(@db, "spec/files/transaction_unspecified_migrations", :use_transactions=>false)
484
- @db.sqls.must_equal ["CREATE TABLE schema_info (version integer DEFAULT 0 NOT NULL)", "SELECT 1 AS one FROM schema_info LIMIT 1", "INSERT INTO schema_info (version) VALUES (0)", "SELECT version FROM schema_info LIMIT 1", "CREATE TABLE sm11111 (smc1 integer)", "UPDATE schema_info SET version = 1", "CREATE TABLE sm (smc1 integer)", "UPDATE schema_info SET version = 2"]
485
- end
486
- end
487
-
488
- describe "Sequel::TimestampMigrator" do
489
- before do
490
- @dsc = dsc = Class.new(Sequel::Mock::Dataset) do
491
- def files
492
- db.files
493
- end
494
-
495
- def columns
496
- super
497
- case opts[:from].first
498
- when :schema_info, 'schema_info'
499
- [:version]
500
- when :schema_migrations, 'schema_migrations'
501
- [:filename]
502
- when :sm, 'sm'
503
- [:fn]
504
- end
505
- end
506
-
507
- def fetch_rows(sql)
508
- super
509
- case opts[:from].first
510
- when :schema_info, 'schema_info'
511
- yield({:version=>db.sequel_migration_version})
512
- when :schema_migrations, 'schema_migrations'
513
- files.sort.each{|f| yield(:filename=>f)}
514
- when :sm, 'sm'
515
- files.sort.each{|f| yield(:fn=>f)}
516
- end
517
- end
518
-
519
- def insert(h={})
520
- super
521
- case opts[:from].first
522
- when :schema_info, 'schema_info'
523
- db.sequel_migration_version = h.values.first
524
- when :schema_migrations, :sm, 'schema_migrations', 'sm'
525
- files << h.values.first
526
- end
527
- end
528
-
529
- def update(h={})
530
- super
531
- case opts[:from].first
532
- when :schema_info, 'schema_info'
533
- db.sequel_migration_version = h.values.first
534
- end
535
- end
536
-
537
- def delete
538
- super
539
- case opts[:from].first
540
- when :schema_migrations, :sm, 'schema_migrations', 'sm'
541
- files.delete(opts[:where].args.last)
542
- end
543
- end
544
- end
545
- dbc = Class.new(Sequel::Mock::Database) do
546
- def files
547
- @files ||= []
548
- end
549
-
550
- def tables
551
- @tables ||= {}
552
- end
553
-
554
- def sequel_migration_version
555
- @sequel_migration_version ||= 0
556
- end
557
- attr_writer :sequel_migration_version
558
-
559
- def create_table(name, *args, &block)
560
- super
561
- tables[name.to_sym] = true
562
- end
563
- define_method(:drop_table){|*names| super(*names); names.each{|n| tables.delete(n.to_sym)}}
564
- define_method(:table_exists?){|name| super(name); tables.has_key?(name.to_sym)}
565
- end
566
- @db = dbc.new
567
- @db.dataset_class = dsc
568
- @m = Sequel::Migrator
569
- end
570
-
571
- after do
572
- Object.send(:remove_const, "CreateSessions") if Object.const_defined?("CreateSessions")
573
- Object.send(:remove_const, "CreateArtists") if Object.const_defined?("CreateArtists")
574
- Object.send(:remove_const, "CreateAlbums") if Object.const_defined?("CreateAlbums")
575
- end
576
-
577
- it "should raise an error if there is an empty migration file" do
578
- proc{Sequel::TimestampMigrator.apply(@db, "spec/files/empty_migration")}.must_raise(Sequel::Migrator::Error)
579
- end
580
-
581
- it "should raise an error if there is a migration file with multiple migrations" do
582
- proc{Sequel::TimestampMigrator.apply(@db, "spec/files/double_migration")}.must_raise(Sequel::Migrator::Error)
583
- end
584
-
585
- it "should handle migrating up or down all the way" do
586
- @dir = 'spec/files/timestamped_migrations'
587
- @m.apply(@db, @dir)
588
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
589
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
590
- @m.apply(@db, @dir, 0)
591
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
592
- @db[:schema_migrations].select_order_map(:filename).must_equal []
593
- end
594
-
595
- it "should handle migrating up or down to specific timestamps" do
596
- @dir = 'spec/files/timestamped_migrations'
597
- @m.apply(@db, @dir, 1273253851)
598
- [:schema_migrations, :sm1111, :sm2222].each{|n| @db.table_exists?(n).must_equal true}
599
- @db.table_exists?(:sm3333).must_equal false
600
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb'
601
- @m.apply(@db, @dir, 1273253849)
602
- [:sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
603
- @db.table_exists?(:sm1111).must_equal true
604
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb'
605
- end
606
-
607
- it "should work correctly when multithreaded" do
608
- range = 0..4
609
- dbs = range.map do
610
- db = @db.class.new
611
- db.dataset_class = @db.dataset_class
612
- db
613
- end
614
-
615
- q1, q2 = Queue.new, Queue.new
616
- @dir = 'spec/files/timestamped_migrations'
617
- threads = dbs.map do |db|
618
- Thread.new do
619
- q1.pop
620
- @m.apply(db, @dir)
621
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| _(db.table_exists?(n)).must_equal true}
622
- _(db[:schema_migrations].select_order_map(:filename)).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
623
- q2.push db
624
- end
625
- end
626
-
627
- range.each{q1.push nil}
628
- (dbs - range.map{q2.pop}).must_be :empty?
629
- threads.each(&:join)
630
- end
631
-
632
- it "should not be current when there are migrations to apply" do
633
- @dir = 'spec/files/timestamped_migrations'
634
- @m.apply(@db, @dir)
635
- @m.is_current?(@db, @dir).must_equal true
636
- @dir = 'spec/files/interleaved_timestamped_migrations'
637
- @m.is_current?(@db, @dir).must_equal false
638
- end
639
-
640
- it "should raise an exception if the migrator is not current" do
641
- @dir = 'spec/files/timestamped_migrations'
642
- @m.apply(@db, @dir)
643
- @m.check_current(@db, @dir)
644
- @dir = 'spec/files/interleaved_timestamped_migrations'
645
- proc{@m.check_current(@db, @dir)}.must_raise(Sequel::Migrator::NotCurrentError)
646
- end
647
-
648
- it "should apply all missing files when migrating up" do
649
- @dir = 'spec/files/timestamped_migrations'
650
- @m.apply(@db, @dir)
651
- @dir = 'spec/files/interleaved_timestamped_migrations'
652
- @m.apply(@db, @dir)
653
- [:schema_migrations, :sm1111, :sm1122, :sm2222, :sm2233, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
654
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253850_create_artists.rb 1273253851_create_nodes.rb 1273253852_create_albums.rb 1273253853_3_create_users.rb'
655
- end
656
-
657
- it "should not apply down action to migrations where up action hasn't been applied" do
658
- @dir = 'spec/files/timestamped_migrations'
659
- @m.apply(@db, @dir)
660
- @dir = 'spec/files/interleaved_timestamped_migrations'
661
- @m.apply(@db, @dir, 0)
662
- [:sm1111, :sm1122, :sm2222, :sm2233, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
663
- @db[:schema_migrations].select_order_map(:filename).must_equal []
664
- end
665
-
666
- it "should handle updating to a specific timestamp when interleaving migrations" do
667
- @dir = 'spec/files/timestamped_migrations'
668
- @m.apply(@db, @dir)
669
- @dir = 'spec/files/interleaved_timestamped_migrations'
670
- @m.apply(@db, @dir, 1273253851)
671
- [:schema_migrations, :sm1111, :sm1122, :sm2222].each{|n| @db.table_exists?(n).must_equal true}
672
- [:sm2233, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
673
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253850_create_artists.rb 1273253851_create_nodes.rb'
674
- end
675
-
676
- it "should correctly update schema_migrations table when an error occurs when migrating up or down" do
677
- @dir = 'spec/files/bad_timestamped_migrations'
678
- proc{@m.apply(@db, @dir)}.must_raise NoMethodError
679
- [:schema_migrations, :sm1111, :sm2222].each{|n| @db.table_exists?(n).must_equal true}
680
- @db.table_exists?(:sm3333).must_equal false
681
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb'
682
- proc{@m.apply(@db, @dir, 0)}.must_raise NoMethodError
683
- [:sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
684
- @db.table_exists?(:sm1111).must_equal true
685
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb'
686
- end
687
-
688
- it "should handle multiple migrations with the same timestamp correctly" do
689
- @dir = 'spec/files/duplicate_timestamped_migrations'
690
- @m.apply(@db, @dir)
691
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
692
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253853_create_nodes.rb 1273253853_create_users.rb'
693
- @m.apply(@db, @dir, 1273253853)
694
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
695
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253853_create_nodes.rb 1273253853_create_users.rb'
696
- @m.apply(@db, @dir, 1273253849)
697
- [:sm1111].each{|n| @db.table_exists?(n).must_equal true}
698
- [:sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
699
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb'
700
- @m.apply(@db, @dir, 1273253848)
701
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
702
- @db[:schema_migrations].select_order_map(:filename).must_equal []
703
- end
704
-
705
- it "should convert schema_info table to schema_migrations table" do
706
- @dir = 'spec/files/integer_migrations'
707
- @m.apply(@db, @dir)
708
- [:schema_info, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
709
- [:schema_migrations, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
710
-
711
- @dir = 'spec/files/convert_to_timestamp_migrations'
712
- @m.apply(@db, @dir)
713
- [:schema_info, :sm1111, :sm2222, :sm3333, :schema_migrations, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal true}
714
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'001_create_sessions.rb 002_create_nodes.rb 003_3_create_users.rb 1273253850_create_artists.rb 1273253852_create_albums.rb'
715
-
716
- @m.apply(@db, @dir, 4)
717
- [:schema_info, :schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
718
- [:sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
719
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'001_create_sessions.rb 002_create_nodes.rb 003_3_create_users.rb'
720
-
721
- @m.apply(@db, @dir, 0)
722
- [:schema_info, :schema_migrations].each{|n| @db.table_exists?(n).must_equal true}
723
- [:sm1111, :sm2222, :sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
724
- @db[:schema_migrations].select_order_map(:filename).must_equal []
725
- end
726
-
727
- it "should handle unapplied migrations when migrating schema_info table to schema_migrations table" do
728
- @dir = 'spec/files/integer_migrations'
729
- @m.apply(@db, @dir, 2)
730
- [:schema_info, :sm1111, :sm2222].each{|n| @db.table_exists?(n).must_equal true}
731
- [:schema_migrations, :sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
732
-
733
- @dir = 'spec/files/convert_to_timestamp_migrations'
734
- @m.apply(@db, @dir, 1273253850)
735
- [:schema_info, :sm1111, :sm2222, :sm3333, :schema_migrations, :sm1122].each{|n| @db.table_exists?(n).must_equal true}
736
- [:sm2233].each{|n| @db.table_exists?(n).must_equal false}
737
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'001_create_sessions.rb 002_create_nodes.rb 003_3_create_users.rb 1273253850_create_artists.rb'
738
- end
739
-
740
- it "should handle unapplied migrations when migrating schema_info table to schema_migrations table and target is less than last integer migration version" do
741
- @dir = 'spec/files/integer_migrations'
742
- @m.apply(@db, @dir, 1)
743
- [:schema_info, :sm1111].each{|n| @db.table_exists?(n).must_equal true}
744
- [:schema_migrations, :sm2222, :sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
745
-
746
- @dir = 'spec/files/convert_to_timestamp_migrations'
747
- @m.apply(@db, @dir, 2)
748
- [:schema_info, :sm1111, :sm2222, :schema_migrations].each{|n| @db.table_exists?(n).must_equal true}
749
- [:sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
750
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'001_create_sessions.rb 002_create_nodes.rb'
751
-
752
- @m.apply(@db, @dir)
753
- [:schema_info, :sm1111, :sm2222, :schema_migrations, :sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal true}
754
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'001_create_sessions.rb 002_create_nodes.rb 003_3_create_users.rb 1273253850_create_artists.rb 1273253852_create_albums.rb'
755
- end
756
-
757
- it "should raise error for applied migrations not in file system" do
758
- @dir = 'spec/files/timestamped_migrations'
759
- @m.apply(@db, @dir)
760
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
761
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
762
-
763
- @dir = 'spec/files/missing_timestamped_migrations'
764
- proc{@m.apply(@db, @dir, 0)}.must_raise(Sequel::Migrator::Error)
765
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
766
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
767
- end
768
-
769
- it "should not raise error for applied migrations not in file system if :allow_missing_migration_files is true" do
770
- @dir = 'spec/files/timestamped_migrations'
771
- @m.apply(@db, @dir)
772
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
773
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
774
-
775
- @dir = 'spec/files/missing_timestamped_migrations'
776
- @m.run(@db, @dir, :allow_missing_migration_files => true)
777
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
778
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
779
- end
780
-
781
- it "should raise error missing column name in existing schema_migrations table" do
782
- @dir = 'spec/files/timestamped_migrations'
783
- @m.apply(@db, @dir)
784
- proc{@m.run(@db, @dir, :column=>:fn)}.must_raise(Sequel::Migrator::Error)
785
- end
786
-
787
- it "should handle migration filenames in a case insensitive manner" do
788
- @dir = 'spec/files/uppercase_timestamped_migrations'
789
- @m.apply(@db, @dir)
790
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
791
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
792
- @dir = 'spec/files/timestamped_migrations'
793
- @m.apply(@db, @dir, 0)
794
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
795
- @db[:schema_migrations].select_order_map(:filename).must_equal []
796
- end
797
-
798
- it "should :table and :column options" do
799
- @dir = 'spec/files/timestamped_migrations'
800
- @m.run(@db, @dir, :table=>:sm, :column=>:fn)
801
- [:sm, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
802
- @db[:sm].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
803
- @m.run(@db, @dir, :target=>0, :table=>:sm, :column=>:fn)
804
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
805
- @db[:sm].select_order_map(:fn).must_equal []
806
- end
807
-
808
- it "should return nil" do
809
- @dir = 'spec/files/timestamped_migrations'
810
- @m.apply(@db, @dir, 1273253850).must_be_nil
811
- @m.apply(@db, @dir, 0).must_be_nil
812
- @m.apply(@db, @dir).must_be_nil
813
- end
814
-
815
- it "should use TimestampMigrator if TimestampMigrator.apply is called even for integer migrations directory" do
816
- Sequel::TimestampMigrator.apply(@db, "spec/files/integer_migrations")
817
- @db.sqls.must_equal ["SELECT NULL AS nil FROM schema_migrations LIMIT 1", "CREATE TABLE schema_migrations (filename varchar(255) PRIMARY KEY)", "SELECT NULL AS nil FROM schema_info LIMIT 1", "SELECT filename FROM schema_migrations ORDER BY filename", "CREATE TABLE sm1111 (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('001_create_sessions.rb')", "CREATE TABLE sm2222 (smc2 integer)", "INSERT INTO schema_migrations (filename) VALUES ('002_create_nodes.rb')", "CREATE TABLE sm3333 (smc3 integer)", "INSERT INTO schema_migrations (filename) VALUES ('003_3_create_users.rb')"]
818
- end
819
-
820
- it "should not use transactions by default" do
821
- Sequel::TimestampMigrator.apply(@db, "spec/files/transaction_unspecified_migrations")
822
- @db.sqls.must_equal ["SELECT NULL AS nil FROM schema_migrations LIMIT 1", "CREATE TABLE schema_migrations (filename varchar(255) PRIMARY KEY)", "SELECT NULL AS nil FROM schema_info LIMIT 1", "SELECT filename FROM schema_migrations ORDER BY filename", "CREATE TABLE sm11111 (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('001_create_alt_basic.rb')", "CREATE TABLE sm (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('002_create_basic.rb')"]
823
- end
824
-
825
- it "should use transactions by default if database supports transactional ddl" do
826
- def @db.supports_transactional_ddl?; true end
827
- Sequel::TimestampMigrator.apply(@db, "spec/files/transaction_unspecified_migrations")
828
- @db.sqls.must_equal ["SELECT NULL AS nil FROM schema_migrations LIMIT 1", "CREATE TABLE schema_migrations (filename varchar(255) PRIMARY KEY)", "SELECT NULL AS nil FROM schema_info LIMIT 1", "SELECT filename FROM schema_migrations ORDER BY filename", "BEGIN", "CREATE TABLE sm11111 (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('001_create_alt_basic.rb')", "COMMIT", "BEGIN", "CREATE TABLE sm (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('002_create_basic.rb')", "COMMIT"]
829
- end
830
-
831
- it "should support transaction use on a per migration basis" do
832
- Sequel::TimestampMigrator.apply(@db, "spec/files/transaction_specified_migrations")
833
- @db.sqls.must_equal ["SELECT NULL AS nil FROM schema_migrations LIMIT 1", "CREATE TABLE schema_migrations (filename varchar(255) PRIMARY KEY)", "SELECT NULL AS nil FROM schema_info LIMIT 1", "SELECT filename FROM schema_migrations ORDER BY filename", "BEGIN", "CREATE TABLE sm11111 (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('001_create_alt_basic.rb')", "COMMIT", "CREATE TABLE sm (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('002_create_basic.rb')"]
834
- end
835
-
836
- it "should force transactions if enabled by the migrator" do
837
- Sequel::TimestampMigrator.run(@db, "spec/files/transaction_specified_migrations", :use_transactions=>true)
838
- @db.sqls.must_equal ["SELECT NULL AS nil FROM schema_migrations LIMIT 1", "CREATE TABLE schema_migrations (filename varchar(255) PRIMARY KEY)", "SELECT NULL AS nil FROM schema_info LIMIT 1", "SELECT filename FROM schema_migrations ORDER BY filename", "BEGIN", "CREATE TABLE sm11111 (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('001_create_alt_basic.rb')", "COMMIT", "BEGIN", "CREATE TABLE sm (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('002_create_basic.rb')", "COMMIT"]
839
- end
840
-
841
- it "should not use transactions if disabled in the migrator" do
842
- Sequel::TimestampMigrator.run(@db, "spec/files/transaction_unspecified_migrations", :use_transactions=>false)
843
- @db.sqls.must_equal ["SELECT NULL AS nil FROM schema_migrations LIMIT 1", "CREATE TABLE schema_migrations (filename varchar(255) PRIMARY KEY)", "SELECT NULL AS nil FROM schema_info LIMIT 1", "SELECT filename FROM schema_migrations ORDER BY filename", "CREATE TABLE sm11111 (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('001_create_alt_basic.rb')", "CREATE TABLE sm (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('002_create_basic.rb')"]
844
- end
845
-
846
- it "should use shorter primary key field on MySQL if creating schema migrations table fails" do
847
- def @db.database_type; :mysql end
848
- def @db.execute_ddl(sql, *)
849
- super
850
- raise Sequel::DatabaseError, "Specified key was too long; max key length is 767 bytes" if sql =~ /varchar\(255\)/
851
- end
852
- Sequel::TimestampMigrator.run(@db, "spec/files/transaction_unspecified_migrations", :use_transactions=>false)
853
- @db.sqls.must_equal ["SELECT NULL AS nil FROM schema_migrations LIMIT 1", "CREATE TABLE schema_migrations (filename varchar(255) PRIMARY KEY)", "CREATE TABLE schema_migrations (filename varchar(190) PRIMARY KEY)", "SELECT NULL AS nil FROM schema_info LIMIT 1", "SELECT filename FROM schema_migrations ORDER BY filename", "CREATE TABLE sm11111 (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('001_create_alt_basic.rb')", "CREATE TABLE sm (smc1 integer)", "INSERT INTO schema_migrations (filename) VALUES ('002_create_basic.rb')"]
854
- end
855
-
856
- it "should not use shorter primary key field on other databases if creating schema migrations table fails" do
857
- def @db.execute_ddl(sql, *)
858
- super
859
- raise Sequel::DatabaseError, "Specified key was too long; max key length is 767 bytes" if sql =~ /varchar\(255\)/
860
- end
861
- proc{Sequel::TimestampMigrator.run(@db, "spec/files/transaction_unspecified_migrations", :use_transactions=>false)}.must_raise Sequel::DatabaseError
862
- @db.sqls.must_equal ["SELECT NULL AS nil FROM schema_migrations LIMIT 1", "CREATE TABLE schema_migrations (filename varchar(255) PRIMARY KEY)"]
863
- end
864
- end