sequel 4.36.0 → 5.61.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 (760) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +548 -5749
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +265 -159
  5. data/bin/sequel +34 -12
  6. data/doc/advanced_associations.rdoc +228 -187
  7. data/doc/association_basics.rdoc +281 -291
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +86 -51
  10. data/doc/code_order.rdoc +25 -19
  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/fork_safety.rdoc +84 -0
  16. data/doc/mass_assignment.rdoc +74 -31
  17. data/doc/migration.rdoc +59 -51
  18. data/doc/model_dataset_method_design.rdoc +129 -0
  19. data/doc/model_hooks.rdoc +15 -25
  20. data/doc/model_plugins.rdoc +12 -12
  21. data/doc/mssql_stored_procedures.rdoc +3 -3
  22. data/doc/object_model.rdoc +58 -68
  23. data/doc/opening_databases.rdoc +85 -95
  24. data/doc/postgresql.rdoc +263 -38
  25. data/doc/prepared_statements.rdoc +29 -24
  26. data/doc/querying.rdoc +189 -167
  27. data/doc/reflection.rdoc +5 -6
  28. data/doc/release_notes/5.0.0.txt +159 -0
  29. data/doc/release_notes/5.1.0.txt +31 -0
  30. data/doc/release_notes/5.10.0.txt +84 -0
  31. data/doc/release_notes/5.11.0.txt +83 -0
  32. data/doc/release_notes/5.12.0.txt +141 -0
  33. data/doc/release_notes/5.13.0.txt +27 -0
  34. data/doc/release_notes/5.14.0.txt +63 -0
  35. data/doc/release_notes/5.15.0.txt +39 -0
  36. data/doc/release_notes/5.16.0.txt +110 -0
  37. data/doc/release_notes/5.17.0.txt +31 -0
  38. data/doc/release_notes/5.18.0.txt +69 -0
  39. data/doc/release_notes/5.19.0.txt +28 -0
  40. data/doc/release_notes/5.2.0.txt +33 -0
  41. data/doc/release_notes/5.20.0.txt +89 -0
  42. data/doc/release_notes/5.21.0.txt +87 -0
  43. data/doc/release_notes/5.22.0.txt +48 -0
  44. data/doc/release_notes/5.23.0.txt +56 -0
  45. data/doc/release_notes/5.24.0.txt +56 -0
  46. data/doc/release_notes/5.25.0.txt +32 -0
  47. data/doc/release_notes/5.26.0.txt +35 -0
  48. data/doc/release_notes/5.27.0.txt +21 -0
  49. data/doc/release_notes/5.28.0.txt +16 -0
  50. data/doc/release_notes/5.29.0.txt +22 -0
  51. data/doc/release_notes/5.3.0.txt +121 -0
  52. data/doc/release_notes/5.30.0.txt +20 -0
  53. data/doc/release_notes/5.31.0.txt +148 -0
  54. data/doc/release_notes/5.32.0.txt +46 -0
  55. data/doc/release_notes/5.33.0.txt +24 -0
  56. data/doc/release_notes/5.34.0.txt +40 -0
  57. data/doc/release_notes/5.35.0.txt +56 -0
  58. data/doc/release_notes/5.36.0.txt +60 -0
  59. data/doc/release_notes/5.37.0.txt +30 -0
  60. data/doc/release_notes/5.38.0.txt +28 -0
  61. data/doc/release_notes/5.39.0.txt +19 -0
  62. data/doc/release_notes/5.4.0.txt +80 -0
  63. data/doc/release_notes/5.40.0.txt +40 -0
  64. data/doc/release_notes/5.41.0.txt +25 -0
  65. data/doc/release_notes/5.42.0.txt +136 -0
  66. data/doc/release_notes/5.43.0.txt +98 -0
  67. data/doc/release_notes/5.44.0.txt +32 -0
  68. data/doc/release_notes/5.45.0.txt +34 -0
  69. data/doc/release_notes/5.46.0.txt +87 -0
  70. data/doc/release_notes/5.47.0.txt +59 -0
  71. data/doc/release_notes/5.48.0.txt +14 -0
  72. data/doc/release_notes/5.49.0.txt +59 -0
  73. data/doc/release_notes/5.5.0.txt +61 -0
  74. data/doc/release_notes/5.50.0.txt +78 -0
  75. data/doc/release_notes/5.51.0.txt +47 -0
  76. data/doc/release_notes/5.52.0.txt +87 -0
  77. data/doc/release_notes/5.53.0.txt +23 -0
  78. data/doc/release_notes/5.54.0.txt +27 -0
  79. data/doc/release_notes/5.55.0.txt +21 -0
  80. data/doc/release_notes/5.56.0.txt +51 -0
  81. data/doc/release_notes/5.57.0.txt +23 -0
  82. data/doc/release_notes/5.58.0.txt +31 -0
  83. data/doc/release_notes/5.59.0.txt +73 -0
  84. data/doc/release_notes/5.6.0.txt +31 -0
  85. data/doc/release_notes/5.60.0.txt +22 -0
  86. data/doc/release_notes/5.61.0.txt +43 -0
  87. data/doc/release_notes/5.7.0.txt +108 -0
  88. data/doc/release_notes/5.8.0.txt +170 -0
  89. data/doc/release_notes/5.9.0.txt +99 -0
  90. data/doc/schema_modification.rdoc +95 -75
  91. data/doc/security.rdoc +109 -80
  92. data/doc/sharding.rdoc +74 -47
  93. data/doc/sql.rdoc +147 -122
  94. data/doc/testing.rdoc +43 -20
  95. data/doc/thread_safety.rdoc +2 -4
  96. data/doc/transactions.rdoc +97 -18
  97. data/doc/validations.rdoc +52 -50
  98. data/doc/virtual_rows.rdoc +90 -109
  99. data/lib/sequel/adapters/ado/access.rb +15 -17
  100. data/lib/sequel/adapters/ado/mssql.rb +6 -15
  101. data/lib/sequel/adapters/ado.rb +150 -20
  102. data/lib/sequel/adapters/amalgalite.rb +11 -23
  103. data/lib/sequel/adapters/ibmdb.rb +47 -55
  104. data/lib/sequel/adapters/jdbc/db2.rb +29 -39
  105. data/lib/sequel/adapters/jdbc/derby.rb +58 -54
  106. data/lib/sequel/adapters/jdbc/h2.rb +93 -35
  107. data/lib/sequel/adapters/jdbc/hsqldb.rb +24 -31
  108. data/lib/sequel/adapters/jdbc/jtds.rb +2 -10
  109. data/lib/sequel/adapters/jdbc/mssql.rb +3 -11
  110. data/lib/sequel/adapters/jdbc/mysql.rb +17 -20
  111. data/lib/sequel/adapters/jdbc/oracle.rb +22 -18
  112. data/lib/sequel/adapters/jdbc/postgresql.rb +69 -71
  113. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +11 -23
  114. data/lib/sequel/adapters/jdbc/sqlite.rb +47 -11
  115. data/lib/sequel/adapters/jdbc/sqlserver.rb +34 -9
  116. data/lib/sequel/adapters/jdbc/transactions.rb +22 -38
  117. data/lib/sequel/adapters/jdbc.rb +145 -130
  118. data/lib/sequel/adapters/mock.rb +100 -111
  119. data/lib/sequel/adapters/mysql.rb +114 -122
  120. data/lib/sequel/adapters/mysql2.rb +147 -63
  121. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  122. data/lib/sequel/adapters/odbc/mssql.rb +8 -14
  123. data/lib/sequel/adapters/odbc/oracle.rb +11 -0
  124. data/lib/sequel/adapters/odbc.rb +20 -25
  125. data/lib/sequel/adapters/oracle.rb +50 -56
  126. data/lib/sequel/adapters/postgres.rb +305 -327
  127. data/lib/sequel/adapters/postgresql.rb +1 -1
  128. data/lib/sequel/adapters/shared/access.rb +74 -78
  129. data/lib/sequel/adapters/shared/db2.rb +118 -71
  130. data/lib/sequel/adapters/shared/mssql.rb +301 -220
  131. data/lib/sequel/adapters/shared/mysql.rb +299 -217
  132. data/lib/sequel/adapters/shared/oracle.rb +226 -65
  133. data/lib/sequel/adapters/shared/postgres.rb +935 -395
  134. data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -126
  135. data/lib/sequel/adapters/shared/sqlite.rb +447 -173
  136. data/lib/sequel/adapters/sqlanywhere.rb +48 -35
  137. data/lib/sequel/adapters/sqlite.rb +156 -111
  138. data/lib/sequel/adapters/tinytds.rb +30 -38
  139. data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
  140. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +3 -6
  141. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +2 -2
  142. data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
  143. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
  144. data/lib/sequel/adapters/utils/replace.rb +1 -4
  145. data/lib/sequel/adapters/utils/stored_procedures.rb +7 -22
  146. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
  147. data/lib/sequel/ast_transformer.rb +17 -89
  148. data/lib/sequel/connection_pool/sharded_single.rb +18 -15
  149. data/lib/sequel/connection_pool/sharded_threaded.rb +130 -111
  150. data/lib/sequel/connection_pool/single.rb +18 -13
  151. data/lib/sequel/connection_pool/threaded.rb +121 -120
  152. data/lib/sequel/connection_pool.rb +48 -29
  153. data/lib/sequel/core.rb +351 -301
  154. data/lib/sequel/database/connecting.rb +69 -57
  155. data/lib/sequel/database/dataset.rb +13 -5
  156. data/lib/sequel/database/dataset_defaults.rb +18 -102
  157. data/lib/sequel/database/features.rb +18 -4
  158. data/lib/sequel/database/logging.rb +12 -11
  159. data/lib/sequel/database/misc.rb +180 -122
  160. data/lib/sequel/database/query.rb +47 -27
  161. data/lib/sequel/database/schema_generator.rb +178 -84
  162. data/lib/sequel/database/schema_methods.rb +172 -97
  163. data/lib/sequel/database/transactions.rb +205 -44
  164. data/lib/sequel/database.rb +17 -2
  165. data/lib/sequel/dataset/actions.rb +339 -155
  166. data/lib/sequel/dataset/dataset_module.rb +46 -0
  167. data/lib/sequel/dataset/features.rb +90 -35
  168. data/lib/sequel/dataset/graph.rb +80 -58
  169. data/lib/sequel/dataset/misc.rb +137 -47
  170. data/lib/sequel/dataset/placeholder_literalizer.rb +63 -25
  171. data/lib/sequel/dataset/prepared_statements.rb +188 -85
  172. data/lib/sequel/dataset/query.rb +530 -222
  173. data/lib/sequel/dataset/sql.rb +590 -368
  174. data/lib/sequel/dataset.rb +26 -16
  175. data/lib/sequel/deprecated.rb +12 -2
  176. data/lib/sequel/exceptions.rb +46 -16
  177. data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
  178. data/lib/sequel/extensions/_model_pg_row.rb +43 -0
  179. data/lib/sequel/extensions/_pretty_table.rb +2 -5
  180. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  181. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  182. data/lib/sequel/extensions/async_thread_pool.rb +438 -0
  183. data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
  184. data/lib/sequel/extensions/blank.rb +8 -0
  185. data/lib/sequel/extensions/caller_logging.rb +79 -0
  186. data/lib/sequel/extensions/columns_introspection.rb +4 -3
  187. data/lib/sequel/extensions/connection_expiration.rb +20 -10
  188. data/lib/sequel/extensions/connection_validator.rb +11 -10
  189. data/lib/sequel/extensions/constant_sql_override.rb +65 -0
  190. data/lib/sequel/extensions/constraint_validations.rb +62 -39
  191. data/lib/sequel/extensions/core_extensions.rb +42 -48
  192. data/lib/sequel/extensions/core_refinements.rb +80 -59
  193. data/lib/sequel/extensions/current_datetime_timestamp.rb +1 -4
  194. data/lib/sequel/extensions/date_arithmetic.rb +98 -39
  195. data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
  196. data/lib/sequel/extensions/datetime_parse_to_time.rb +41 -0
  197. data/lib/sequel/extensions/duplicate_columns_handler.rb +21 -14
  198. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  199. data/lib/sequel/extensions/escaped_like.rb +100 -0
  200. data/lib/sequel/extensions/eval_inspect.rb +12 -15
  201. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  202. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  203. data/lib/sequel/extensions/freeze_datasets.rb +3 -0
  204. data/lib/sequel/extensions/from_block.rb +1 -34
  205. data/lib/sequel/extensions/graph_each.rb +4 -4
  206. data/lib/sequel/extensions/identifier_mangling.rb +180 -0
  207. data/lib/sequel/extensions/implicit_subquery.rb +48 -0
  208. data/lib/sequel/extensions/index_caching.rb +109 -0
  209. data/lib/sequel/extensions/inflector.rb +13 -5
  210. data/lib/sequel/extensions/integer64.rb +32 -0
  211. data/lib/sequel/extensions/is_distinct_from.rb +141 -0
  212. data/lib/sequel/extensions/looser_typecasting.rb +17 -8
  213. data/lib/sequel/extensions/migration.rb +119 -78
  214. data/lib/sequel/extensions/named_timezones.rb +88 -23
  215. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -82
  216. data/lib/sequel/extensions/null_dataset.rb +8 -8
  217. data/lib/sequel/extensions/pagination.rb +32 -29
  218. data/lib/sequel/extensions/pg_array.rb +221 -287
  219. data/lib/sequel/extensions/pg_array_ops.rb +17 -9
  220. data/lib/sequel/extensions/pg_enum.rb +63 -23
  221. data/lib/sequel/extensions/pg_extended_date_support.rb +241 -0
  222. data/lib/sequel/extensions/pg_hstore.rb +45 -54
  223. data/lib/sequel/extensions/pg_hstore_ops.rb +58 -6
  224. data/lib/sequel/extensions/pg_inet.rb +31 -12
  225. data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
  226. data/lib/sequel/extensions/pg_interval.rb +56 -29
  227. data/lib/sequel/extensions/pg_json.rb +417 -140
  228. data/lib/sequel/extensions/pg_json_ops.rb +270 -18
  229. data/lib/sequel/extensions/pg_loose_count.rb +4 -2
  230. data/lib/sequel/extensions/pg_multirange.rb +372 -0
  231. data/lib/sequel/extensions/pg_range.rb +131 -191
  232. data/lib/sequel/extensions/pg_range_ops.rb +42 -13
  233. data/lib/sequel/extensions/pg_row.rb +48 -81
  234. data/lib/sequel/extensions/pg_row_ops.rb +33 -14
  235. data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
  236. data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
  237. data/lib/sequel/extensions/query.rb +9 -7
  238. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  239. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  240. data/lib/sequel/extensions/s.rb +60 -0
  241. data/lib/sequel/extensions/schema_caching.rb +10 -1
  242. data/lib/sequel/extensions/schema_dumper.rb +71 -48
  243. data/lib/sequel/extensions/select_remove.rb +4 -4
  244. data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
  245. data/lib/sequel/extensions/server_block.rb +51 -27
  246. data/lib/sequel/extensions/split_array_nil.rb +4 -4
  247. data/lib/sequel/extensions/sql_comments.rb +119 -7
  248. data/lib/sequel/extensions/sql_expr.rb +2 -1
  249. data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
  250. data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
  251. data/lib/sequel/extensions/string_agg.rb +11 -8
  252. data/lib/sequel/extensions/string_date_time.rb +19 -23
  253. data/lib/sequel/extensions/symbol_aref.rb +55 -0
  254. data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
  255. data/lib/sequel/extensions/symbol_as.rb +23 -0
  256. data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
  257. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  258. data/lib/sequel/extensions/to_dot.rb +10 -4
  259. data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
  260. data/lib/sequel/model/associations.rb +1006 -284
  261. data/lib/sequel/model/base.rb +560 -805
  262. data/lib/sequel/model/dataset_module.rb +11 -10
  263. data/lib/sequel/model/default_inflections.rb +1 -1
  264. data/lib/sequel/model/errors.rb +10 -3
  265. data/lib/sequel/model/exceptions.rb +8 -10
  266. data/lib/sequel/model/inflections.rb +7 -20
  267. data/lib/sequel/model/plugins.rb +114 -0
  268. data/lib/sequel/model.rb +32 -82
  269. data/lib/sequel/plugins/active_model.rb +30 -14
  270. data/lib/sequel/plugins/after_initialize.rb +1 -1
  271. data/lib/sequel/plugins/association_dependencies.rb +25 -18
  272. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  273. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  274. data/lib/sequel/plugins/association_pks.rb +147 -70
  275. data/lib/sequel/plugins/association_proxies.rb +33 -9
  276. data/lib/sequel/plugins/async_thread_pool.rb +39 -0
  277. data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
  278. data/lib/sequel/plugins/auto_validations.rb +95 -28
  279. data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
  280. data/lib/sequel/plugins/before_after_save.rb +0 -42
  281. data/lib/sequel/plugins/blacklist_security.rb +21 -12
  282. data/lib/sequel/plugins/boolean_readers.rb +5 -5
  283. data/lib/sequel/plugins/boolean_subsets.rb +13 -8
  284. data/lib/sequel/plugins/caching.rb +25 -16
  285. data/lib/sequel/plugins/class_table_inheritance.rb +179 -100
  286. data/lib/sequel/plugins/column_conflicts.rb +16 -3
  287. data/lib/sequel/plugins/column_encryption.rb +728 -0
  288. data/lib/sequel/plugins/column_select.rb +7 -5
  289. data/lib/sequel/plugins/columns_updated.rb +42 -0
  290. data/lib/sequel/plugins/composition.rb +42 -26
  291. data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
  292. data/lib/sequel/plugins/constraint_validations.rb +20 -14
  293. data/lib/sequel/plugins/csv_serializer.rb +56 -35
  294. data/lib/sequel/plugins/dataset_associations.rb +40 -17
  295. data/lib/sequel/plugins/def_dataset_method.rb +90 -0
  296. data/lib/sequel/plugins/defaults_setter.rb +65 -10
  297. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  298. data/lib/sequel/plugins/dirty.rb +62 -24
  299. data/lib/sequel/plugins/eager_each.rb +3 -3
  300. data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
  301. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  302. data/lib/sequel/plugins/enum.rb +124 -0
  303. data/lib/sequel/plugins/error_splitter.rb +17 -12
  304. data/lib/sequel/plugins/finder.rb +246 -0
  305. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  306. data/lib/sequel/plugins/force_encoding.rb +7 -12
  307. data/lib/sequel/plugins/hook_class_methods.rb +37 -54
  308. data/lib/sequel/plugins/input_transformer.rb +18 -10
  309. data/lib/sequel/plugins/insert_conflict.rb +76 -0
  310. data/lib/sequel/plugins/insert_returning_select.rb +2 -2
  311. data/lib/sequel/plugins/instance_filters.rb +10 -8
  312. data/lib/sequel/plugins/instance_hooks.rb +34 -17
  313. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  314. data/lib/sequel/plugins/inverted_subsets.rb +22 -13
  315. data/lib/sequel/plugins/json_serializer.rb +124 -64
  316. data/lib/sequel/plugins/lazy_attributes.rb +21 -14
  317. data/lib/sequel/plugins/list.rb +35 -21
  318. data/lib/sequel/plugins/many_through_many.rb +134 -21
  319. data/lib/sequel/plugins/modification_detection.rb +15 -5
  320. data/lib/sequel/plugins/mssql_optimistic_locking.rb +6 -5
  321. data/lib/sequel/plugins/nested_attributes.rb +61 -31
  322. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  323. data/lib/sequel/plugins/pg_array_associations.rb +103 -53
  324. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +350 -0
  325. data/lib/sequel/plugins/pg_row.rb +5 -51
  326. data/lib/sequel/plugins/prepared_statements.rb +60 -72
  327. data/lib/sequel/plugins/prepared_statements_safe.rb +9 -4
  328. data/lib/sequel/plugins/rcte_tree.rb +68 -82
  329. data/lib/sequel/plugins/require_valid_schema.rb +67 -0
  330. data/lib/sequel/plugins/serialization.rb +43 -46
  331. data/lib/sequel/plugins/serialization_modification_detection.rb +3 -2
  332. data/lib/sequel/plugins/sharding.rb +15 -10
  333. data/lib/sequel/plugins/single_table_inheritance.rb +67 -28
  334. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  335. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  336. data/lib/sequel/plugins/split_values.rb +11 -6
  337. data/lib/sequel/plugins/sql_comments.rb +189 -0
  338. data/lib/sequel/plugins/static_cache.rb +77 -53
  339. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  340. data/lib/sequel/plugins/string_stripper.rb +3 -3
  341. data/lib/sequel/plugins/subclasses.rb +43 -10
  342. data/lib/sequel/plugins/subset_conditions.rb +15 -5
  343. data/lib/sequel/plugins/table_select.rb +2 -2
  344. data/lib/sequel/plugins/tactical_eager_loading.rb +96 -12
  345. data/lib/sequel/plugins/throw_failures.rb +110 -0
  346. data/lib/sequel/plugins/timestamps.rb +20 -8
  347. data/lib/sequel/plugins/touch.rb +19 -8
  348. data/lib/sequel/plugins/tree.rb +62 -32
  349. data/lib/sequel/plugins/typecast_on_load.rb +12 -4
  350. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  351. data/lib/sequel/plugins/unused_associations.rb +521 -0
  352. data/lib/sequel/plugins/update_or_create.rb +4 -4
  353. data/lib/sequel/plugins/update_primary_key.rb +1 -1
  354. data/lib/sequel/plugins/update_refresh.rb +26 -15
  355. data/lib/sequel/plugins/uuid.rb +7 -11
  356. data/lib/sequel/plugins/validate_associated.rb +18 -0
  357. data/lib/sequel/plugins/validation_class_methods.rb +38 -19
  358. data/lib/sequel/plugins/validation_contexts.rb +49 -0
  359. data/lib/sequel/plugins/validation_helpers.rb +57 -41
  360. data/lib/sequel/plugins/whitelist_security.rb +122 -0
  361. data/lib/sequel/plugins/xml_serializer.rb +30 -31
  362. data/lib/sequel/sql.rb +471 -331
  363. data/lib/sequel/timezones.rb +78 -47
  364. data/lib/sequel/version.rb +7 -2
  365. data/lib/sequel.rb +1 -1
  366. metadata +217 -521
  367. data/Rakefile +0 -164
  368. data/doc/active_record.rdoc +0 -928
  369. data/doc/release_notes/1.0.txt +0 -38
  370. data/doc/release_notes/1.1.txt +0 -143
  371. data/doc/release_notes/1.3.txt +0 -101
  372. data/doc/release_notes/1.4.0.txt +0 -53
  373. data/doc/release_notes/1.5.0.txt +0 -155
  374. data/doc/release_notes/2.0.0.txt +0 -298
  375. data/doc/release_notes/2.1.0.txt +0 -271
  376. data/doc/release_notes/2.10.0.txt +0 -328
  377. data/doc/release_notes/2.11.0.txt +0 -215
  378. data/doc/release_notes/2.12.0.txt +0 -534
  379. data/doc/release_notes/2.2.0.txt +0 -253
  380. data/doc/release_notes/2.3.0.txt +0 -88
  381. data/doc/release_notes/2.4.0.txt +0 -106
  382. data/doc/release_notes/2.5.0.txt +0 -137
  383. data/doc/release_notes/2.6.0.txt +0 -157
  384. data/doc/release_notes/2.7.0.txt +0 -166
  385. data/doc/release_notes/2.8.0.txt +0 -171
  386. data/doc/release_notes/2.9.0.txt +0 -97
  387. data/doc/release_notes/3.0.0.txt +0 -221
  388. data/doc/release_notes/3.1.0.txt +0 -406
  389. data/doc/release_notes/3.10.0.txt +0 -286
  390. data/doc/release_notes/3.11.0.txt +0 -254
  391. data/doc/release_notes/3.12.0.txt +0 -304
  392. data/doc/release_notes/3.13.0.txt +0 -210
  393. data/doc/release_notes/3.14.0.txt +0 -118
  394. data/doc/release_notes/3.15.0.txt +0 -78
  395. data/doc/release_notes/3.16.0.txt +0 -45
  396. data/doc/release_notes/3.17.0.txt +0 -58
  397. data/doc/release_notes/3.18.0.txt +0 -120
  398. data/doc/release_notes/3.19.0.txt +0 -67
  399. data/doc/release_notes/3.2.0.txt +0 -268
  400. data/doc/release_notes/3.20.0.txt +0 -41
  401. data/doc/release_notes/3.21.0.txt +0 -87
  402. data/doc/release_notes/3.22.0.txt +0 -39
  403. data/doc/release_notes/3.23.0.txt +0 -172
  404. data/doc/release_notes/3.24.0.txt +0 -420
  405. data/doc/release_notes/3.25.0.txt +0 -88
  406. data/doc/release_notes/3.26.0.txt +0 -88
  407. data/doc/release_notes/3.27.0.txt +0 -82
  408. data/doc/release_notes/3.28.0.txt +0 -304
  409. data/doc/release_notes/3.29.0.txt +0 -459
  410. data/doc/release_notes/3.3.0.txt +0 -192
  411. data/doc/release_notes/3.30.0.txt +0 -135
  412. data/doc/release_notes/3.31.0.txt +0 -146
  413. data/doc/release_notes/3.32.0.txt +0 -202
  414. data/doc/release_notes/3.33.0.txt +0 -157
  415. data/doc/release_notes/3.34.0.txt +0 -671
  416. data/doc/release_notes/3.35.0.txt +0 -144
  417. data/doc/release_notes/3.36.0.txt +0 -245
  418. data/doc/release_notes/3.37.0.txt +0 -338
  419. data/doc/release_notes/3.38.0.txt +0 -234
  420. data/doc/release_notes/3.39.0.txt +0 -237
  421. data/doc/release_notes/3.4.0.txt +0 -325
  422. data/doc/release_notes/3.40.0.txt +0 -73
  423. data/doc/release_notes/3.41.0.txt +0 -155
  424. data/doc/release_notes/3.42.0.txt +0 -74
  425. data/doc/release_notes/3.43.0.txt +0 -105
  426. data/doc/release_notes/3.44.0.txt +0 -152
  427. data/doc/release_notes/3.45.0.txt +0 -179
  428. data/doc/release_notes/3.46.0.txt +0 -122
  429. data/doc/release_notes/3.47.0.txt +0 -270
  430. data/doc/release_notes/3.48.0.txt +0 -477
  431. data/doc/release_notes/3.5.0.txt +0 -510
  432. data/doc/release_notes/3.6.0.txt +0 -366
  433. data/doc/release_notes/3.7.0.txt +0 -179
  434. data/doc/release_notes/3.8.0.txt +0 -151
  435. data/doc/release_notes/3.9.0.txt +0 -233
  436. data/doc/release_notes/4.0.0.txt +0 -262
  437. data/doc/release_notes/4.1.0.txt +0 -85
  438. data/doc/release_notes/4.10.0.txt +0 -226
  439. data/doc/release_notes/4.11.0.txt +0 -147
  440. data/doc/release_notes/4.12.0.txt +0 -105
  441. data/doc/release_notes/4.13.0.txt +0 -169
  442. data/doc/release_notes/4.14.0.txt +0 -68
  443. data/doc/release_notes/4.15.0.txt +0 -56
  444. data/doc/release_notes/4.16.0.txt +0 -36
  445. data/doc/release_notes/4.17.0.txt +0 -38
  446. data/doc/release_notes/4.18.0.txt +0 -36
  447. data/doc/release_notes/4.19.0.txt +0 -45
  448. data/doc/release_notes/4.2.0.txt +0 -129
  449. data/doc/release_notes/4.20.0.txt +0 -79
  450. data/doc/release_notes/4.21.0.txt +0 -94
  451. data/doc/release_notes/4.22.0.txt +0 -72
  452. data/doc/release_notes/4.23.0.txt +0 -65
  453. data/doc/release_notes/4.24.0.txt +0 -99
  454. data/doc/release_notes/4.25.0.txt +0 -181
  455. data/doc/release_notes/4.26.0.txt +0 -44
  456. data/doc/release_notes/4.27.0.txt +0 -78
  457. data/doc/release_notes/4.28.0.txt +0 -57
  458. data/doc/release_notes/4.29.0.txt +0 -41
  459. data/doc/release_notes/4.3.0.txt +0 -40
  460. data/doc/release_notes/4.30.0.txt +0 -37
  461. data/doc/release_notes/4.31.0.txt +0 -57
  462. data/doc/release_notes/4.32.0.txt +0 -132
  463. data/doc/release_notes/4.33.0.txt +0 -88
  464. data/doc/release_notes/4.34.0.txt +0 -86
  465. data/doc/release_notes/4.35.0.txt +0 -130
  466. data/doc/release_notes/4.36.0.txt +0 -116
  467. data/doc/release_notes/4.4.0.txt +0 -92
  468. data/doc/release_notes/4.5.0.txt +0 -34
  469. data/doc/release_notes/4.6.0.txt +0 -30
  470. data/doc/release_notes/4.7.0.txt +0 -103
  471. data/doc/release_notes/4.8.0.txt +0 -175
  472. data/doc/release_notes/4.9.0.txt +0 -190
  473. data/lib/sequel/adapters/cubrid.rb +0 -144
  474. data/lib/sequel/adapters/do/mysql.rb +0 -66
  475. data/lib/sequel/adapters/do/postgres.rb +0 -44
  476. data/lib/sequel/adapters/do/sqlite3.rb +0 -42
  477. data/lib/sequel/adapters/do.rb +0 -158
  478. data/lib/sequel/adapters/jdbc/as400.rb +0 -84
  479. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -64
  480. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -36
  481. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -33
  482. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -33
  483. data/lib/sequel/adapters/odbc/progress.rb +0 -10
  484. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  485. data/lib/sequel/adapters/shared/firebird.rb +0 -247
  486. data/lib/sequel/adapters/shared/informix.rb +0 -54
  487. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -152
  488. data/lib/sequel/adapters/shared/progress.rb +0 -40
  489. data/lib/sequel/adapters/swift/mysql.rb +0 -49
  490. data/lib/sequel/adapters/swift/postgres.rb +0 -47
  491. data/lib/sequel/adapters/swift/sqlite.rb +0 -49
  492. data/lib/sequel/adapters/swift.rb +0 -160
  493. data/lib/sequel/adapters/utils/pg_types.rb +0 -70
  494. data/lib/sequel/dataset/mutation.rb +0 -111
  495. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -5
  496. data/lib/sequel/extensions/filter_having.rb +0 -63
  497. data/lib/sequel/extensions/hash_aliases.rb +0 -49
  498. data/lib/sequel/extensions/meta_def.rb +0 -35
  499. data/lib/sequel/extensions/query_literals.rb +0 -84
  500. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -24
  501. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -122
  502. data/lib/sequel/extensions/set_overrides.rb +0 -76
  503. data/lib/sequel/no_core_ext.rb +0 -3
  504. data/lib/sequel/plugins/association_autoreloading.rb +0 -9
  505. data/lib/sequel/plugins/identifier_columns.rb +0 -47
  506. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -9
  507. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -81
  508. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -119
  509. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -61
  510. data/lib/sequel/plugins/schema.rb +0 -82
  511. data/lib/sequel/plugins/scissors.rb +0 -35
  512. data/spec/adapter_spec.rb +0 -4
  513. data/spec/adapters/db2_spec.rb +0 -160
  514. data/spec/adapters/firebird_spec.rb +0 -411
  515. data/spec/adapters/informix_spec.rb +0 -100
  516. data/spec/adapters/mssql_spec.rb +0 -733
  517. data/spec/adapters/mysql_spec.rb +0 -1319
  518. data/spec/adapters/oracle_spec.rb +0 -313
  519. data/spec/adapters/postgres_spec.rb +0 -3790
  520. data/spec/adapters/spec_helper.rb +0 -49
  521. data/spec/adapters/sqlanywhere_spec.rb +0 -170
  522. data/spec/adapters/sqlite_spec.rb +0 -688
  523. data/spec/bin_spec.rb +0 -258
  524. data/spec/core/connection_pool_spec.rb +0 -1045
  525. data/spec/core/database_spec.rb +0 -2636
  526. data/spec/core/dataset_spec.rb +0 -5175
  527. data/spec/core/deprecated_spec.rb +0 -70
  528. data/spec/core/expression_filters_spec.rb +0 -1247
  529. data/spec/core/mock_adapter_spec.rb +0 -464
  530. data/spec/core/object_graph_spec.rb +0 -303
  531. data/spec/core/placeholder_literalizer_spec.rb +0 -163
  532. data/spec/core/schema_generator_spec.rb +0 -203
  533. data/spec/core/schema_spec.rb +0 -1676
  534. data/spec/core/spec_helper.rb +0 -34
  535. data/spec/core/version_spec.rb +0 -7
  536. data/spec/core_extensions_spec.rb +0 -699
  537. data/spec/core_model_spec.rb +0 -2
  538. data/spec/core_spec.rb +0 -1
  539. data/spec/extensions/accessed_columns_spec.rb +0 -51
  540. data/spec/extensions/active_model_spec.rb +0 -85
  541. data/spec/extensions/after_initialize_spec.rb +0 -24
  542. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  543. data/spec/extensions/association_dependencies_spec.rb +0 -117
  544. data/spec/extensions/association_pks_spec.rb +0 -405
  545. data/spec/extensions/association_proxies_spec.rb +0 -86
  546. data/spec/extensions/auto_validations_spec.rb +0 -192
  547. data/spec/extensions/before_after_save_spec.rb +0 -40
  548. data/spec/extensions/blacklist_security_spec.rb +0 -88
  549. data/spec/extensions/blank_spec.rb +0 -69
  550. data/spec/extensions/boolean_readers_spec.rb +0 -93
  551. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  552. data/spec/extensions/caching_spec.rb +0 -270
  553. data/spec/extensions/class_table_inheritance_spec.rb +0 -444
  554. data/spec/extensions/column_conflicts_spec.rb +0 -60
  555. data/spec/extensions/column_select_spec.rb +0 -108
  556. data/spec/extensions/columns_introspection_spec.rb +0 -91
  557. data/spec/extensions/composition_spec.rb +0 -242
  558. data/spec/extensions/connection_expiration_spec.rb +0 -121
  559. data/spec/extensions/connection_validator_spec.rb +0 -127
  560. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -288
  561. data/spec/extensions/constraint_validations_spec.rb +0 -389
  562. data/spec/extensions/core_refinements_spec.rb +0 -519
  563. data/spec/extensions/csv_serializer_spec.rb +0 -180
  564. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  565. data/spec/extensions/dataset_associations_spec.rb +0 -343
  566. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  567. data/spec/extensions/date_arithmetic_spec.rb +0 -167
  568. data/spec/extensions/defaults_setter_spec.rb +0 -102
  569. data/spec/extensions/delay_add_association_spec.rb +0 -74
  570. data/spec/extensions/dirty_spec.rb +0 -180
  571. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -110
  572. data/spec/extensions/eager_each_spec.rb +0 -66
  573. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  574. data/spec/extensions/error_splitter_spec.rb +0 -18
  575. data/spec/extensions/error_sql_spec.rb +0 -20
  576. data/spec/extensions/eval_inspect_spec.rb +0 -73
  577. data/spec/extensions/filter_having_spec.rb +0 -40
  578. data/spec/extensions/force_encoding_spec.rb +0 -114
  579. data/spec/extensions/from_block_spec.rb +0 -21
  580. data/spec/extensions/graph_each_spec.rb +0 -119
  581. data/spec/extensions/hash_aliases_spec.rb +0 -24
  582. data/spec/extensions/hook_class_methods_spec.rb +0 -429
  583. data/spec/extensions/identifier_columns_spec.rb +0 -17
  584. data/spec/extensions/inflector_spec.rb +0 -183
  585. data/spec/extensions/input_transformer_spec.rb +0 -54
  586. data/spec/extensions/insert_returning_select_spec.rb +0 -46
  587. data/spec/extensions/instance_filters_spec.rb +0 -79
  588. data/spec/extensions/instance_hooks_spec.rb +0 -276
  589. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  590. data/spec/extensions/json_serializer_spec.rb +0 -304
  591. data/spec/extensions/lazy_attributes_spec.rb +0 -170
  592. data/spec/extensions/list_spec.rb +0 -278
  593. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  594. data/spec/extensions/many_through_many_spec.rb +0 -2172
  595. data/spec/extensions/meta_def_spec.rb +0 -21
  596. data/spec/extensions/migration_spec.rb +0 -728
  597. data/spec/extensions/modification_detection_spec.rb +0 -80
  598. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
  599. data/spec/extensions/named_timezones_spec.rb +0 -108
  600. data/spec/extensions/nested_attributes_spec.rb +0 -697
  601. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -65
  602. data/spec/extensions/null_dataset_spec.rb +0 -85
  603. data/spec/extensions/optimistic_locking_spec.rb +0 -128
  604. data/spec/extensions/pagination_spec.rb +0 -118
  605. data/spec/extensions/pg_array_associations_spec.rb +0 -736
  606. data/spec/extensions/pg_array_ops_spec.rb +0 -143
  607. data/spec/extensions/pg_array_spec.rb +0 -390
  608. data/spec/extensions/pg_enum_spec.rb +0 -92
  609. data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
  610. data/spec/extensions/pg_hstore_spec.rb +0 -206
  611. data/spec/extensions/pg_inet_ops_spec.rb +0 -101
  612. data/spec/extensions/pg_inet_spec.rb +0 -52
  613. data/spec/extensions/pg_interval_spec.rb +0 -76
  614. data/spec/extensions/pg_json_ops_spec.rb +0 -275
  615. data/spec/extensions/pg_json_spec.rb +0 -218
  616. data/spec/extensions/pg_loose_count_spec.rb +0 -17
  617. data/spec/extensions/pg_range_ops_spec.rb +0 -58
  618. data/spec/extensions/pg_range_spec.rb +0 -473
  619. data/spec/extensions/pg_row_ops_spec.rb +0 -60
  620. data/spec/extensions/pg_row_plugin_spec.rb +0 -62
  621. data/spec/extensions/pg_row_spec.rb +0 -360
  622. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
  623. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
  624. data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
  625. data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
  626. data/spec/extensions/prepared_statements_spec.rb +0 -103
  627. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
  628. data/spec/extensions/pretty_table_spec.rb +0 -92
  629. data/spec/extensions/query_literals_spec.rb +0 -183
  630. data/spec/extensions/query_spec.rb +0 -102
  631. data/spec/extensions/rcte_tree_spec.rb +0 -392
  632. data/spec/extensions/round_timestamps_spec.rb +0 -43
  633. data/spec/extensions/schema_caching_spec.rb +0 -41
  634. data/spec/extensions/schema_dumper_spec.rb +0 -814
  635. data/spec/extensions/schema_spec.rb +0 -117
  636. data/spec/extensions/scissors_spec.rb +0 -26
  637. data/spec/extensions/select_remove_spec.rb +0 -38
  638. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
  639. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  640. data/spec/extensions/serialization_spec.rb +0 -362
  641. data/spec/extensions/server_block_spec.rb +0 -90
  642. data/spec/extensions/server_logging_spec.rb +0 -45
  643. data/spec/extensions/set_overrides_spec.rb +0 -61
  644. data/spec/extensions/sharding_spec.rb +0 -198
  645. data/spec/extensions/shared_caching_spec.rb +0 -175
  646. data/spec/extensions/single_table_inheritance_spec.rb +0 -297
  647. data/spec/extensions/singular_table_names_spec.rb +0 -22
  648. data/spec/extensions/skip_create_refresh_spec.rb +0 -17
  649. data/spec/extensions/spec_helper.rb +0 -71
  650. data/spec/extensions/split_array_nil_spec.rb +0 -24
  651. data/spec/extensions/split_values_spec.rb +0 -22
  652. data/spec/extensions/sql_comments_spec.rb +0 -27
  653. data/spec/extensions/sql_expr_spec.rb +0 -60
  654. data/spec/extensions/static_cache_spec.rb +0 -361
  655. data/spec/extensions/string_agg_spec.rb +0 -85
  656. data/spec/extensions/string_date_time_spec.rb +0 -95
  657. data/spec/extensions/string_stripper_spec.rb +0 -68
  658. data/spec/extensions/subclasses_spec.rb +0 -66
  659. data/spec/extensions/subset_conditions_spec.rb +0 -38
  660. data/spec/extensions/table_select_spec.rb +0 -71
  661. data/spec/extensions/tactical_eager_loading_spec.rb +0 -136
  662. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  663. data/spec/extensions/timestamps_spec.rb +0 -175
  664. data/spec/extensions/to_dot_spec.rb +0 -154
  665. data/spec/extensions/touch_spec.rb +0 -203
  666. data/spec/extensions/tree_spec.rb +0 -274
  667. data/spec/extensions/typecast_on_load_spec.rb +0 -80
  668. data/spec/extensions/unlimited_update_spec.rb +0 -20
  669. data/spec/extensions/update_or_create_spec.rb +0 -87
  670. data/spec/extensions/update_primary_key_spec.rb +0 -100
  671. data/spec/extensions/update_refresh_spec.rb +0 -53
  672. data/spec/extensions/uuid_spec.rb +0 -106
  673. data/spec/extensions/validate_associated_spec.rb +0 -52
  674. data/spec/extensions/validation_class_methods_spec.rb +0 -1027
  675. data/spec/extensions/validation_helpers_spec.rb +0 -554
  676. data/spec/extensions/xml_serializer_spec.rb +0 -207
  677. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  678. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  679. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  680. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  681. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  682. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  683. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  684. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  685. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  686. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  687. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  688. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  689. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  690. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  691. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  692. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  693. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  694. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  695. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  696. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  697. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  698. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  699. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  700. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  701. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  702. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  703. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  704. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  705. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  706. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  707. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  708. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  709. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  710. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  711. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  712. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  713. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  714. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  715. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  716. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  717. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  718. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  719. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  720. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  721. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  722. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  723. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  724. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  725. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  726. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  727. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  728. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  729. data/spec/guards_helper.rb +0 -55
  730. data/spec/integration/associations_test.rb +0 -2506
  731. data/spec/integration/database_test.rb +0 -113
  732. data/spec/integration/dataset_test.rb +0 -1858
  733. data/spec/integration/eager_loader_test.rb +0 -687
  734. data/spec/integration/migrator_test.rb +0 -262
  735. data/spec/integration/model_test.rb +0 -230
  736. data/spec/integration/plugin_test.rb +0 -2297
  737. data/spec/integration/prepared_statement_test.rb +0 -467
  738. data/spec/integration/schema_test.rb +0 -815
  739. data/spec/integration/spec_helper.rb +0 -56
  740. data/spec/integration/timezone_test.rb +0 -86
  741. data/spec/integration/transaction_test.rb +0 -406
  742. data/spec/integration/type_test.rb +0 -133
  743. data/spec/model/association_reflection_spec.rb +0 -565
  744. data/spec/model/associations_spec.rb +0 -4589
  745. data/spec/model/base_spec.rb +0 -759
  746. data/spec/model/class_dataset_methods_spec.rb +0 -150
  747. data/spec/model/dataset_methods_spec.rb +0 -149
  748. data/spec/model/eager_loading_spec.rb +0 -2197
  749. data/spec/model/hooks_spec.rb +0 -604
  750. data/spec/model/inflector_spec.rb +0 -26
  751. data/spec/model/model_spec.rb +0 -1097
  752. data/spec/model/plugins_spec.rb +0 -299
  753. data/spec/model/record_spec.rb +0 -2162
  754. data/spec/model/spec_helper.rb +0 -46
  755. data/spec/model/validations_spec.rb +0 -193
  756. data/spec/model_no_assoc_spec.rb +0 -1
  757. data/spec/model_spec.rb +0 -1
  758. data/spec/plugin_spec.rb +0 -1
  759. data/spec/sequel_coverage.rb +0 -15
  760. data/spec/spec_config.rb +0 -10
@@ -1,57 +0,0 @@
1
- = Improvements
2
-
3
- * Sequel now works with ruby 2.3's --enable-frozen-string-literal,
4
- and all of the library files are set to use frozen string
5
- literals by default.
6
-
7
- A couple adapters and extensions depend on libraries that have
8
- issues with frozen string literals. Pull requests have been sent
9
- to each of those dependencies.
10
-
11
- * The migrators will now raise an exception if a migration file
12
- contains no migrations or more than one migration.
13
-
14
- * The jdbc/postgresql adapter now supports using PostgreSQL specific
15
- types in bound variables. Note that the current version of
16
- jdbc-postgres (9.4.1204) has regressions that affect this, users
17
- who need this support should stick with jdbc-postgres 9.4.1200 or
18
- below.
19
-
20
- * The jdbc/postgresql adapter now works around a regression in Java
21
- method lookup in JRuby 9.0.5.0
22
-
23
- * The setter methods added by the association_pks plugin now do type
24
- casting immediately, instead of right before the data will be used.
25
- This makes them more similar to column setter methods, and ensures
26
- that future calls to the getters that use cached values will
27
- return correctly typecast data.
28
-
29
- * The PostgreSQL array parser in the pg_array extension now handles
30
- arrays with explicit bounds. The explicit bounds are ignored, so
31
- such values do not round trip, and there is currently no support for
32
- creating arrays with explicit bounds.
33
-
34
- * Creating a table with a simple non-incrementing primary key and a
35
- self-referential foreign key now works correctly on MySQL:
36
-
37
- DB.create_table!(:table) do
38
- Integer :id, :primary_key=>true
39
- foreign_key :fk, :table
40
- end
41
-
42
- * Database#disconnect in the oracle adapter now works correctly on
43
- more recent versions of oci8 where #logoff can raise OCIException
44
- instead of OCIInvalidHandle.
45
-
46
- = Backwards Compatibility
47
-
48
- * The pg_array extension no longer defines
49
- Sequel::Postgres::PGArray::JSONCreator. This should only affect
50
- backwards compatibility if you were accessing the constant directly.
51
- The :parser option to Sequel::Postgres::PGArray.register is also no
52
- longer respected, but that should not affect backwards compatibility.
53
-
54
- * The Sequel::Model#convert_cpk_array private method that was added by
55
- the association_pks plugin has been removed.
56
- Sequel::Model#convert_pk_array handles both simple and composite
57
- primary keys now.
@@ -1,132 +0,0 @@
1
- = New Features
2
-
3
- * A no_auto_literal_strings extension has been added, which removes the
4
- automatic usage of strings in filter arguments as literal SQL code.
5
- By default, if you do:
6
-
7
- DB[:albums].where("name > 'N'")
8
-
9
- By default Sequel will treat "name > 'N'" as SQL code. However,
10
- this makes it much easier to introduce SQL injection:
11
-
12
- # SQL Injection vulnerability in default Sequel
13
- DB[:albums].where("name > 'params[:letter]'")
14
-
15
- Sequel does support using placeholders when using literal strings:
16
-
17
- # Safe in default Sequel
18
- DB[:albums].where("name > ?", params[:letter])
19
-
20
- However, if you forget to use placeholders, you can end up with SQL
21
- injection. Accidental usage of filter strings derived from user
22
- input as literal SQL code is probably the most common SQL injection
23
- vector in applications using Sequel.
24
-
25
- With the no_auto_literal_strings extension, passing a plain string
26
- as the first or only argument to a filter method raises an
27
- exception. If you want to use literal SQL code, you have to do so
28
- explicitly:
29
-
30
- DB[:albums].where(Sequel.lit("name > 'N'"))
31
-
32
- You can also specify placeholders when using Sequel.lit:
33
-
34
- DB[:albums].where(Sequel.lit("name > ?", params[:letter]))
35
-
36
- Note that in many cases, you can avoid using literal SQL strings
37
- completely:
38
-
39
- DB[:albums].where{|v| v.name > params[:letter]}
40
-
41
- * one_through_one associations now support a setter method:
42
-
43
- Foo.one_through_one :bar
44
-
45
- foo = Foo[1]
46
- foo.bar = Bar[2]
47
- foo.bar = nil
48
-
49
- This will check the current entry in the join table, and based on
50
- the argument and the current entry, run a DELETE, INSERT, or UPDATE
51
- query, or take no action if the join table is already in the
52
- correct state.
53
-
54
- * Model.default_association_options has been added, which supports
55
- default options for all future associations. You can use this to
56
- do:
57
-
58
- Model.default_association_options = {:read_only=>true}
59
-
60
- Which makes associations not create modification methods by default.
61
- You could still create the modification methods by passing
62
- :read_only=>true when creating association.
63
-
64
- * The tactical_eager_loading plugin now supports two additional
65
- options when calling an association method: :eager and
66
- :eager_reload. Example:
67
-
68
- artist = Artist.all.first
69
-
70
- # Loads all albums for all of the artists,
71
- # and all tracks for all of those albums
72
- artist.albums(:eager=>:tracks)
73
-
74
- # Reload the artists association for all artists
75
- artist.albums(:eager_reload=>true)
76
-
77
- You can also use the :eager option for an eager loading callback:
78
-
79
- # Eagerly load the albums with names starting with A-M
80
- artist.albums(:eager=>proc{|ds| ds.where(:name > 'N')})
81
-
82
- * The association_pks plugin now supports an :association_pks_nil
83
- association option in the association_pks setter, for determining
84
- how nil values should be handled.
85
-
86
- In Sequel <4.31.0, if you provided nil, it would either raise an
87
- exception immediately if :delay_pks was not set, or on saving if
88
- :delay_pks was set.
89
-
90
- In Sequel 4.31.0, if :delay_pks was not set, it would remove all
91
- associated rows. If :delay_pks was set, it would do nothing.
92
-
93
- You can now set :association_pks_nil=>:remove to remove all
94
- associated values on nil, or :association_pks_nil=>:ignore to ignore
95
- a nil value passed to the method. Without :association_pks_nil set,
96
- an exception will be raised.
97
-
98
- * Dataset#delete_from has been added on MySQL, allowing deletions from
99
- multiple tables in a single query:
100
-
101
- DB[:a].join(:b, :a_id=>:id).delete_from(:a, :b).delete
102
- # DELETE a, b FROM a INNER JOIN b ON (b.a_id = a.id)
103
-
104
- * The JDBC schema parser now includes a :remarks entry for each
105
- column, which contains comments on the column.
106
-
107
- = Other Improvements
108
-
109
- * The setter method added by the association_pks plugin now handles
110
- the empty array correctly when :delay_pks is set. Previously, if
111
- the empty array was passed, Sequel made no modifications in this
112
- case. Sequel now correctly removes all associated values if an
113
- empty array is passed.
114
-
115
- * The eager_each plugin now handles eager loading when using
116
- Dataset#first and related methods. Previously, the behavior was
117
- unspecified. In Sequel <4.27.0 Dataset#first did eager loading
118
- correctly in the eager case, but incorrectly in the eager_graph
119
- case. In Sequel 4.27.0-4.31.0, it did not do eager loading in
120
- either case.
121
-
122
- * The tactical_eager_loading plugin will not automatically eager load
123
- if passing a proc or block to an association method, since the proc
124
- or block could be specific to the receiver.
125
-
126
- * Sequel now uses a mutex to synchronize access to the association
127
- cache on MRI, as it does on other ruby implementations.
128
-
129
- = Backwards Compatibility
130
-
131
- * See above for changes in eager_each and association_pks plugin
132
- behavior.
@@ -1,88 +0,0 @@
1
- = New Features
2
-
3
- * A Sequel::Model.require_valid_table accessor has been added. This
4
- setting is false for backwards compatibility, but if set to true,
5
- will raise an error you try to create a model class where an
6
- invalid table name is used or the schema or columns cannot be
7
- determined. This makes it easier to catch bugs, as things will
8
- fail fast, but it means that you must change code like:
9
-
10
- class Foo < Sequel::Model
11
- set_dataset :my_foos
12
- end
13
-
14
- to:
15
-
16
- class Foo < Sequel::Model(:my_foos)
17
- end
18
-
19
- as otherwise Foo will attempt to use the foos table by default
20
- when creating the class, which will raise an error as it is not
21
- the correct table name.
22
-
23
- * Sequel::Database#transaction now supports a :savepoint=>:only
24
- option, which will create a savepoint if already inside a
25
- transaction, but will yield without creating a transaction if
26
- not inside a transaction. The use case for this is when you
27
- are running code that may raise an exception, and you don't
28
- want to invalidate the current transaction state.
29
-
30
- = Other Improvements
31
-
32
- * The graph_each extension now splits results into subhashes when
33
- using Sequel::Dataset#first, as it did before Sequel 4.27.0.
34
-
35
- * On PostgreSQL, Dataset#insert_conflict now accepts an array of
36
- columns as the value for the :target option.
37
-
38
- * You can now pass a Sequel::SQL::Identifier or a
39
- Sequel::SQL::QualifiedIdentifer as the table argument when creating
40
- a foreign key. Previously, only symbols were supported, and using
41
- other values required specifying the :table option. So this will
42
- now work to reference a table that includes a double underscore:
43
-
44
- foreign_key :foo_id, Sequel.identifier(:fo__oo)
45
-
46
- * Creating model classes inside a transaction on PostgreSQL where
47
- the implicit table name isn't correct no longer causes the
48
- transaction to fail.
49
-
50
- Similar issues were also fixed in the boolean_readers,
51
- boolean_subsets, and class_table_inheritance plugins.
52
-
53
- * On PostgreSQL, You can now use the :qualify=>true option in the
54
- schema dumper, to dump using schema-qualified table names.
55
-
56
- * On Microsoft SQL Server, the set_column_allow_null and
57
- set_column_not_null alter table methods now work on varchar(max),
58
- text, and similar columns.
59
-
60
- * On Oracle, Sequel::Database#sequence_for_table now returns nil if
61
- given a table that doesn't exist or that the user does not have
62
- access to.
63
-
64
- * Passing arbitrary objects to a model association method now
65
- indicates that the association should be reloaded, which was
66
- used to work but was broken in Sequel 4.32.0.
67
-
68
- * It is now possible to raise Sequel::ValidationFailed and
69
- Sequel::HookFailed without an argument.
70
-
71
- = Backwards Compatibility
72
-
73
- * Sequel::Model no longer swallows many errors when subclassing or
74
- setting datasets. While this should hopefully not affect backwards
75
- compatibility, it may break things where the methods were raising
76
- exceptions. If this does break backwards compatibility, it is
77
- most likely because it is no longer hiding another bug that should
78
- be fixed. Specific changes include:
79
-
80
- * Model.inherited no longer rescues exceptions raised by set_dataset
81
- * When subclassing a model that has a dataset, the columns and
82
- schema are just copied from the superclass
83
- * Only Sequel::Error is rescued in calls to columns and schema,
84
- before it would rescue StandardError.
85
-
86
- * The Sequel.firebird and Sequel.informix adapter methods have been
87
- removed, they are no longer needed as the firebird and informix
88
- adapters were removed a few versions back.
@@ -1,86 +0,0 @@
1
- = New Features
2
-
3
- * A duplicate_columns_handler extension has been added, for printing a
4
- warning or raising an exception if a dataset returns multiple
5
- columns with the same name. You can set this globally for the
6
- Database:
7
-
8
- DB.extension :duplicate_columns_handler
9
- DB.opts[:on_duplicate_columns] = :warn
10
- DB.opts[:on_duplicate_columns] = proc do |columns|
11
- columns.include?(:foo) ? :raise : :ignore
12
- end
13
-
14
- or for specific datasets:
15
-
16
- ds = DB[:table].extension(:duplicate_columns_handler)
17
- ds = ds.on_duplicate_columns(:raise)
18
- ds = ds.on_duplicate_columns do |columns|
19
- columns.include?(:foo) ? :raise : :ignore
20
- end
21
-
22
- This makes it easier to detect when duplicate columns are returned,
23
- which in some cases can cause undesired behavior, such as the values
24
- for later columns of the same name overwriting values for earlier
25
- columns.
26
-
27
- * The Dataset#to_hash, #to_hash_groups, #select_hash, and
28
- #select_hash_groups methods now take an options hash as a third
29
- argument. This options hash can now contain a :hash option, which
30
- specifies the object in which the resulting values should be
31
- placed. You can use this to have the values inserted into a
32
- custom hash, or another object responding to #[] and #[]=.
33
-
34
- * A validators_operator validation has been added to the
35
- validation_helpers plugin:
36
-
37
- class Example < Sequel::Model
38
- def validate
39
- super
40
- validates_operator(:>, 3, :column1)
41
- validates_operator(:<=, 4, [:column2, :column3])
42
- end
43
- end
44
-
45
- * The pg_range extension now adds a #register_range_type Database
46
- method, supporting per-Database custom range types:
47
-
48
- DB.register_range_type('timerange')
49
-
50
- * The dataset_associations plugin now supports a
51
- :dataset_associations_join association option on associations that
52
- use joined datasets. This option will have the datasets returned
53
- by the dataset association methods join to the same tables that
54
- would be joined when retriving the associated objects, allowing
55
- selected columns, orders, and filters that reference columns in
56
- the joined tables to work correctly.
57
-
58
- * The Database :preconnect option can now be set to :concurrently,
59
- which will create the connections in separate threads. This can
60
- significantly speed up preconnection in high-latency environments.
61
-
62
- * The Database :name option is now supported, holding an arbitrary
63
- name for the database. Currently, it is only used in PoolTimeout
64
- exception messages, but it may be used in other places in the
65
- future.
66
-
67
- = Other Improvements
68
-
69
- * The prepared_statements_safe plugin now works correctly when using
70
- CURRENT_DATE and CURRENT_TIMESTAMP default values for columns.
71
-
72
- * Sequel now recognizes an addition unique constraint violation on
73
- Microsoft SQL Server.
74
-
75
- * PoolTimeout exception messages now include the server/shard to which
76
- the connection was attempted when using the sharded threaded
77
- connection pool.
78
-
79
- = Backwards Compatibility
80
-
81
- * Users of sequel_pg should upgrade to 1.6.17, as older versions of
82
- sequel_pg may not work with Sequel 4.34.0+.
83
-
84
- * Any custom extensions that override Dataset#to_hash,
85
- #to_hash_groups, #select_hash, and #select_hash_groups need to
86
- be modified to add support for accepting the options hash.
@@ -1,130 +0,0 @@
1
- = Forwards Compatibility
2
-
3
- * Ruby 2.4 will unify the Fixnum and Bignum classes into the Integer
4
- class, making both Fixnum and Bignum references to Integer. This
5
- will have the affect of changing the behavior of Sequel migrations
6
- that use a reference to the Bignum class.
7
-
8
- For example, code like this will change behavior in ruby 2.4:
9
-
10
- DB.create_table(:table) do
11
- add_column :column, Bignum
12
- end
13
- # or:
14
- DB.get(Sequel.cast('1', Bignum))
15
-
16
- as this references the Bignum class. On ruby <2.4, this will create
17
- a 64-bit integer column, on ruby 2.4+, it will create a 32-bit
18
- integer column.
19
-
20
- Code like this will be fine and does not need changing:
21
-
22
- DB.create_table(:table) do
23
- Bignum :column
24
- end
25
-
26
- as this calls the Bignum method.
27
-
28
- Sequel now supports the :Bignum symbol as a generic type, so you
29
- can now switch references to the Bignum class to the :Bignum
30
- symbol whenever you want a generic 64-bit integer type:
31
-
32
- DB.create_table(:table) do
33
- add_column :column, :Bignum
34
- end
35
- # or:
36
- DB.get(Sequel.cast('1', :Bignum))
37
-
38
- Note that you should only do this if you are using Sequel 4.35.0+,
39
- as previous versions of Sequel will treat the :Bignum symbol as
40
- a database-specific type named Bignum.
41
-
42
- = New Features
43
-
44
- * A Sequel::Database#log_connection_info accessor has been added. If
45
- set to true, this includes connection information in Sequel's query
46
- log. In threaded connection pools (the default), this makes it
47
- simple to see which connection is executing which queries.
48
-
49
- DB.log_connection_info = true
50
- DB.get(1)
51
- # Logged: (0.000004s) (conn: 9713390226040) SELECT 1 AS v LIMIT
52
-
53
- * Sequel::Model#lock! now supports an optional lock style, instead
54
- of always using FOR UPDATE (which is still the default):
55
-
56
- Example.first.lock!('FOR NO KEY UPDATE')
57
- #=> SELECT * FROM examples WHERE id = 1 FOR NO KEY UPDATE LIMIT 1
58
-
59
- * Sequel::Database#skip_locked has been added, which skips locked rows
60
- when returning query results. This is useful whenever you are
61
- implementing a queue or similar data structure. Currently, this is
62
- supported on PostgreSQL 9.5+, Oracle, and Microsoft SQL Server.
63
-
64
- * An sql_comments extension has been added for setting SQL comments
65
- on queries:
66
-
67
- ds = DB[:table].comment("Some Comment").all
68
- # SELECT * FROM table -- Some Comment
69
- #
70
-
71
- All consecutive whitespace in the comment is replaced by a
72
- single space, and the comment ends in a newline so that it works
73
- correctly in subqueries.
74
-
75
- This extension is mostly useful if you are doing analysis of your
76
- database server query log and want to include higher level
77
- information about the query in the comment.
78
-
79
- * A server_logging extension has been added, which includes
80
- server/shard information in the query log, if connection info
81
- is being logged.
82
-
83
- DB.extension :server_logging
84
- DB.log_connection_info = true
85
- DB.get(1)
86
- # Logged: (0.000004s) (conn: 9712828677240, server: read_only)
87
- # SELECT 1 AS v LIMIT 1
88
- DB[:a].insert(:b=>1)
89
- # Logged: (0.000003s) (conn: 9712534040260, server: default)
90
- # INSERT INTO a (b) VALUES (1)
91
-
92
- * On PostgreSQL, Database#full_text_search now supports a
93
- :headline option for adding an extract of the matched text to
94
- the SELECT list.
95
-
96
- * Sequel::Postgres::PGRange#cover? has been added to the pg_range
97
- extension, which works with empty, unbounded, and exclusive
98
- beginning ranges. Previously, using #cover? with these ranges
99
- would raise an exception. Note that cover? is now always
100
- defined, where previously it was only defined on ruby 1.9+.
101
-
102
- = Other Improvements
103
-
104
- * The jdbc adapters now work correctly on JRuby 9.1. Previously,
105
- some parts were broken on JRuby 9.1 due to frozen string literal
106
- issues.
107
-
108
- * Sequel::Dataset#to_hash and #to_hash_groups now work correctly for
109
- model datasets doing eager loading.
110
-
111
- * Using Sequel::Database#transaction with the :rollback=>:always
112
- option now automatically uses a savepoint if supported when run
113
- inside another transaction. If savepoints are not supported,
114
- using :rollback=>:always inside a transaction will now raise an
115
- exception.
116
-
117
- * The delay_add_association plugin now handles hashes and primary keys
118
- passed to the add_* association methods.
119
-
120
- * The json_serializer :include option now works correctly when using
121
- *_to_many associations with the association_proxies plugin.
122
-
123
- * The schema_dumper extension now recognizes bool as a boolean type,
124
- for consistency with the Database schema parser.
125
-
126
- = Backwards Compatibility
127
-
128
- * Custom adapters should switch from using log_yield to
129
- log_connection_yield so that they work correctly when using
130
- log_connection_info.
@@ -1,116 +0,0 @@
1
- = New Features
2
-
3
- * Sequel::Model::Model() has been added, which allows for
4
- Sequel::Model() like behavior where the base class used is a
5
- subclass of Sequel::Model. To make it easier to use,
6
- Sequel::Model.def_Model has also been added, which takes a module
7
- and adds a Model() method to the module that calls Model() on the
8
- receiver.
9
-
10
- A :class_namespace association option has been added to make it
11
- possible to set a default namespace for the :class option if given
12
- as a symbol or string.
13
-
14
- Sequel::Model.Model.cache_anonymous_models has been added and
15
- controls whether to cache anonymous model subclasses created by
16
- Sequel::Model::Model() on a per-class basis.
17
-
18
- These changes are designed to make it easier to use namespaced
19
- models, for example:
20
-
21
- module Foo
22
- Model = Class.new(Sequel::Model)
23
- Model.def_Model(self)
24
- DB = Model.db = Sequel.connect(ENV['FOO_DATABASE_URL'])
25
- Model.plugin :prepared_statements
26
- Model.default_association_options[:class_namespace] = 'Foo'
27
-
28
- class Bar < Model
29
- # Uses Foo::DB[:bars] as dataset
30
-
31
- # Implicitly uses Foo::Baz as associated class
32
- one_to_many :bazes
33
-
34
- # Uses Foo::Baz due to :class_namespace option
35
- one_to_many :oldest_bazes, :class=>:Baz, :order=>:id
36
- end
37
-
38
- class Baz < Model(:my_baz)
39
- # Uses Foo::DB[:my_baz] as dataset
40
-
41
- # Implicitly uses Foo::Bar as associated class
42
- one_to_many :bars
43
-
44
- # Uses Foo::Bar due to :class_namespace option
45
- one_to_many :oldest_bars, :class=>:Bar, :order=>:id
46
- end
47
- end
48
-
49
- * A string_agg extension has been added for aggregate string
50
- concatentation support on PostgreSQL 9+, SQLAnywhere 12+,
51
- Oracle11g+, DB 9.7+, MySQL, HSQLDB, H2, and CUBRID:
52
-
53
- DB.extension :string_agg
54
- ds = DB[:table]
55
- ds.get(Sequel.string_agg(:c)) # ',' default separator
56
- ds.get(Sequel.string_agg(:c, ' - ')) # custom separator
57
- ds.get(Sequel.string_agg(:c).order(:bar)) # force order
58
- ds.get(Sequel.string_agg(:c).distinct) # remove duplicates
59
-
60
- * A connection_expiration extension has been added, for automatically
61
- removing connections from the connection pool after they have been
62
- open for a given amount of time (4 hours by default).
63
-
64
- * Support for <, <=, >, and >= operator validations when using integer
65
- and string arguments has been added to the constraint_validations
66
- extension and plugin.
67
-
68
- * Sequel::SQL::Function#order has been added to support ordered
69
- aggregate functions:
70
-
71
- Sequel.function(:foo, :bar).order(:baz)
72
- # foo(bar ORDER BY baz)
73
-
74
- = Other Improvements
75
-
76
- * The validates_operator validation in validation_helpers now
77
- considers nil values as invalid unless :allow_nil or a similar
78
- option is used. Previously, using validates_operator with a nil
79
- value would probably raise a NoMethodError. This makes
80
- validates_operator more similar to other validations.
81
-
82
- * The threaded connection pools no longer hold the pool mutex when
83
- disconnecting connections, which is useful if the driver blocks
84
- when disconnecting connections.
85
-
86
- * The connection_validator extension no longer holds a reference
87
- to connections that have been disconnected.
88
-
89
- * The connection_validator extension no longer overwrites the
90
- connection_validation_timeout if loaded a second time.
91
-
92
- * Sequel now closes cursors as soon as it is done using them in the
93
- oracle adapter, instead of waiting for GC to clean them up.
94
-
95
- * Sequel now handles disconnect errors that occur when literalizing
96
- strings in the mysql2 and postgres adapters.
97
-
98
- = Backwards Compatibility
99
-
100
- * Using the Bignum class as a generic type is now deprecated. As
101
- announced in the 4.35.0 release notes, ruby 2.4 is unifying the
102
- Fixnum and Bignum classes into Integer, which results in the
103
- behavior of the Bignum class changing. 4.35.0 added support for
104
- using the :Bignum symbol as a generic 64-bit integer type, and
105
- Sequel users now need to switch to that to avoid the deprecation
106
- warning.
107
-
108
- Sequel 4.41.0 (to be released in December), will drop support
109
- for using the Bignum class as a generic type. This is being done
110
- before the release of ruby 2.4 to hopefully make it unlikely that
111
- users will be subject to a behavior changes when upgrading ruby
112
- versions.
113
-
114
- Related to this change, external adapters need to switch from
115
- overriding Database#type_literal_generic_bignum to
116
- Database#type_literal_generic_bignum_symbol.