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,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+ #
1
3
  # The blank extension adds the blank? method to all objects (e.g. Object#blank?).
2
4
  #
3
5
  # To load the extension:
@@ -0,0 +1,79 @@
1
+ # frozen-string-literal: true
2
+ #
3
+ # The caller_logging extension includes caller information before
4
+ # query logging, showing which code caused the query. It skips
5
+ # internal Sequel code, showing the first non-Sequel caller line.
6
+ #
7
+ # DB.extension :caller_logging
8
+ # DB[:table].first
9
+ # # Logger:
10
+ # # (0.000041s) (source: /path/to/app/foo/t.rb:12 in `get_first`) SELECT * FROM table LIMIT 1
11
+ #
12
+ # You can further filter the caller lines by setting
13
+ # <tt>Database#caller_logging_ignore</tt> to a regexp of additional
14
+ # caller lines to ignore. This is useful if you have specific
15
+ # methods or internal extensions/plugins that you would also
16
+ # like to ignore as they obscure the code actually making the
17
+ # request.
18
+ #
19
+ # DB.caller_logging_ignore = %r{/path/to/app/lib/plugins}
20
+ #
21
+ # You can also format the caller before it is placed in the logger,
22
+ # using +caller_logging_formatter+:
23
+ #
24
+ # DB.caller_logging_formatter = lambda do |caller|
25
+ # "(#{caller.sub(/\A\/path\/to\/app\//, '')})"
26
+ # end
27
+ # DB[:table].first
28
+ # # Logger:
29
+ # # (0.000041s) (foo/t.rb:12 in `get_first`) SELECT * FROM table LIMIT 1
30
+ #
31
+ # Related module: Sequel::CallerLogging
32
+
33
+ require 'rbconfig'
34
+
35
+ #
36
+ module Sequel
37
+ module CallerLogging
38
+ SEQUEL_LIB_PATH = (File.expand_path('../../..', __FILE__) + '/').freeze
39
+
40
+ # A regexp of caller lines to ignore, in addition to internal Sequel and Ruby code.
41
+ attr_accessor :caller_logging_ignore
42
+
43
+ # A callable to format the external caller
44
+ attr_accessor :caller_logging_formatter
45
+
46
+ # Include caller information when logging query.
47
+ def log_connection_yield(sql, conn, args=nil)
48
+ if !@loggers.empty? && (external_caller = external_caller_for_log)
49
+ sql = "#{external_caller} #{sql}"
50
+ end
51
+ super
52
+ end
53
+
54
+ private
55
+
56
+ # The caller to log, ignoring internal Sequel and Ruby code, and user specified
57
+ # lines to ignore.
58
+ def external_caller_for_log
59
+ ignore = caller_logging_ignore
60
+ c = caller.find do |line|
61
+ !(line.start_with?(SEQUEL_LIB_PATH) ||
62
+ line.start_with?(RbConfig::CONFIG["rubylibdir"]) ||
63
+ (ignore && line =~ ignore))
64
+ end
65
+
66
+ if c
67
+ c = if formatter = caller_logging_formatter
68
+ formatter.call(c)
69
+ else
70
+ "(source: #{c})"
71
+ end
72
+ end
73
+
74
+ c
75
+ end
76
+ end
77
+
78
+ Database.register_extension(:caller_logging, CallerLogging)
79
+ end
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+ #
1
3
  # The columns_introspection extension attempts to introspect the
2
4
  # selected columns for a dataset before issuing a query. If it
3
5
  # thinks it can guess correctly at the columns the query will use,
@@ -14,6 +16,8 @@
14
16
  # To attempt to introspect columns for all datasets on a single database:
15
17
  #
16
18
  # DB.extension(:columns_introspection)
19
+ #
20
+ # Related module: Sequel::ColumnsIntrospection
17
21
 
18
22
  #
19
23
  module Sequel
@@ -24,9 +28,11 @@ module Sequel
24
28
  # Symbols, SQL::Identifiers, SQL::QualifiedIdentifiers, and
25
29
  # SQL::AliasedExpressions.
26
30
  def columns
27
- return @columns if @columns
31
+ if cols = _columns
32
+ return cols
33
+ end
28
34
  if (pcs = probable_columns) && pcs.all?
29
- @columns = pcs
35
+ self.columns = pcs
30
36
  else
31
37
  super
32
38
  end
@@ -69,8 +75,7 @@ module Sequel
69
75
  when SQL::Identifier
70
76
  c.value.to_sym
71
77
  when SQL::QualifiedIdentifier
72
- col = c.column
73
- col.is_a?(SQL::Identifier) ? col.value.to_sym : col.to_sym
78
+ c.column.to_sym
74
79
  when SQL::AliasedExpression
75
80
  a = c.alias
76
81
  a.is_a?(SQL::Identifier) ? a.value.to_sym : a.to_sym
@@ -0,0 +1,99 @@
1
+ # frozen-string-literal: true
2
+ #
3
+ # The connection_expiration extension modifies a database's
4
+ # connection pool to validate that connections checked out
5
+ # from the pool are not expired, before yielding them for
6
+ # use. If it detects an expired connection, it removes it
7
+ # from the pool and tries the next available connection,
8
+ # creating a new connection if no available connection is
9
+ # unexpired. Example of use:
10
+ #
11
+ # DB.extension(:connection_expiration)
12
+ #
13
+ # The default connection timeout is 14400 seconds (4 hours).
14
+ # To override it:
15
+ #
16
+ # DB.pool.connection_expiration_timeout = 3600 # 1 hour
17
+ #
18
+ # Note that this extension only affects the default threaded
19
+ # and the sharded threaded connection pool. The single
20
+ # threaded and sharded single threaded connection pools are
21
+ # not affected. As the only reason to use the single threaded
22
+ # pools is for speed, and this extension makes the connection
23
+ # pool slower, there's not much point in modifying this
24
+ # extension to work with the single threaded pools. The
25
+ # threaded pools work fine even in single threaded code, so if
26
+ # you are currently using a single threaded pool and want to
27
+ # use this extension, switch to using a threaded pool.
28
+ #
29
+ # Related module: Sequel::ConnectionExpiration
30
+
31
+ #
32
+ module Sequel
33
+ module ConnectionExpiration
34
+ class Retry < Error; end
35
+ Sequel::Deprecation.deprecate_constant(self, :Retry)
36
+
37
+ # The number of seconds that need to pass since
38
+ # connection creation before expiring a connection.
39
+ # Defaults to 14400 seconds (4 hours).
40
+ attr_accessor :connection_expiration_timeout
41
+
42
+ # The maximum number of seconds that will be added as a random delay to the expiration timeout
43
+ # Defaults to 0 seconds (no random delay).
44
+ attr_accessor :connection_expiration_random_delay
45
+
46
+ # Initialize the data structures used by this extension.
47
+ def self.extended(pool)
48
+ pool.instance_exec do
49
+ sync do
50
+ @connection_expiration_timestamps ||= {}
51
+ @connection_expiration_timeout ||= 14400
52
+ @connection_expiration_random_delay ||= 0
53
+ end
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ # Clean up expiration timestamps during disconnect.
60
+ def disconnect_connection(conn)
61
+ sync{@connection_expiration_timestamps.delete(conn)}
62
+ super
63
+ end
64
+
65
+ # Record the time the connection was created.
66
+ def make_new(*)
67
+ conn = super
68
+ @connection_expiration_timestamps[conn] = [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze
69
+ conn
70
+ end
71
+
72
+ # When acquiring a connection, check if the connection is expired.
73
+ # If it is expired, disconnect the connection, and retry with a new
74
+ # connection.
75
+ def acquire(*a)
76
+ conn = nil
77
+ 1.times do
78
+ if (conn = super) &&
79
+ (cet = sync{@connection_expiration_timestamps[conn]}) &&
80
+ Sequel.elapsed_seconds_since(cet[0]) > cet[1]
81
+
82
+ if pool_type == :sharded_threaded
83
+ sync{allocated(a.last).delete(Sequel.current)}
84
+ else
85
+ sync{@allocated.delete(Sequel.current)}
86
+ end
87
+
88
+ disconnect_connection(conn)
89
+ redo
90
+ end
91
+ end
92
+
93
+ conn
94
+ end
95
+ end
96
+
97
+ Database.register_extension(:connection_expiration){|db| db.pool.extend(ConnectionExpiration)}
98
+ end
99
+
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+ #
1
3
  # The connection_validator extension modifies a database's
2
4
  # connection pool to validate that connections checked out
3
5
  # from the pool are still valid, before yielding them for
@@ -42,11 +44,14 @@
42
44
  # threaded pools work fine even in single threaded code, so if
43
45
  # you are currently using a single threaded pool and want to
44
46
  # use this extension, switch to using a threaded pool.
47
+ #
48
+ # Related module: Sequel::ConnectionValidator
45
49
 
46
50
  #
47
51
  module Sequel
48
52
  module ConnectionValidator
49
53
  class Retry < Error; end
54
+ Sequel::Deprecation.deprecate_constant(self, :Retry)
50
55
 
51
56
  # The number of seconds that need to pass since
52
57
  # connection checkin before attempting to validate
@@ -56,9 +61,11 @@ module Sequel
56
61
 
57
62
  # Initialize the data structures used by this extension.
58
63
  def self.extended(pool)
59
- pool.instance_eval do
60
- @connection_timestamps ||= {}
61
- @connection_validation_timeout = 3600
64
+ pool.instance_exec do
65
+ sync do
66
+ @connection_timestamps ||= {}
67
+ @connection_validation_timeout ||= 3600
68
+ end
62
69
  end
63
70
 
64
71
  # Make sure the valid connection SQL query is precached,
@@ -73,32 +80,38 @@ module Sequel
73
80
  # Record the time the connection was checked back into the pool.
74
81
  def checkin_connection(*)
75
82
  conn = super
76
- @connection_timestamps[conn] = Time.now
83
+ @connection_timestamps[conn] = Sequel.start_timer
77
84
  conn
78
85
  end
79
86
 
87
+ # Clean up timestamps during disconnect.
88
+ def disconnect_connection(conn)
89
+ sync{@connection_timestamps.delete(conn)}
90
+ super
91
+ end
92
+
80
93
  # When acquiring a connection, if it has been
81
94
  # idle for longer than the connection validation timeout,
82
95
  # test the connection for validity. If it is not valid,
83
96
  # disconnect the connection, and retry with a new connection.
84
97
  def acquire(*a)
85
- begin
98
+ conn = nil
99
+
100
+ 1.times do
86
101
  if (conn = super) &&
87
- (t = sync{@connection_timestamps.delete(conn)}) &&
88
- Time.now - t > @connection_validation_timeout &&
102
+ (timer = sync{@connection_timestamps.delete(conn)}) &&
103
+ Sequel.elapsed_seconds_since(timer) > @connection_validation_timeout &&
89
104
  !db.valid_connection?(conn)
90
105
 
91
106
  if pool_type == :sharded_threaded
92
- sync{allocated(a.last).delete(Thread.current)}
107
+ sync{allocated(a.last).delete(Sequel.current)}
93
108
  else
94
- sync{@allocated.delete(Thread.current)}
109
+ sync{@allocated.delete(Sequel.current)}
95
110
  end
96
111
 
97
- db.disconnect_connection(conn)
98
- raise Retry
112
+ disconnect_connection(conn)
113
+ redo
99
114
  end
100
- rescue Retry
101
- retry
102
115
  end
103
116
 
104
117
  conn
@@ -0,0 +1,65 @@
1
+ # frozen-string-literal: true
2
+ #
3
+ # The constant_sql_override extension allows you to change the SQL
4
+ # generated for Sequel constants.
5
+ #
6
+ # One possible use-case for this is to have Sequel::CURRENT_TIMESTAMP use UTC time when
7
+ # you have Sequel.database_timezone = :utc, but the database uses localtime when
8
+ # generating CURRENT_TIMESTAMP.
9
+ #
10
+ # You can set SQL overrides with Database#set_constant_sql:
11
+ #
12
+ # DB.set_constant_sql(Sequel::CURRENT_TIMESTAMP, "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'")
13
+ #
14
+ # Now, using Sequel::CURRENT_TIMESTAMP will use your override instead:
15
+ #
16
+ # Album.where(released_at: Sequel::CURRENT_TIMESTAMP).sql
17
+ # # => SELECT "albums.*" FROM "albums" WHERE ("released_at" = CURRENT_TIMESTAMP AT TIME ZONE 'UTC')
18
+ #
19
+ # To use this extension, first load it into your Sequel::Database instance:
20
+ #
21
+ # DB.extension :constant_sql_override
22
+ #
23
+ # Related module: Sequel::ConstantSqlOverride
24
+
25
+ #
26
+ module Sequel
27
+ module ConstantSqlOverride
28
+ module DatabaseMethods
29
+ # Create the initial empty hash of constant sql overrides.
30
+ def self.extended(db)
31
+ db.instance_exec do
32
+ @constant_sqls ||= {}
33
+ extend_datasets(DatasetMethods)
34
+ end
35
+ end
36
+
37
+ # Hash mapping constant symbols to SQL. For internal use only.
38
+ attr_reader :constant_sqls # :nodoc:
39
+
40
+ # Set the SQL to use for the given Sequel::SQL::Constant
41
+ def set_constant_sql(constant, override)
42
+ @constant_sqls[constant.constant] = override
43
+ end
44
+
45
+ # Freeze the constant_sqls hash to prevent adding new overrides.
46
+ def freeze
47
+ @constant_sqls.freeze
48
+ super
49
+ end
50
+ end
51
+
52
+ module DatasetMethods
53
+ # Use overridden constant SQL
54
+ def constant_sql_append(sql, constant)
55
+ if constant_sql = db.constant_sqls[constant]
56
+ sql << constant_sql
57
+ else
58
+ super
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ Database.register_extension(:constant_sql_override, ConstantSqlOverride::DatabaseMethods)
65
+ end
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+ #
1
3
  # The constraint_validations extension is designed to easily create database
2
4
  # constraints inside create_table and alter_table blocks. It also adds
3
5
  # relevant metadata about the constraints to a separate table, which the
@@ -20,7 +22,7 @@
20
22
  # generally want to create it first, before creating any other application
21
23
  # tables.
22
24
  #
23
- # Because migrations instance_eval the up and down blocks on a database,
25
+ # Because migrations instance_exec the up and down blocks on a database,
24
26
  # using this extension in a migration can be done via:
25
27
  #
26
28
  # Sequel.migration do
@@ -41,7 +43,7 @@
41
43
  # similar to the validation_helpers model plugin API. However,
42
44
  # instead of having separate validates_* methods, it just adds a validate
43
45
  # method that accepts a block to the schema generators. Like the
44
- # create_table and alter_table blocks, this block is instance_evaled and
46
+ # create_table and alter_table blocks, this block is instance_execed and
45
47
  # offers its own DSL. Example:
46
48
  #
47
49
  # DB.create_table(:table) do
@@ -54,8 +56,8 @@
54
56
  # end
55
57
  # end
56
58
  #
57
- # instance_eval is used in this case because create_table and alter_table
58
- # already use instance_eval, so losing access to the surrounding receiver
59
+ # instance_exec is used in this case because create_table and alter_table
60
+ # already use instance_exec, so losing access to the surrounding receiver
59
61
  # is not an issue.
60
62
  #
61
63
  # Here's a breakdown of the constraints created for each constraint validation
@@ -76,6 +78,10 @@
76
78
  # includes [1, 2] :: CHECK column IN (1, 2)
77
79
  # includes 3..5 :: CHECK column >= 3 AND column <= 5
78
80
  # includes 3...5 :: CHECK column >= 3 AND column < 5
81
+ # operator :>, 1 :: CHECK column > 1
82
+ # operator :>=, 2 :: CHECK column >= 2
83
+ # operator :<, "M" :: CHECK column < 'M'
84
+ # operator :<=, 'K' :: CHECK column <= 'K'
79
85
  # unique :: UNIQUE (column)
80
86
  #
81
87
  # There are some additional API differences:
@@ -92,6 +98,8 @@
92
98
  # patters are very simple, so many regexp patterns cannot be expressed by
93
99
  # them, but only a couple databases (PostgreSQL and MySQL) support regexp
94
100
  # patterns.
101
+ # * The operator validation only supports >, >=, <, and <= operators, and the
102
+ # argument must be a string or an integer.
95
103
  # * When using the unique validation, column names cannot have embedded commas.
96
104
  # For similar reasons, when using an includes validation with an array of
97
105
  # strings, none of the strings in the array can have embedded commas.
@@ -121,12 +129,21 @@
121
129
  # <tt>drop_constraint_validations_for(:table=>'table')</tt>, and then
122
130
  # readd all constraints you want to use inside the alter table block,
123
131
  # making no other changes inside the alter_table block.
132
+ #
133
+ # Dropping a table will automatically delete all constraint validations for
134
+ # that table. However, altering a table (e.g. to drop a column) will not
135
+ # currently make any changes to the constraint validations metadata.
136
+ #
137
+ # Related module: Sequel::ConstraintValidations
124
138
 
125
139
  #
126
140
  module Sequel
127
141
  module ConstraintValidations
128
142
  # The default table name used for the validation metadata.
129
143
  DEFAULT_CONSTRAINT_VALIDATIONS_TABLE = :sequel_constraint_validations
144
+ OPERATORS = {:< => :lt, :<= => :lte, :> => :gt, :>= => :gte}.freeze
145
+ REVERSE_OPERATOR_MAP = {:str_lt => :<, :str_lte => :<=, :str_gt => :>, :str_gte => :>=,
146
+ :int_lt => :<, :int_lte => :<=, :int_gt => :>, :int_gte => :>=}.freeze
130
147
 
131
148
  # Set the default validation metadata table name if it has not already
132
149
  # been set.
@@ -160,15 +177,32 @@ module Sequel
160
177
  END
161
178
  end
162
179
 
180
+ # Create operator validation. The op should be either +:>+, +:>=+, +:<+, or +:<=+, and
181
+ # the arg should be either a string or an integer.
182
+ def operator(op, arg, columns, opts=OPTS)
183
+ raise Error, "invalid operator (#{op}) used when creating operator validation" unless suffix = OPERATORS[op]
184
+
185
+ prefix = case arg
186
+ when String
187
+ "str"
188
+ when Integer
189
+ "int"
190
+ else
191
+ raise Error, "invalid argument (#{arg.inspect}) used when creating operator validation"
192
+ end
193
+
194
+ @generator.validation({:type=>:"#{prefix}_#{suffix}", :columns=>Array(columns), :arg=>arg}.merge!(opts))
195
+ end
196
+
163
197
  # Given the name of a constraint, drop that constraint from the database,
164
198
  # and remove the related validation metadata.
165
199
  def drop(constraint)
166
200
  @generator.validation({:type=>:drop, :name=>constraint})
167
201
  end
168
202
 
169
- # Alias of instance_eval for a nicer API.
203
+ # Alias of instance_exec for a nicer API.
170
204
  def process(&block)
171
- instance_eval(&block)
205
+ instance_exec(&block)
172
206
  end
173
207
  end
174
208
 
@@ -230,10 +264,20 @@ module Sequel
230
264
  super do
231
265
  extend CreateTableGeneratorMethods
232
266
  @validations = []
233
- instance_eval(&block) if block
267
+ instance_exec(&block) if block
234
268
  end
235
269
  end
236
270
 
271
+ # Drop all constraint validations for a table if dropping the table.
272
+ def drop_table(*names)
273
+ names.each do |name|
274
+ if !name.is_a?(Hash) && table_exists?(constraint_validations_table)
275
+ drop_constraint_validations_for(:table=>name)
276
+ end
277
+ end
278
+ super
279
+ end
280
+
237
281
  # Drop the constraint validations table.
238
282
  def drop_constraint_validations_table
239
283
  drop_table(constraint_validations_table)
@@ -278,7 +322,7 @@ module Sequel
278
322
  super do
279
323
  extend AlterTableGeneratorMethods
280
324
  @validations = []
281
- instance_eval(&block) if block
325
+ instance_exec(&block) if block
282
326
  end
283
327
  end
284
328
 
@@ -313,9 +357,7 @@ module Sequel
313
357
  # This allows the code to handle schema qualified tables,
314
358
  # without quoting all table names.
315
359
  def constraint_validations_literal_table(table)
316
- ds = dataset
317
- ds.quote_identifiers = false
318
- ds.literal(table)
360
+ dataset.with_quote_identifiers(false).literal(table)
319
361
  end
320
362
 
321
363
  # Before creating the table, add constraints for all of the
@@ -327,6 +369,18 @@ module Sequel
327
369
  super
328
370
  end
329
371
 
372
+ def constraint_validation_expression(cols, allow_nil)
373
+ exprs = cols.map do |c|
374
+ expr = yield c
375
+ if allow_nil
376
+ Sequel.|({c=>nil}, expr)
377
+ else
378
+ Sequel.&(Sequel.~(c=>nil), expr)
379
+ end
380
+ end
381
+ Sequel.&(*exprs)
382
+ end
383
+
330
384
  # For the given table, generator, and validations, add constraints
331
385
  # to the generator for each of the validations, as well as adding
332
386
  # validation metadata to the constraint validations table.
@@ -337,26 +391,44 @@ module Sequel
337
391
 
338
392
  case validation_type
339
393
  when :presence
340
- string_check = columns.select{|c| generator_string_column?(generator, table, c)}.map{|c| [Sequel.trim(c), blank_string_value]}
341
- generator_add_constraint_from_validation(generator, val, (Sequel.negate(string_check) unless string_check.empty?))
394
+ strings, non_strings = columns.partition{|c| generator_string_column?(generator, table, c)}
395
+ if !non_strings.empty? && !allow_nil
396
+ non_strings_expr = Sequel.&(*non_strings.map{|c| Sequel.~(c=>nil)})
397
+ end
398
+
399
+ unless strings.empty?
400
+ strings_expr = constraint_validation_expression(strings, allow_nil){|c| Sequel.~(Sequel.trim(c) => blank_string_value)}
401
+ end
402
+
403
+ expr = if non_strings_expr && strings_expr
404
+ Sequel.&(strings_expr, non_strings_expr)
405
+ else
406
+ strings_expr || non_strings_expr
407
+ end
408
+
409
+ if expr
410
+ generator.constraint(constraint, expr)
411
+ end
342
412
  when :exact_length
343
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| {Sequel.char_length(c) => arg}}))
413
+ generator.constraint(constraint, constraint_validation_expression(columns, allow_nil){|c| {Sequel.char_length(c) => arg}})
344
414
  when :min_length
345
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| Sequel.char_length(c) >= arg}))
415
+ generator.constraint(constraint, constraint_validation_expression(columns, allow_nil){|c| Sequel.char_length(c) >= arg})
346
416
  when :max_length
347
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| Sequel.char_length(c) <= arg}))
417
+ generator.constraint(constraint, constraint_validation_expression(columns, allow_nil){|c| Sequel.char_length(c) <= arg})
418
+ when *REVERSE_OPERATOR_MAP.keys
419
+ generator.constraint(constraint, constraint_validation_expression(columns, allow_nil){|c| Sequel.identifier(c).public_send(REVERSE_OPERATOR_MAP[validation_type], arg)})
348
420
  when :length_range
349
421
  op = arg.exclude_end? ? :< : :<=
350
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| (Sequel.char_length(c) >= arg.begin) & Sequel.char_length(c).send(op, arg.end)}))
422
+ generator.constraint(constraint, constraint_validation_expression(columns, allow_nil){|c| (Sequel.char_length(c) >= arg.begin) & Sequel.char_length(c).public_send(op, arg.end)})
351
423
  arg = "#{arg.begin}..#{'.' if arg.exclude_end?}#{arg.end}"
352
424
  when :format
353
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| {c => arg}}))
425
+ generator.constraint(constraint, constraint_validation_expression(columns, allow_nil){|c| {c => arg}})
354
426
  if arg.casefold?
355
427
  validation_type = :iformat
356
428
  end
357
429
  arg = arg.source
358
430
  when :includes
359
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| {c => arg}}))
431
+ generator.constraint(constraint, constraint_validation_expression(columns, allow_nil){|c| {c => arg}})
360
432
  if arg.is_a?(Range)
361
433
  if arg.begin.is_a?(Integer) && arg.end.is_a?(Integer)
362
434
  validation_type = :includes_int_range
@@ -377,7 +449,7 @@ module Sequel
377
449
  raise Error, "validates includes only supports arrays and ranges currently, cannot handle: #{arg.inspect}"
378
450
  end
379
451
  when :like, :ilike
380
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| Sequel.send(validation_type, c, arg)}))
452
+ generator.constraint(constraint, constraint_validation_expression(columns, allow_nil){|c| Sequel.public_send(validation_type, c, arg)})
381
453
  when :unique
382
454
  generator.unique(columns, :name=>constraint)
383
455
  columns = [columns.join(',')]
@@ -401,30 +473,13 @@ module Sequel
401
473
  end
402
474
  end
403
475
 
404
- ds = from(:sequel_constraint_validations)
476
+ ds = from(constraint_validations_table)
405
477
  unless drop_rows.empty?
406
478
  ds.where([:table, :constraint_name]=>drop_rows).delete
407
479
  end
408
480
  ds.multi_insert(rows.flatten)
409
481
  end
410
482
 
411
- # Add the constraint to the generator, including a NOT NULL constraint
412
- # for all columns unless the :allow_nil option is given.
413
- def generator_add_constraint_from_validation(generator, val, cons)
414
- if val[:allow_nil]
415
- nil_cons = Sequel.expr(val[:columns].map{|c| [c, nil]})
416
- cons = Sequel.|(nil_cons, cons) if cons
417
- else
418
- nil_cons = Sequel.negate(val[:columns].map{|c| [c, nil]})
419
- cons = cons ? Sequel.&(nil_cons, cons) : nil_cons
420
- end
421
-
422
- if cons
423
- generator.constraint(val[:name], cons)
424
- end
425
- end
426
-
427
-
428
483
  # Introspect the generator to determine if column
429
484
  # created is a string or not.
430
485
  def generator_string_column?(generator, table, c)