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
@@ -0,0 +1,109 @@
1
+ # frozen-string-literal: true
2
+ #
3
+ # The index_caching extension adds a few methods to Sequel::Database
4
+ # that make it easy to dump information about database indexes to a file,
5
+ # and load it from that file. Loading index information from a
6
+ # dumped file is faster than parsing it from the database, so this
7
+ # can save bootup time for applications with large numbers of index.
8
+ #
9
+ # Basic usage in application code:
10
+ #
11
+ # DB = Sequel.connect('...')
12
+ # DB.extension :index_caching
13
+ # DB.load_index_cache('/path/to/index_cache.dump')
14
+ #
15
+ # # load model files
16
+ #
17
+ # Then, whenever database indicies are modified, write a new cached
18
+ # file. You can do that with <tt>bin/sequel</tt>'s -X option:
19
+ #
20
+ # bin/sequel -X /path/to/index_cache.dump postgres://...
21
+ #
22
+ # Alternatively, if you don't want to dump the index information for
23
+ # all tables, and you don't worry about race conditions, you can
24
+ # choose to use the following in your application code:
25
+ #
26
+ # DB = Sequel.connect('...')
27
+ # DB.extension :index_caching
28
+ # DB.load_index_cache?('/path/to/index_cache.dump')
29
+ #
30
+ # # load model files
31
+ #
32
+ # DB.dump_index_cache?('/path/to/index_cache.dump')
33
+ #
34
+ # With this method, you just have to delete the index dump file if
35
+ # the schema is modified, and the application will recreate it for you
36
+ # using just the tables that your models use.
37
+ #
38
+ # Note that it is up to the application to ensure that the dumped
39
+ # index cache reflects the current state of the database. Sequel
40
+ # does no checking to ensure this, as checking would take time and the
41
+ # purpose of this code is to take a shortcut.
42
+ #
43
+ # The index cache is dumped in Marshal format, since it is the fastest
44
+ # and it handles all ruby objects used in the indexes hash. Because of this,
45
+ # you should not attempt to load from an untrusted file.
46
+ #
47
+ # Related module: Sequel::IndexCaching
48
+
49
+ #
50
+ module Sequel
51
+ module IndexCaching
52
+ # Set index cache to the empty hash.
53
+ def self.extended(db)
54
+ db.instance_variable_set(:@indexes, {})
55
+ end
56
+
57
+ # Dump the index cache to the filename given in Marshal format.
58
+ def dump_index_cache(file)
59
+ File.open(file, 'wb'){|f| f.write(Marshal.dump(@indexes))}
60
+ nil
61
+ end
62
+
63
+ # Dump the index cache to the filename given unless the file
64
+ # already exists.
65
+ def dump_index_cache?(file)
66
+ dump_index_cache(file) unless File.exist?(file)
67
+ end
68
+
69
+ # Replace the index cache with the data from the given file, which
70
+ # should be in Marshal format.
71
+ def load_index_cache(file)
72
+ @indexes = Marshal.load(File.read(file))
73
+ nil
74
+ end
75
+
76
+ # Replace the index cache with the data from the given file if the
77
+ # file exists.
78
+ def load_index_cache?(file)
79
+ load_index_cache(file) if File.exist?(file)
80
+ end
81
+
82
+ # If no options are provided and there is cached index information for
83
+ # the table, return the cached information instead of querying the
84
+ # database.
85
+ def indexes(table, opts=OPTS)
86
+ return super unless opts.empty?
87
+
88
+ quoted_name = literal(table)
89
+ if v = Sequel.synchronize{@indexes[quoted_name]}
90
+ return v
91
+ end
92
+
93
+ result = super
94
+ Sequel.synchronize{@indexes[quoted_name] = result}
95
+ result
96
+ end
97
+
98
+ private
99
+
100
+ # Remove the index cache for the given schema name
101
+ def remove_cached_schema(table)
102
+ k = quote_schema_table(table)
103
+ Sequel.synchronize{@indexes.delete(k)}
104
+ super
105
+ end
106
+ end
107
+
108
+ Database.register_extension(:index_caching, IndexCaching)
109
+ end
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+ #
1
3
  # The inflector extension adds inflection instance methods to String, which allows the easy transformation of
2
4
  # words from singular to plural, class names to table names, modularized class
3
5
  # names to ones without, and class names to foreign keys. It exists for
@@ -6,6 +8,8 @@
6
8
  # To load the extension:
7
9
  #
8
10
  # Sequel.extension :inflector
11
+ #
12
+ # Related module: String::Inflections
9
13
 
10
14
  class String
11
15
  # This module acts as a singleton returned/yielded by String.inflections,
@@ -91,8 +95,8 @@ class String
91
95
  (@uncountables << words).flatten!
92
96
  end
93
97
 
94
- Sequel.require('default_inflections', 'model')
95
- instance_eval(&Sequel::DEFAULT_INFLECTIONS_PROC)
98
+ require_relative '../model/default_inflections'
99
+ instance_exec(&Sequel::DEFAULT_INFLECTIONS_PROC)
96
100
  end
97
101
 
98
102
  # Yield the Inflections module if a block is given, and return
@@ -147,7 +151,7 @@ class String
147
151
  # Example
148
152
  # "puni_puni".dasherize #=> "puni-puni"
149
153
  def dasherize
150
- gsub(/_/, '-')
154
+ gsub('_', '-')
151
155
  end
152
156
 
153
157
  # Removes the module part from the expression in the string
@@ -177,7 +181,7 @@ class String
177
181
  # "employee_salary" #=> "Employee salary"
178
182
  # "author_id" #=> "Author"
179
183
  def humanize
180
- gsub(/_id$/, "").gsub(/_/, " ").capitalize
184
+ gsub(/_id$/, "").gsub('_', " ").capitalize
181
185
  end
182
186
 
183
187
  # Returns the plural form of the word in the string.
@@ -0,0 +1,32 @@
1
+ # frozen-string-literal: true
2
+ #
3
+ # The integer64 extension changes the default type used for Integer
4
+ # to be the same type as used for :Bignum. In general, this means that
5
+ # instead of Integer resulting in a 32-bit database integer type, it will
6
+ # result in a 64-bit database integer type. This affects the default
7
+ # type used for primary_key and foreign_key when using the schema
8
+ # modification methods.
9
+ #
10
+ # Note that it doesn't make sense to use this extension on SQLite, since
11
+ # the integer type will automatically handle 64-bit integers, and it treats
12
+ # the integer type specially when the column is also the primary key.
13
+ #
14
+ # To load the extension into the database:
15
+ #
16
+ # DB.extension :integer64
17
+ #
18
+ # Related module: Sequel::Integer64
19
+
20
+ #
21
+ module Sequel
22
+ module Integer64
23
+ private
24
+
25
+ # Use same type as used for :Bignum by default for generic integer value.
26
+ def type_literal_generic_integer(column)
27
+ type_literal_generic_bignum_symbol(column)
28
+ end
29
+ end
30
+
31
+ Database.register_extension(:integer64, Integer64)
32
+ end
@@ -1,18 +1,24 @@
1
+ # frozen-string-literal: true
2
+ #
1
3
  # The LooserTypecasting extension loosens the default database typecasting
2
4
  # for the following types:
3
5
  #
4
6
  # :float :: use to_f instead of Float()
5
7
  # :integer :: use to_i instead of Integer()
6
- # :decimal :: don't check string conversion with Float()
8
+ # :decimal :: use 0.0 for unsupported strings
7
9
  # :string :: silently allow hash and array conversion to string
8
10
  #
9
11
  # To load the extension into the database:
10
12
  #
11
13
  # DB.extension :looser_typecasting
14
+ #
15
+ # Related module: Sequel::LooserTypecasting
12
16
 
13
17
  #
14
18
  module Sequel
15
19
  module LooserTypecasting
20
+ private
21
+
16
22
  # Typecast the value to a Float using to_f instead of Kernel.Float
17
23
  def typecast_value_float(value)
18
24
  value.to_f
@@ -23,19 +29,23 @@ module Sequel
23
29
  value.to_i
24
30
  end
25
31
 
26
- # Typecast the value to an Integer using to_i instead of Kernel.Integer
32
+ # Typecast the value to an String using to_s instead of Kernel.String
27
33
  def typecast_value_string(value)
28
34
  value.to_s
29
35
  end
30
36
 
31
- # Typecast the value to a BigDecimal, without checking if strings
32
- # have a valid format.
33
- def typecast_value_decimal(value)
34
- if value.is_a?(String)
35
- BigDecimal.new(value)
36
- else
37
- super
37
+ if RUBY_VERSION >= '2.4'
38
+ def _typecast_value_string_to_decimal(value)
39
+ BigDecimal(value)
40
+ rescue
41
+ BigDecimal('0.0')
42
+ end
43
+ else
44
+ # :nocov:
45
+ def _typecast_value_string_to_decimal(value)
46
+ BigDecimal(value)
38
47
  end
48
+ # :nocov:
39
49
  end
40
50
  end
41
51
 
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+ #
1
3
  # Adds the Sequel::Migration and Sequel::Migrator classes, which allow
2
4
  # the user to easily group schema changes and migrate the database
3
5
  # to a newer version or revert to a previous version.
@@ -5,6 +7,10 @@
5
7
  # To load the extension:
6
8
  #
7
9
  # Sequel.extension :migration
10
+ #
11
+ # Related modules: Sequel::Migration, Sequel::SimpleMigration,
12
+ # Sequel::MigrationDSL, Sequel::MigrationReverser, Sequel::MigrationAlterTableReverser,
13
+ # Sequel::Migrator, Sequel::IntegerMigrator, Sequel::TimestampMigrator
8
14
 
9
15
  #
10
16
  module Sequel
@@ -35,7 +41,7 @@ module Sequel
35
41
  # direction.
36
42
  def self.apply(db, direction)
37
43
  raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
38
- new(db).send(direction)
44
+ new(db).public_send(direction)
39
45
  end
40
46
 
41
47
  # Returns the list of Migration descendants.
@@ -59,8 +65,10 @@ module Sequel
59
65
 
60
66
  # Intercepts method calls intended for the database and sends them along.
61
67
  def method_missing(method_sym, *args, &block)
68
+ # Allow calling private methods for backwards compatibility
62
69
  @db.send(method_sym, *args, &block)
63
70
  end
71
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
64
72
 
65
73
  # This object responds to all methods the database responds to.
66
74
  def respond_to_missing?(meth, include_private)
@@ -93,29 +101,29 @@ module Sequel
93
101
  end
94
102
 
95
103
  # Apply the appropriate block on the +Database+
96
- # instance using instance_eval.
104
+ # instance using instance_exec.
97
105
  def apply(db, direction)
98
106
  raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
99
- if prok = send(direction)
100
- db.instance_eval(&prok)
107
+ if prok = public_send(direction)
108
+ db.instance_exec(&prok)
101
109
  end
102
110
  end
103
111
  end
104
112
 
105
113
  # Internal class used by the Sequel.migration DSL, part of the +migration+ extension.
106
114
  class MigrationDSL < BasicObject
107
- # The underlying Migration instance
115
+ # The underlying SimpleMigration instance
108
116
  attr_reader :migration
109
117
 
110
118
  def self.create(&block)
111
119
  new(&block).migration
112
120
  end
113
121
 
114
- # Create a new migration class, and instance_eval the block.
122
+ # Create a new migration class, and instance_exec the block.
115
123
  def initialize(&block)
116
124
  @migration = SimpleMigration.new
117
125
  Migration.descendants << migration
118
- instance_eval(&block)
126
+ instance_exec(&block)
119
127
  end
120
128
 
121
129
  # Defines the migration's down action.
@@ -144,7 +152,7 @@ module Sequel
144
152
  # the block.
145
153
  #
146
154
  # There are no guarantees that this will work perfectly
147
- # in all cases, but it should work for most common cases.
155
+ # in all cases, but it works for some simple cases.
148
156
  def change(&block)
149
157
  migration.up = block
150
158
  migration.down = MigrationReverser.new.reverse(&block)
@@ -164,22 +172,19 @@ module Sequel
164
172
  # the given block.
165
173
  def reverse(&block)
166
174
  begin
167
- instance_eval(&block)
175
+ instance_exec(&block)
168
176
  rescue
169
177
  just_raise = true
170
178
  end
171
179
  if just_raise
172
- Proc.new{raise Sequel::Error, 'irreversible migration method used, you may need to write your own down method'}
180
+ Proc.new{raise Sequel::Error, "irreversible migration method used in #{block.source_location.first}, you may need to write your own down method"}
173
181
  else
174
182
  actions = @actions.reverse
175
183
  Proc.new do
176
184
  actions.each do |a|
177
- if a.last.is_a?(Proc)
178
- pr = a.pop
179
- send(*a, &pr)
180
- else
181
- send(*a)
182
- end
185
+ pr = a.last.is_a?(Proc) ? a.pop : nil
186
+ # Allow calling private methods as the reversing methods are private
187
+ send(*a, &pr)
183
188
  end
184
189
  end
185
190
  end
@@ -227,8 +232,9 @@ module Sequel
227
232
  end
228
233
 
229
234
  def reverse(&block)
230
- instance_eval(&block)
235
+ instance_exec(&block)
231
236
  actions = @actions.reverse
237
+ # Allow calling private methods as the reversing methods are private
232
238
  Proc.new{actions.each{|a| send(*a)}}
233
239
  end
234
240
 
@@ -239,7 +245,9 @@ module Sequel
239
245
  end
240
246
 
241
247
  def add_constraint(*args)
242
- @actions << [:drop_constraint, args.first]
248
+ name = args.first
249
+ name = name.is_a?(Hash) ? name[:name] : name
250
+ @actions << [:drop_constraint, name]
243
251
  end
244
252
 
245
253
  def add_foreign_key(key, table, *args)
@@ -322,30 +330,32 @@ module Sequel
322
330
  # schema_migrations for timestamped migrations). in the database to keep track
323
331
  # of the current migration version. If no migration version is stored in the
324
332
  # database, the version is considered to be 0. If no target version is
325
- # specified, the database is migrated to the latest version available in the
333
+ # specified, or the target version specified is greater than the latest
334
+ # version available, the database is migrated to the latest version available in the
326
335
  # migration directory.
327
336
  #
328
337
  # For example, to migrate the database to the latest version:
329
338
  #
330
- # Sequel::Migrator.apply(DB, '.')
339
+ # Sequel::Migrator.run(DB, '.')
331
340
  #
332
341
  # For example, to migrate the database all the way down:
333
342
  #
334
- # Sequel::Migrator.apply(DB, '.', 0)
343
+ # Sequel::Migrator.run(DB, '.', target: 0)
335
344
  #
336
345
  # For example, to migrate the database to version 4:
337
346
  #
338
- # Sequel::Migrator.apply(DB, '.', 4)
347
+ # Sequel::Migrator.run(DB, '.', target: 4)
339
348
  #
340
349
  # To migrate the database from version 1 to version 5:
341
350
  #
342
- # Sequel::Migrator.apply(DB, '.', 5, 1)
351
+ # Sequel::Migrator.run(DB, '.', target: 5, current: 1)
343
352
  #
344
353
  # Part of the +migration+ extension.
345
354
  class Migrator
346
355
  MIGRATION_FILE_PATTERN = /\A(\d+)_.+\.rb\z/i.freeze
347
- MIGRATION_SPLITTER = '_'.freeze
348
- MINIMUM_TIMESTAMP = 20000101
356
+
357
+ # Mutex used around migration file loading
358
+ MUTEX = Mutex.new
349
359
 
350
360
  # Exception class raised when there is an error with the migrator's
351
361
  # file structure, database, or arguments.
@@ -379,26 +389,29 @@ module Sequel
379
389
  # :column :: The column in the :table argument storing the migration version (default: :version).
380
390
  # :current :: The current version of the database. If not given, it is retrieved from the database
381
391
  # using the :table and :column options.
382
- # :table :: The table containing the schema version (default: :schema_info).
392
+ # :relative :: Run the given number of migrations, with a positive number being migrations to migrate
393
+ # up, and a negative number being migrations to migrate down (IntegerMigrator only).
394
+ # :table :: The table containing the schema version (default: :schema_info for integer migrations and
395
+ # :schema_migrations for timestamped migrations).
383
396
  # :target :: The target version to which to migrate. If not given, migrates to the maximum version.
384
397
  #
385
398
  # Examples:
386
399
  # Sequel::Migrator.run(DB, "migrations")
387
- # Sequel::Migrator.run(DB, "migrations", :target=>15, :current=>10)
388
- # Sequel::Migrator.run(DB, "app1/migrations", :column=> :app2_version)
389
- # Sequel::Migrator.run(DB, "app2/migrations", :column => :app2_version, :table=>:schema_info2)
400
+ # Sequel::Migrator.run(DB, "migrations", target: 15, current: 10)
401
+ # Sequel::Migrator.run(DB, "app1/migrations", column: :app2_version)
402
+ # Sequel::Migrator.run(DB, "app2/migrations", column: :app2_version, table: :schema_info2)
390
403
  def self.run(db, directory, opts=OPTS)
391
404
  migrator_class(directory).new(db, directory, opts).run
392
405
  end
393
406
 
394
407
  # Choose the Migrator subclass to use. Uses the TimestampMigrator
395
- # if the version number appears to be a unix time integer for a year
396
- # after 2005, otherwise uses the IntegerMigrator.
408
+ # if the version number is greater than 20000101, otherwise uses the IntegerMigrator.
397
409
  def self.migrator_class(directory)
398
410
  if self.equal?(Migrator)
411
+ raise(Error, "Must supply a valid migration path") unless File.directory?(directory)
399
412
  Dir.new(directory).each do |file|
400
413
  next unless MIGRATION_FILE_PATTERN.match(file)
401
- return TimestampMigrator if file.split(MIGRATION_SPLITTER, 2).first.to_i > MINIMUM_TIMESTAMP
414
+ return TimestampMigrator if file.split('_', 2).first.to_i > 20000101
402
415
  end
403
416
  IntegerMigrator
404
417
  else
@@ -438,9 +451,9 @@ module Sequel
438
451
  @directory = directory
439
452
  @allow_missing_migration_files = opts[:allow_missing_migration_files]
440
453
  @files = get_migration_files
441
- schema, table = @db.send(:schema_and_table, opts[:table] || self.class.const_get(:DEFAULT_SCHEMA_TABLE))
454
+ schema, table = @db.send(:schema_and_table, opts[:table] || default_schema_table)
442
455
  @table = schema ? Sequel::SQL::QualifiedIdentifier.new(schema, table) : table
443
- @column = opts[:column] || self.class.const_get(:DEFAULT_SCHEMA_COLUMN)
456
+ @column = opts[:column] || default_schema_column
444
457
  @ds = schema_dataset
445
458
  @use_transactions = opts[:use_transactions]
446
459
  end
@@ -467,19 +480,24 @@ module Sequel
467
480
  end
468
481
  end
469
482
 
470
- # Remove all migration classes. Done by the migrator to ensure that
471
- # the correct migration classes are picked up.
472
- def remove_migration_classes
473
- # Remove class definitions
474
- Migration.descendants.each do |c|
475
- Object.send(:remove_const, c.to_s) rescue nil
483
+ # Load the migration file, raising an exception if the file does not define
484
+ # a single migration.
485
+ def load_migration_file(file)
486
+ MUTEX.synchronize do
487
+ n = Migration.descendants.length
488
+ load(file)
489
+ raise Error, "Migration file #{file.inspect} not containing a single migration detected" unless n + 1 == Migration.descendants.length
490
+ c = Migration.descendants.pop
491
+ if c.is_a?(Class) && !c.name.to_s.empty? && Object.const_defined?(c.name)
492
+ Object.send(:remove_const, c.name)
493
+ end
494
+ c
476
495
  end
477
- Migration.descendants.clear # remove any defined migration classes
478
496
  end
479
497
 
480
498
  # Return the integer migration version based on the filename.
481
499
  def migration_version_from_file(filename)
482
- filename.split(MIGRATION_SPLITTER, 2).first.to_i
500
+ filename.split('_', 2).first.to_i
483
501
  end
484
502
  end
485
503
 
@@ -487,9 +505,6 @@ module Sequel
487
505
  # version number starting with 1, where missing or duplicate migration file
488
506
  # versions are not allowed. Part of the +migration+ extension.
489
507
  class IntegerMigrator < Migrator
490
- DEFAULT_SCHEMA_COLUMN = :version
491
- DEFAULT_SCHEMA_TABLE = :schema_info
492
-
493
508
  Error = Migrator::Error
494
509
 
495
510
  # The current version for this migrator
@@ -504,13 +519,31 @@ module Sequel
504
519
  # Set up all state for the migrator instance
505
520
  def initialize(db, directory, opts=OPTS)
506
521
  super
507
- @target = opts[:target] || latest_migration_version
508
522
  @current = opts[:current] || current_migration_version
509
523
 
510
- raise(Error, "No current version available") unless current
511
- raise(Error, "No target version available, probably because no migration files found or filenames don't follow the migration filename convention") unless target
524
+ latest_version = latest_migration_version
525
+ @target = if opts[:target]
526
+ opts[:target]
527
+ elsif opts[:relative]
528
+ @current + opts[:relative]
529
+ else
530
+ latest_version
531
+ end
532
+
533
+ raise(Error, "No target and/or latest version available, probably because no migration files found or filenames don't follow the migration filename convention") unless target && latest_version
534
+
535
+ if @target > latest_version
536
+ @target = latest_version
537
+ elsif @target < 0
538
+ @target = 0
539
+ end
512
540
 
513
541
  @direction = current < target ? :up : :down
542
+
543
+ if @direction == :down && @current >= @files.length
544
+ raise Migrator::Error, "Missing migration version(s) needed to migrate down to target version (current: #{current}, target: #{target})"
545
+ end
546
+
514
547
  @migrations = get_migrations
515
548
  end
516
549
 
@@ -522,13 +555,13 @@ module Sequel
522
555
  # Apply all migrations on the database
523
556
  def run
524
557
  migrations.zip(version_numbers).each do |m, v|
525
- t = Time.now
558
+ timer = Sequel.start_timer
526
559
  db.log_info("Begin applying migration version #{v}, direction: #{direction}")
527
560
  checked_transaction(m) do
528
561
  m.apply(db, direction)
529
562
  set_migration_version(up? ? v : v-1)
530
563
  end
531
- db.log_info("Finished applying migration version #{v}, direction: #{direction}, took #{sprintf('%0.6f', Time.now - t)} seconds")
564
+ db.log_info("Finished applying migration version #{v}, direction: #{direction}, took #{sprintf('%0.6f', Sequel.elapsed_seconds_since(timer))} seconds")
532
565
  end
533
566
 
534
567
  target
@@ -542,6 +575,16 @@ module Sequel
542
575
  ds.get(column) || 0
543
576
  end
544
577
 
578
+ # The default column storing schema version.
579
+ def default_schema_column
580
+ :version
581
+ end
582
+
583
+ # The default table storing schema version.
584
+ def default_schema_table
585
+ :schema_info
586
+ end
587
+
545
588
  # Returns any found migration files in the supplied directory.
546
589
  def get_migration_files
547
590
  files = []
@@ -561,13 +604,7 @@ module Sequel
561
604
  # Returns a list of migration classes filtered for the migration range and
562
605
  # ordered according to the migration direction.
563
606
  def get_migrations
564
- remove_migration_classes
565
-
566
- # load migration files
567
- version_numbers.each{|n| load(files[n])}
568
-
569
- # get migration classes
570
- Migration.descendants
607
+ version_numbers.map{|n| load_migration_file(files[n])}
571
608
  end
572
609
 
573
610
  # Returns the latest version available in the specified directory.
@@ -590,7 +627,7 @@ module Sequel
590
627
  ds
591
628
  end
592
629
 
593
- # Sets the current migration version stored in the database.
630
+ # Sets the current migration version stored in the database.
594
631
  def set_migration_version(version)
595
632
  ds.update(column=>version)
596
633
  end
@@ -604,25 +641,24 @@ module Sequel
604
641
  # so that each number in the array is the migration version
605
642
  # that will be in affect after the migration is run.
606
643
  def version_numbers
607
- versions = files.
608
- compact.
609
- map{|f| migration_version_from_file(File.basename(f))}.
610
- select{|v| up? ? (v > current && v <= target) : (v <= current && v > target)}.
611
- sort
612
- versions.reverse! unless up?
613
- versions
644
+ @version_numbers ||= begin
645
+ versions = files.
646
+ compact.
647
+ map{|f| migration_version_from_file(File.basename(f))}.
648
+ select{|v| up? ? (v > current && v <= target) : (v <= current && v > target)}.
649
+ sort
650
+ versions.reverse! unless up?
651
+ versions
652
+ end
614
653
  end
615
654
  end
616
655
 
617
- # The migrator used if any migration file version appears to be a timestamp.
656
+ # The migrator used if any migration file version is greater than 20000101.
618
657
  # Stores filenames of migration files, and can figure out which migrations
619
658
  # have not been applied and apply them, even if earlier migrations are added
620
659
  # after later migrations. If you plan to do that, the responsibility is on
621
660
  # you to make sure the migrations don't conflict. Part of the +migration+ extension.
622
661
  class TimestampMigrator < Migrator
623
- DEFAULT_SCHEMA_COLUMN = :filename
624
- DEFAULT_SCHEMA_TABLE = :schema_migrations
625
-
626
662
  Error = Migrator::Error
627
663
 
628
664
  # Array of strings of applied migration filenames
@@ -653,7 +689,7 @@ module Sequel
653
689
  checked_transaction(m) do
654
690
  m.apply(db, direction)
655
691
  fi = f.downcase
656
- direction == :up ? ds.insert(column=>fi) : ds.filter(column=>fi).delete
692
+ direction == :up ? ds.insert(column=>fi) : ds.where(column=>fi).delete
657
693
  end
658
694
  db.log_info("Finished applying migration #{f}, direction: #{direction}, took #{sprintf('%0.6f', Time.now - t)} seconds")
659
695
  end
@@ -665,7 +701,7 @@ module Sequel
665
701
  # Convert the schema_info table to the new schema_migrations table format,
666
702
  # using the version of the schema_info table and the current migration files.
667
703
  def convert_from_schema_info
668
- v = db[IntegerMigrator::DEFAULT_SCHEMA_TABLE].get(IntegerMigrator::DEFAULT_SCHEMA_COLUMN)
704
+ v = db[:schema_info].get(:version)
669
705
  ds = db.from(table)
670
706
  files.each do |path|
671
707
  f = File.basename(path)
@@ -675,6 +711,16 @@ module Sequel
675
711
  end
676
712
  end
677
713
 
714
+ # The default column storing migration filenames.
715
+ def default_schema_column
716
+ :filename
717
+ end
718
+
719
+ # The default table storing migration filenames.
720
+ def default_schema_table
721
+ :schema_migrations
722
+ end
723
+
678
724
  # Returns filenames of all applied migrations
679
725
  def get_applied_migrations
680
726
  am = ds.select_order_map(column)
@@ -695,26 +741,21 @@ module Sequel
695
741
 
696
742
  # Returns tuples of migration, filename, and direction
697
743
  def get_migration_tuples
698
- remove_migration_classes
699
744
  up_mts = []
700
745
  down_mts = []
701
- ms = Migration.descendants
702
746
  files.each do |path|
703
747
  f = File.basename(path)
704
748
  fi = f.downcase
705
749
  if target
706
750
  if migration_version_from_file(f) > target
707
751
  if applied_migrations.include?(fi)
708
- load(path)
709
- down_mts << [ms.last, f, :down]
752
+ down_mts << [load_migration_file(path), f, :down]
710
753
  end
711
754
  elsif !applied_migrations.include?(fi)
712
- load(path)
713
- up_mts << [ms.last, f, :up]
755
+ up_mts << [load_migration_file(path), f, :up]
714
756
  end
715
757
  elsif !applied_migrations.include?(fi)
716
- load(path)
717
- up_mts << [ms.last, f, :up]
758
+ up_mts << [load_migration_file(path), f, :up]
718
759
  end
719
760
  end
720
761
  up_mts + down_mts.reverse
@@ -726,7 +767,18 @@ module Sequel
726
767
  c = column
727
768
  ds = db.from(table)
728
769
  if !db.table_exists?(table)
729
- db.create_table(table){String c, :primary_key=>true}
770
+ begin
771
+ db.create_table(table){String c, :primary_key=>true}
772
+ rescue Sequel::DatabaseError => e
773
+ if db.database_type == :mysql && e.message =~ /max key length/
774
+ # Handle case where MySQL is used with utf8mb4 charset default, which
775
+ # only allows a maximum length of about 190 characters for string
776
+ # primary keys due to InnoDB limitations.
777
+ db.create_table(table){String c, :primary_key=>true, :size=>190}
778
+ else
779
+ raise e
780
+ end
781
+ end
730
782
  if db.table_exists?(:schema_info) and vha = db[:schema_info].all and vha.length == 1 and
731
783
  vha.first.keys == [:version] and vha.first.values.first.is_a?(Integer)
732
784
  convert_from_schema_info