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,671 +0,0 @@
1
- = New PostgreSQL Extensions
2
-
3
- * A pg_array extension has been added, supporting PostgreSQL's
4
- numeric and string array types. Both single dimensional and
5
- multi-dimensional array types are supported. Array values are
6
- returned as instances of Sequel::Postgres::PGArray, which is a
7
- delegate class of Array. You can turn an existing array into
8
- a PGArray using Array#pg_array.
9
-
10
- If you are using arrays in model objects, you need to load
11
- support for that:
12
-
13
- DB.extend Sequel::Postgres::PGArray::DatabaseMethods
14
-
15
- This makes schema parsing and typecasting of array columns work
16
- correctly.
17
-
18
- This extension also allows you to use PGArray objects and arrays
19
- in bound variables when using the postgres adapter with pg.
20
-
21
- * A pg_hstore extension has been added, supporting PostgreSQL's hstore
22
- type, which is a simple hash with string keys and string or NULL
23
- values. hstore values are retrieved as instances of
24
- Sequel::Postgres::HStore, which is a delegate class of Hash. You
25
- can turn an existing hash into an hstore using Hash#hstore.
26
-
27
- If you are using hstores in model objects, you need to load
28
- support for that:
29
-
30
- DB.extend Sequel::Postgres::HStore::DatabaseMethods
31
-
32
- This makes schema parsing and typecasting of hstore columns work
33
- correctly.
34
-
35
- This extension also allows you to use HStore objects and hashes
36
- in bound variables when using the postgres adapter with pg.
37
-
38
- * A pg_array_ops extension has been added, making it easier to call
39
- PostgreSQL array operators and functions using plain ruby code.
40
- Examples:
41
-
42
- a = :array_column.pg_array
43
- a[1] # array_column[1]
44
- a[1][2] # array_column[1][2]
45
- a.push(1) # array_column || 1
46
- a.unshift(1) # 1 || array_column
47
- a.any # ANY(array_column)
48
- a.join # array_to_string(array_column, '', NULL)
49
-
50
- If you are also using the pg_array extension, you can turn
51
- a PGArray object into a query object, which allows you to run
52
- operations on array literals:
53
-
54
- a = [1, 2].pg_array.op
55
- a.push(3) # ARRAY[1,2] || 3
56
-
57
- * A pg_hstore_ops extension has been added, making it easier to call
58
- PostgreSQL hstore operators and functions using plain ruby code.
59
- Examples:
60
-
61
- h = :hstore_column.hstore
62
- h['a'] # hstore_column -> 'a'
63
- h.has_key?('a') # hstore_column ? 'a'
64
- h.keys # akeys(hstore_column)
65
- h.to_array # hstore_to_array(hstore_column)
66
-
67
- If you are also using the pg_hstore extension, you can turn
68
- an HStore object into a query object, which allows you to run
69
- operations on hstore literals:
70
-
71
- h = {'a' => 'b'}.hstore.op
72
- h[a] # '"a"=>"b"'::hstore -> 'a'
73
-
74
- * A pg_auto_parameterize extension has been added for automatically
75
- using bound variables for all queries. For example, it can take
76
- code such as:
77
-
78
- DB[:table].where(:column=>1)
79
-
80
- and do:
81
-
82
- SELECT * FROM table WHERE column = $1; -- [1]
83
-
84
- Note that automatically parameterizing queries is not generally
85
- faster unless the bound variables are large (i.e. long text/bytea
86
- values). Also, there are multiple corner cases when automatically
87
- parameterizing queries, though most can be worked around by
88
- adding explicit casts.
89
-
90
- * A pg_statement_cache extension has been added that works with the
91
- pg_auto_parameterize extension for automatically caching prepared
92
- statements and reusing them when using the postgres adapter with
93
- pg. The combination of these two extensions makes it possible to
94
- take an entire Sequel application and turn most or all of the
95
- queries into prepared statements.
96
-
97
- Note that these two extensions do not necessarily improve
98
- performance. For simple queries, they actually hurt performance.
99
- They do help for complex queries, but in all cases, it's faster
100
- to use Sequel's prepared statements API manually.
101
-
102
- = Other New Extensions
103
-
104
- * A query_literals extension has been added that makes the select,
105
- group, and order methods operate similar to the filter methods in
106
- that if they are given a regular string as their first argument,
107
- they treat it as a literal string, with additional arguments, if
108
- any, used as placeholder values. This extension allows you to
109
- write code such as:
110
-
111
- DB[:table].select('a, b, ?' 2).group('a, b').order('c')
112
- # Without query_literals:
113
- # SELECT 'a, b, ?', 2 FROM table GROUP BY 'a, b' ORDER BY 'c'
114
- # With query_literals:
115
- # SELECT a, b, 2 FROM table GROUP BY a, b ORDER BY c
116
-
117
- Sequel's default handling in this case is to use literal strings,
118
- which is generally not desired and on some databases not even
119
- valid syntax. In general, you'll probably want to use this
120
- extension for all of a database's datasets, which you can do via:
121
-
122
- Sequel.extension :query_literals
123
- DB.extend_datasets(Sequel::QueryLiterals)
124
-
125
- The next major version of Sequel (4.0.0) will probably integrate
126
- this extension into the core library.
127
-
128
- * A select_remove extension has been added that adds
129
- Dataset#select_remove, for removing selected columns/expressions
130
- from a dataset:
131
-
132
- ds = DB[:table]
133
- # Assume table has columns a, b, and c
134
-
135
- ds.select_remove(:c)
136
- # SELECT a, b FROM table
137
-
138
- # Removal by column alias
139
- ds.select(:a, :b___c, :c___b).select_remove(:c)
140
- # SELECT a, c AS b FROM table
141
-
142
- # Removal by expression
143
- ds.select(:a, :b___c, :c___b).select_remove(:c___b)
144
- # SELECT a, b AS c FROM table
145
-
146
- This method makes it easier to select all columns except for the
147
- columns given. This is common in cases where a table has a few
148
- large columns that are expensive to retrieve. This method does
149
- have some corner cases, so read the documentation before using it.
150
-
151
- * A schema_caching extension has added that makes it possible for
152
- Database instances to dump the cached schema metadata to a
153
- marshalled file, and load the cached schema metadata from the file.
154
- This can be significantly faster than reparsing the schema from the
155
- database, especially for databases with high latency.
156
-
157
- bin/sequel -S has been added to dump the schema for the given
158
- database to a file, and DB.load_schema_cache(filename) can be used
159
- to populate the schema cache inside your application. This should
160
- be done after creating the Database object but before loading your
161
- model files.
162
-
163
- Note that Sequel does no checking to ensure that the cached schema
164
- currently reflects the state of the database. That is up to the
165
- application.
166
-
167
- * A null_dataset extension has been added, which adds
168
- Dataset#nullify for creating a dataset that will not issue a
169
- database query. It implements the null object pattern for
170
- datasets, and is probably most useful in methods that must return
171
- a dataset, but can determine that such a dataset will never return
172
- a row.
173
-
174
- = New Plugins
175
-
176
- * A static_cache plugin has been added, allowing you to cache a model
177
- statically. This plugin is useful for models whose tables do not
178
- change while the application is running, such as lookup tables.
179
- When using this plugin, the following methods will no longer require
180
- queries:
181
-
182
- * Primary key lookups (e.g. Model[1])
183
- * Model.all calls
184
- * Model.each calls
185
- * Model.map calls without an argument
186
- * Model.to_hash calls without an argument
187
-
188
- The statically cached model instances are frozen so they are not
189
- accidently modified.
190
-
191
- * A many_to_one_pk_lookup plugin has been added that changes the
192
- many_to_one association retrieval code to do a simple primary
193
- key lookup on the associated class in most cases. This results
194
- in significantly better performance, especially if the
195
- associated model is using a caching plugin (either caching
196
- or static_cache).
197
-
198
- = Core Extension Replacements
199
-
200
- * Most of Sequel's core extensions now have equivalent methods defined
201
- on the Sequel module:
202
-
203
- :column.as(:alias) -> Sequel.as(:column, :alias)
204
- :column.asc -> Sequel.asc(:column)
205
- :column.desc -> Sequel.desc(:column)
206
- :column.cast(Integer) -> Sequel.cast(:column, Integer)
207
- :column.cast_numeric -> Sequel.cast_numeric(:column)
208
- :column.cast_string -> Sequel.cast_string(:column)
209
- :column.extract(:year) -> Sequel.extract(:year, :column)
210
- :column.identifier -> Sequel.identifier(:column)
211
- :column.ilike('A%') -> Sequel.ilike(:column, 'A%')
212
- :column.like('A%') -> Sequel.like(:column, 'A%')
213
- :column.qualify(:table) -> Sequel.qualify(:table, :column)
214
- :column.sql_subscript(1) -> Sequel.subscript(:column, 1)
215
- :function.sql_function(1) -> Sequel.function(:function, 1)
216
- 'some SQL'.lit -> Sequel.lit('some SQL')
217
- 'string'.to_sequel_blob -> Sequel.blob('string')
218
- {:a=>1}.case(0) -> Sequel.case({:a=>1}, 0)
219
- {:a=>1}.sql_negate -> Sequel.negate(:a=>1)
220
- {:a=>1}.sql_or -> Sequel.or(:a=>1)
221
- [[1, 2]].sql_value_list -> Sequel.value_list([[1, 2]])
222
- [:a, :b].sql_string_join -> Sequel.join([:a, :b])
223
- ~{:a=>1} -> Sequel.~(:a=>1)
224
- :a + 1 -> Sequel.+(:a, 1)
225
- :a - 1 -> Sequel.-(:a, 1)
226
- :a * 1 -> Sequel.*(:a, 1)
227
- :a / 1 -> Sequel./(:a, 1)
228
- :a & 1 -> Sequel.&(:a, 1)
229
- :a | 1 -> Sequel.|(:a, 1)
230
-
231
- * You can now wrap any object in a Sequel expression using
232
- Sequel.expr. This is similar to the sql_expr extension, but
233
- without defining the sql_expr method on all objects:
234
-
235
- 1.sql_expr -> Sequel.expr(1)
236
-
237
- The sql_expr extension now just has Object#sql_expr call
238
- Sequel.expr.
239
-
240
- * Virtual Rows now have methods defined that handle the standard
241
- mathematical operators:
242
-
243
- select{|o| o.+(1, :a)} # SELECT (1 + a)
244
-
245
- the standard inequality operators:
246
-
247
- where{|o| o.>(2, :a)} # WHERE (2 > a)
248
-
249
- and the standard boolean operators:
250
-
251
- where{|o| o.&({:a=>1}, o.~(:b=>1))} # WHERE ((a = 1) AND (b != 1))
252
-
253
- Additionally, there is now direct support for creating literal
254
- strings in instance_evaled virtual row blocks using `:
255
-
256
- where{a > `some crazy SQL`} # WHERE (a > some crazy SQL)
257
-
258
- This doesn't override Kernel.`, since virtual rows use a BasicObject
259
- subclass. Previously, using ` would result in calling the SQL
260
- function named ` with the given string, which probably isn't valid
261
- syntax on most databases.
262
-
263
- * You can now require 'sequel/no_core_ext' to load Sequel without the
264
- core extensions. The previous way of setting the
265
- SEQUEL_NO_CORE_EXTENSIONS constant or environment variable before
266
- loading Sequel still works.
267
-
268
- * The core extensions have been moved from Sequel's core library into
269
- an extension that is loadable with Sequel.extension. This extension
270
- is still loaded by default for backwards compatibility. However,
271
- the next major version of Sequel will no longer load this extension
272
- by default (though it will still be available to load manually).
273
-
274
- * You can now check if the core extensions have been loaded by using
275
- Sequel.core_extensions?.
276
-
277
- = Foreign Keys in the Schema Dumper
278
-
279
- * Database#foreign_key_list has been added that gives an array of
280
- foreign key constraints on the table. It is currently implemented
281
- on MySQL, PostgreSQL, and SQLite, and may be implemented on other
282
- database types in the future. Each entry in the return array is
283
- a hash, with at least the following keys present:
284
-
285
- :columns :: An array of columns in the given table
286
- :table :: The table referenced by the columns
287
- :key :: An array of columns referenced (in the table specified by
288
- :table), but can be nil on certain adapters if the primary
289
- key is referenced.
290
-
291
- The hash may also contain entries for:
292
-
293
- :deferrable :: Whether the constraint is deferrable
294
- :name :: The name of the constraint
295
- :on_delete :: The action to take ON DELETE
296
- :on_update :: The action to take ON UPDATE
297
-
298
- * The schema_dumper extension now dumps foreign key constraints on
299
- databases that support Database#foreign_key_list. On such
300
- databases, dumping a schema migration will dump the tables in
301
- topological order, such that referenced tables always come before
302
- referencing tables.
303
-
304
- In case there is a circular dependency, Sequel breaks the
305
- dependency and adds separate foreign key constraints at the end
306
- of the migration. However, when a circular dependency is broken,
307
- the migration can probably not be migrated down.
308
-
309
- Foreign key constraints can also be dumped as a separate migration
310
- using Database#dump_foreign_key_migration, similar to how
311
- Database#dump_indexes_migration works.
312
-
313
- * When using bin/sequel -C to copy databases, foreign key constraints
314
- are now copied if the source database supports
315
- Database#foreign_key_list.
316
-
317
- = Other New Features
318
-
319
- * Dataset#to_hash_groups and #select_hash_groups have been added.
320
- These methods are similar to #to_hash and #select_hash in that they
321
- return a hash, but hashes returned by *_hash_groups methods have
322
- arrays of all matching values, unlike the *_hash methods which
323
- just use the last matching value. Example:
324
-
325
- DB[:table].all
326
- # => [{:a=>1, :b=>2}, {:a=>1, :b=>3}, {:a=>2, :b=>4}]
327
-
328
- DB[:table].to_hash(:a, :b)
329
- # => {1=>3, 2=>4}
330
-
331
- DB[:table].to_hash_groups(:a, :b)
332
- # => {1=>[2, 3], 2=>[4]}
333
-
334
- * Model#set_fields and #update_fields now accept :missing=>:skip and
335
- :missing=>:raise options, allowing them to be used in more cases.
336
- :missing=>:skip skips missing entries in the hash, instead of
337
- setting the field to the default hash value. :missing=>:raise
338
- raises an error for missing fields, similar to
339
- strict_param_setting = true. It's recommended that these options
340
- be used in new code in preference to #set_only and #update_only.
341
-
342
- * Database#drop_table? has been added, for dropping tables if they
343
- already exist. This uses DROP TABLE IF EXISTS on the databases that
344
- support it. Database#supports_drop_table_if_exists? has been added
345
- for checking whether the database supports that syntax.
346
-
347
- * Database#create_join_table has been added that allows easy
348
- creation of many_to_many join tables:
349
-
350
- DB.create_join_table(:album_id=>:albums, :artist_id=>:artists)
351
-
352
- This uses real foreign keys for both of the columns, uses a
353
- composite primary key of both of the columns, and adds an
354
- additional composite index of the columns in reverse order. The
355
- primary key and additional index should ensure that almost all
356
- operations on the join table can benefit from an index.
357
-
358
- In terms of customization, the values in the hash can be hashes
359
- themselves for column specific options, and an additional options
360
- hash can also be given to override some of the default settings.
361
-
362
- Database#drop_join_table also exists and takes the same options
363
- as create_join_table. It mostly exists to make it easy to
364
- reverse migrations that use create_join_table.
365
-
366
- * Model#freeze has been added that freezes a model such that it
367
- works correctly in a read-only state. Before, it used the standard
368
- Object#freeze, which broke some things that should work, and
369
- allowed changes that shouldn't be allowed (like modifying the
370
- instance's values).
371
-
372
- * ConnectionPool#all_connections has been added, which yields each
373
- available connection in the pool to the block. For threaded pools,
374
- it does not yield connections that are currently being used by
375
- other threads. When using this method, it is important to only
376
- operate on the yielded connection objects, and not make any
377
- modifications to the pool itself. The pool is also locked until
378
- the method returns.
379
-
380
- * ConnectionPool#after_connect= has been added, allowing you to
381
- change a connection pool's after_connect proc after instantiating
382
- the pool.
383
-
384
- * ConnectionPool#disconnection_proc= has been added, allowing you to
385
- change a connection pool's disconnection_proc after instantiating the
386
- pool.
387
-
388
- * A Model.cache_anonymous_models accessor has been added, and can be
389
- set to false to disable the caching of classes created by
390
- Sequel::Model(). This caching is only useful if you want to reload
391
- the model's file without getting a superclass mismatch. This
392
- setting is true by default for backwards compatibility, but may be
393
- changed to false in a later version, so you should manually set it to
394
- true if you are using code reloading.
395
-
396
- * Model.instance_dataset has been added for getting the dataset used
397
- for model instances (a naked dataset restricted to a single row).
398
-
399
- * Dataset#with_sql_delete has been added for running the given SQL
400
- string as a delete and returning the number of rows modified. It's
401
- designed as a replacement for with_sql(sql).delete, which is slower
402
- as it requires cloning the dataset.
403
-
404
- * The :on_update and :on_delete entries for foreign_key now accept
405
- string arguments which are used literally.
406
-
407
- * Prepared statement objects now have a log_sql accessor that can be
408
- turned on to log the entire SQL statement instead of just the
409
- prepared statement name.
410
-
411
- * Dataset#multi_replace has been added on MySQL. This is similar to
412
- multi_insert, but uses REPLACE instead of INSERT.
413
-
414
- * Dataset#explain has been added to MySQL. You can use an
415
- :extended=>true option to use EXPLAIN EXTENDED.
416
-
417
- * A Database#type_supported? method has been added on PostgreSQL to
418
- check if the database supports the given type:
419
-
420
- DB.type_supported?(:hstore)
421
-
422
- * Datatabase#reset_conversion_procs has been added to the postgres
423
- adapter, for use by extensions that modify the default conversion
424
- procs and want to have the database use the updated defaults.
425
-
426
- * A Database#convert_infinite_timestamps accessor has been added to
427
- the postgres adapter, allowing you to return infinite timestamps as
428
- nil, a string, or a float.
429
-
430
- * SQL::PlaceholderLiteralString objects can now use a placeholder
431
- array, where placeholder values are inserted between array elements.
432
- This is about 2.5-3x faster than using a string with ? placeholders,
433
- and allows usage of ? inside the array:
434
-
435
- Sequel.lit(["(", " ? ", ")"], 1, 2) # (1 ? 2)
436
-
437
- * SQL::Subscript#[] has been added for accessing members of a
438
- multi-dimensional array:
439
-
440
- Sequel.subscript(:column, 1)[2][3] # column[1][2][3]
441
-
442
- * SQL::Wrapper has been added for wrapping arbitrary objects in a
443
- Sequel expression object.
444
-
445
- * SQL::QualifiedIdentifier objects can now contain arbitrary Sequel
446
- expressions. Before, they could only contain a few expression
447
- types. This makes it easier to add extensions to support
448
- PostgreSQL row-valued types.
449
-
450
- = Performance Improvements
451
-
452
- * Model.[] when called with a primary key has been made about 110%
453
- faster for most models by avoiding cloning datasets.
454
-
455
- * Model.[] when called without arguments or with a single nil argument
456
- is much faster as it now returns nil immediately instead of issuing
457
- a database query.
458
-
459
- * Model#delete and Model#destroy have been made about 75% faster for
460
- most models by using a static SQL string.
461
-
462
- * Model.new is now twice as fast when passed an empty hash.
463
-
464
- * Model#set is now four times as fast when passed an empty hash.
465
-
466
- * Model#this has been made about 85% faster by reducing the number of
467
- dataset clones needed from 3 to 1.
468
-
469
- * Some proc activations have been removed, giving minor speedups when
470
- running on MRI.
471
-
472
- = Other Improvements
473
-
474
- * Database#uri and #url now return the connection string given
475
- to Sequel.connect. Previously, they tried to reconstruct the
476
- url using the database's options, but that didn't work well in
477
- corner cases.
478
-
479
- * Database#inspect now shows the URL and/or options given when
480
- connecting to the database. Previously, it showed the URL, or
481
- all of the databases options if constructing the URL raised an
482
- error.
483
-
484
- * Sequel no longer checks for prepared transactions support when
485
- using transactions unless a prepared transaction is specifically
486
- requested.
487
-
488
- * The schema utility dataset cached in the Database object is now
489
- reset if you use Database#extend_datasets, ensuring that the new
490
- value will use the given extension.
491
-
492
- * The prepared_statements* plugins now log the full SQL by default.
493
- Since the user doesn't choose the name of the prepared statements,
494
- it was often difficult to determine what SQL was actually run if
495
- you were only looking at a subsection of the SQL log.
496
-
497
- * The nested_attributes plugin's delete/remove support now works
498
- correctly when a false value is given for _delete/_remove and
499
- strict_param_setting is true.
500
-
501
- * The hook_class_methods and validation_class_methods plugins
502
- now work correctly when subclassing if the subclass attempts to
503
- create instances inside Model.inherited.
504
-
505
- * The caching plugin has been refactored. Model.cache_get_pk and
506
- cache_delete_pk have been added for retrieving/deleting from the
507
- cache by primary key. Model.cache_key is now a public method.
508
-
509
- * The typecast_on_load plugin now works correctly when saving
510
- new model objects when insert_select is supported.
511
-
512
- * In the sql_expr extension, nil.sql_expr is no longer treated as
513
- a boolean value. It is now treated as a value with generic type.
514
-
515
- * The postgres adapter no longer issues a query to map type names to
516
- type oids if no named conversion procs have been registered.
517
-
518
- * The postgres adapter now works around issues in ruby-pg by
519
- supporting fractional seconds for Time/DateTime values, and
520
- supporting SQL::Blob (bytea) values with embedded "\0" characters.
521
-
522
- * The postgres adapter now supports pre-defining the PG_NAMED_TYPES
523
- and PG_TYPES constants. This is so extensions can define them,
524
- so they don't have to load the postgres adapter file first. If
525
- extensions need to use these constants, they should do:
526
-
527
- PG_NAMED_TYPES = {} unless defined?(PG_NAMED_TYPES)
528
- PG_TYPES = {} unless defined?(PG_TYPES)
529
-
530
- That way they work whether they are loaded before or after the
531
- postgres adapter.
532
-
533
- * PostgreSQL 8.2-9.0 now correctly add the RETURNING clause when
534
- building queries. Sequel 3.31.0 added support for returning values
535
- from delete/update queries in PostgreSQL 8.2-9.0, but didn't change
536
- the literalization code to use the RETURNING clause on those
537
- versions.
538
-
539
- * The jdbc/postgres adapter now converts Java arrays
540
- (Java::OrgPostgresqlJdbc4::Jdbc4Array) to ruby arrays.
541
-
542
- * Tables and schemas with embedded ' characters are now handled
543
- correctly when parsing primary keys and sequences on PostgreSQL.
544
-
545
- * Identifiers are now escaped on MySQL and SQLite. Previously they
546
- were quoted, but internal ` characters were not doubled.
547
-
548
- * Fractional seconds for the time type are now returned correctly on
549
- jdbc (assuming they are returned as java.sql.Time values by JDBC).
550
-
551
- * Multiple changes were made to ensure that Sequel works correctly
552
- when the core extensions are not loaded.
553
-
554
- * Composite foreign key constraints are now retained when emulating
555
- alter_table operations on SQLite. Previously, only single
556
- foreign key constraints were retained.
557
-
558
- * An error is no longer raised when no indexes exist when calling
559
- Database#indexes on jdbc/sqlite.
560
-
561
- * A possible SystemStackError has been fixed in the SQLite adapter,
562
- when trying to delete a dataset that uses a having clause and no
563
- where clause.
564
-
565
- * ROLLUP/CUBE support now works correctly on Microsoft SQL Server
566
- 2005.
567
-
568
- * Unsigned tinyint types are now recognized in the schema dumper.
569
-
570
- * Using primary_key :column, :type=>Bignum now works correctly on H2.
571
- Previously, the column created was not autoincrementing.
572
-
573
- * Using a bound variable for a limit is now supported in the ibmdb
574
- adapter on ruby 1.9.
575
-
576
- * Connecting to PostgreSQL via the swift adapter has been fixed when
577
- using newer versions of swift.
578
-
579
- * The mock adapter now handles calling the Database#execute methods
580
- directly (instead of via a dataset).
581
-
582
- * The mock adapter now has the ability to have per-shared adapter
583
- specific initialization code executed. This has been used to fix
584
- some bugs when using the shared postgres adapter.
585
-
586
- * The pretty_table extension has been split into two extensions, one
587
- that adds a method to Dataset and one that just adds the
588
- PrettyTable class. Also, PrettyTable.string has been added to get
589
- a string copy of the table.
590
-
591
- * A spec_model_no_assoc task has been added for running model specs
592
- without the association plugin loaded. This is to check that the
593
- SEQUEL_NO_ASSOCIATIONS setting works correctly.
594
-
595
- = Deprecated Features to be Removed in Sequel 3.35.0
596
-
597
- * Ruby <1.8.7 support is now deprecated.
598
-
599
- * PostgreSQL <8.2 support is now deprecated.
600
-
601
- * Dataset#disable_insert_returning on PostgreSQL is now deprecated.
602
- Starting in 3.35.0, RETURNING will now always be used to get the
603
- primary key value when inserting.
604
-
605
- * Array#all_two_pairs? is now deprecated. It was part of the core
606
- extensions, but the core extensions have been refactored to no
607
- longer require it. As it doesn't specifically relate to creating
608
- Sequel expression objects, it is being removed. The private
609
- Array#sql_expr_if_all_two_pairs method is deprecated as well.
610
-
611
- = Other Backwards Compatibility Issues
612
-
613
- * The generic Bignum type now uses bigint on SQLite, similar to
614
- other databases. The integer type was previously used. The only
615
- exception is for auto incrementing primary keys, which still use
616
- integer for Bignum as SQLite doesn't support autoincrementing
617
- columns other than integer.
618
-
619
- * On SQLite, Dataset#explain now returns a string, similar to
620
- PostgreSQL (and now MySQL).
621
-
622
- * When using the JDBC adapter, Java::OrgPostgresqlUtil::PGobject
623
- objects are converted to ruby strings if the dataset is set to
624
- convert types (the default setting). This is to support the
625
- hstore extension, but it could have unforeseen effects if custom
626
- types were used.
627
-
628
- * For PostgreSQL connection objects, #primary_key and #sequence now
629
- require their arguments are provided as already literalized
630
- strings. Note that these methods are being removed in the next
631
- version because they will not be needed after PostgreSQL <8.2
632
- support is dropped.
633
-
634
- * Database#uri and #url now return a string or nil, but never raise
635
- an exception. Previously, they would either return a string
636
- or raise an exception.
637
-
638
- * The Model @simple_pk and @simple_table instance variables should
639
- no longer be modified directly. Instead, the setter methods should
640
- be used.
641
-
642
- * Model.primary_key_lookup should no longer be called with a nil
643
- value.
644
-
645
- * Logging of prepared statements on some adapters has been changed
646
- slightly, so log parsers might need to be updated.
647
-
648
- * Dataset#identifier_append and #table_ref_append no longer treat
649
- literal strings and blobs specially. Previously, they were treated
650
- as identifiers.
651
-
652
- * Dataset#qualified_identifier_sql_append now takes 3 arguments, so
653
- any extensions that override it should be modified accordingly.
654
-
655
- * Some internally used constants and private methods have been
656
- deleted:
657
-
658
- Database::CASCADE
659
- Database::NO_ACTION
660
- Database::SET_DEFAULTS
661
- Database::SET_NULL
662
- Database::RESTRICT
663
- Dataset::COLUMN_ALL
664
-
665
- or moved:
666
-
667
- MySQL::Dataset::AFFECTED_ROWS_RE -> MySQL::Database
668
- MySQL::Dataset#affected_rows -> MySQL::Database
669
-
670
- * The sql_expr extension no longer creates the
671
- Sequel::SQL::GenericComplexExpression class.