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,226 +0,0 @@
1
- = Performance Enhancements
2
-
3
- * Dataset literalization for simple datasets is now faster by
4
- creating a per-adapter SQL literalization method instead of
5
- having all adapters share a generic method with higher overhead.
6
- Sequel.split_symbol now caches results globally. Symbol
7
- literalization is now cached per Database.
8
-
9
- Combining these three optimizations, here are the performance
10
- increases compared to 4.9.0 for a couple example datasets:
11
-
12
- ds1 = DB[:a]
13
- ds2 = DB[:a].select(:a, :b).where(:c=>1).order(:d, :e)
14
-
15
- .sql .all (1 row)
16
- ds1 140% 11%
17
- ds2 187% 32%
18
-
19
- * Regular association loading now uses a placeholder literalizer
20
- in most cases, for up to an 85% improvement when loading
21
- simple associations.
22
-
23
- * Eager loading associations using Dataset#eager now uses a
24
- placeholder literalizer in most cases, for up to a
25
- 20% improvement when eager loading simple associations.
26
-
27
- * Eager loading associations with limits using Dataset#eager now
28
- uses a UNION-based strategy by default. After extensive
29
- testing, this was found to be the fastest strategy if the
30
- key columns are indexed. Unfortunately, it is a much slower
31
- strategy if the key columns are not indexed. You can override
32
- the default UNION strategy by using the :eager_limit_strategy
33
- association option.
34
-
35
- On some databases, execution time of UNION queries with n subqueries
36
- increases faster than O(n). Also, there are limits on the number of
37
- subqueries supported in a single UNION query. Sequel chooses a
38
- default limit of 40 subqueries per UNION query. You can increase
39
- this via the :subqueries_per_union association option.
40
-
41
- * Dataset#import and #multi_insert can now insert multiple rows
42
- in a single query on H2, HSQLDB, Derby, SQLAnywhere, CUBRID,
43
- SQLite, Oracle, DB2, and Firebird, which should be significantly
44
- faster than previous versions that issued a separate INSERT query
45
- per row.
46
-
47
- * The many_to_many setter method in the association_pks plugin now
48
- uses Dataset#import to insert many rows at once, instead of using
49
- a seperate query per insert.
50
-
51
- * The jdbc adapter's type conversion has been rewritten to be
52
- more similar to the other adapters, setting up the type
53
- conversion procs before iterating over results. This increases
54
- performance up to 20%.
55
-
56
- * The jdbc/oracle adapter now defaults to a fetch_size of 100,
57
- similar to the oci8-based oracle adapter, significantly improving
58
- performance for large datasets.
59
-
60
- = New Features
61
-
62
- * Database#transaction now supports an :auto_savepoint option. This
63
- option makes it so that transactions inside the transaction block
64
- automatically use savepoints unless they use the :savepoint=>false
65
- option. This should make testing transactional behavior easier.
66
-
67
- * Model.prepared_finder has been added. This has an API similar to
68
- Model.finder, but it uses a prepared statement instead of a
69
- placeholder literalizer. It is less flexible than Model.finder
70
- as prepared statements have fixed SQL, but it may perform better.
71
-
72
- * Common table expressions (WITH clauses) are now supported on SQLite
73
- 3.8.3+.
74
-
75
- * :correlated_subquery has been added as an eager_graph and filter by
76
- association limit strategy for one_to_one and one_to_many
77
- associations. In certain cases it was found that this is faster
78
- than the :window_function limit strategy. It is the default
79
- filter by associations limit strategy on databases that do not
80
- support window functions.
81
-
82
- Filtering by limited associations using a correlated subquery
83
- strategy does not work in all cases, but it should handle most
84
- cases correctly.
85
-
86
- * The prepared_statement_associations plugin now handles
87
- one_through_one and one_through_many associations.
88
-
89
- * Sequel now emulates support for offsets without limits on MySQL,
90
- SQLite, H2, SQLAnywhere, and CUBRID.
91
-
92
- * In the jdbc adapter, the Database#fetch_size accessor and
93
- :fetch_size option can be used to automatically set the JDBC
94
- fetch size for JDBC Statement objects created by the database.
95
-
96
- * Dataset#with_fetch_size has been added to jdbc adapter datasets,
97
- setting the fetch size to use on ResultSets generated by the
98
- dataset. This generally has the effect of overriding the
99
- Database fetch_size setting.
100
-
101
- * On MySQL 5.6.5+, Sequel supports a :fractional_seconds Database
102
- option, which will use fractional seconds for timestamp values,
103
- and have the schema modification code create timestamp columns
104
- that accept fractional timestamps by default.
105
-
106
- * Database#call_mssql_sproc on Microsoft SQL Server now handles named
107
- parameters:
108
-
109
- DB.call_mssql_sproc(:sproc_name, :args => {
110
- 'input_arg1_name' => 'input arg1 value',
111
- 'input_arg2_name' => 'input arg2 value',
112
- 'output_arg_name' => [:output, 'int', 'result key name']
113
- })
114
-
115
- * Database#drop_view now supports an :if_exists option on SQLite,
116
- MySQL, H2, and HSQLDB.
117
-
118
- * Database#drop_table now supports an :if_exists option on HSQLDB.
119
-
120
- * A :filter_limit_strategy association option has been added, for
121
- choosing the strategy that will be used when filtering/excluding by
122
- associations with limits. For backwards compatibility, Sequel will
123
- fallback to looking at the :eager_limit_strategy option.
124
-
125
- * A :server_version Database option is now supported on Microsoft SQL
126
- Server, which will use the value given instead of querying for it.
127
-
128
- = Other Improvements
129
-
130
- * Dataset::PlaceholderLiteralizer arguments are how handled
131
- correctly when emulating offsets via the row_number window function
132
- on DB2, MSSQL <=2012, and Oracle.
133
-
134
- * Dataset::PlaceholderLiteralizer now handles DelayedEvaluation
135
- objects correctly.
136
-
137
- * Offset emulation is skipped if static SQL is used on Access,
138
- DB2, and MSSQL <=2008.
139
-
140
- * Additional disconnect errors are now recognized in the postgres
141
- adapter.
142
-
143
- * The :foreign_key_constraint_name option is now respected when
144
- adding a foreign key column to an existing table on MySQL.
145
-
146
- * Sequel now attempts to work around a bug on MySQL 5.6+ when
147
- combining DROP FOREIGN KEY and DROP INDEX in the same ALTER TABLE
148
- statement.
149
-
150
- * Dataset#for_update is now respected on H2.
151
-
152
- * Timestamp with local time zone types are now returned as
153
- Time/DateTime objects on jdbc/oracle.
154
-
155
- * Model.include now has the same API as Module.include.
156
-
157
- * Model#marshallable! now works correctly when using the
158
- tactical_eager_loading plugin.
159
-
160
- * The pg_array_associations plugin now attempts to automatically
161
- determine the correct array type to use, and explicitly casts
162
- to that array type in more places.
163
-
164
- * The auto_validations plugin now handles models that select from
165
- subqueries.
166
-
167
- * The association_pks plugin does no longer creates getter and setter
168
- methods for one_through_one associations.
169
-
170
- * bin/sequel now uses the Sequel code in the related lib directory.
171
- This makes it easier to use from a repository checkout.
172
-
173
- = Backwards Compatibility
174
-
175
- * AssociationReflection#associated_dataset now returns a joined
176
- dataset for associations that require joins (e.g. many_to_many).
177
- Anyone using this directly for associations that require joins
178
- probably needs to update their code.
179
-
180
- * Model.associate now adds the association instance methods instead
181
- of relying on the def_#{association_type} method doing so. Anyone
182
- using custom association types probably needs to update their code.
183
-
184
- * Model.eager_loading_dataset, .apply_association_dataset_opts, and
185
- .def_{add_method,association_dataset_methods,remove_methods}
186
- are now deprecated.
187
-
188
- * Key conditions for associations requiring joins have been moved
189
- from the JOIN ON clause to the WHERE clause. This should be
190
- optimized the same by the database, but it can break tests that
191
- expect specific SQL.
192
-
193
- * Dataset#_insert_sql and #_update_sql are now private instead of
194
- protected.
195
-
196
- * The install/uninstall rake tasks have been removed.
197
-
198
- * Model association and association reflection internals have
199
- changed significantly, if you were relying on them, you'll
200
- probably need to update your code.
201
-
202
- * Database transaction internals have changed significantly, if you
203
- were relying on them, you'll probably need to update your code.
204
-
205
- * Dataset literalization internals have changed significantly, with
206
- the Dataset#*_clause_methods private methods being removed.
207
- Custom adapters that used these methods should switch to using the
208
- new Dataset.def_sql_method method.
209
-
210
- * Common table expressions are no longer enabled by default in
211
- Sequel. External adapters for databases that support common
212
- table expressions should define Dataset#supports_cte?(type) to
213
- return true.
214
-
215
- * Support for RETURNING is no longer determined via introspection.
216
- External adapters for databases that support RETURNING should
217
- define Dataset#supports_returning?(type) to return true.
218
-
219
- * The new jdbc adapter type conversion code may not be completely
220
- compatible with the previous code. The currently known case
221
- where it is different is on jdbc/postgresql, when using an
222
- array type where no conversion proc exists, the returned object
223
- will be a ruby array containing java objects, instead of a ruby
224
- array containing ruby objects. It is recommended that
225
- jdbc/postgresql users using array types use the pg_array extension
226
- to avoid this issue.
@@ -1,147 +0,0 @@
1
- = New SQL Function Features
2
-
3
- * SQL::Function now supports an options hash for functions.
4
- Unfortunately, since SQL::Function#initialize does not support
5
- an options hash, you need to use SQL::Function.new! to create
6
- a function with an options hash. You can also call methods on
7
- the SQL::Function instance, which will return a new SQL::Function
8
- with the appropriate option set.
9
-
10
- * SQL::Function#quoted has been added, which will return a new
11
- SQL::Function instance that will quote the function name (if
12
- the database supports quoting function names).
13
-
14
- * SQL::Function#unquoted has been added, which will return a new
15
- SQL::Function instance that will not quote the function name.
16
-
17
- * SQL::Function#lateral has been added, which will return a new
18
- SQL::Function instance that will be preceded by LATERAL when
19
- literalized, useful for set-returning functions.
20
-
21
- * SQL::Function#within_group has been added, for creating
22
- ordered-set and hypothetical-set functions that use WITHIN GROUP.
23
-
24
- * SQL::Function#filter has been added, for creating filtered
25
- aggregate function calls using FILTER.
26
-
27
- * SQL::Function#with_ordinality has been added, for creating set
28
- returning functions that also include a row number for every
29
- row in the set, using WITH ORDINALITY.
30
-
31
- = New PostgreSQL Features
32
-
33
- * The jsonb type added in 9.4 is now supported in the pg_json
34
- extension. To create a jsonb type manually, you need to call
35
- Sequel.pg_jsonb.
36
-
37
- The new json and jsonb functions and operators added in 9.4 are
38
- now supported in the pg_json_ops extension. You can use the jsonb
39
- functions and operators by creating a Postgres::JSONBOp using
40
- Sequel.pg_jsonb_op.
41
-
42
- * Database#full_text_search now takes a :rank option to order by the
43
- ranking.
44
-
45
- * Database#refresh_view now supports a :concurrently option, to
46
- refresh a materialized view concurrently, supported on 9.4+.
47
-
48
- * Postgres::ArrayOp#cardinality has been added to the pg_array_ops
49
- extension, for easy use of the cardinality method added in 9.4.
50
-
51
- * Postgres::ArrayOp#unnest in the pg_array_ops extension now accepts
52
- arguments. PostgreSQL 9.4+ supports this if unnest is used in the
53
- FROM clause.
54
-
55
- = Other New Features
56
-
57
- * Sequel now supports derived column lists (table aliases that include
58
- column aliases) via Sequel.as and SQL::AliasedMethods#as:
59
-
60
- Sequel.as(:table, :alias, [:c1, :c2])
61
- # table AS alias(c1, c2)
62
-
63
- Not all databases support this, but it is in SQL92 and Sequel now
64
- supports it by default. Derived column lists make it easier to
65
- alias columns when using set-returning functions.
66
-
67
- Dataset#from_self now supports derived column lists via the new
68
- :column_aliases option (which requires the :alias option to take
69
- effect).
70
-
71
- * Database#create_view now supports a :check option, to use
72
- WITH CHECK OPTION. You can also use :check=>:local for
73
- WITH LOCAL CHECK OPTION. These clauses make it so when you are
74
- inserting into/updating the view, you can only modify rows in the
75
- underlying table if the result would be returned by the view.
76
-
77
- * The :after_connect Database option proc now can accept two
78
- arguments. If the arity of the proc is 2, Sequel will pass both
79
- the connection object and the shard symbol.
80
-
81
- * The class_table_inheritance plugin now supports a :model_map
82
- option similar to the single_table_inheritance plugin, allowing
83
- use of the plugin without storing ruby class names in the database.
84
- Note that if you use this option, you must set the correct value
85
- for the kind column manually when creating the row.
86
-
87
- * Support for CUBRID/SQLAnywhere emulation has been added to the
88
- mock adapter.
89
-
90
- = Other Improvements
91
-
92
- * Dataset#import now supports a default slice size, which Sequel
93
- sets to 500 on SQLite as that is the limit that SQLite supports in
94
- a single statement.
95
-
96
- * The serialization plugin now only modifies changed_columns in the
97
- setter method if the deserialized value has changed, similar to
98
- how Sequel's standard column setters work. Note that if you are
99
- mutating the deserialized value (i.e. not calling the setter
100
- method), you still need to use the
101
- serialization_modification_detection plugin.
102
-
103
- * Plugins that set column values for new objects before creation now
104
- use before_validation instead of before_create, which works better
105
- when the auto_validations plugin is used.
106
-
107
- * The :read_only transaction option is now applied per-savepoint on
108
- PostgreSQL. Note that this allows you to have a READ ONLY
109
- savepoint in a READ WRITE transaction, it does not allow you to
110
- have a READ WRITE savepoint in a READ ONLY transaction.
111
-
112
- * In the ibm_db adapter, fix warnings when using certain column names.
113
-
114
- * Support connecting to a DB2 catalog name in the ibm_db adapter, by
115
- providing a :database option without a :host or :port option.
116
-
117
- * The mock adapter now sets an emulated version when using MySQL and
118
- SQLite. Additionally, the emulated version for PostgreSQL and
119
- Microsoft SQL Server has been updated.
120
-
121
- = Backwards Compatibility
122
-
123
- * External adapters that override Dataset#as_sql_append now need to
124
- have the method accept two arguments.
125
-
126
- * Model.eager_loading_dataset, .apply_association_dataset_opts, and
127
- .def_{add_method,association_dataset_methods,remove_methods} have
128
- been removed (they were deprecated in 4.10.0).
129
-
130
- * SQL::WindowFunction and SQL::EmulatedFunction classes are now
131
- deprecated, as well as Dataset methods that literalize instances of
132
- these classes. These classes are replaced by using options on
133
- SQL::Function instances.
134
-
135
- * Passing a table_alias argument when creating an SQL::JoinClause
136
- manually is no longer supported. You now need to pass the table as
137
- an SQL::AliasedExpression if the table needs to be aliased.
138
-
139
- * ASTTransformer no longer transforms the table alias for
140
- SQL::JoinClause. This is for consistency with
141
- SQL::AliasedExpression.
142
-
143
- * SQL standard casts are now used in Database#full_text_search, which
144
- can break tests that expect specific SQL.
145
-
146
- * The to_dot extension now uses slightly different output for
147
- SQL::Function and SQL::JoinClause instances.
@@ -1,105 +0,0 @@
1
- = New Features
2
-
3
- * Database#schema now includes :max_length entries for string
4
- columns, specifying the size of the string field. The
5
- auto_validations plugin now uses this information to
6
- automatically set up max_length validations on those fields.
7
-
8
- * The Dataset join methods now support a :reset_implicit_qualifier
9
- option. If set to false, this makes the join not reset the
10
- implicit qualifier, so that the next join will not consider this
11
- table as the last table joined. Example:
12
-
13
- DB[:a].join(:b, :c=>:d).
14
- join(:e, :f=>:g)
15
- # SELECT * FROM a
16
- # INNER JOIN b ON (b.c = a.d)
17
- # INNER JOIN e ON (e.f = b.g)
18
-
19
- DB[:a].join(:b, {:c=>:d}, :reset_implicit_qualifier=>false).
20
- join(:e, :f=>:g)
21
- # SELECT * FROM a
22
- # INNER JOIN b ON (b.c = a.d)
23
- # INNER JOIN e ON (e.f = a.g)
24
-
25
- * The Dataset cross and natural join methods now accept an options
26
- hash. Example:
27
-
28
- DB[:a].cross_join(:b, :table_alias=>:c)
29
- # SELECT * FROM a CROSS JOIN b AS c
30
-
31
- * Model#set_nested_attributes has been added to the nested_attributes
32
- plugin, which allows you to to set the nested_attributes options to
33
- use per-call. This is very helpful if you have multiple forms that
34
- handle associated objects, but with different input fields used
35
- for the associated objects depending on the form. Example:
36
-
37
- album.set_nested_attributes(:tracks,
38
- params[:track_attributes],
39
- :fields=>[:a, :b, :c])
40
-
41
- * Database#values has been added on PostgreSQL, which creates a
42
- dataset that uses VALUES instead of SELECT. Just as PostgreSQL
43
- allows, you can also use orders, limits, and offsets with this
44
- dataset.
45
-
46
- * A :notice_receiver option is now supported in the postgres adapter
47
- if the pg driver is used. This should be a proc, which will be
48
- passed to the pg connection's set_notice_receiver method.
49
-
50
- * A Database :readonly option is now supported in the sqlite adapter,
51
- which opens the database in a read-only mode, causing an error
52
- if a query is issued that would modify the database.
53
-
54
- * A :before_thread_exit option has been added to
55
- Database#listen_for_static_cache_updates in the
56
- pg_static_cache_updater extension, allowing you to run code before
57
- the created thread exits.
58
-
59
- = Other Improvements
60
-
61
- * Eager loading limited associations using a UNION now works
62
- correctly when an association block is used. This fixes a
63
- regression that first occurred in 4.10.0, when the union
64
- eager loader became the default eager loader.
65
-
66
- * When creating a new associated object in the nested_attributes
67
- plugin, where the reciprocal association is a many_to_one
68
- association, set the cached reciprocal object in the new
69
- associated object before saving it.
70
-
71
- This fixes issues when validations in the associated object
72
- require access to the current object, which may not yet be
73
- saved in the database.
74
-
75
- * The prepared_statements and prepared_statements_associations
76
- plugins now automatically use explicit column references when
77
- preparing statements. This fixes issues on PostgreSQL when a
78
- column is added to a table while a prepared statement exists
79
- that selects * from the table. Previously, all further attempts
80
- to use the prepared statement will fail.
81
-
82
- This allows you to run migrations that add columns to tables
83
- while concurrently running an application that uses the
84
- prepared statements plugins. Note that many other schema
85
- modifications can cause issues when running migrations
86
- while concurrently running an application, but most of those
87
- are not specific to usage of prepared statements.
88
-
89
- * Dataset#insert_select on PostgreSQL now respects an existing
90
- RETURNING clause, and won't override it to use RETURNING *.
91
-
92
- A similar fix was applied to the generalized prepared statements
93
- support as well.
94
-
95
- * The interval parser in the pg_interval extension now supports
96
- intervals with 2-10 digits for hours. Previously, it only
97
- supported using 2 digits for hours.
98
-
99
- = Backwards Compatibility
100
-
101
- * The methods and classes deprecated in 4.11.0 have been removed.
102
-
103
- * The nested_attributes internal API has changed significantly. If
104
- you were calling any private nested_attributes methods, you'll
105
- probably need to update your code.
@@ -1,169 +0,0 @@
1
- = New Features
2
-
3
- * A modification_detection plugin has been added, for automatic
4
- detection of in-place column value modifications. This makes
5
- it so you don't have to call Model#modified! manually when
6
- changing a value in place.
7
-
8
- * A column_select plugin has been added, for automatically
9
- selecting explicitly qualified columns in model datasets.
10
- Example:
11
-
12
- Sequel::Model.plugin :column_select
13
- class Album < Sequel::Model
14
- end
15
- Album.dataset.sql
16
- # SELECT albums.id, albums.name, albums.artist_id
17
- # FROM albums
18
-
19
- * An insert_returning_select plugin has been added, for automatically
20
- setting up RETURNING clauses for models that select explicit
21
- columns. This is useful when using the column_select or
22
- lazy_attributes plugins.
23
-
24
- * A pg_enum extension has been added, for easier dealing with
25
- PostgreSQL enum types. The possible values for the type
26
- are then returned in the schema hashes under the :enum_values
27
- key. It also adds create_enum, drop_enum, and add_enum_value
28
- Database methods for migration support.
29
-
30
- * A round_timestamps extension has been added, for automatically
31
- rounding timestamps to database supported precision when
32
- literalizing.
33
-
34
- * A dataset_source_alias extension has been added, for automatically
35
- aliasing datasets to their first source, instead of using t1, t2.
36
- Example:
37
-
38
- DB.from(:a, DB[:b]).sql
39
- # SELECT * FROM a, (SELECT * FROM b) AS t1
40
-
41
- DB.extension(:dataset_source_alias)
42
- DB.from(:a, DB[:b]).sql
43
- # SELECT * FROM a, (SELECT * FROM b) AS b
44
-
45
- * On Microsoft SQL Server, Sequel now emulates RETURNING support
46
- using the OUTPUT clause, as long as only simple column references
47
- are used.
48
-
49
- = Other Improvements
50
-
51
- * A regression has been fixed in the timestamps and table
52
- inheritance plugins, where column values would not be
53
- saved when skipping validations. This was first broken in
54
- 4.11.0.
55
-
56
- * A regression has been fixed on JRuby and Rubinius when using
57
- Sequel::Model(dataset) if the dataset needs to literalize a
58
- symbol (and most do). This was first broken in 4.10.0.
59
-
60
- * Primary keys are now automatically setup for models even if
61
- the models select specific columns.
62
-
63
- * The lazy_attributes plugin now uses qualified columns in its
64
- selection, instead of unqualified columns.
65
-
66
- * When looking up model instances by primary key, Sequel now uses a
67
- qualified primary key if the model uses a joined dataset.
68
-
69
- * For associations that require joins, Sequel will now use the
70
- associated model's selection directly (instead of
71
- associated_table.*) if the associated model's selection consists
72
- solely of qualified columns.
73
-
74
- Among other things, this means that a many_to_many association to
75
- a model that uses lazy attributes will not eagerly load the lazy
76
- attributes by default.
77
-
78
- * Model#save now uses insert_select if there is an existing
79
- RETURNING clause used by the underlying dataset, even if the model
80
- selects specific columns.
81
-
82
- * In Dataset#insert, aliased tables are now automatically unaliased.
83
- This allows you to use a dataset with an aliased table and have
84
- full SELECT/INSERT/UPDATE/DELETE support, assuming the database
85
- supports aliased tables in UPDATE and DELETE.
86
-
87
- * Dataset#graph now qualifies columns correctly if the current
88
- dataset is a joined dataset and it moves the current dataset to
89
- a subselect.
90
-
91
- * Dataset#joined_dataset? is now a public method, and can be used to
92
- determine whether the dataset uses a join, either explicitly via
93
- JOIN or implicitly via multiple FROM tables.
94
-
95
- * The Dataset#unqualified_column_for helper method has been added,
96
- returning the unqualified version of a possibly qualified column.
97
-
98
- * The composition and serialization plugins now support validations
99
- on the underlying columns. Previously, they didn't update the
100
- underlying columns until after validations were performed. This
101
- works better when using the auto_validations plugin.
102
-
103
- * The class_table_inheritance plugin now uses JOIN ON instead of
104
- JOIN USING, which makes it work on all databases that Sequel
105
- supports. Additionally, the plugin now explicitly selects
106
- qualified columns from all of the tables.
107
-
108
- * The list plugin now adds an after_destroy hook that will renumber
109
- rows after the current row, similar to how moving existing values
110
- in the list works.
111
-
112
- * The pg_json extension is now faster when json column value is a
113
- plain string, number, true, false, or nil, if the underlying json
114
- library handles such values natively.
115
-
116
- * External jdbc, odbc, and do subadapters can now be loaded
117
- automatically without requiring them first, assuming proper
118
- support in the external subadapter.
119
-
120
- * When using create_table on MySQL, correctly handle the :key
121
- option to when calling foreign_key with a column reference.
122
-
123
- * On Oracle, use all_tab_cols instead of user_tab_cols for getting
124
- default values when parsing the schema. This makes it work if the
125
- user does not own the table.
126
-
127
- * On Oracle, use all_tables and all_views for Database#tables and
128
- Database#views. This works better for users with limited rights.
129
-
130
- * Additional disconnect errors are now recognized in the postgres and
131
- jdbc/mysql adapters.
132
-
133
- * Sequel::Model now uses copy constructors (e.g. initialize_copy)
134
- instead of overriding #dup and #clone.
135
-
136
- * The rake default task now runs plugin specs in addition to
137
- core and model specs.
138
-
139
- = bin/sequel Improvements
140
-
141
- * Add the sequel lib directory to the front of the load path
142
- instead of the end, fixing cases where you end up requiring an
143
- old version of the sequel gem (e.g. by using sequel_pg).
144
-
145
- * Add the sequel lib directory as an absolute path, fixing cases
146
- where you later change the current directory.
147
-
148
- * Require sequel later in the code, so that bin/sequel -h doesn't
149
- need to require sequel, and full backtrace is not printed if
150
- requiring sequel raises an error (unless -t is used).
151
-
152
- * If an exception is raised, put a newline between the exception
153
- message and backtrace.
154
-
155
- * Don't allow usage of -C with any of -cdDmS.
156
-
157
- * If sequel -v is given along with a database or code string to
158
- execute, print the Sequel version but also continue, similar
159
- to how ruby -v works.
160
-
161
- = Backwards Compatibility
162
-
163
- * The switch from JOIN ON to JOIN USING in the
164
- class_table_inheritance can break certain usage, such as querying
165
- using unqualified primary key. Users should switch to using a
166
- qualified primary key instead.
167
-
168
- * Calling Dataset#returning when the underlying database does not
169
- support it now raises an Error.