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,92 +0,0 @@
1
- = New Features
2
-
3
- * Sequel now supports Sybase SQLAnywhere, via the sqlanywhere and
4
- jdbc/sqlanywhere adapters.
5
-
6
- * The filter by associations support now handles cases where the
7
- association has :conditions or a block (as long as the block
8
- does not rely on instance-specific behavior). This allows
9
- you to handle the following:
10
-
11
- Album.many_to_many :popular_tags, :class=>:Tag do |ds|
12
- ds.where{tags__popularity > 9000}
13
- end
14
- Album.where(:popular_tags=>[Tag[1], Tag[2]])
15
-
16
- This will return all albums whose popular_tags would include
17
- at least one of those two tags. Previously, the block would
18
- be ignored, returning albums containing one those tags even if
19
- the tags weren't popular.
20
-
21
- * A table_select plugin has been added that changes the default
22
- selection for models from * to table.*. This is useful for
23
- people who want ActiveRecord-like behavior instead of SQL-like
24
- behavior, where joining tables doesn't automatically include
25
- columns in the other table.
26
-
27
- This can fix issues where joining another table that has columns
28
- with the same name as columns in the model table without
29
- specifying an explicit selection results in model objects being
30
- returned where the values in the model object are the values
31
- from the joined table instead of the model table.
32
-
33
- * Dataset#offset has been added, for specifying offset separately
34
- from limit. Previous this was possible via:
35
-
36
- ds.limit(nil, offset)
37
-
38
- but this is a friendlier API.
39
-
40
- * The jdbc adapter now has support for foreign key parsing. This
41
- is used if there is no specific support for the underlying
42
- database.
43
-
44
- * Foreign key parsing is now supported on Oracle.
45
-
46
- = Other Improvements
47
-
48
- * Association add_*/remove_*/remove_all_* methods for
49
- pg_array_to_many associations now work on unsaved model objects.
50
-
51
- * In the constraint_validations extension, deletes from the
52
- metadata table are now processed before inserts, so that dropping
53
- an existing constraint and readding a constraint with the same
54
- name now works correctly.
55
-
56
- * Cloning an association now copies the :eager_block option
57
- correctly from the source association if it was passed as
58
- the block to the source association method.
59
-
60
- * Cloning a cloned association now copies the block for the
61
- association.
62
-
63
- * The descendants method in the tree plugin no longer modifies an
64
- array it is iterating over.
65
-
66
- * The jdbc/postgresql adapter now supports PostgreSQL-specific types,
67
- with pretty much the same support as the postgres adapter. When
68
- using the pg_* extensions, the dataset will now handle the
69
- PostgreSQL types correctly and return instances of the correct
70
- Ruby classes (e.g. hstore is returned as Sequel::Postgres::HStore).
71
-
72
- You should no longer need to use the typecast_on_load or
73
- pg_typecast_on_load plugins when using model objects that use these
74
- types when using the jdbc/postgresql adapter.
75
-
76
- * Offset emulation on Oracle now handles cases where selected
77
- columns can't be ordered.
78
-
79
- * Offset emulation on DB2 no longer automatically orders on all
80
- columns if the dataset itself is unordered.
81
-
82
- * Types containing spaces are now returning correctly when
83
- parsing the schema in the oracle adapter.
84
-
85
- * Database#tables no longer returns tables in the recycle bin on
86
- Oracle.
87
-
88
- * add_foreign_key now works correctly on HSQLDB, by splitting the
89
- column addition and constraint addition into two separate
90
- statements.
91
-
92
- * add_primary_key now works correctly on H2.
@@ -1,34 +0,0 @@
1
- = New Features
2
-
3
- * An mssql_optimistic_locking plugin has been added. This is similar
4
- to the regular optimistic_locking plugin, but instead of using an
5
- integer lock column, it uses a timestamp/rowversion lock column.
6
-
7
- * Database#create_table with the :temp=>true option on PostgreSQL now
8
- supports an :on_commit option. This option can be set to :drop or
9
- :delete_rows to either drop or empty the temporary table on
10
- transaction commit.
11
-
12
- = Other Improvements
13
-
14
- * Dataset#insert no longer errors on PostgreSQL if the related table
15
- is a placeholder literal string.
16
-
17
- * Unique constraints are now copied when emulating alter_table
18
- operations on SQLite.
19
-
20
- * Clob column values are no longer returned as SQL::Blob instances
21
- by the db2 and ibmdb adapters unless use_clob_as_blob is true.
22
-
23
- * SQL::Blob objects now work correctly as prepared statement
24
- arguments in the jdbc/db2 adapter if use_clob_as_blob is false.
25
-
26
- = Backwards Compatibility
27
-
28
- * The Model.primary_key array for models with composite keys is now
29
- frozen.
30
-
31
- * On DB2, use_clob_as_blob now defaults to false instead of true.
32
-
33
- * Sequel no longer uses RubyForge. The Sequel website is now located
34
- at http://sequel.jeremyevans.net.
@@ -1,30 +0,0 @@
1
- = New Features
2
-
3
- * Database#call_mssql_sproc is now available for calling
4
- stored procedures on Microsoft SQL Server, including the use
5
- of output parameters.
6
-
7
- * The Database#{commit,rollback}_prepared_transaction methods now
8
- support a :server option for the server on which to operate.
9
-
10
- = Other Improvements
11
-
12
- * On Microsoft SQL Server 2012, the native OFFSET/FETCH support
13
- is now used for offsets, instead of emulating support via the
14
- ROW_NUMBER window function.
15
-
16
- * Eager loading is now skipped when doing eager(...).naked.all on
17
- a model dataset, instead of raising an error. This can fix issues
18
- when the eager_each plugin is used.
19
-
20
- * A couple additional disconnection errors are now detected in the
21
- jdbc/postgresql adapter.
22
-
23
- * The tinytds adapter now handles returning rows when the fields
24
- are not immediately available.
25
-
26
- * RuntimeErrors raised by oci8 are now handled correctly in the
27
- oracle adapter.
28
-
29
- * Sequel's specs now work with RSpec 3, while still running
30
- correctly on RSpec 1.3 and 2.
@@ -1,103 +0,0 @@
1
- = New Features
2
-
3
- * Alternatives for the more complex virtual row method calls have
4
- been added:
5
-
6
- # Window Functions using SQL::Function#over
7
- # before: select{sum(:over, :args=>:col1, :partition=>:col2){}}
8
- select{sum(:col1).over(:partition=>:col2)}
9
-
10
- # count(*) using SQL::Function#*
11
- # before: select{count(:*){}}
12
- select{count{}.*}
13
-
14
- # count(distinct col) using SQL::Function#distinct
15
- # before: select{count(:distinct, :col){}}
16
- select{count(:col).distinct}
17
-
18
- Additionally, schema qualified functions are now supported via
19
- SQL::QualifiedIdentifier#function, and quoted functions are now
20
- supported via SQL::Identifier#function on some databases:
21
-
22
- # "func"("col")
23
- select{func.function(:col)}
24
-
25
- # "schema"."func"("col1")
26
- select{schema__func.function(:col1)}
27
-
28
- If the database does not support quoting function names, then
29
- Sequel will not quote them.
30
-
31
- * An update_or_create plugin has been added, for updating a matching
32
- object if one exists, or creating an object if it does not. For
33
- example, the following code will update the number of copies sold
34
- for album with the name 'Hello', or it will create an album with
35
- the name 'Hello' and 1000 number of copies sold:
36
-
37
- Album.plugin :update_or_create
38
- Album.update_or_create(:name=>'Hello') do |album|
39
- album.num_copies_sold = 1000
40
- end
41
-
42
- You can also use a shorter form of this, with two hashes:
43
-
44
- Album.update_or_create({:name=>'Hello'}, {:num_copies_sold=>1000})
45
-
46
- This plugin also adds a method named find_or_new, which does the
47
- same thing as update_or_create, except it doesn't persist any
48
- changes.
49
-
50
- * A :raise_on_save_failure option has been added for one_to_many,
51
- pg_array_to_many, and many_to_pg_array associations. This mirrors
52
- the Model.raise_on_save_failure setting, and if set to false, it
53
- will make the add/remove methods return nil instead of raising
54
- an error if there is a validation/hook error when saving the
55
- associated record.
56
-
57
- * The validates_unique validation in validation_helpers now supports a
58
- :dataset option to provide the base dataset to use to check
59
- uniqueness. This is useful when the model itself uses a filtered
60
- dataset, but the unique index in the database is on an unfiltered
61
- dataset.
62
-
63
- The auto_validations plugin uses this option to ensure that unique
64
- validations are setup correctly in subclasses using single table
65
- inheritance.
66
-
67
- = Other Improvements
68
-
69
- * Sequel now automatically rolls back transactions in killed threads
70
- on ruby 2.0+. It is still impossible to do so on ruby 1.9.
71
-
72
- * In the instance_hooks plugin, validation instance hooks are now
73
- not cleared until after a successful save.
74
-
75
- * Composite unique key constraint violations are now recognized
76
- and raised as Sequel::UniqueConstraintViolation on SQLite.
77
-
78
- * Primary key unique constraint violations are now recognized and
79
- and raised as Sequel::UniqueConstraintViolation on Microsoft
80
- SQL Server and SQLAnywhere.
81
-
82
- * If an exception occurs when using a cursor in the postgres adapter,
83
- and an exception also occurs when closing the cursor when cleaning
84
- up, the initial exception is now raised.
85
-
86
- * You can now get tables in a specific schema in the jdbc adapter
87
- using the :schema option to Database#tables. This was already
88
- supported in most jdbc subadapters because they implement #tables
89
- using database specific code instead of looking at the JDBC
90
- metadata, but it should now work for all jdbc subadapters.
91
-
92
- * Sequel::SQLTime#to_s is now defined and returns a string in
93
- HH:MM:SS format (leaving off the date).
94
-
95
- = Backwards Compatibility
96
-
97
- * The odbc adapter's :driver option is no longer deprecated, as reports
98
- were received that it still works.
99
-
100
- * If you were re-adding instance validation hooks using instance_hooks
101
- after a save failure, and then retrying the save, you may now end up
102
- with duplicate validations. You no longer need to re-add validation
103
- hooks unless the object was saved successfully.
@@ -1,175 +0,0 @@
1
- = New Features
2
-
3
- * A one_through_one association type has been added. This is similar
4
- to the many_to_many association type in that it uses a join table,
5
- but it returns a single record instead of an array of records.
6
- This is designed for cases where the foreign key in the join table
7
- that references the current table has a unique constraint, or where
8
- you want to use an order to just pick the first matching record.
9
-
10
- Similarly, the many_through_many plugin now also offers a
11
- one_through_many association.
12
-
13
- * An association_join method has been added to model datasets, for
14
- setting up joins based on associations. This basically does the
15
- same join that eager_graph would do, but does not make the other
16
- changes that eager_graph makes.
17
-
18
- Unlike eager_graph (which uses LEFT OUTER JOINs by default),
19
- association_join uses INNER JOINs, but there are also
20
- association_*_join methods (e.g. association_left_join) for
21
- using different join types.
22
-
23
- Similar to eager_graph, you can use cascading of associations or
24
- multiple associations.
25
-
26
- Album.association_join(:artist, :tracks)
27
- Artist.association_left_join(:albums=>:tracks)
28
-
29
- * Dataset#eager_graph_with_options has been added for model
30
- datasets. It currently supports a :join_type option, for
31
- overriding the type of join to use on a per-call basis, as well
32
- as a :limit_strategy option. The API is similar to eager_graph,
33
- except that the associations to eagerly load are passed in as
34
- a single argument, and it takes an options hash.
35
-
36
- The :limit_strategy option works similarly to the
37
- :eager_limit_strategy option when eagerly loading. If set to
38
- true and the database supports window functions, it will join
39
- the current dataset to a subquery that uses a window function
40
- to correctly restrict the join to only those objects that fall
41
- within the association's limit/offset.
42
-
43
- The :limit_strategy option is not on by default. It is possible
44
- for it to perform significantly worse than the default strategy
45
- (which uses array slicing in ruby). The :limit_strategy
46
- significantly changes the SQL used, and can change the results
47
- of the query if any filters/orders related to the association
48
- are used.
49
-
50
- It's recommended you only use the :limit_strategy option if you
51
- are experiencing a bottleneck and you have benchmarked that it
52
- is faster and still produces the desired results.
53
-
54
- Artist.eager_graph_with_options(:first_10_albums,
55
- :limit_strategy=>true)
56
- # SELECT artists.id, artists.name,
57
- # first_10_albums.id AS first_10_albums_id,
58
- # first_10_albums.name AS first_10_albums_name,
59
- # first_10_albums.artist_id,
60
- # first_10_albums.release_date
61
- # FROM artists
62
- # LEFT OUTER JOIN (
63
- # SELECT id, name, artist_id, release_date
64
- # FROM (
65
- # SELECT *, row_number() OVER (PARTITION BY tracks.album_id)
66
- # AS x_sequel_row_number_x
67
- # FROM albums
68
- # ) AS t1 WHERE (x_sequel_row_number_x <= 10)
69
- # ) AS first_10_albums ON (first_10_albums.artist_id = artists.id)
70
-
71
- * Dataset#full_text_search on PostgreSQL now supports :plain and
72
- :phrase options. :plain takes the search terms as a single
73
- string, and searches for rows where all terms are used.
74
- :phrase is similar to :plain, but also adds a substring search
75
- to ensure that the string given appears verbatim in the text.
76
-
77
- * A :graph_order association option has been added, for using a
78
- different order when using eager_graph. This is mostly
79
- designed for cases where :order should be qualified in other
80
- cases, but using a qualification breaks eager_graph because the
81
- correct qualifier is not known until runtime.
82
-
83
- * SQL::AliasedExpression#alias has been added as an alias for #aliaz.
84
-
85
- = Other Improvements
86
-
87
- * Sequel will now automatically use an eager limit strategy for
88
- *_one associations that use an :order option. For associations
89
- that are truly one-to-one, an :order option is not needed, so it
90
- only makes sense to have an :order option if the association
91
- could theoretically return multiple results (in which case an
92
- eager limit strategy is helpful).
93
-
94
- * The queries that Sequel uses to filter by associations when
95
- those associations have conditions are now simpler and easier
96
- for the database to execute.
97
-
98
- * The queries that Sequel uses for dataset associations now handle
99
- cases where unqualified identifiers were used in the receiving
100
- dataset that would be made ambiguous by a join.
101
-
102
- * A limit strategy is now used when filtering by associations if
103
- the association has a limit and the database supports window
104
- functions. This allows Sequel to setup a correct filter in
105
- such cases.
106
-
107
- Artist.where(:first_10_albums=>Album[1]).all
108
- # SELECT *
109
- # FROM artists
110
- # WHERE (artists.id IN (
111
- # SELECT albums.artist_id
112
- # FROM albums
113
- # WHERE ((albums.artist_id IS NOT NULL) AND (albums.id IN (
114
- # SELECT id FROM (
115
- # SELECT albums.id, row_number() OVER
116
- # (PARTITION BY albums.artist_id ORDER BY release_date)
117
- # AS x_sequel_row_number_x
118
- # FROM albums
119
- # ) AS t1
120
- # WHERE (x_sequel_row_number_x <= 10)
121
- # )) AND (albums.id = 1))))
122
-
123
- * A limit strategy is now used in the dataset_associations plugin
124
- if the association has a limit and the database supports window
125
- functions. This makes the resulting datasets return correct
126
- results.
127
-
128
- Artist.first_10_albums
129
- # SELECT *
130
- # FROM albums
131
- # WHERE ((albums.artist_id IN (
132
- # SELECT artists.id FROM artists)
133
- # ) AND (albums.id IN (
134
- # SELECT id FROM (
135
- # SELECT albums.id, row_number() OVER
136
- # (PARTITION BY albums.artist_id ORDER BY release_date)
137
- # AS x_sequel_row_number_x
138
- # FROM albums
139
- # ) AS t1
140
- # WHERE (x_sequel_row_number_x <= 10)
141
- # )))
142
- # ORDER BY release_date
143
-
144
- * You can now pass symbols with embedded qualifiers or aliases,
145
- as well as SQL::Identifier, SQL::QualifiedIdentifier, and
146
- SQL::AliasedExpression objects as the first argument to
147
- Dataset#graph.
148
-
149
- * The nested_attributes plugin now automatically handles presence
150
- validations on foreign keys when creating associated objects.
151
- It now sets the foreign key value (or a placeholder value)
152
- before validating such objects.
153
-
154
- * Offsets on *_one associations are now respected when using
155
- eager_graph.
156
-
157
- * eager graphing *_many associations with offsets no longer breaks
158
- if there are no associated results.
159
-
160
- * Database#register_array_type in the pg_array extension now works
161
- correctly if there is no existing scalar conversion proc for
162
- the type.
163
-
164
- * Unique, foreign key, and not null constraint violations are now
165
- recognized correctly on SQLite 3.8.2+.
166
-
167
- * The odbc adapter now returns fractional seconds in timestamps.
168
-
169
- * The obdc/mssql adapter now inputs timestamps with 3 decimal
170
- places.
171
-
172
- = Backwards Compatibility
173
-
174
- * The private Model.apply_window_function_eager_limit_strategy
175
- method has been removed.
@@ -1,190 +0,0 @@
1
- = Performance Enhancements
2
-
3
- * Dataset::PlaceholderLiteralizer has been added as an optimization
4
- framework. This allows you to record changes to a given dataset
5
- using placeholder arguments, and later quickly execute the query
6
- providing values for the placeholders. This is similar in idea
7
- to prepared statements, except that the SQL for each query can
8
- change depending on the values for the placeholders.
9
-
10
- Using this optimization framework, generating the SQL for query
11
- is about 3x faster, and since SQL generation time is a significant
12
- portion of total time for simple queries, simple queries can
13
- execute up to 50% faster.
14
-
15
- There are two APIs for this optimization framework. There is a
16
- lower level dataset API:
17
-
18
- loader = Sequel::Dataset::PlaceholderLiteralizer.
19
- loader(DB[:items]) do |pl, ds|
20
- ds.where(:id=>pl.arg).exclude(:name=>pl.arg).limit(1)
21
- end
22
-
23
- loader.first(1, "foo")
24
- # SELECT * FROM items WHERE ((id = 1) AND (name != 'foo')) LIMIT 1
25
-
26
- loader.first([1, 2], %w"foo bar")
27
- # SELECT * FROM items WHERE ((id IN (1, 2)) AND
28
- # (name NOT IN ('foo', 'bar'))) LIMIT 1
29
-
30
- There is also a higher level model API (Model.finder):
31
-
32
- class Item < Sequel::Model
33
- # Given class method that returns a dataset
34
- def self.by_id_and_not_name(id, not_name)
35
- where(:id=>id).exclude(:name=>not_name)
36
- end
37
-
38
- # Create optimized method that returns first value
39
- finder :by_id_and_not_name
40
- end
41
-
42
- # Call optimized method
43
- Album.first_by_id_and_not_name(1, 'foo')
44
- # SELECT * FROM items WHERE ((id = 1) AND (name != 'foo')) LIMIT 1
45
-
46
- Model.finder defaults to creating a method that returns the first
47
- matching row, but using the :type option you can create methods
48
- that call each, all, or get. There is also an option to choose the
49
- method name (:name), as well as one to specify the number of
50
- arguments to use if the method doesn't take a fixed number
51
- (:arity).
52
-
53
- Finally, Model.find, .first, and .first! now automatically use an
54
- optimized finder if given a single argument. Model.[] uses an
55
- optimized finder if given a single hash, and Model.[], .with_pk,
56
- and .with_pk! use an optimized finder if the model has a composite
57
- primary key. In all of these cases, these methods are about 50%
58
- faster than before.
59
-
60
- * The pure-ruby PostgreSQL array parser that ships with Sequel has
61
- been replaced with a strscan-based parser. This parser avoids
62
- O(n^2) performance for arrays with multibyte strings, and in general
63
- is much faster. Parsing an array with a single string with 100,000
64
- multibyte characters is about 1000x faster, and now about half the
65
- speed of the C implementation in sequel_pg.
66
-
67
- * Dataset#paged_each now has a :strategy=>:filter option that
68
- dramatically improves performance, especially if the columns
69
- being ordered by are indexed.
70
-
71
- Unfortunately, there are enough corner cases to this approach
72
- that it cannot be used by default. At the least, the dataset
73
- needs to be selecting the columns it is ordering by, not aliasing
74
- the columns it is ordering by in the SELECT clause, not have
75
- NULLs in any of the columns being ordered by, and not itself use
76
- a limit or offset.
77
-
78
- If you are ordering by expressions that are not simple column
79
- values, you can provide a :filter_value option proc that takes the
80
- last retrieved row and array of order by expressions, and returns
81
- an array of values in the last retrieved row for those order by
82
- expressions.
83
-
84
- * In the postgres adapter, Dataset#paged_each now automatically uses
85
- a cursor for improved performance.
86
-
87
- * In the mysql2 adapter, Dataset#paged_each now automatically uses
88
- streaming for improved performance, if streaming is supported.
89
-
90
- * Dataset#with_sql_{each,all,first,single_value,insert,update}
91
- have been added. These methods take specific SQL and execute
92
- it on the database, returning the appropriate value. They
93
- are significantly faster than the previous approach of
94
- with_sql(SQL).{each,all,first,single_value,insert,update},
95
- as they don't require cloning the dataset.
96
-
97
- = New Features
98
-
99
- * Database#create_join_table! and #create_join_table? have been added,
100
- for consistency with #create_table! and #create_table?.
101
-
102
- * A :hold option has been added to Dataset#use_cursor in the postgres
103
- adapter, which uses WITH HOLD in the query, allowing for usage of
104
- the cursor outside the enclosing transaction. When :hold is used,
105
- Sequel does not automatically use a transaction around the cursor
106
- call.
107
-
108
- * Dataset#where_current_of has been added to the postgres adapter,
109
- for updating rows based on a cursor's current position. This can
110
- be used to update a large dataset where new values depend on
111
- some ruby method, without keeping all rows in memory.
112
-
113
- ds = DB[:huge_table]
114
- ds.use_cursor(:rows_per_fetch=>1).each do |row|
115
- ds.where_current_of.update(:column=>ruby_method(row))
116
- end
117
-
118
- * A current_datetime_timestamp extension has been added, for
119
- creating Time/DateTime instances that are literalized as
120
- CURRENT_TIMESTAMP. When the dataset uses this extension, models
121
- that use the touch and timestamps plugins will use
122
- CURRENT_TIMESTAMP for the timestamps.
123
-
124
- * The jdbc adapter now supports a :driver option, useful when
125
- Sequel doesn't have direct support for the underlying driver, and
126
- where java.sql.DriverManager.getConnection does not work
127
- correctly due to Java class loading issues.
128
-
129
- = Other Improvements
130
-
131
- * Multiple corner cases in Dataset#eager_graph have been fixed.
132
-
133
- * Calling Dataset#columns when using the eager_each plugin no
134
- longer triggers eager loading.
135
-
136
- * Database#column_schema_to_ruby_default is now a public method
137
- in the schema_dumper extension.
138
-
139
- * When validating associated objects for one_to_many and one_to_one
140
- associations in the nested_attributes plugin, don't remove column
141
- values if the association's foreign key is the associated model's
142
- primary key.
143
-
144
- * On PostgreSQL, Dataset#disable_insert_returning has been added
145
- back. This disables the automatic use of RETURNING for INSERTs
146
- for the dataset. This is necessary in cases where INSERT
147
- RETURNING doesn't work, such as PostgreSQL <8.2 (or PostgreSQL
148
- variants that forked before 8.2), or when using partitioning
149
- with trigger functions, or conditional rules.
150
-
151
- Note that if you use disable_insert_returning, insert will not
152
- return the autoincremented primary key. You need to call
153
- currval or lastval manually using the same connection to get
154
- the value, or use nextval to get the value to use before
155
- inserting.
156
-
157
- * The pg_array extension now uses the correct database type when
158
- typecasting values for smallint, oid, real, character, and varchar
159
- arrays. Previously, Sequel did not use the correct database type
160
- in some cases (e.g. text[] for a varchar[]), which resulted in
161
- errors if the value was used in a filter expression.
162
-
163
- * Additional unique constraint violations are now recognized on
164
- SQLite.
165
-
166
- * Check constraint violations are now recognized on SQLite >=3.8.2.
167
-
168
- * Adapters that emulate bitwise operators now do so using an append
169
- only design, similar to how all other queries are built in Sequel.
170
-
171
- = Backwards Compatibility
172
-
173
- * In some cases Sequel no longer adds superfluous parentheses when
174
- constructing SQL strings. If you are testing for specific SQL,
175
- this can cause test failures.
176
-
177
- * The pg_array extension no longer recognizes the :typecast_method
178
- option when registering an array type. The option allowed reuse
179
- of an existing typecast method, but as that results in an incorrect
180
- type at the database level, the option was fundementally broken.
181
-
182
- * The internals of the PostgreSQL array parser have changed. If you
183
- were relying on them, you'll need to update your code.
184
-
185
- * Dataset#complex_expression_arg_pairs private method now returns
186
- nested expression objects instead of an already literalized string
187
- in some cases. Custom adapters that call this method will probably
188
- need to be changed. It's recommended that such adapters switch to
189
- using the new Dataset#complex_expression_emulate_append method if
190
- possible.