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
data/doc/reflection.rdoc CHANGED
@@ -6,7 +6,7 @@ Sequel supports reflection information in multiple ways.
6
6
 
7
7
  You can get the adapter in use using Database#adapter_scheme:
8
8
 
9
- DB.adapter_scheme # e.g. :postgres, :jdbc, :odbc
9
+ DB.adapter_scheme # :postgres, :jdbc, :odbc
10
10
 
11
11
  == Database Connected To
12
12
 
@@ -97,17 +97,17 @@ You can get an array of association symbols with Model.associations:
97
97
 
98
98
  Model.associations # [:association1, :association2, ...]
99
99
 
100
- You can get the association reflection for a single association via the Model.association_reflection. Association reflections are subclasses of hash, for ease of use and introspection (and backwards compatibility):
100
+ You can get the association reflection for a single association via the Model.association_reflection. Association reflections are subclasses of hash:
101
101
 
102
- Model.association_reflection(:association1) # {:name=>:association1, :type=>:many_to_one, :model=>Model, ...}
102
+ Model.association_reflection(:association1) # #<Sequel::Model::Associations::ManyToOneAssociationReflection Model.many_to_one :association1>
103
103
 
104
104
  You can get an array of all association reflections via Model.all_association_reflections:
105
105
 
106
- Model.all_association_reflections # [{:name=>:association1, :type=>:many_to_one, :model=>Model, ...}, ...]
106
+ Model.all_association_reflections # [#<Sequel::Model::Associations::ManyToOneAssociationReflection Model.many_to_one :association1>, ...]
107
107
 
108
108
  Finally, you can get a hash of association reflections via Model.association_reflections:
109
109
 
110
- Model.association_reflections # {:association1=>{:name=>:association1, :type=>:many_to_one, :model=>Model, ...}, ...}
110
+ Model.association_reflections # {:association1=>#<Sequel::Model::Associations::ManyToOneAssociationReflection Model.many_to_one :association1>, ...}
111
111
 
112
112
  == Validations Defined
113
113
 
@@ -118,4 +118,3 @@ When using the validation_class_methods plugin, you can use the validation_refle
118
118
  Similarly, when using the constraint_validations plugin, you can use the constraint_validation_reflections class method:
119
119
 
120
120
  Model.constraint_validation_reflections[:column] # => [[:presence, {}], [:max_length, {:argument=>255, :message=>'is just too long'}]]
121
-
@@ -0,0 +1,159 @@
1
+ = Major Changes
2
+
3
+ * Datasets are now frozen by default. Since Sequel's inception,
4
+ datasets have used a method-chaining API that returned modified
5
+ copies, but previously they still supported direct mutation. Now,
6
+ datasets are always frozen and cannot be mutated. This allows many
7
+ additional default optimizations related to caching, and provides
8
+ greater thread safety.
9
+
10
+ ds = DB[:table]
11
+
12
+ # Before
13
+ ds.row_proc = lambda{|h| h}
14
+
15
+ # Now
16
+ ds = ds.with_row_proc(lambda{|h| h})
17
+
18
+ * Symbol splitting to create qualified and/or aliased identifiers is
19
+ now disabled by default. While symbol splitting allowed for shorter
20
+ code, it was not obvious and caused significant issues when using
21
+ column names with embedded double or triple underscores. Sequel now
22
+ offers many ways to create qualified and/or aliased identifiers.
23
+
24
+ # Before
25
+ :table__column # "table"."column"
26
+
27
+ # Now
28
+ :table__column # "table__column"
29
+ Sequel[:table][:column] # "table"."column"
30
+
31
+ # To get back historical behavior
32
+ Sequel.split_symbols = true
33
+
34
+ * Sequel no longer allows the use of plain ruby strings as SQL code
35
+ fragments in the dataset filtering methods, as that makes it
36
+ easier to introduce SQL injection vulnerabilities. You can use
37
+ Sequel.lit to create literal strings (SQL code fragments), which
38
+ makes it easier to do security auditing of applications using
39
+ Sequel.
40
+
41
+ # Before
42
+ DB[:table].where("column = 1").all
43
+
44
+ # Now
45
+ DB[:table].where(Sequel.lit("column = 1")).all
46
+ # or better
47
+ DB[:table].where(column: 1).all
48
+
49
+ # To get back historical behavior
50
+ DB.extension :auto_literal_strings
51
+
52
+ = Backwards Compatibility
53
+
54
+ * All adapters, extensions, plugins, features, and constants
55
+ deprecated in 4.49.0 have been removed. Before upgrading to Sequel
56
+ 5.0.0, upgrade to 4.49.0 and fix all deprecation warnings.
57
+
58
+ * Support for ruby 1.8.7 has been dropped, the minimum ruby version is
59
+ now 1.9.2.
60
+
61
+ * The {before,after,around}_validation hooks are now always called
62
+ when saving, even if the validate: false option is used. This
63
+ allows you to use the before_validation hook to make changes
64
+ to the model instance that are required before validation and
65
+ before saving even if not validating.
66
+
67
+ * Getting column values for newly created model instances after
68
+ insertion now happens before after_create is called, instead of
69
+ after.
70
+
71
+ * Sequel now immediately attempts to the connect to the database
72
+ when a Database instance is created, in order to fail fast if the
73
+ connection parameters are invalid.
74
+
75
+ * The validates_unique method in the validation_helpers plugin
76
+ now only checks for uniqueness by default if the record is new or
77
+ one of the related columns has been modified by default.
78
+
79
+ * Database schema modification methods and schema generator methods
80
+ now return nil instead of some internal value.
81
+
82
+ * Many cases where Sequel used Kernel#send internally have been
83
+ switched to Kernel#public_send so they only call public methods.
84
+
85
+ * Model association hooks are now nil instead of empty arrays by
86
+ default.
87
+
88
+ * Internal uses of instance_eval with a block have been changed to
89
+ instance_exec. This allows them to be used with lambdas that
90
+ take no arguments.
91
+
92
+ * Most internal constants are now frozen, unless there is a
93
+ requirement that they be modified at runtime.
94
+
95
+ * The Model @was_new instance variable is now no longer set when
96
+ saving new model instances.
97
+
98
+ * The private Sequel::Postgres::PGArray::Parser#new_entry_buffer
99
+ method in the pg_array extension has been removed.
100
+
101
+ * Modifying Model.input_transformer_order in the input_transformer
102
+ plugin no longer has an effect.
103
+
104
+ = New Features
105
+
106
+ * Database#add_index :if_not_exists option is now supported on
107
+ PostgreSQL 9.5+.
108
+
109
+ * SQL::Subscript#expression has been added to retrieve the
110
+ expression that is subscripted.
111
+
112
+ = Other Improvements
113
+
114
+ * Threaded connection pools no longer block while new connections
115
+ are being made. Previously, attempting to establish a new
116
+ connection blocked all connection pool activity until the new
117
+ connection was made.
118
+
119
+ * Many minor performance improvements have been made.
120
+
121
+ * The class_table_inheritance plugin now raises an error during
122
+ Model#update if a query does not modify a single row, just as
123
+ the default Model#update does.
124
+
125
+ * ConnectionPool#size is now thread-safe in both threaded
126
+ connection pools. Internal callers that already have the
127
+ connection pool mutex should switch to using #_size (a new
128
+ private method).
129
+
130
+ * Registration of new serialization formats in the serialization
131
+ plugin is now thread-safe.
132
+
133
+ * If transactional schema modifications are not supported, a
134
+ savepoint will not automatically be created when adding
135
+ indexes for new tables inside transactions. This fixes issues
136
+ when making schema changes inside transactions on MySQL.
137
+
138
+ * Attempting to create a prepared statement using a dataset that
139
+ uses a delayed evaluation now raises an error, because the
140
+ prepared statement would not respect the delayed evaluation.
141
+
142
+ * The bin/sequel -M option now uses base 10. Previously, it
143
+ used the Kernel#Integer default, which was base 8 if there was
144
+ a preceding 0.
145
+
146
+ = Deprecated Features
147
+
148
+ These deprecated features will be removed in Sequel 5.1.0.
149
+
150
+ * Model.allowed_columns in the base plugin is now deprecated. Use
151
+ the whitelist_security plugin if you want to call it.
152
+
153
+ * Model use_after_commit_rollback class and instance accessors are
154
+ now deprecated.
155
+
156
+ * Defining the Model#_before_validation method is now deprecated.
157
+ You can change to using before_validation.
158
+
159
+ * The private Model.plugin_module_defined? method is now deprecated.
@@ -0,0 +1,31 @@
1
+ = Improvements
2
+
3
+ * Database#copy_into in the jdbc/postgresql adapter now works
4
+ correctly when using multibyte characters in strings.
5
+
6
+ * The alter_table add_foreign_key method is now reversible when the
7
+ :foreign_key_constraint_name option is used.
8
+
9
+ * The jdbc/h2 and jdbc/hsqldb adapters now respect the
10
+ :foreign_key_constraint_name option.
11
+
12
+ * Calling Model.freeze on an already frozen model no longer raises
13
+ an error.
14
+
15
+ * An unnecessary database query is now avoided when loading the
16
+ pg_inet extension when the pg_array extension is already loaded.
17
+
18
+ * A better exception message is now used when migrating with an
19
+ empty migration directory.
20
+
21
+ = Backwards Compatibility
22
+
23
+ * Model.allowed_columns has been removed. Use the whitelist_security
24
+ plugin if you want to call it.
25
+
26
+ * Model use_after_commit_rollback class and instance accessors have
27
+ been removed.
28
+
29
+ * Support for the Model#_before_validation method has been removed.
30
+
31
+ * The private Model.plugin_module_defined? method has been removed.
@@ -0,0 +1,84 @@
1
+ = New Features
2
+
3
+ * Ruby 2.6+ endless ranges are now supported as condition specifier
4
+ values, using a >= operator for them:
5
+
6
+ DB[:t].where(c: 1...)
7
+ # SELECT * FROM t WHERE (c >= 1)
8
+
9
+ * Ruby 2.6+ endless ranges are now supported in the pg_range
10
+ extension:
11
+
12
+ DB[:t].where(id: 1).update(r: 1...)
13
+ # UPDATE t SET r = '[1,)' WHERE (id = 1)
14
+
15
+ * The :include option when creating indexes is now supported on
16
+ PostgreSQL 11, specifying additional columns to include in the index
17
+ without indexing them. This is useful to allow index only scans in
18
+ additional cases.
19
+
20
+ * The :tablespace option is now supported when creating tables,
21
+ indexes, and materialized views on PostgreSQL.
22
+
23
+ * The list plugin now supports a :top option, which can be used to
24
+ specify the top of the list. The default value for the top of the
25
+ list is 1, but using this option you can make the top of the list be
26
+ 0.
27
+
28
+ = Other Improvements
29
+
30
+ * In the pg_array_associations plugin, filtering by associations for
31
+ many_to_pg_array associations now works correctly on PostgreSQL 11.
32
+ Previously it did not work on PostgreSQL 11 due to new restrictions
33
+ on using set returning functions in the the SELECT list.
34
+
35
+ * When setting the value of a column to the same value the column
36
+ already has, for a new model object that has not yet been persisted,
37
+ where the column is used as the foreign key for at least one
38
+ many_to_one association, do not clear any related associations from
39
+ the associations cache.
40
+
41
+ * In the pg_array extension, if there are separate conversion procs for
42
+ timetz and time types, the conversion proc for the timetz[] type now
43
+ correctly uses the conversion proc for the timetz type to convert
44
+ scalar values, instead of the conversion proc for the time type.
45
+
46
+ * Empty arrays and hashes are now correctly handled in
47
+ Dataset#{first,where_all,where_each,where_single_value} when a
48
+ cached placeholder literalizer is used.
49
+
50
+ * In the tree plugin, Model#{ancestors,descendants,self_and_siblings}
51
+ now work correctly when custom parent/children association names
52
+ are used.
53
+
54
+ * The inner loop of the postgres adapter row fetching code is now
55
+ 2-3% faster.
56
+
57
+ * When using the postgres adapter with pg-0.18+, set a
58
+ type_map_for_queries for the connection to allow it to handle input
59
+ type casts for Integer, Float, TrueClass, and FalseClass values
60
+ without allocating strings.
61
+
62
+ * SQLTime.parse (and therefore Sequel.string_to_time) now respects the
63
+ SQLTime.date and Sequel.application_timezone settings.
64
+
65
+ * The jdbc/postgresql adapter now correctly parses timetz types.
66
+
67
+ * On JRuby 9.2.0.0, when handling BC timestamps without timezones in
68
+ the pg_extended_date_support extension, assume local time and not
69
+ UTC time if the database timezone is not specified and
70
+ Sequel.datetime_class is Time.
71
+
72
+ * Errors indicating that a MySQL database is in read-only mode are
73
+ now treated as disconnect errors in the mysql and mysql2 adapters,
74
+ for better behavior in failover scenarios.
75
+
76
+ * Sequel::Model datasets now support the use of IN/NOT IN operators
77
+ where the second argument for the operator (the right hand side) is
78
+ a set returning function. Previously, the Sequel::Model code
79
+ assumed the right hand side of an IN/NOT IN operator was a datasets
80
+ or array, since those are the only values where Sequel will
81
+ automatically create such an operator.
82
+
83
+ * Sequel no longer loads the strscan library in the pg_array extension
84
+ if it is not necessary because the parser from sequel_pg is used.
@@ -0,0 +1,83 @@
1
+ = New Features
2
+
3
+ * Sequel now supports more window frame specification types when
4
+ using window functions. You can now provide the window frame
5
+ specification as a hash, and Sequel will format the correct
6
+ SQL. Specifically, this adds support for RANGE and GROUPS,
7
+ numeric offsets, and EXCLUDE on a database that supports it
8
+ (e.g. PostgreSQL 11+). Examples:
9
+
10
+ DB[:albums].select{function(c1).over(:partition=>c2, :order=>:c3,
11
+ :frame=>{:type=>:range, :start=>1, :end=>1})}
12
+ # SELECT function(c1) OVER (PARTITION BY c2 ORDER BY c3
13
+ # RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM albums
14
+
15
+ DB[:albums].select{function(c1).over(:partition=>c2, :order=>:c3,
16
+ :frame=>{:type=>:groups, :start=>[2, :preceding], :end=>[1, :preceding]})}
17
+ # SELECT function(c1) OVER (PARTITION BY c2 ORDER BY c3
18
+ # GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING) FROM albums
19
+
20
+ DB[:albums].select{function(c1).over(:partition=>c2, :order=>:c3,
21
+ :frame=>{:type=>:range, :start=>:preceding, :exclude=>:current})}
22
+ # SELECT function(c1) OVER (PARTITION BY c2 ORDER BY c3
23
+ # RANGE UNBOUNDED PRECEDING EXCLUDE CURRENT ROW) FROM albums
24
+
25
+ * The SQLite 3.24+ ON CONFLICT clause to INSERT is now supported.
26
+ This support is very similar to the PostgreSQL support for the
27
+ same feature, also known as UPSERT (UPDATE if the row already
28
+ exists, INSERT if it does not). This support is different than
29
+ the previous support for INSERT ON CONFLICT REPLACE (also known as
30
+ INSERT OR REPLACE), but it uses the same method name in order to
31
+ be compatible with the PostgreSQL support. The new syntax requires
32
+ passing a hash to Dataset#insert_conflict. Examples:
33
+
34
+ DB[:table].insert_conflict({}).insert(a: 1, b: 2)
35
+ # INSERT INTO TABLE (a, b) VALUES (1, 2)
36
+ # ON CONFLICT DO NOTHING
37
+
38
+ DB[:table].insert_conflict(target: :a).insert(a: 1, b: 2)
39
+ # INSERT INTO TABLE (a, b) VALUES (1, 2)
40
+ # ON CONFLICT (a) DO NOTHING
41
+
42
+ DB[:table].insert_conflict(target: :a,
43
+ conflict_where: {c: true}).insert(a: 1, b: 2)
44
+ # INSERT INTO TABLE (a, b) VALUES (1, 2)
45
+ # ON CONFLICT (a) WHERE (c IS TRUE) DO NOTHING
46
+
47
+ DB[:table].insert_conflict(target: :a,
48
+ update: {b: Sequel[:excluded][:b]}).insert(a: 1, b: 2)
49
+ # INSERT INTO TABLE (a, b) VALUES (1, 2)
50
+ # ON CONFLICT (a) DO UPDATE SET b = excluded.b
51
+
52
+ DB[:table].insert_conflict(target: :a,
53
+ update: {b: Sequel[:excluded][:b]},
54
+ update_where: {Sequel[:table][:status_id] => 1}).insert(a: 1, b: 2)
55
+ # INSERT INTO TABLE (a, b) VALUES (1, 2) ON CONFLICT (a)
56
+ # DO UPDATE SET b = excluded.b WHERE (table.status_id = 1)
57
+
58
+ * Dataset#window for the WINDOW clause has been moved from the
59
+ PostgreSQL-specific support to core, and has been enabled on
60
+ MySQL 8+ and SQLAnywhere. This allows you to specify a shared
61
+ window specification in a query, which can be used by multiple
62
+ window functions.
63
+
64
+ = Other Improvements
65
+
66
+ * When using the static_cache plugin, Model.first when called without
67
+ a block and without arguments or with a single Integer argument now
68
+ uses the cached values instead of issuing a query.
69
+
70
+ * Using set_column_default with a nil value now correctly removes an
71
+ existing default value on MySQL when the column is NOT NULL.
72
+
73
+ * Window function support has been enabled on SQLAnywhere, since it
74
+ works correctly.
75
+
76
+ * Dumping schema for numeric/decimal columns with default values
77
+ now works correctly. This was broken starting in Sequel 5.9.0
78
+ due to changes to use BigDecimal() instead of BigDecimal.new().
79
+
80
+ * The jdbc/sqlserver adapter now works correctly on JRuby 9.2+.
81
+
82
+ * An additional check constraint violation failure message is now
83
+ recognized on SQLite.
@@ -0,0 +1,141 @@
1
+ = New Features
2
+
3
+ * An eager_graph_eager plugin has been added, which allows you to
4
+ chain eager loads using separate queries to an existing dataset that
5
+ uses eager_graph. Given the following model associations:
6
+
7
+ Band.one_to_many :albums
8
+ Album.one_to_many :tracks
9
+
10
+ Let's say you wanted to return bands ordered by album name, and
11
+ eagerly load those albums, you can do that using:
12
+
13
+ Band.eager_graph(:albums).order{albums[:name]}
14
+
15
+ Let's say you also wanted to eagerly load the tracks for each album.
16
+ You could just add them to the eager_graph call:
17
+
18
+ Band.eager_graph(albums: :tracks).order{albums[:name]}
19
+
20
+ However, the bloats the result set, and you aren't ordering by the
21
+ track information, so a join is not required. The eager_graph_eager
22
+ plugin allows you to specify that the tracks be eagerly loaded in a
23
+ separate query after the eager_graph load of albums:
24
+
25
+ Band.eager_graph(:albums).
26
+ eager_graph_eager([:albums], :tracks).
27
+ order{albums[:name]}
28
+
29
+ eager_graph_eager's first argument is a dependency chain, specified
30
+ as an array of symbols. This specifies the point at which to
31
+ perform the eager load. The remaining arguments are arguments that
32
+ could be passed to Dataset#eager to specify what dependent
33
+ associations should be loaded at that point.
34
+
35
+ * A caller_logging Database extension has been added, which logs
36
+ caller information before queries, filtering out the internal
37
+ Sequel callers. Example:
38
+
39
+ DB.extension :caller_logging
40
+ DB[:table].first
41
+ # Logger:
42
+ # (0.000041s) (source: /path/to/app/foo/t.rb:12 in `get_first`)
43
+ # SELECT * FROM table LIMIT 1
44
+
45
+ You can further filter the caller lines by setting
46
+ Database#caller_logging_ignore to a regexp of additional caller
47
+ lines to ignore. This is useful if you have specific methods or
48
+ internal extensions/plugins that you would also like to ignore as
49
+ they obscure the code actually making the request.
50
+
51
+ DB.caller_logging_ignore = %r{/path/to/app/lib/plugins}
52
+
53
+ You can also format the caller before it is placed in the logger,
54
+ using caller_logging_formatter:
55
+
56
+ DB.caller_logging_formatter = lambda do |caller|
57
+ "(#{caller.sub(/\A\/path\/to\/app\//, '')})"
58
+ end
59
+ DB[:table].first
60
+ # Logger:
61
+ # (0.000041s) (foo/t.rb:12 in `get_first`) SELECT * FROM table LIMIT 1
62
+
63
+ * Database#call_procedure has been added to the postgres adapter, and
64
+ is usable on PostgreSQL 11+ for calling procedures created with
65
+ CREATE PROCEDURE.
66
+
67
+ DB.call_procedure(:foo, 1, "bar")
68
+ # CALL foo(1, 'bar')
69
+
70
+ This method will return a hash of results if the procedure returns
71
+ a result, or nil if it does not return a result.
72
+
73
+ = Other Improvements
74
+
75
+ * It is now possible to use Dataset#eager_graph in an eager load
76
+ callback for associations that use join tables. This allows you
77
+ to eager load some associations using separate queries and other
78
+ associations using joins. For example:
79
+
80
+ Band.eager(:albums=>proc{|ds| ds.eager_graph(:tracks)})
81
+
82
+ Will load the bands in one query, and load the albums and tracks
83
+ in a separate query using a join. Previously, this construction
84
+ worked only for associations that did not use join tables. It now
85
+ works for associations that use join tables, as long as existing
86
+ selected columns are not removed inside the callback.
87
+
88
+ * The tactical_eager_loading plugin now handles automatic eager
89
+ loading for associated objects that were created during the
90
+ load of dataset that uses eager_graph. When using the plugin,
91
+ the following code will now only execute 2 queries, instead of
92
+ issuing a separate query for each album to get the tracks for
93
+ the album.
94
+
95
+ artists = Artist.eager_graph(:albums).all
96
+ artists.each do |artist|
97
+ artist.albums.each do |album|
98
+ album.tracks
99
+ end
100
+ end
101
+
102
+ * Calling Dataset#graph with a dataset with existing selections where
103
+ the column aliases cannot be determined automatically now works
104
+ correctly by using a subselect. Previously, attempting to do this
105
+ would raise an exception. This allows the following code to work:
106
+
107
+ DB[:table].select_all(:table).select_append(expr).graph(...)
108
+
109
+ * Datasets now cache the EagerGraphLoader object that is generated to
110
+ convert arrays of hashes into an object graph, so that subsequent
111
+ eager loads on the same dataset do not need to recompute the same
112
+ information. Most EagerGraphLoader internal state is now frozen to
113
+ prevent unintentional modification.
114
+
115
+ * Sequel.extension now loads files from gems. Previously, it used
116
+ Kernel.require, which does not load files from gems.
117
+
118
+ * Adapters that emulate prepared statements using literalization now
119
+ use a placeholder literalizer and should execute significantly
120
+ faster. More prepared statement internal metadata is now frozen
121
+ to prevent unintentional modification.
122
+
123
+ * Dataset#intersect, #except, and #nowait are now supported on MariaDB
124
+ 10.3+.
125
+
126
+ * The constraint_validations extension now respects the
127
+ constraint_validations_table setting when adding metadata for the
128
+ constraint validations.
129
+
130
+ * In the oracle adapter, the clob prepared statement argument type is
131
+ now mapped to the OCI8::CLOB class, allowing the use of Oracle
132
+ procedures with clob output parameters.
133
+
134
+ * The Model.load_cache method in the static_cache plugin is now public.
135
+
136
+ = Backwards Compatibility
137
+
138
+ * The private Dataset#prepared_arg? method has been removed. It is no
139
+ longer necessary after the refactoring to the prepared statement
140
+ code. External adapters that currently call the method should be
141
+ updated to no longer call the method.
@@ -0,0 +1,27 @@
1
+ = New Features
2
+
3
+ * A constant_sql_override Database extension has been added, allowing
4
+ for overriding the SQL used by constants such as
5
+ Sequel::CURRENT_TIMESTAMP. This can be used to force
6
+ CURRENT_TIMESTAMP to be literalized at a particular time zone:
7
+
8
+ DB.extension :constant_sql_override
9
+ DB.set_constant_sql(Sequel::CURRENT_TIMESTAMP,
10
+ "CURRENT_TIMESTAMP AT TIME ZONE 'UTC'")
11
+
12
+ * Prepared statements now support the :single_value type, which
13
+ returns the first column value in the dataset.
14
+
15
+ prep_stmt = DB[:table].select(:column).prepare(:single_value, :ps)
16
+ prep_stmt.call
17
+ # PREPARE ps AS SELECT column FROM table LIMIT 1;
18
+ # EXECUTE ps;
19
+ # => 42
20
+
21
+ = Other Improvements
22
+
23
+ * Dataset#from_self will no longer use a cached dataset if any options
24
+ are given, as that can result in incorrect behavior.
25
+
26
+ * Model.all in the static_cache plugin now accepts a block, mirroring
27
+ the API when the static_cache plugin is not used.
@@ -0,0 +1,63 @@
1
+ = New Features
2
+
3
+ * The :nulls option when creating ordered expressions is now supported
4
+ on all databases that Sequel ships support for. For databases that
5
+ do not support NULLS FIRST/NULLS LAST, support is emulated.
6
+
7
+ ds.order(Sequel.asc(:name, :nulls=>:last))
8
+ # When emulated:
9
+ # ORDER BY (CASE WHEN (name IS NULL) THEN 2 ELSE 1 END), name ASC
10
+
11
+ * Model#pk_equal? has been added as a more descriptive name for
12
+ Model#===. Model#=== is now an alias of Model#pk_equal?.
13
+
14
+ * The roots and roots_dataset class methods in the tree plugin are now
15
+ also available as dataset methods.
16
+
17
+ = Other Improvements
18
+
19
+ * Inverting expressions using the ANY/SOME/ALL SQL operators now works
20
+ correctly:
21
+
22
+ # Sequel <5.14.0
23
+ Sequel.~(:a=>Sequel.function(:any, :x))
24
+ # "(a != any(x))"
25
+
26
+ # Sequel >=5.14.0
27
+ Sequel.~(:a=>Sequel.function(:any, :x))
28
+ # "NOT (a = any(x))"
29
+
30
+ Sequel has always tried to push inversion down to create SQL that is
31
+ easier to reason about. However, inversion cannot be pushed down if
32
+ an ANY/SOME/ALL SQL operator is used, because that is a different
33
+ type of operation that just happens to use the same syntax. Sequel
34
+ now avoids inversion push down for boolean operators where the
35
+ right hand side is an SQL::Function, LiteralString, or
36
+ SQL::PlaceholderLiteralString.
37
+
38
+ * When creating a boolean expression from a hash or array of pairs, if
39
+ the right hand side is an unfrozen array and string, use a frozen
40
+ copy in the expression, so that mutating the array or string
41
+ argument later does not affect the expression.
42
+
43
+ * When using the defaults_setter plugin with the :cache option, do not
44
+ cache values for columns without parseable defaults. If the default
45
+ value exists but is not parseable, caching such values could result
46
+ in incorrect behavior if the model instance is saved later.
47
+
48
+ * For models with composite primary keys, Model#=== now returns false
49
+ if any primary key value is nil, mirroring the behavior for the
50
+ scalar primary key case.
51
+
52
+ * Model datasets no longer cache SQL if they include a subquery that
53
+ cannot cache SQL.
54
+
55
+ * The SQL used for constraints in the constraint_validations
56
+ extension when the :allow_nil option is used is now clearer and
57
+ easier to understand.
58
+
59
+ * The postgres adapter no longer specifies a default port when using
60
+ the pg driver, in order to work with configurations where the
61
+ :service option is used in the :driver_options hash. The pg driver
62
+ defaults to port 5432 if no port is given, so this should not affect
63
+ backwards compatibility.
@@ -0,0 +1,39 @@
1
+ = New Features
2
+
3
+ * A :qualify_tables option has been added to the
4
+ class_table_inheritance plugin, which will automatically qualify
5
+ subclass tables with the same qualifier as the superclass table
6
+ if the superclass table is qualified.
7
+
8
+ * Model#save_validation_on_next_save! has been added, which skips all
9
+ validation on the next save to the object, including the running
10
+ of validation related hooks. This method is designed for use only
11
+ when Model#valid? is called on the object before saving, to avoid
12
+ running validations on the object twice. This method takes
13
+ precedence even over an explicit validate: true option passed to
14
+ Model#save, and as such should be used with care.
15
+
16
+ * The postgres adapter now supports a :conn_str Database option to
17
+ use a PostgreSQL connection string (e.g. "host=foo port=2442") when
18
+ connecting. This option has preference over other connection
19
+ related options if it is present.
20
+
21
+ = Other Improvements
22
+
23
+ * If a foreign key for a model object is changed from a nil value to
24
+ a non-nil value, any cached associated objects related to the
25
+ foreign key are no longer removed. Such associated objects could
26
+ only be set manually, and if they have been set manually, it is
27
+ probably not a good idea to remove them automatically.
28
+
29
+ * When using the nested_attributes plugin, new *_to_many associated
30
+ objects are not validated twice when saving.
31
+
32
+ * The default table alias when using the class_table_inheritance
33
+ plugin now correctly handles qualified tables.
34
+
35
+ * A theoretical thread safety issue when assigning connections
36
+ in the threaded connection pools has been fixed.
37
+
38
+ * Renaming columns is now supported without emulation when using
39
+ SQLite 3.25+.