sequel 4.26.0 → 5.37.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 (692) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +405 -5656
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +232 -157
  5. data/bin/sequel +32 -9
  6. data/doc/advanced_associations.rdoc +252 -188
  7. data/doc/association_basics.rdoc +231 -273
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +75 -48
  10. data/doc/code_order.rdoc +28 -10
  11. data/doc/core_extensions.rdoc +104 -63
  12. data/doc/dataset_basics.rdoc +12 -21
  13. data/doc/dataset_filtering.rdoc +99 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +74 -31
  16. data/doc/migration.rdoc +72 -46
  17. data/doc/model_dataset_method_design.rdoc +129 -0
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +12 -12
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +59 -69
  22. data/doc/opening_databases.rdoc +84 -94
  23. data/doc/postgresql.rdoc +268 -38
  24. data/doc/prepared_statements.rdoc +29 -24
  25. data/doc/querying.rdoc +184 -164
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.10.0.txt +84 -0
  30. data/doc/release_notes/5.11.0.txt +83 -0
  31. data/doc/release_notes/5.12.0.txt +141 -0
  32. data/doc/release_notes/5.13.0.txt +27 -0
  33. data/doc/release_notes/5.14.0.txt +63 -0
  34. data/doc/release_notes/5.15.0.txt +39 -0
  35. data/doc/release_notes/5.16.0.txt +110 -0
  36. data/doc/release_notes/5.17.0.txt +31 -0
  37. data/doc/release_notes/5.18.0.txt +69 -0
  38. data/doc/release_notes/5.19.0.txt +28 -0
  39. data/doc/release_notes/5.2.0.txt +33 -0
  40. data/doc/release_notes/5.20.0.txt +89 -0
  41. data/doc/release_notes/5.21.0.txt +87 -0
  42. data/doc/release_notes/5.22.0.txt +48 -0
  43. data/doc/release_notes/5.23.0.txt +56 -0
  44. data/doc/release_notes/5.24.0.txt +56 -0
  45. data/doc/release_notes/5.25.0.txt +32 -0
  46. data/doc/release_notes/5.26.0.txt +35 -0
  47. data/doc/release_notes/5.27.0.txt +21 -0
  48. data/doc/release_notes/5.28.0.txt +16 -0
  49. data/doc/release_notes/5.29.0.txt +22 -0
  50. data/doc/release_notes/5.3.0.txt +121 -0
  51. data/doc/release_notes/5.30.0.txt +20 -0
  52. data/doc/release_notes/5.31.0.txt +148 -0
  53. data/doc/release_notes/5.32.0.txt +46 -0
  54. data/doc/release_notes/5.33.0.txt +24 -0
  55. data/doc/release_notes/5.34.0.txt +40 -0
  56. data/doc/release_notes/5.35.0.txt +56 -0
  57. data/doc/release_notes/5.36.0.txt +60 -0
  58. data/doc/release_notes/5.37.0.txt +30 -0
  59. data/doc/release_notes/5.4.0.txt +80 -0
  60. data/doc/release_notes/5.5.0.txt +61 -0
  61. data/doc/release_notes/5.6.0.txt +31 -0
  62. data/doc/release_notes/5.7.0.txt +108 -0
  63. data/doc/release_notes/5.8.0.txt +170 -0
  64. data/doc/release_notes/5.9.0.txt +99 -0
  65. data/doc/schema_modification.rdoc +102 -77
  66. data/doc/security.rdoc +160 -87
  67. data/doc/sharding.rdoc +74 -47
  68. data/doc/sql.rdoc +135 -122
  69. data/doc/testing.rdoc +34 -18
  70. data/doc/thread_safety.rdoc +2 -4
  71. data/doc/transactions.rdoc +101 -19
  72. data/doc/validations.rdoc +64 -51
  73. data/doc/virtual_rows.rdoc +90 -109
  74. data/lib/sequel.rb +3 -1
  75. data/lib/sequel/adapters/ado.rb +154 -22
  76. data/lib/sequel/adapters/ado/access.rb +21 -21
  77. data/lib/sequel/adapters/ado/mssql.rb +8 -15
  78. data/lib/sequel/adapters/amalgalite.rb +17 -25
  79. data/lib/sequel/adapters/ibmdb.rb +52 -58
  80. data/lib/sequel/adapters/jdbc.rb +149 -127
  81. data/lib/sequel/adapters/jdbc/db2.rb +32 -40
  82. data/lib/sequel/adapters/jdbc/derby.rb +56 -58
  83. data/lib/sequel/adapters/jdbc/h2.rb +40 -30
  84. data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
  85. data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
  86. data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
  87. data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
  88. data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
  89. data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
  90. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
  91. data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
  92. data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
  93. data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
  94. data/lib/sequel/adapters/mock.rb +104 -113
  95. data/lib/sequel/adapters/mysql.rb +42 -61
  96. data/lib/sequel/adapters/mysql2.rb +126 -35
  97. data/lib/sequel/adapters/odbc.rb +21 -28
  98. data/lib/sequel/adapters/odbc/db2.rb +3 -1
  99. data/lib/sequel/adapters/odbc/mssql.rb +11 -15
  100. data/lib/sequel/adapters/odbc/oracle.rb +11 -0
  101. data/lib/sequel/adapters/oracle.rb +62 -68
  102. data/lib/sequel/adapters/postgres.rb +257 -311
  103. data/lib/sequel/adapters/postgresql.rb +3 -1
  104. data/lib/sequel/adapters/shared/access.rb +75 -79
  105. data/lib/sequel/adapters/shared/db2.rb +96 -74
  106. data/lib/sequel/adapters/shared/mssql.rb +258 -213
  107. data/lib/sequel/adapters/shared/mysql.rb +284 -216
  108. data/lib/sequel/adapters/shared/oracle.rb +175 -60
  109. data/lib/sequel/adapters/shared/postgres.rb +829 -383
  110. data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
  111. data/lib/sequel/adapters/shared/sqlite.rb +382 -159
  112. data/lib/sequel/adapters/sqlanywhere.rb +53 -38
  113. data/lib/sequel/adapters/sqlite.rb +111 -105
  114. data/lib/sequel/adapters/tinytds.rb +38 -46
  115. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
  116. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
  117. data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
  118. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
  119. data/lib/sequel/adapters/utils/replace.rb +3 -4
  120. data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
  121. data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
  122. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
  123. data/lib/sequel/ast_transformer.rb +13 -89
  124. data/lib/sequel/connection_pool.rb +54 -26
  125. data/lib/sequel/connection_pool/sharded_single.rb +19 -12
  126. data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
  127. data/lib/sequel/connection_pool/single.rb +21 -12
  128. data/lib/sequel/connection_pool/threaded.rb +137 -119
  129. data/lib/sequel/core.rb +352 -320
  130. data/lib/sequel/database.rb +19 -2
  131. data/lib/sequel/database/connecting.rb +70 -55
  132. data/lib/sequel/database/dataset.rb +15 -5
  133. data/lib/sequel/database/dataset_defaults.rb +20 -102
  134. data/lib/sequel/database/features.rb +20 -4
  135. data/lib/sequel/database/logging.rb +25 -7
  136. data/lib/sequel/database/misc.rb +132 -118
  137. data/lib/sequel/database/query.rb +51 -28
  138. data/lib/sequel/database/schema_generator.rb +188 -75
  139. data/lib/sequel/database/schema_methods.rb +161 -92
  140. data/lib/sequel/database/transactions.rb +260 -58
  141. data/lib/sequel/dataset.rb +28 -12
  142. data/lib/sequel/dataset/actions.rb +354 -170
  143. data/lib/sequel/dataset/dataset_module.rb +46 -0
  144. data/lib/sequel/dataset/features.rb +81 -34
  145. data/lib/sequel/dataset/graph.rb +82 -58
  146. data/lib/sequel/dataset/misc.rb +139 -47
  147. data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
  148. data/lib/sequel/dataset/prepared_statements.rb +188 -85
  149. data/lib/sequel/dataset/query.rb +428 -214
  150. data/lib/sequel/dataset/sql.rb +446 -339
  151. data/lib/sequel/deprecated.rb +14 -2
  152. data/lib/sequel/exceptions.rb +48 -16
  153. data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
  154. data/lib/sequel/extensions/_model_pg_row.rb +43 -0
  155. data/lib/sequel/extensions/_pretty_table.rb +10 -9
  156. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  157. data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
  158. data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
  159. data/lib/sequel/extensions/blank.rb +2 -0
  160. data/lib/sequel/extensions/caller_logging.rb +79 -0
  161. data/lib/sequel/extensions/columns_introspection.rb +9 -4
  162. data/lib/sequel/extensions/connection_expiration.rb +99 -0
  163. data/lib/sequel/extensions/connection_validator.rb +26 -13
  164. data/lib/sequel/extensions/constant_sql_override.rb +65 -0
  165. data/lib/sequel/extensions/constraint_validations.rb +93 -38
  166. data/lib/sequel/extensions/core_extensions.rb +45 -53
  167. data/lib/sequel/extensions/core_refinements.rb +44 -46
  168. data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
  169. data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
  170. data/lib/sequel/extensions/date_arithmetic.rb +42 -16
  171. data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
  172. data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
  173. data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
  174. data/lib/sequel/extensions/error_sql.rb +7 -3
  175. data/lib/sequel/extensions/escaped_like.rb +100 -0
  176. data/lib/sequel/extensions/eval_inspect.rb +14 -15
  177. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  178. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  179. data/lib/sequel/extensions/freeze_datasets.rb +3 -0
  180. data/lib/sequel/extensions/from_block.rb +2 -31
  181. data/lib/sequel/extensions/graph_each.rb +19 -6
  182. data/lib/sequel/extensions/identifier_mangling.rb +180 -0
  183. data/lib/sequel/extensions/implicit_subquery.rb +48 -0
  184. data/lib/sequel/extensions/index_caching.rb +109 -0
  185. data/lib/sequel/extensions/inflector.rb +8 -4
  186. data/lib/sequel/extensions/integer64.rb +32 -0
  187. data/lib/sequel/extensions/looser_typecasting.rb +19 -9
  188. data/lib/sequel/extensions/migration.rb +132 -80
  189. data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
  190. data/lib/sequel/extensions/named_timezones.rb +88 -23
  191. data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
  192. data/lib/sequel/extensions/null_dataset.rb +12 -8
  193. data/lib/sequel/extensions/pagination.rb +35 -28
  194. data/lib/sequel/extensions/pg_array.rb +227 -316
  195. data/lib/sequel/extensions/pg_array_ops.rb +19 -7
  196. data/lib/sequel/extensions/pg_enum.rb +69 -24
  197. data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
  198. data/lib/sequel/extensions/pg_hstore.rb +50 -59
  199. data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
  200. data/lib/sequel/extensions/pg_inet.rb +34 -15
  201. data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
  202. data/lib/sequel/extensions/pg_interval.rb +26 -26
  203. data/lib/sequel/extensions/pg_json.rb +422 -141
  204. data/lib/sequel/extensions/pg_json_ops.rb +248 -9
  205. data/lib/sequel/extensions/pg_loose_count.rb +5 -1
  206. data/lib/sequel/extensions/pg_range.rb +162 -146
  207. data/lib/sequel/extensions/pg_range_ops.rb +10 -5
  208. data/lib/sequel/extensions/pg_row.rb +53 -87
  209. data/lib/sequel/extensions/pg_row_ops.rb +36 -13
  210. data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
  211. data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
  212. data/lib/sequel/extensions/pretty_table.rb +4 -0
  213. data/lib/sequel/extensions/query.rb +12 -7
  214. data/lib/sequel/extensions/round_timestamps.rb +6 -9
  215. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  216. data/lib/sequel/extensions/s.rb +59 -0
  217. data/lib/sequel/extensions/schema_caching.rb +14 -1
  218. data/lib/sequel/extensions/schema_dumper.rb +83 -55
  219. data/lib/sequel/extensions/select_remove.rb +8 -4
  220. data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
  221. data/lib/sequel/extensions/server_block.rb +50 -17
  222. data/lib/sequel/extensions/server_logging.rb +61 -0
  223. data/lib/sequel/extensions/split_array_nil.rb +8 -4
  224. data/lib/sequel/extensions/sql_comments.rb +96 -0
  225. data/lib/sequel/extensions/sql_expr.rb +4 -1
  226. data/lib/sequel/extensions/string_agg.rb +181 -0
  227. data/lib/sequel/extensions/string_date_time.rb +2 -0
  228. data/lib/sequel/extensions/symbol_aref.rb +53 -0
  229. data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
  230. data/lib/sequel/extensions/symbol_as.rb +23 -0
  231. data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
  232. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  233. data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
  234. data/lib/sequel/extensions/to_dot.rb +15 -5
  235. data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
  236. data/lib/sequel/model.rb +36 -126
  237. data/lib/sequel/model/associations.rb +850 -257
  238. data/lib/sequel/model/base.rb +652 -764
  239. data/lib/sequel/model/dataset_module.rb +13 -10
  240. data/lib/sequel/model/default_inflections.rb +3 -1
  241. data/lib/sequel/model/errors.rb +3 -3
  242. data/lib/sequel/model/exceptions.rb +12 -12
  243. data/lib/sequel/model/inflections.rb +8 -19
  244. data/lib/sequel/model/plugins.rb +111 -0
  245. data/lib/sequel/plugins/accessed_columns.rb +2 -0
  246. data/lib/sequel/plugins/active_model.rb +32 -7
  247. data/lib/sequel/plugins/after_initialize.rb +3 -1
  248. data/lib/sequel/plugins/association_dependencies.rb +27 -18
  249. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  250. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  251. data/lib/sequel/plugins/association_pks.rb +181 -83
  252. data/lib/sequel/plugins/association_proxies.rb +33 -9
  253. data/lib/sequel/plugins/auto_validations.rb +58 -23
  254. data/lib/sequel/plugins/before_after_save.rb +8 -0
  255. data/lib/sequel/plugins/blacklist_security.rb +23 -12
  256. data/lib/sequel/plugins/boolean_readers.rb +9 -6
  257. data/lib/sequel/plugins/boolean_subsets.rb +64 -0
  258. data/lib/sequel/plugins/caching.rb +27 -16
  259. data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
  260. data/lib/sequel/plugins/column_conflicts.rb +18 -3
  261. data/lib/sequel/plugins/column_select.rb +9 -5
  262. data/lib/sequel/plugins/columns_updated.rb +42 -0
  263. data/lib/sequel/plugins/composition.rb +36 -24
  264. data/lib/sequel/plugins/constraint_validations.rb +37 -16
  265. data/lib/sequel/plugins/csv_serializer.rb +58 -35
  266. data/lib/sequel/plugins/dataset_associations.rb +60 -18
  267. data/lib/sequel/plugins/def_dataset_method.rb +90 -0
  268. data/lib/sequel/plugins/defaults_setter.rb +74 -13
  269. data/lib/sequel/plugins/delay_add_association.rb +4 -1
  270. data/lib/sequel/plugins/dirty.rb +65 -24
  271. data/lib/sequel/plugins/eager_each.rb +27 -3
  272. data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
  273. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  274. data/lib/sequel/plugins/error_splitter.rb +19 -12
  275. data/lib/sequel/plugins/finder.rb +246 -0
  276. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  277. data/lib/sequel/plugins/force_encoding.rb +9 -12
  278. data/lib/sequel/plugins/hook_class_methods.rb +39 -54
  279. data/lib/sequel/plugins/input_transformer.rb +20 -10
  280. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  281. data/lib/sequel/plugins/insert_returning_select.rb +4 -2
  282. data/lib/sequel/plugins/instance_filters.rb +12 -8
  283. data/lib/sequel/plugins/instance_hooks.rb +36 -17
  284. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  285. data/lib/sequel/plugins/inverted_subsets.rb +24 -13
  286. data/lib/sequel/plugins/json_serializer.rb +123 -47
  287. data/lib/sequel/plugins/lazy_attributes.rb +20 -14
  288. data/lib/sequel/plugins/list.rb +40 -26
  289. data/lib/sequel/plugins/many_through_many.rb +28 -12
  290. data/lib/sequel/plugins/modification_detection.rb +17 -5
  291. data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
  292. data/lib/sequel/plugins/nested_attributes.rb +55 -28
  293. data/lib/sequel/plugins/optimistic_locking.rb +5 -3
  294. data/lib/sequel/plugins/pg_array_associations.rb +52 -18
  295. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
  296. data/lib/sequel/plugins/pg_row.rb +7 -51
  297. data/lib/sequel/plugins/prepared_statements.rb +53 -72
  298. data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
  299. data/lib/sequel/plugins/rcte_tree.rb +43 -63
  300. data/lib/sequel/plugins/serialization.rb +37 -44
  301. data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
  302. data/lib/sequel/plugins/sharding.rb +17 -10
  303. data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
  304. data/lib/sequel/plugins/singular_table_names.rb +2 -0
  305. data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
  306. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  307. data/lib/sequel/plugins/split_values.rb +13 -6
  308. data/lib/sequel/plugins/static_cache.rb +79 -53
  309. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  310. data/lib/sequel/plugins/string_stripper.rb +5 -3
  311. data/lib/sequel/plugins/subclasses.rb +20 -2
  312. data/lib/sequel/plugins/subset_conditions.rb +48 -0
  313. data/lib/sequel/plugins/table_select.rb +4 -2
  314. data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
  315. data/lib/sequel/plugins/throw_failures.rb +110 -0
  316. data/lib/sequel/plugins/timestamps.rb +22 -8
  317. data/lib/sequel/plugins/touch.rb +21 -8
  318. data/lib/sequel/plugins/tree.rb +57 -30
  319. data/lib/sequel/plugins/typecast_on_load.rb +14 -4
  320. data/lib/sequel/plugins/unlimited_update.rb +3 -7
  321. data/lib/sequel/plugins/update_or_create.rb +6 -4
  322. data/lib/sequel/plugins/update_primary_key.rb +3 -1
  323. data/lib/sequel/plugins/update_refresh.rb +28 -15
  324. data/lib/sequel/plugins/uuid.rb +70 -0
  325. data/lib/sequel/plugins/validate_associated.rb +20 -0
  326. data/lib/sequel/plugins/validation_class_methods.rb +40 -19
  327. data/lib/sequel/plugins/validation_contexts.rb +49 -0
  328. data/lib/sequel/plugins/validation_helpers.rb +49 -31
  329. data/lib/sequel/plugins/whitelist_security.rb +122 -0
  330. data/lib/sequel/plugins/xml_serializer.rb +31 -30
  331. data/lib/sequel/sql.rb +479 -329
  332. data/lib/sequel/timezones.rb +62 -32
  333. data/lib/sequel/version.rb +10 -3
  334. metadata +177 -477
  335. data/Rakefile +0 -165
  336. data/doc/active_record.rdoc +0 -912
  337. data/doc/release_notes/1.0.txt +0 -38
  338. data/doc/release_notes/1.1.txt +0 -143
  339. data/doc/release_notes/1.3.txt +0 -101
  340. data/doc/release_notes/1.4.0.txt +0 -53
  341. data/doc/release_notes/1.5.0.txt +0 -155
  342. data/doc/release_notes/2.0.0.txt +0 -298
  343. data/doc/release_notes/2.1.0.txt +0 -271
  344. data/doc/release_notes/2.10.0.txt +0 -328
  345. data/doc/release_notes/2.11.0.txt +0 -215
  346. data/doc/release_notes/2.12.0.txt +0 -534
  347. data/doc/release_notes/2.2.0.txt +0 -253
  348. data/doc/release_notes/2.3.0.txt +0 -88
  349. data/doc/release_notes/2.4.0.txt +0 -106
  350. data/doc/release_notes/2.5.0.txt +0 -137
  351. data/doc/release_notes/2.6.0.txt +0 -157
  352. data/doc/release_notes/2.7.0.txt +0 -166
  353. data/doc/release_notes/2.8.0.txt +0 -171
  354. data/doc/release_notes/2.9.0.txt +0 -97
  355. data/doc/release_notes/3.0.0.txt +0 -221
  356. data/doc/release_notes/3.1.0.txt +0 -406
  357. data/doc/release_notes/3.10.0.txt +0 -286
  358. data/doc/release_notes/3.11.0.txt +0 -254
  359. data/doc/release_notes/3.12.0.txt +0 -304
  360. data/doc/release_notes/3.13.0.txt +0 -210
  361. data/doc/release_notes/3.14.0.txt +0 -118
  362. data/doc/release_notes/3.15.0.txt +0 -78
  363. data/doc/release_notes/3.16.0.txt +0 -45
  364. data/doc/release_notes/3.17.0.txt +0 -58
  365. data/doc/release_notes/3.18.0.txt +0 -120
  366. data/doc/release_notes/3.19.0.txt +0 -67
  367. data/doc/release_notes/3.2.0.txt +0 -268
  368. data/doc/release_notes/3.20.0.txt +0 -41
  369. data/doc/release_notes/3.21.0.txt +0 -87
  370. data/doc/release_notes/3.22.0.txt +0 -39
  371. data/doc/release_notes/3.23.0.txt +0 -172
  372. data/doc/release_notes/3.24.0.txt +0 -420
  373. data/doc/release_notes/3.25.0.txt +0 -88
  374. data/doc/release_notes/3.26.0.txt +0 -88
  375. data/doc/release_notes/3.27.0.txt +0 -82
  376. data/doc/release_notes/3.28.0.txt +0 -304
  377. data/doc/release_notes/3.29.0.txt +0 -459
  378. data/doc/release_notes/3.3.0.txt +0 -192
  379. data/doc/release_notes/3.30.0.txt +0 -135
  380. data/doc/release_notes/3.31.0.txt +0 -146
  381. data/doc/release_notes/3.32.0.txt +0 -202
  382. data/doc/release_notes/3.33.0.txt +0 -157
  383. data/doc/release_notes/3.34.0.txt +0 -671
  384. data/doc/release_notes/3.35.0.txt +0 -144
  385. data/doc/release_notes/3.36.0.txt +0 -245
  386. data/doc/release_notes/3.37.0.txt +0 -338
  387. data/doc/release_notes/3.38.0.txt +0 -234
  388. data/doc/release_notes/3.39.0.txt +0 -237
  389. data/doc/release_notes/3.4.0.txt +0 -325
  390. data/doc/release_notes/3.40.0.txt +0 -73
  391. data/doc/release_notes/3.41.0.txt +0 -155
  392. data/doc/release_notes/3.42.0.txt +0 -74
  393. data/doc/release_notes/3.43.0.txt +0 -105
  394. data/doc/release_notes/3.44.0.txt +0 -152
  395. data/doc/release_notes/3.45.0.txt +0 -179
  396. data/doc/release_notes/3.46.0.txt +0 -122
  397. data/doc/release_notes/3.47.0.txt +0 -270
  398. data/doc/release_notes/3.48.0.txt +0 -477
  399. data/doc/release_notes/3.5.0.txt +0 -510
  400. data/doc/release_notes/3.6.0.txt +0 -366
  401. data/doc/release_notes/3.7.0.txt +0 -179
  402. data/doc/release_notes/3.8.0.txt +0 -151
  403. data/doc/release_notes/3.9.0.txt +0 -233
  404. data/doc/release_notes/4.0.0.txt +0 -262
  405. data/doc/release_notes/4.1.0.txt +0 -85
  406. data/doc/release_notes/4.10.0.txt +0 -226
  407. data/doc/release_notes/4.11.0.txt +0 -147
  408. data/doc/release_notes/4.12.0.txt +0 -105
  409. data/doc/release_notes/4.13.0.txt +0 -169
  410. data/doc/release_notes/4.14.0.txt +0 -68
  411. data/doc/release_notes/4.15.0.txt +0 -56
  412. data/doc/release_notes/4.16.0.txt +0 -36
  413. data/doc/release_notes/4.17.0.txt +0 -38
  414. data/doc/release_notes/4.18.0.txt +0 -36
  415. data/doc/release_notes/4.19.0.txt +0 -45
  416. data/doc/release_notes/4.2.0.txt +0 -129
  417. data/doc/release_notes/4.20.0.txt +0 -79
  418. data/doc/release_notes/4.21.0.txt +0 -94
  419. data/doc/release_notes/4.22.0.txt +0 -72
  420. data/doc/release_notes/4.23.0.txt +0 -65
  421. data/doc/release_notes/4.24.0.txt +0 -99
  422. data/doc/release_notes/4.25.0.txt +0 -181
  423. data/doc/release_notes/4.26.0.txt +0 -44
  424. data/doc/release_notes/4.3.0.txt +0 -40
  425. data/doc/release_notes/4.4.0.txt +0 -92
  426. data/doc/release_notes/4.5.0.txt +0 -34
  427. data/doc/release_notes/4.6.0.txt +0 -30
  428. data/doc/release_notes/4.7.0.txt +0 -103
  429. data/doc/release_notes/4.8.0.txt +0 -175
  430. data/doc/release_notes/4.9.0.txt +0 -190
  431. data/lib/sequel/adapters/cubrid.rb +0 -142
  432. data/lib/sequel/adapters/do.rb +0 -156
  433. data/lib/sequel/adapters/do/mysql.rb +0 -64
  434. data/lib/sequel/adapters/do/postgres.rb +0 -42
  435. data/lib/sequel/adapters/do/sqlite3.rb +0 -40
  436. data/lib/sequel/adapters/jdbc/as400.rb +0 -82
  437. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
  438. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
  439. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
  440. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
  441. data/lib/sequel/adapters/odbc/progress.rb +0 -8
  442. data/lib/sequel/adapters/shared/cubrid.rb +0 -243
  443. data/lib/sequel/adapters/shared/firebird.rb +0 -245
  444. data/lib/sequel/adapters/shared/informix.rb +0 -52
  445. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
  446. data/lib/sequel/adapters/shared/progress.rb +0 -38
  447. data/lib/sequel/adapters/swift.rb +0 -158
  448. data/lib/sequel/adapters/swift/mysql.rb +0 -47
  449. data/lib/sequel/adapters/swift/postgres.rb +0 -45
  450. data/lib/sequel/adapters/swift/sqlite.rb +0 -47
  451. data/lib/sequel/adapters/utils/pg_types.rb +0 -68
  452. data/lib/sequel/dataset/mutation.rb +0 -109
  453. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
  454. data/lib/sequel/extensions/filter_having.rb +0 -59
  455. data/lib/sequel/extensions/hash_aliases.rb +0 -45
  456. data/lib/sequel/extensions/meta_def.rb +0 -31
  457. data/lib/sequel/extensions/query_literals.rb +0 -80
  458. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
  459. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
  460. data/lib/sequel/extensions/set_overrides.rb +0 -72
  461. data/lib/sequel/no_core_ext.rb +0 -1
  462. data/lib/sequel/plugins/association_autoreloading.rb +0 -7
  463. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
  464. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
  465. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
  466. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
  467. data/lib/sequel/plugins/schema.rb +0 -80
  468. data/lib/sequel/plugins/scissors.rb +0 -33
  469. data/spec/adapters/db2_spec.rb +0 -160
  470. data/spec/adapters/firebird_spec.rb +0 -411
  471. data/spec/adapters/informix_spec.rb +0 -100
  472. data/spec/adapters/mssql_spec.rb +0 -706
  473. data/spec/adapters/mysql_spec.rb +0 -1287
  474. data/spec/adapters/oracle_spec.rb +0 -313
  475. data/spec/adapters/postgres_spec.rb +0 -3725
  476. data/spec/adapters/spec_helper.rb +0 -43
  477. data/spec/adapters/sqlanywhere_spec.rb +0 -170
  478. data/spec/adapters/sqlite_spec.rb +0 -653
  479. data/spec/bin_spec.rb +0 -254
  480. data/spec/core/connection_pool_spec.rb +0 -1016
  481. data/spec/core/database_spec.rb +0 -2531
  482. data/spec/core/dataset_spec.rb +0 -5098
  483. data/spec/core/deprecated_spec.rb +0 -70
  484. data/spec/core/expression_filters_spec.rb +0 -1243
  485. data/spec/core/mock_adapter_spec.rb +0 -462
  486. data/spec/core/object_graph_spec.rb +0 -303
  487. data/spec/core/placeholder_literalizer_spec.rb +0 -163
  488. data/spec/core/schema_generator_spec.rb +0 -179
  489. data/spec/core/schema_spec.rb +0 -1659
  490. data/spec/core/spec_helper.rb +0 -34
  491. data/spec/core/version_spec.rb +0 -7
  492. data/spec/core_extensions_spec.rb +0 -699
  493. data/spec/extensions/accessed_columns_spec.rb +0 -51
  494. data/spec/extensions/active_model_spec.rb +0 -123
  495. data/spec/extensions/after_initialize_spec.rb +0 -24
  496. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  497. data/spec/extensions/association_dependencies_spec.rb +0 -117
  498. data/spec/extensions/association_pks_spec.rb +0 -365
  499. data/spec/extensions/association_proxies_spec.rb +0 -86
  500. data/spec/extensions/auto_validations_spec.rb +0 -192
  501. data/spec/extensions/blacklist_security_spec.rb +0 -88
  502. data/spec/extensions/blank_spec.rb +0 -69
  503. data/spec/extensions/boolean_readers_spec.rb +0 -93
  504. data/spec/extensions/caching_spec.rb +0 -270
  505. data/spec/extensions/class_table_inheritance_spec.rb +0 -420
  506. data/spec/extensions/column_conflicts_spec.rb +0 -60
  507. data/spec/extensions/column_select_spec.rb +0 -108
  508. data/spec/extensions/columns_introspection_spec.rb +0 -91
  509. data/spec/extensions/composition_spec.rb +0 -242
  510. data/spec/extensions/connection_validator_spec.rb +0 -120
  511. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
  512. data/spec/extensions/constraint_validations_spec.rb +0 -325
  513. data/spec/extensions/core_refinements_spec.rb +0 -519
  514. data/spec/extensions/csv_serializer_spec.rb +0 -173
  515. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  516. data/spec/extensions/dataset_associations_spec.rb +0 -311
  517. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  518. data/spec/extensions/date_arithmetic_spec.rb +0 -150
  519. data/spec/extensions/defaults_setter_spec.rb +0 -101
  520. data/spec/extensions/delay_add_association_spec.rb +0 -52
  521. data/spec/extensions/dirty_spec.rb +0 -180
  522. data/spec/extensions/eager_each_spec.rb +0 -42
  523. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  524. data/spec/extensions/error_splitter_spec.rb +0 -18
  525. data/spec/extensions/error_sql_spec.rb +0 -20
  526. data/spec/extensions/eval_inspect_spec.rb +0 -73
  527. data/spec/extensions/filter_having_spec.rb +0 -40
  528. data/spec/extensions/force_encoding_spec.rb +0 -114
  529. data/spec/extensions/from_block_spec.rb +0 -21
  530. data/spec/extensions/graph_each_spec.rb +0 -109
  531. data/spec/extensions/hash_aliases_spec.rb +0 -24
  532. data/spec/extensions/hook_class_methods_spec.rb +0 -429
  533. data/spec/extensions/inflector_spec.rb +0 -183
  534. data/spec/extensions/input_transformer_spec.rb +0 -54
  535. data/spec/extensions/insert_returning_select_spec.rb +0 -46
  536. data/spec/extensions/instance_filters_spec.rb +0 -79
  537. data/spec/extensions/instance_hooks_spec.rb +0 -276
  538. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  539. data/spec/extensions/json_serializer_spec.rb +0 -291
  540. data/spec/extensions/lazy_attributes_spec.rb +0 -170
  541. data/spec/extensions/list_spec.rb +0 -267
  542. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  543. data/spec/extensions/many_through_many_spec.rb +0 -2172
  544. data/spec/extensions/meta_def_spec.rb +0 -21
  545. data/spec/extensions/migration_spec.rb +0 -712
  546. data/spec/extensions/modification_detection_spec.rb +0 -80
  547. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
  548. data/spec/extensions/named_timezones_spec.rb +0 -108
  549. data/spec/extensions/nested_attributes_spec.rb +0 -697
  550. data/spec/extensions/null_dataset_spec.rb +0 -85
  551. data/spec/extensions/optimistic_locking_spec.rb +0 -128
  552. data/spec/extensions/pagination_spec.rb +0 -118
  553. data/spec/extensions/pg_array_associations_spec.rb +0 -736
  554. data/spec/extensions/pg_array_ops_spec.rb +0 -143
  555. data/spec/extensions/pg_array_spec.rb +0 -395
  556. data/spec/extensions/pg_enum_spec.rb +0 -92
  557. data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
  558. data/spec/extensions/pg_hstore_spec.rb +0 -206
  559. data/spec/extensions/pg_inet_ops_spec.rb +0 -101
  560. data/spec/extensions/pg_inet_spec.rb +0 -52
  561. data/spec/extensions/pg_interval_spec.rb +0 -76
  562. data/spec/extensions/pg_json_ops_spec.rb +0 -229
  563. data/spec/extensions/pg_json_spec.rb +0 -218
  564. data/spec/extensions/pg_loose_count_spec.rb +0 -17
  565. data/spec/extensions/pg_range_ops_spec.rb +0 -58
  566. data/spec/extensions/pg_range_spec.rb +0 -404
  567. data/spec/extensions/pg_row_ops_spec.rb +0 -60
  568. data/spec/extensions/pg_row_plugin_spec.rb +0 -62
  569. data/spec/extensions/pg_row_spec.rb +0 -360
  570. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
  571. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
  572. data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
  573. data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
  574. data/spec/extensions/prepared_statements_spec.rb +0 -103
  575. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
  576. data/spec/extensions/pretty_table_spec.rb +0 -92
  577. data/spec/extensions/query_literals_spec.rb +0 -183
  578. data/spec/extensions/query_spec.rb +0 -102
  579. data/spec/extensions/rcte_tree_spec.rb +0 -392
  580. data/spec/extensions/round_timestamps_spec.rb +0 -43
  581. data/spec/extensions/schema_caching_spec.rb +0 -41
  582. data/spec/extensions/schema_dumper_spec.rb +0 -789
  583. data/spec/extensions/schema_spec.rb +0 -117
  584. data/spec/extensions/scissors_spec.rb +0 -26
  585. data/spec/extensions/select_remove_spec.rb +0 -38
  586. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
  587. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  588. data/spec/extensions/serialization_spec.rb +0 -362
  589. data/spec/extensions/server_block_spec.rb +0 -90
  590. data/spec/extensions/set_overrides_spec.rb +0 -61
  591. data/spec/extensions/sharding_spec.rb +0 -198
  592. data/spec/extensions/shared_caching_spec.rb +0 -175
  593. data/spec/extensions/single_table_inheritance_spec.rb +0 -297
  594. data/spec/extensions/singular_table_names_spec.rb +0 -22
  595. data/spec/extensions/skip_create_refresh_spec.rb +0 -17
  596. data/spec/extensions/spec_helper.rb +0 -71
  597. data/spec/extensions/split_array_nil_spec.rb +0 -24
  598. data/spec/extensions/split_values_spec.rb +0 -22
  599. data/spec/extensions/sql_expr_spec.rb +0 -60
  600. data/spec/extensions/static_cache_spec.rb +0 -361
  601. data/spec/extensions/string_date_time_spec.rb +0 -95
  602. data/spec/extensions/string_stripper_spec.rb +0 -68
  603. data/spec/extensions/subclasses_spec.rb +0 -66
  604. data/spec/extensions/table_select_spec.rb +0 -71
  605. data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
  606. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  607. data/spec/extensions/timestamps_spec.rb +0 -175
  608. data/spec/extensions/to_dot_spec.rb +0 -154
  609. data/spec/extensions/touch_spec.rb +0 -203
  610. data/spec/extensions/tree_spec.rb +0 -274
  611. data/spec/extensions/typecast_on_load_spec.rb +0 -80
  612. data/spec/extensions/unlimited_update_spec.rb +0 -20
  613. data/spec/extensions/update_or_create_spec.rb +0 -87
  614. data/spec/extensions/update_primary_key_spec.rb +0 -100
  615. data/spec/extensions/update_refresh_spec.rb +0 -53
  616. data/spec/extensions/validate_associated_spec.rb +0 -52
  617. data/spec/extensions/validation_class_methods_spec.rb +0 -1027
  618. data/spec/extensions/validation_helpers_spec.rb +0 -541
  619. data/spec/extensions/xml_serializer_spec.rb +0 -207
  620. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  621. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  622. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  623. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  624. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  625. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  626. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  627. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  628. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  629. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  630. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  631. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  632. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  633. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  634. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  635. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  636. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  637. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  638. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  639. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  640. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  641. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  642. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  643. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  644. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  645. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  646. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  647. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  648. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  649. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  650. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  651. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  652. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  653. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  654. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  655. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  656. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  657. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  658. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  659. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  660. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  661. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  662. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  663. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  664. data/spec/guards_helper.rb +0 -55
  665. data/spec/integration/associations_test.rb +0 -2454
  666. data/spec/integration/database_test.rb +0 -113
  667. data/spec/integration/dataset_test.rb +0 -1808
  668. data/spec/integration/eager_loader_test.rb +0 -687
  669. data/spec/integration/migrator_test.rb +0 -240
  670. data/spec/integration/model_test.rb +0 -226
  671. data/spec/integration/plugin_test.rb +0 -2240
  672. data/spec/integration/prepared_statement_test.rb +0 -467
  673. data/spec/integration/schema_test.rb +0 -817
  674. data/spec/integration/spec_helper.rb +0 -48
  675. data/spec/integration/timezone_test.rb +0 -86
  676. data/spec/integration/transaction_test.rb +0 -374
  677. data/spec/integration/type_test.rb +0 -133
  678. data/spec/model/association_reflection_spec.rb +0 -525
  679. data/spec/model/associations_spec.rb +0 -4426
  680. data/spec/model/base_spec.rb +0 -759
  681. data/spec/model/class_dataset_methods_spec.rb +0 -146
  682. data/spec/model/dataset_methods_spec.rb +0 -149
  683. data/spec/model/eager_loading_spec.rb +0 -2137
  684. data/spec/model/hooks_spec.rb +0 -604
  685. data/spec/model/inflector_spec.rb +0 -26
  686. data/spec/model/model_spec.rb +0 -982
  687. data/spec/model/plugins_spec.rb +0 -299
  688. data/spec/model/record_spec.rb +0 -2147
  689. data/spec/model/spec_helper.rb +0 -46
  690. data/spec/model/validations_spec.rb +0 -193
  691. data/spec/sequel_coverage.rb +0 -15
  692. data/spec/spec_config.rb +0 -10
@@ -1,21 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "Sequel::Metaprogramming" do
4
- it "should add meta_def method to Database, Dataset, and Model classes and instances" do
5
- Sequel::Database.meta_def(:foo){1}
6
- Sequel::Database.foo.must_equal 1
7
- Sequel::Dataset.meta_def(:foo){2}
8
- Sequel::Dataset.foo.must_equal 2
9
- Sequel::Model.meta_def(:foo){3}
10
- Sequel::Model.foo.must_equal 3
11
- o = Sequel::Database.new
12
- o.meta_def(:foo){4}
13
- o.foo.must_equal 4
14
- o = o[:a]
15
- o.meta_def(:foo){5}
16
- o.foo.must_equal 5
17
- o = Sequel::Model.new
18
- o.meta_def(:foo){6}
19
- o.foo.must_equal 6
20
- end
21
- end
@@ -1,712 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), '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_equal nil
58
- m.apply(@db, :down).must_equal 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 if RUBY_VERSION >= '1.9'
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_equal nil
93
- m.apply(@db, :down).must_equal 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.new 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_foreign_key :e, :b
133
- add_foreign_key [:e], :b, :name=>'e_fk'
134
- add_foreign_key [:e, :a], :b
135
- add_primary_key :f, :b
136
- add_index :e, :name=>'e_n'
137
- add_full_text_index :e, :name=>'e_ft'
138
- add_spatial_index :e, :name=>'e_s'
139
- rename_column :e, :g
140
- end
141
- create_view(:c, 'SELECT * FROM b', :foo=>:bar)
142
- create_join_table(:cat_id=>:cats, :dog_id=>:dogs)
143
- end
144
- end
145
-
146
- it "should apply up with normal actions in normal order" do
147
- p = @p
148
- Sequel.migration{change(&p)}.apply(@db, :up)
149
- @db.actions.must_equal [[:create_table, :a, {:foo=>:bar}],
150
- [:add_column, :a, :b, String],
151
- [:add_index, :a, :b],
152
- [:rename_column, :a, :b, :c],
153
- [:rename_table, :a, :b],
154
- [:alter_table, [
155
- [:add_column, :d, String],
156
- [:add_constraint, :blah, "d IS NOT NULL"],
157
- [:add_foreign_key, :e, :b],
158
- [:add_foreign_key, [:e], :b, {:name=>"e_fk"}],
159
- [:add_foreign_key, [:e, :a], :b],
160
- [:add_primary_key, :f, :b],
161
- [:add_index, :e, {:name=>"e_n"}],
162
- [:add_full_text_index, :e, {:name=>"e_ft"}],
163
- [:add_spatial_index, :e, {:name=>"e_s"}],
164
- [:rename_column, :e, :g]]
165
- ],
166
- [:create_view, :c, "SELECT * FROM b", {:foo=>:bar}],
167
- [:create_join_table, {:cat_id=>:cats, :dog_id=>:dogs}]]
168
- end
169
-
170
- it "should execute down with reversing actions in reverse order" do
171
- p = @p
172
- Sequel.migration{change(&p)}.apply(@db, :down)
173
- @db.actions.must_equal [
174
- [:drop_join_table, {:cat_id=>:cats, :dog_id=>:dogs}],
175
- [:drop_view, :c, {:foo=>:bar}],
176
- [:alter_table, [
177
- [:rename_column, :g, :e],
178
- [:drop_index, :e, {:name=>"e_s"}],
179
- [:drop_index, :e, {:name=>"e_ft"}],
180
- [:drop_index, :e, {:name=>"e_n"}],
181
- [:drop_column, :f],
182
- [:drop_foreign_key, [:e, :a]],
183
- [:drop_foreign_key, [:e], {:name=>"e_fk"}],
184
- [:drop_foreign_key, :e],
185
- [:drop_constraint, :blah],
186
- [:drop_column, :d]]
187
- ],
188
- [:rename_table, :b, :a],
189
- [:rename_column, :a, :c, :b],
190
- [:drop_index, :a, :b],
191
- [:drop_column, :a, :b],
192
- [:drop_table, :a, {:foo=>:bar}]]
193
- end
194
-
195
- it "should raise in the down direction if migration uses unsupported method" do
196
- m = Sequel.migration{change{run 'SQL'}}
197
- m.apply(@db, :up)
198
- proc{m.apply(@db, :down)}.must_raise(Sequel::Error)
199
- end
200
-
201
- it "should raise in the down direction if migration uses add_primary_key with an array" do
202
- m = Sequel.migration{change{alter_table(:a){add_primary_key [:b]}}}
203
- m.apply(@db, :up)
204
- proc{m.apply(@db, :down)}.must_raise(Sequel::Error)
205
- end
206
-
207
- it "should raise in the down direction if migration uses add_foreign_key with an array" do
208
- m = Sequel.migration{change{alter_table(:a){add_foreign_key [:b]}}}
209
- m.apply(@db, :up)
210
- proc{m.apply(@db, :down)}.must_raise(Sequel::Error)
211
- end
212
- end
213
-
214
- describe "Sequel::Migrator.migrator_class" do
215
- it "should return IntegerMigrator if not using timestamp migrations" do
216
- Sequel::Migrator.migrator_class("spec/files/integer_migrations").must_equal Sequel::IntegerMigrator
217
- end
218
-
219
- it "should return TimestampMigrator if using timestamp migrations" do
220
- Sequel::Migrator.migrator_class('spec/files/timestamped_migrations').must_equal Sequel::TimestampMigrator
221
- end
222
-
223
- it "should return self if run on a subclass" do
224
- Sequel::IntegerMigrator.migrator_class("spec/files/timestamped_migrations").must_equal Sequel::IntegerMigrator
225
- Sequel::TimestampMigrator.migrator_class("spec/files/integer_migrations").must_equal Sequel::TimestampMigrator
226
- end
227
- end
228
-
229
- describe "Sequel::IntegerMigrator" do
230
- before do
231
- dbc = Class.new(Sequel::Mock::Database) do
232
- attr_reader :drops, :tables_created, :columns_created, :versions
233
- def initialize(*args)
234
- super
235
- @drops = []
236
- @tables_created = []
237
- @columns_created = []
238
- @versions = Hash.new{|h,k| h[k.to_sym]}
239
- end
240
-
241
- def version; versions.values.first || 0; end
242
- def creates; @tables_created.map{|x| y = x.to_s; y !~ /\Asm(\d+)/; $1.to_i if $1}.compact; end
243
- def drop_table(*a); super; @drops.concat(a.map{|x| y = x.to_s; y !~ /\Asm(\d+)/; $1.to_i if $1}.compact); end
244
-
245
- def create_table(name, opts={}, &block)
246
- super
247
- @columns_created << / \(?(\w+) integer.*\)?\z/.match(@sqls.last)[1].to_sym
248
- @tables_created << name.to_sym
249
- end
250
-
251
- def dataset
252
- ds = super
253
- ds.extend(Module.new do
254
- def count; 1; end
255
- def columns; db.columns_created end
256
- def insert(h); db.versions.merge!(h); db.run insert_sql(h) end
257
- def update(h); db.versions.merge!(h); db.run update_sql(h) end
258
- def fetch_rows(sql); db.execute(sql); yield(db.versions) unless db.versions.empty? end
259
- end)
260
- ds
261
- end
262
-
263
- def table_exists?(name)
264
- @tables_created.include?(name.to_sym)
265
- end
266
- end
267
- @db = dbc.new
268
-
269
- @dirname = "spec/files/integer_migrations"
270
- end
271
-
272
- after do
273
- Object.send(:remove_const, "CreateSessions") if Object.const_defined?("CreateSessions")
274
- end
275
-
276
- it "should raise and error if there is a missing integer migration version" do
277
- proc{Sequel::Migrator.apply(@db, "spec/files/missing_integer_migrations")}.must_raise(Sequel::Migrator::Error)
278
- end
279
-
280
- it "should not raise and error if there is a missing integer migration version and allow_missing_migration_files is true" do
281
- Sequel::Migrator.run(@db, "spec/files/missing_integer_migrations", :allow_missing_migration_files => true)
282
- @db.sqls.last.must_equal "UPDATE schema_info SET version = 3"
283
- Sequel::Migrator.run(@db, "spec/files/missing_integer_migrations", :allow_missing_migration_files => true, :target=>0)
284
- @db.sqls.last.must_equal "UPDATE schema_info SET version = 0"
285
- end
286
-
287
- it "should raise and error if there is a duplicate integer migration version" do
288
- proc{Sequel::Migrator.apply(@db, "spec/files/duplicate_integer_migrations")}.must_raise(Sequel::Migrator::Error)
289
- end
290
-
291
- it "should add a column name if it doesn't already exist in the schema_info table" do
292
- @db.create_table(:schema_info){Integer :v}
293
- def @db.alter_table(*); end
294
- Sequel::Migrator.apply(@db, @dirname)
295
- end
296
-
297
- it "should automatically create the schema_info table with the version column" do
298
- @db.table_exists?(:schema_info).must_equal false
299
- Sequel::Migrator.run(@db, @dirname, :target=>0)
300
- @db.table_exists?(:schema_info).must_equal true
301
- @db.dataset.columns.must_equal [:version]
302
- end
303
-
304
- it "should allow specifying the table and columns" do
305
- @db.table_exists?(:si).must_equal false
306
- Sequel::Migrator.run(@db, @dirname, :target=>0, :table=>:si, :column=>:sic)
307
- @db.table_exists?(:si).must_equal true
308
- @db.dataset.columns.must_equal [:sic]
309
- end
310
-
311
- it "should apply migrations correctly in the up direction if no target is given" do
312
- Sequel::Migrator.apply(@db, @dirname)
313
- @db.creates.must_equal [1111, 2222, 3333]
314
- @db.version.must_equal 3
315
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1, 2, 3]
316
- end
317
-
318
- it "should be able to tell whether there are outstanding migrations" do
319
- Sequel::Migrator.is_current?(@db, @dirname).must_equal false
320
- Sequel::Migrator.apply(@db, @dirname)
321
- Sequel::Migrator.is_current?(@db, @dirname).must_equal true
322
- end
323
-
324
- it "should have #check_current raise an exception if the migrator is not current" do
325
- proc{Sequel::Migrator.check_current(@db, @dirname)}.must_raise(Sequel::Migrator::NotCurrentError)
326
- Sequel::Migrator.apply(@db, @dirname)
327
- Sequel::Migrator.check_current(@db, @dirname)
328
- end
329
-
330
- it "should apply migrations correctly in the up direction with target" do
331
- Sequel::Migrator.apply(@db, @dirname, 2)
332
- @db.creates.must_equal [1111, 2222]
333
- @db.version.must_equal 2
334
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1, 2]
335
- end
336
-
337
- it "should apply migrations correctly in the up direction with target and existing" do
338
- Sequel::Migrator.apply(@db, @dirname, 2, 1)
339
- @db.creates.must_equal [2222]
340
- @db.version.must_equal 2
341
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [2]
342
- end
343
-
344
- it "should apply migrations correctly in the down direction with target" do
345
- @db.create_table(:schema_info){Integer :version, :default=>0}
346
- @db[:schema_info].insert(:version=>3)
347
- @db.version.must_equal 3
348
- Sequel::Migrator.apply(@db, @dirname, 0)
349
- @db.drops.must_equal [3333, 2222, 1111]
350
- @db.version.must_equal 0
351
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [2, 1, 0]
352
- end
353
-
354
- it "should apply migrations correctly in the down direction with target and existing" do
355
- Sequel::Migrator.apply(@db, @dirname, 1, 2)
356
- @db.drops.must_equal [2222]
357
- @db.version.must_equal 1
358
- @db.sqls.map{|x| x =~ /\AUPDATE.*(\d+)/ ? $1.to_i : nil}.compact.must_equal [1]
359
- end
360
-
361
- it "should return the target version" do
362
- Sequel::Migrator.apply(@db, @dirname, 3, 2).must_equal 3
363
- Sequel::Migrator.apply(@db, @dirname, 0).must_equal 0
364
- Sequel::Migrator.apply(@db, @dirname).must_equal 3
365
- end
366
-
367
- it "should use IntegerMigrator if IntegerMigrator.apply called, even for timestamped migration directory" do
368
- proc{Sequel::IntegerMigrator.apply(@db, "spec/files/timestamped_migrations")}.must_raise(Sequel::Migrator::Error)
369
- end
370
-
371
- it "should not use transactions by default" do
372
- Sequel::Migrator.apply(@db, "spec/files/transaction_unspecified_migrations")
373
- @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"]
374
- end
375
-
376
- it "should use transactions by default if the database supports transactional ddl" do
377
- @db.meta_def(:supports_transactional_ddl?){true}
378
- Sequel::Migrator.apply(@db, "spec/files/transaction_unspecified_migrations")
379
- @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"]
380
- end
381
-
382
- it "should respect transaction use on a per migration basis" do
383
- @db.meta_def(:supports_transactional_ddl?){true}
384
- Sequel::Migrator.apply(@db, "spec/files/transaction_specified_migrations")
385
- @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"]
386
- end
387
-
388
- it "should force transactions if enabled in the migrator" do
389
- Sequel::Migrator.run(@db, "spec/files/transaction_specified_migrations", :use_transactions=>true)
390
- @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"]
391
- end
392
-
393
- it "should not use transactions if disabled in the migrator" do
394
- Sequel::Migrator.run(@db, "spec/files/transaction_unspecified_migrations", :use_transactions=>false)
395
- @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"]
396
- end
397
- end
398
-
399
- describe "Sequel::TimestampMigrator" do
400
- before do
401
- sequel_migration_version = 0
402
- @dsc = dsc = Class.new(Sequel::Mock::Dataset) do
403
- self::FILES =[]
404
- define_method(:sequel_migration_version){sequel_migration_version}
405
- define_method(:sequel_migration_version=){|v| sequel_migration_version = v}
406
-
407
- def columns
408
- super
409
- case opts[:from].first
410
- when :schema_info, 'schema_info'
411
- [:version]
412
- when :schema_migrations, 'schema_migrations'
413
- [:filename]
414
- when :sm, 'sm'
415
- [:fn]
416
- end
417
- end
418
-
419
- def fetch_rows(sql)
420
- super
421
- case opts[:from].first
422
- when :schema_info, 'schema_info'
423
- yield({:version=>sequel_migration_version})
424
- when :schema_migrations, 'schema_migrations'
425
- self.class::FILES.sort.each{|f| yield(:filename=>f)}
426
- when :sm, 'sm'
427
- self.class::FILES.sort.each{|f| yield(:fn=>f)}
428
- end
429
- end
430
-
431
- def insert(h={})
432
- super
433
- case opts[:from].first
434
- when :schema_info, 'schema_info'
435
- self.sequel_migration_version = h.values.first
436
- when :schema_migrations, :sm, 'schema_migrations', 'sm'
437
- self.class::FILES << h.values.first
438
- end
439
- end
440
-
441
- def update(h={})
442
- super
443
- case opts[:from].first
444
- when :schema_info, 'schema_info'
445
- self.sequel_migration_version = h.values.first
446
- end
447
- end
448
-
449
- def delete
450
- super
451
- case opts[:from].first
452
- when :schema_migrations, :sm, 'schema_migrations', 'sm'
453
- self.class::FILES.delete(opts[:where].args.last)
454
- end
455
- end
456
- end
457
- dbc = Class.new(Sequel::Mock::Database) do
458
- self::Tables = tables= {}
459
- define_method(:dataset){|*a| dsc.new(self, *a)}
460
- def create_table(name, *args, &block)
461
- super
462
- self.class::Tables[name.to_sym] = true
463
- end
464
- define_method(:drop_table){|*names| super(*names); names.each{|n| tables.delete(n.to_sym)}}
465
- define_method(:table_exists?){|name| super(name); tables.has_key?(name.to_sym)}
466
- end
467
- @db = dbc.new
468
- @m = Sequel::Migrator
469
- end
470
-
471
- after do
472
- Object.send(:remove_const, "CreateSessions") if Object.const_defined?("CreateSessions")
473
- Object.send(:remove_const, "CreateArtists") if Object.const_defined?("CreateArtists")
474
- Object.send(:remove_const, "CreateAlbums") if Object.const_defined?("CreateAlbums")
475
- end
476
-
477
- it "should handle migrating up or down all the way" do
478
- @dir = 'spec/files/timestamped_migrations'
479
- @m.apply(@db, @dir)
480
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
481
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
482
- @m.apply(@db, @dir, 0)
483
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
484
- @db[:schema_migrations].select_order_map(:filename).must_equal []
485
- end
486
-
487
- it "should handle migrating up or down to specific timestamps" do
488
- @dir = 'spec/files/timestamped_migrations'
489
- @m.apply(@db, @dir, 1273253851)
490
- [:schema_migrations, :sm1111, :sm2222].each{|n| @db.table_exists?(n).must_equal true}
491
- @db.table_exists?(:sm3333).must_equal false
492
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb'
493
- @m.apply(@db, @dir, 1273253849)
494
- [:sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
495
- @db.table_exists?(:sm1111).must_equal true
496
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb'
497
- end
498
-
499
- it "should not be current when there are migrations to apply" do
500
- @dir = 'spec/files/timestamped_migrations'
501
- @m.apply(@db, @dir)
502
- @m.is_current?(@db, @dir).must_equal true
503
- @dir = 'spec/files/interleaved_timestamped_migrations'
504
- @m.is_current?(@db, @dir).must_equal false
505
- end
506
-
507
- it "should raise an exception if the migrator is not current" do
508
- @dir = 'spec/files/timestamped_migrations'
509
- @m.apply(@db, @dir)
510
- @m.check_current(@db, @dir)
511
- @dir = 'spec/files/interleaved_timestamped_migrations'
512
- proc{@m.check_current(@db, @dir)}.must_raise(Sequel::Migrator::NotCurrentError)
513
- end
514
-
515
- it "should apply all missing files when migrating up" do
516
- @dir = 'spec/files/timestamped_migrations'
517
- @m.apply(@db, @dir)
518
- @dir = 'spec/files/interleaved_timestamped_migrations'
519
- @m.apply(@db, @dir)
520
- [:schema_migrations, :sm1111, :sm1122, :sm2222, :sm2233, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
521
- @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'
522
- end
523
-
524
- it "should not apply down action to migrations where up action hasn't been applied" do
525
- @dir = 'spec/files/timestamped_migrations'
526
- @m.apply(@db, @dir)
527
- @dir = 'spec/files/interleaved_timestamped_migrations'
528
- @m.apply(@db, @dir, 0)
529
- [:sm1111, :sm1122, :sm2222, :sm2233, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
530
- @db[:schema_migrations].select_order_map(:filename).must_equal []
531
- end
532
-
533
- it "should handle updating to a specific timestamp when interleaving migrations" do
534
- @dir = 'spec/files/timestamped_migrations'
535
- @m.apply(@db, @dir)
536
- @dir = 'spec/files/interleaved_timestamped_migrations'
537
- @m.apply(@db, @dir, 1273253851)
538
- [:schema_migrations, :sm1111, :sm1122, :sm2222].each{|n| @db.table_exists?(n).must_equal true}
539
- [:sm2233, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
540
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253850_create_artists.rb 1273253851_create_nodes.rb'
541
- end
542
-
543
- it "should correctly update schema_migrations table when an error occurs when migrating up or down" do
544
- @dir = 'spec/files/bad_timestamped_migrations'
545
- proc{@m.apply(@db, @dir)}.must_raise NoMethodError
546
- [:schema_migrations, :sm1111, :sm2222].each{|n| @db.table_exists?(n).must_equal true}
547
- @db.table_exists?(:sm3333).must_equal false
548
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb'
549
- proc{@m.apply(@db, @dir, 0)}.must_raise NoMethodError
550
- [:sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
551
- @db.table_exists?(:sm1111).must_equal true
552
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb'
553
- end
554
-
555
- it "should handle multiple migrations with the same timestamp correctly" do
556
- @dir = 'spec/files/duplicate_timestamped_migrations'
557
- @m.apply(@db, @dir)
558
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
559
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253853_create_nodes.rb 1273253853_create_users.rb'
560
- @m.apply(@db, @dir, 1273253853)
561
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
562
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253853_create_nodes.rb 1273253853_create_users.rb'
563
- @m.apply(@db, @dir, 1273253849)
564
- [:sm1111].each{|n| @db.table_exists?(n).must_equal true}
565
- [:sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
566
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb'
567
- @m.apply(@db, @dir, 1273253848)
568
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
569
- @db[:schema_migrations].select_order_map(:filename).must_equal []
570
- end
571
-
572
- it "should convert schema_info table to schema_migrations table" do
573
- @dir = 'spec/files/integer_migrations'
574
- @m.apply(@db, @dir)
575
- [:schema_info, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
576
- [:schema_migrations, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
577
-
578
- @dir = 'spec/files/convert_to_timestamp_migrations'
579
- @m.apply(@db, @dir)
580
- [:schema_info, :sm1111, :sm2222, :sm3333, :schema_migrations, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal true}
581
- @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'
582
-
583
- @m.apply(@db, @dir, 4)
584
- [:schema_info, :schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
585
- [:sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
586
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'001_create_sessions.rb 002_create_nodes.rb 003_3_create_users.rb'
587
-
588
- @m.apply(@db, @dir, 0)
589
- [:schema_info, :schema_migrations].each{|n| @db.table_exists?(n).must_equal true}
590
- [:sm1111, :sm2222, :sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
591
- @db[:schema_migrations].select_order_map(:filename).must_equal []
592
- end
593
-
594
- it "should handle unapplied migrations when migrating schema_info table to schema_migrations table" do
595
- @dir = 'spec/files/integer_migrations'
596
- @m.apply(@db, @dir, 2)
597
- [:schema_info, :sm1111, :sm2222].each{|n| @db.table_exists?(n).must_equal true}
598
- [:schema_migrations, :sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
599
-
600
- @dir = 'spec/files/convert_to_timestamp_migrations'
601
- @m.apply(@db, @dir, 1273253850)
602
- [:schema_info, :sm1111, :sm2222, :sm3333, :schema_migrations, :sm1122].each{|n| @db.table_exists?(n).must_equal true}
603
- [:sm2233].each{|n| @db.table_exists?(n).must_equal false}
604
- @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'
605
- end
606
-
607
- it "should handle unapplied migrations when migrating schema_info table to schema_migrations table and target is less than last integer migration version" do
608
- @dir = 'spec/files/integer_migrations'
609
- @m.apply(@db, @dir, 1)
610
- [:schema_info, :sm1111].each{|n| @db.table_exists?(n).must_equal true}
611
- [:schema_migrations, :sm2222, :sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
612
-
613
- @dir = 'spec/files/convert_to_timestamp_migrations'
614
- @m.apply(@db, @dir, 2)
615
- [:schema_info, :sm1111, :sm2222, :schema_migrations].each{|n| @db.table_exists?(n).must_equal true}
616
- [:sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal false}
617
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'001_create_sessions.rb 002_create_nodes.rb'
618
-
619
- @m.apply(@db, @dir)
620
- [:schema_info, :sm1111, :sm2222, :schema_migrations, :sm3333, :sm1122, :sm2233].each{|n| @db.table_exists?(n).must_equal true}
621
- @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'
622
- end
623
-
624
- it "should raise error for applied migrations not in file system" do
625
- @dir = 'spec/files/timestamped_migrations'
626
- @m.apply(@db, @dir)
627
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
628
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
629
-
630
- @dir = 'spec/files/missing_timestamped_migrations'
631
- proc{@m.apply(@db, @dir, 0)}.must_raise(Sequel::Migrator::Error)
632
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
633
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
634
- end
635
-
636
- it "should not raise error for applied migrations not in file system if :allow_missing_migration_files is true" do
637
- @dir = 'spec/files/timestamped_migrations'
638
- @m.apply(@db, @dir)
639
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
640
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
641
-
642
- @dir = 'spec/files/missing_timestamped_migrations'
643
- @m.run(@db, @dir, :allow_missing_migration_files => true)
644
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
645
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
646
- end
647
-
648
- it "should raise error missing column name in existing schema_migrations table" do
649
- @dir = 'spec/files/timestamped_migrations'
650
- @m.apply(@db, @dir)
651
- proc{@m.run(@db, @dir, :column=>:fn)}.must_raise(Sequel::Migrator::Error)
652
- end
653
-
654
- it "should handle migration filenames in a case insensitive manner" do
655
- @dir = 'spec/files/uppercase_timestamped_migrations'
656
- @m.apply(@db, @dir)
657
- [:schema_migrations, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
658
- @db[:schema_migrations].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
659
- @dir = 'spec/files/timestamped_migrations'
660
- @m.apply(@db, @dir, 0)
661
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
662
- @db[:schema_migrations].select_order_map(:filename).must_equal []
663
- end
664
-
665
- it "should :table and :column options" do
666
- @dir = 'spec/files/timestamped_migrations'
667
- @m.run(@db, @dir, :table=>:sm, :column=>:fn)
668
- [:sm, :sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal true}
669
- @db[:sm].select_order_map(:filename).must_equal %w'1273253849_create_sessions.rb 1273253851_create_nodes.rb 1273253853_3_create_users.rb'
670
- @m.run(@db, @dir, :target=>0, :table=>:sm, :column=>:fn)
671
- [:sm1111, :sm2222, :sm3333].each{|n| @db.table_exists?(n).must_equal false}
672
- @db[:sm].select_order_map(:fn).must_equal []
673
- end
674
-
675
- it "should return nil" do
676
- @dir = 'spec/files/timestamped_migrations'
677
- @m.apply(@db, @dir, 1273253850).must_equal nil
678
- @m.apply(@db, @dir, 0).must_equal nil
679
- @m.apply(@db, @dir).must_equal nil
680
- end
681
-
682
- it "should use TimestampMigrator if TimestampMigrator.apply is called even for integer migrations directory" do
683
- Sequel::TimestampMigrator.apply(@db, "spec/files/integer_migrations")
684
- @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')"]
685
- end
686
-
687
- it "should not use transactions by default" do
688
- Sequel::TimestampMigrator.apply(@db, "spec/files/transaction_unspecified_migrations")
689
- @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')"]
690
- end
691
-
692
- it "should use transactions by default if database supports transactional ddl" do
693
- @db.meta_def(:supports_transactional_ddl?){true}
694
- Sequel::TimestampMigrator.apply(@db, "spec/files/transaction_unspecified_migrations")
695
- @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"]
696
- end
697
-
698
- it "should support transaction use on a per migration basis" do
699
- Sequel::TimestampMigrator.apply(@db, "spec/files/transaction_specified_migrations")
700
- @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')"]
701
- end
702
-
703
- it "should force transactions if enabled by the migrator" do
704
- Sequel::TimestampMigrator.run(@db, "spec/files/transaction_specified_migrations", :use_transactions=>true)
705
- @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"]
706
- end
707
-
708
- it "should not use transactions if disabled in the migrator" do
709
- Sequel::TimestampMigrator.run(@db, "spec/files/transaction_unspecified_migrations", :use_transactions=>false)
710
- @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')"]
711
- end
712
- end