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,135 +0,0 @@
1
- = Dataset Literalization Refactoring
2
-
3
- * As warned about in the 3.29.0 release notes, dataset literalization
4
- has been completely refactored. It now uses an append-only design
5
- which is faster in all cases, about twice as fast for large objects
6
- and deeply nested structures, and over two orders of magnitude
7
- faster in some pathological cases.
8
-
9
- This change should not affect applications, but may affect custom
10
- extensions or adapters that dealt with literalization of objects.
11
- Most literalization methods now have a method with an _append
12
- suffix that does the actual literalization, which takes the sql
13
- string to append to as the first argument. If you were overriding
14
- a literalization method, you now probably need to override the
15
- _append version instead. If you have this literalization method:
16
-
17
- def foo_sql(bar)
18
- "BAR #{literal(bar.baz)}"
19
- end
20
-
21
- You need to change the code to:
22
-
23
- def foo_sql_append(sql, bar)
24
- sql << "BAR "
25
- literal_append(sql, bar.baz)
26
- end
27
-
28
- def foo_sql(bar)
29
- sql = ""
30
- foo_sql_append(sql, bar)
31
- sql
32
- end
33
-
34
- If you have questions about modifying your custom adapter or
35
- extension, please ask on the Google Group or the IRC channel.
36
-
37
- = New Features
38
-
39
- * Model#set_server has been added to the base support (it was
40
- previously only in the sharding plugin), which allows you to
41
- set the shard on which to save/delete the model instance:
42
-
43
- foo1.set_server(:server_a).save
44
- foo2.set_server(:server_a).destroy
45
-
46
- * Model#save now accepts a :server option that uses set_server
47
- to set the shard to use. Unlike most other #save options, this
48
- option persists past the end of the save. Previously, the
49
- :server option only affected the transaction code, it now
50
- affects the INSERT/UPDATE statement as well.
51
-
52
- * When initiating a new dataset graph, any existing selected
53
- columns is assumed to be the columns to select for the graph from
54
- the current/master table. Before, there was not a way to specify
55
- the columns to select from the current/master table.
56
-
57
- * A :graph_alias_base association option has been added, which is
58
- used to set the base alias name to use when eager graphing. This
59
- is mostly useful when cascading eager graphs to dependent
60
- associations, where multiple associations with the same name in
61
- different models are being graphed simultaneously.
62
-
63
- * You can now specify nanoseconds and a timezone offset
64
- when converting a hash or array to a timestamp. The nanoseconds
65
- and offset are the 7th and 8th entries in the array, and the :nanos
66
- and :offset entry in the hash.
67
-
68
- * The postgres adapter now respects a :connect_timeout option if you
69
- are using the pg driver.
70
-
71
- = Other Improvements
72
-
73
- * Type conversion of Java to Ruby types in the JDBC adapter has been
74
- made much faster, as conversion method lookup is now
75
- O(number of columns) instead of
76
- O(number of columns*number of rows).
77
-
78
- * Sequel::SQL::Blob literalization is now much faster on adapters that
79
- use hex encoding, by switching to String#unpack('H*').
80
-
81
- * Database#after_commit and after_rollback now respect the :server
82
- option to set the server/shard to use.
83
-
84
- * Symbol splitting (e.g. for table__column) is now slightly faster.
85
-
86
- * All adapters now pass the dataset :limit/:offset value through
87
- Dataset#literal instead of using it verbatim. Note that
88
- Dataset#limit already called to_i on input strings, so this isn't
89
- a security issue. However, the previous code broke if you
90
- provided a Sequel-specific object (e.g. Sequel::SQL::Function) as
91
- the :limit/:offset value.
92
-
93
- * Calling graph and eager_graph on an already graphed dataset no
94
- longer modifies the receiver.
95
-
96
- * Model#set_server now correctly handles the case where @this is
97
- already loaded.
98
-
99
- * Dataset#destroy for model datasets now uses the dataset's shard
100
- for transactions.
101
-
102
- * When emulating offset support using ROW_NUMBER (on Microsoft SQL
103
- Server, DB2, and Oracle), explicitly order by the ROW_NUMBER
104
- result, as otherwise the results are not guaranteed to be ordered.
105
-
106
- * Explicitly force a case insensitive collation when emulating ILIKE
107
- on Microsoft SQL Server. Previously, ILIKE could be case sensitive
108
- on Microsoft SQL Server if case sensitive collation was the
109
- database default.
110
-
111
- * Using on_duplicate_key_update with prepared statements on MySQL now
112
- works correctly.
113
-
114
- * The tinytds adapter now works correctly if the
115
- identifier_output_method is nil.
116
-
117
- * The plugin/extension specs were cleaned up using the mock adapter.
118
-
119
- = Backwards Compatibility
120
-
121
- * In addition to the previously mentioned dataset literalization
122
- changes, any custom adapters that overrode *_clause_methods
123
- methods need to be modified to add a method that adds the
124
- SELECT/UPDATE/INSERT/DELETE. Previously, this was done by default,
125
- but due to common table expressions and the dataset literalization
126
- changes, a separate method is now needed.
127
-
128
- * Dataset#on_duplicate_key_update_sql has been removed from the shared
129
- mysql adapter.
130
-
131
- * The :columns dataset option used when inserting is no longer
132
- literalized in advance.
133
-
134
- * Dataset#as_sql no longer takes an expression, it just takes the
135
- alias, and only adds the alias part.
@@ -1,146 +0,0 @@
1
- = New Features
2
-
3
- * The serialization plugin can now support custom serialization
4
- formats, by supplying a serializer/deserializer pair of
5
- callable objects. You can also register custom deserializers
6
- via Sequel::Plugins::Serialization.register_format, so that
7
- they can be referenced by name. Example:
8
-
9
- Sequel::Plugins::Serialization.register_format(:reverse,
10
- lambda{|v| v.reverse},
11
- lambda{|v| v.reverse})
12
- class User < Sequel::Model
13
- serialize_attributes :reverse, :password
14
- end
15
-
16
- * Dataset#import and #multi_insert now support a
17
- :return=>:primary_key option. When this option is used, the
18
- methods return an array of primary key values, one for each
19
- inserted row. Usage of this option on MySQL requires that a
20
- separate query be issued per row (instead of the single
21
- query for all rows that MySQL would usually use).
22
-
23
- * PostgreSQL can now use Dataset#returning in conjunction with
24
- import/multi_insert to set a custom column to return.
25
-
26
- * Microsoft SQL Server can now use Dataset#output in conjection with
27
- import/multi_insert to set a custom column to return.
28
-
29
- * Dataset#import and #multi_insert now respect a :server option to
30
- set the server/shard on which to execute the queries.
31
- Additionally, options given to this method are also passed to
32
- Dataset#transaction.
33
-
34
- * Dataset#insert_multiple now returns an array of inserted primary
35
- keys.
36
-
37
- * Model.def_column_alias has been added to make it easy to create
38
- alias methods for columns. This is useful if you have a legacy
39
- database and want to create friendly method names for the
40
- underlying columns. Note that this alias only affects the setter
41
- and getter methods. This does not affect the dataset level, so you
42
- still need to use the actual column names in dataset filters.
43
-
44
- * many_to_one associations can now have the same name as the related
45
- foreign key column, using the :key_column option. Use of this
46
- feature is not recommended, as it is much better to either rename
47
- the column or rename the association. Here's an example of usage:
48
-
49
- # Example schema:
50
- # albums artists
51
- # :id /--> :id
52
- # :artist --/ :name
53
- # :name
54
- class Album < Sequel::Model
55
- def_column_alias(:artist_id, :artist)
56
- many_to_one :artist, :key_column=>:artist
57
- end
58
-
59
- * The mock adapter can now mock out database types, by providing a
60
- shared adapter name as the host (e.g. mock://postgres). This
61
- emulation is not perfect, but in most cases it allows you to see
62
- what SQL Sequel would generate on a given database without needing
63
- to install the required database driver.
64
-
65
- * Sequel now supports creating full text indexes on Microsoft SQL
66
- Server. Before using it, you must have previously setup a default
67
- full text search catalog, and you need to provide a :key_index
68
- option with an index name symbol.
69
-
70
- * Dataset#group_rollup and #group_cube methods have been added for
71
- GROUP BY ROLLUP and GROUP BY CUBE support. These features are in
72
- a recent SQL standard, and they are supported to various degrees on
73
- Microsoft SQL Server, DB2, Oracle, MySQL, and Derby.
74
-
75
- * Dataset#full_text_search on Microsoft SQL Server now supports
76
- multiple search terms.
77
-
78
- * The jdbc adapter now supports a :login_timeout option, giving the
79
- timeout in seconds.
80
-
81
- = Other Improvements
82
-
83
- * Dataset#exists can now be used with prepared statement
84
- placeholders.
85
-
86
- * Dataset#full_text_search can now be used with prepared statement
87
- placeholders on PostgreSQL, MySQL, and Microsoft SQL Server.
88
-
89
- * If tables from two separate schema are detected when parsing the
90
- schema for a table on PostgreSQL, an error is now raised.
91
- Previously, no error was raised, which led to weird errors later,
92
- such as duplicate columns in a model's primary_key.
93
-
94
- * RETURNING is now supported with UPDATE/DELETE on PostgreSQL 8.2+.
95
- Previously, Sequel only supported it on 9.1+, but PostgreSQL
96
- introduced support for it in 8.2.
97
-
98
- * The shared postgres adapter now correctly handles the return value
99
- for Dataset#insert if you provide a separate column array and value
100
- array on PostgreSQL < 8.2.
101
-
102
- * Handle case in the PostgreSQL adapter where the server version
103
- cannot be determined via a query.
104
-
105
- * H2 clob types are now treated as string instead of as blob.
106
- Treating clob as blob breaks on H2, as it doesn't automatically
107
- hex-unescape the input for clobs as it does for blobs.
108
-
109
- * Dataset#empty? now works correctly when the dataset has an offset
110
- and offset support is being emulated.
111
-
112
- * The mock adapter no longer defaults to downcasing identifiers on
113
- output.
114
-
115
- = Backwards Compatibility
116
-
117
- * Dataset#exists now returns a PlaceholderLiteralString instead of a
118
- LiteralString, which could potentially break some code. If you
119
- would like a String returned, you can pass the returned object to
120
- Dataset#literal:
121
-
122
- dataset.literal(dataset.exists)
123
-
124
- * Dataset#from no longer handles :a__b__c___d as "a.b.c AS d". This
125
- was not the intended behavior, and nowhere else in Sequel is a
126
- symbol treated that way. Now, Dataset#from is consistent with the
127
- rest of Sequel, using "a.b__c AS d". This should only affect
128
- people in very rare cases, as most databases don't use three level
129
- qualified tables. One exception is Microsoft SQL Server, which can
130
- use three level qualified tables for cross-database access.
131
-
132
- * Previously, Dataset#insert_multiple returned an array of hashes, now
133
- it returns an array of primary key values.
134
-
135
- * Dataset#EXRACT_CLOSE in the shared sqlite adapter has been renamed to
136
- Dataset#EXTRACT_CLOSE.
137
-
138
- * Dataset::StoredProcedureMethods::SQL_QUERY_TYPE and
139
- Dataset::ArgumentMapper::SQL_QUERY_TYPE constants have been removed,
140
- as have related sql_query_type private methods.
141
-
142
- * The serialization plugin was significantly refactored.
143
- Model.serialization_map now contains a callable object instead of a
144
- Symbol, and Model.serialization_format has been removed.
145
- Model.define_serialized_attribute_accessors private method now takes
146
- two callable objects before the columns, instead of a single symbol.
@@ -1,202 +0,0 @@
1
- = New Features
2
-
3
- * Prepared statements now support :map and :to_hash prepared
4
- statement types. The main reason for this is that certain
5
- extensions (e.g. sequel_pg) optimize map/to_hash calls, and
6
- there previously was not a way to use prepared statements
7
- with the map/to_hash optimizations.
8
-
9
- * Sequel.empty_array_handle_nulls has been added to change how
10
- IN/NOT IN operations with an empty array are handled. See
11
- the Backwards Compatibility section for details.
12
-
13
- * 5 new association options have been added that allow you to
14
- define associations where the underlying columns clash with
15
- standard ruby method names:
16
-
17
- many_to_one :primary_key_method
18
- one_to_many :key_method
19
- one_to_many :primary_key_column
20
- many_to_many :left_primary_key_column
21
- many_to_many :right_primary_key_method
22
-
23
- Using these new options, you can now define associations
24
- that work correctly when the underlying primary/foreign key
25
- columns clash with existing ruby method names. See the RDoc
26
- for details.
27
-
28
- * A use_after_commit_rollback setting has been added to models.
29
- This defaults to true, but can be set to false for performance
30
- or to allow models to be used in prepared transactions
31
- (which don't support after_commit/after_rollback).
32
-
33
- * Dataset#update_ignore has been added when connecting to MySQL,
34
- enabling use of the UPDATE IGNORE syntax to skip updating a row
35
- if the update would cause a unique constraint to be violated.
36
-
37
- * Database#indexes is now supported when connecting to Microsoft
38
- SQL Server.
39
-
40
- * On Microsoft SQL Server, the :include option is now supported
41
- when creating indexes, for storing column values in the index,
42
- which can be used by the query optimizer.
43
-
44
- = Other Improvements
45
-
46
- * The filtering/excluding by associations code now uses qualified
47
- identifiers instead of unqualified identifiers, which allows it
48
- to avoid ambiguous column names if you are doing your own joins.
49
-
50
- * Virtual row blocks that return arrays are now handled correctly
51
- in Dataset#select_map/select_order_map.
52
-
53
- * Dataset#select_map/select_order_map can now take both a block
54
- argument as well as a regular argument.
55
-
56
- * Dataset#select_order_map now handles virtual row blocks that
57
- return ordered expressions.
58
-
59
- * Database#table_exists? should no longer generate false negatives
60
- if you only have permission to retrieve some column values but
61
- not all. Note that if you lack permission to SELECT from the
62
- table itself, table_exists? can still generate false negatives.
63
-
64
- * The active_model plugin now supports ActiveModel 3.2, by adding
65
- support for to_partial_path.
66
-
67
- * The serialization_modification_detection plugin now handles
68
- changed_columns correctly both for new objects and after saving
69
- objects.
70
-
71
- * The serialization plugin now clears the deserialized values when
72
- it does the automatic refresh after saving a new object, mostly for
73
- consistency. You can use the skip_create_refresh plugin to skip
74
- refreshing when creating a new model object.
75
-
76
- * Column default values are now wrapped in parentheses on SQLite,
77
- which fixes some cases such as when the default is an SQL function
78
- call.
79
-
80
- * Alter table emulation now works correctly on SQLite when foreign
81
- keys reference the table being altered. The emulation requires
82
- a renaming/deleting the existing table and creating a new table,
83
- which can break foreign key references. Sequel now disables the
84
- foreign key PRAGMA when altering tables, so SQLite won't track
85
- the table renames and break the foreign key relationships.
86
-
87
- * The set_column_type table alteration method no longer modifies
88
- default values and NULL/NOT NULL settings on Microsoft SQL
89
- Server, H2, and SQLite.
90
-
91
- * On MySQL, Time/DateTime columns now use the timestamp type if the
92
- default value is Sequel::CURRENT_TIMESTAMP, since it is currently
93
- impossible for MySQL to have a non-constant default for a
94
- datetime column (without using a workaround like a trigger).
95
-
96
- * Metadata methods such as tables, views, and view_exists? are now
97
- handled correctly on Oracle if custom identifier input methods
98
- are used.
99
-
100
- * Sequel now ignores errors that occur when attempting to get
101
- information on column defaults in Oracle (which can happen if you
102
- lack permission to the appropriate table). Previously, such errors
103
- would cause the schema parser to raise an error, now, the schema
104
- information is just returned without default information.
105
-
106
- * Database#indexes now skips the primary key index when connecting to
107
- DB2, Derby, HSQLDB, and Oracle via the jdbc adapter.
108
-
109
- * Database#indexes now works correctly on DB2.
110
-
111
- * The progress adapter has been fixed, it had been broken since the
112
- dataset literalization refactoring.
113
-
114
- * Dataset#naked! now works correctly. Previously, it just returned
115
- the receiver unmodified.
116
-
117
- * Dataset#paginate! has been removed, as it was broken.
118
-
119
- * The query extension no longer breaks Dataset#clone if an argument
120
- is not given.
121
-
122
- * Transaction related queries are no longer logged twice in the mock
123
- adapter.
124
-
125
- = Backwards Compatibility
126
-
127
- * Sequel's default handling of NOT IN operators with an empty array
128
- of values has changed, which can change which rows are returned for
129
- such queries.
130
-
131
- Previously, Sequel was inconsistent in that it tried to handle NULL
132
- values correctly in the IN case, but not in the NOT IN case. Now,
133
- it defaults to handling NULL values correctly in both cases:
134
-
135
- # 3.31.0
136
- DB[:a].where(:b=>[])
137
- # SELECT * FROM a WHERE (b != b)
138
- DB[:a].exclude(:b=>[])
139
- # SELECT * FROM a WHERE (1 = 1)
140
-
141
- # 3.32.0
142
- DB[:a].where(:b=>[])
143
- # SELECT * FROM a WHERE (b != b)
144
- DB[:a].exclude(:b=>[])
145
- # SELECT * FROM a WHERE (b = b)
146
-
147
- The important change in behavior is that in the NOT IN case, if
148
- the left hand argument is NULL, the filter returns NULL instead
149
- of true. This has the potential to change query results.
150
-
151
- "Correct" here is really an opinion and not a fact, as there are
152
- valid arguments for the alternative behavior:
153
-
154
- DB[:a].where(:b=>[])
155
- # SELECT * FROM a WHERE (1 = 0)
156
- DB[:a].exclude(:b=>[])
157
- # SELECT * FROM a WHERE (1 = 1)
158
-
159
- The difference is that the "correct" NULL behavior is more
160
- consistent with the non-empty array cases. For example, if b is
161
- NULL:
162
-
163
- # "Correct" NULL handling
164
- # Empty array: where(:b=>[])
165
- WHERE (b != b) # NULL
166
- WHERE (b = b) # NULL
167
- # Non-empty array: where(:b=>[1, 2])
168
- WHERE (b IN (1, 2)) # NULL
169
- WHERE (b NOT IN (1, 2)) # NULL
170
-
171
- # Static boolean handling
172
- # Empty array: where(:b=>[])
173
- WHERE (1 = 0) # false
174
- WHERE (1 = 1) # true
175
- # Non-empty array: where(:b=>[1, 2])
176
- WHERE (b IN (1, 2)) # NULL
177
- WHERE (b NOT IN (1, 2)) # NULL
178
-
179
- Sequel chooses to default to behavior consistent with the non-empty
180
- array cases (similar to SQLAlchemy). However, there are two
181
- downsides to this handling. The first is that some databases with
182
- poor optimizers (e.g. MySQL) might do a full table scan with the
183
- default syntax. The second is that the static boolean handling may
184
- be generally perferable, if you believe that IN/NOT IN with an
185
- empty array should always be true or false and never NULL even if
186
- the left hand argument is NULL.
187
-
188
- As there really isn't a truly correct answer in this case, Sequel
189
- defaults to the "correct" NULL handling, and allows you to switch
190
- to the static boolean handling via:
191
-
192
- Sequel.empty_array_handle_nulls = false
193
-
194
- This is currently a global setting, it may be made Database or
195
- Dataset specific later if requested. Also, it is possible the
196
- default will switch in the future, so if you care about a specific
197
- handling, you should set your own default.
198
-
199
- * Database#table_exists? now only rescues Sequel::DatabaseErrors
200
- instead of StandardErrors, so it's possible it will raise errors
201
- instead of returning false on custom adapters that don't wrap
202
- their errors correctly.
@@ -1,157 +0,0 @@
1
- = New Features
2
-
3
- * A server_block extension has been added that makes Sequel's
4
- sharding support easier to use by scoping database access inside
5
- the block to a given server/shard:
6
-
7
- Sequel.extension :server_block
8
- DB.extend Sequel::ServerBlock
9
- DB.with_server(:shard_1) do
10
- # All of these will execute against shard_1
11
- DB.tables
12
- DB[:table].all
13
- DB.run 'SOME SQL'
14
- end
15
-
16
- * An arbitrary_servers extension has been added that extends
17
- Sequel's sharding support so that you can use arbitrary
18
- connection options instead of referencing an existing, predefined
19
- server/shard:
20
-
21
- Sequel.extension :arbitrary_servers
22
- DB.pool.extend Sequel::ArbitraryServers
23
- DB[:table].server(:host=>'foo', :database=>'bar').all
24
-
25
- You can use this extension in conjunction with the server_block
26
- extension:
27
-
28
- DB.with_server(:host=>'foo', :database=>'bar') do
29
- DB.synchronize do
30
- # All of these will execute on host foo, database bar
31
- DB.tables
32
- DB[:table].all
33
- DB.run 'SOME SQL'
34
- end
35
- end
36
-
37
- The combination of these two extensions makes it pretty easy to
38
- write a thread-safe Rack middleware that scopes each request
39
- to an arbitrary database.
40
-
41
- * The sqlite adapter now supports an integer_booleans setting
42
- for using 1/0 for true/false values, instead of the the 't'/'f'
43
- values used by default. As SQLite recommends using integers to
44
- store booleans, converting your existing database and enabling
45
- this setting is recommended, but for backwards compatibility it
46
- is set to false. You can convert you existing database by doing
47
- the following for each table/column that has booleans:
48
-
49
- DB[:table].update(:boolean_column=>{'t'=>1}.
50
- case(0, :boolean_column))
51
-
52
- The integer_booleans default setting may change in a future
53
- version of Sequel, so you should set it manually to false if you
54
- prefer the current default.
55
-
56
- * You can now disable transaction use in migrations, in one of two
57
- ways. You generally only need to do this if you are using an
58
- SQL query inside a migration that is specifically not supported
59
- inside a transaction, such as CREATE INDEX CONCURRENTLY on
60
- PostgreSQL.
61
-
62
- The first way to disable transactions is on a per-migration basis
63
- by calling the no_transaction method inside the Sequel.migration
64
- block:
65
-
66
- Sequel.migration do
67
- no_transaction
68
- change do
69
- # ...
70
- end
71
- end
72
-
73
- That will make it so that a transaction is not used for that
74
- particular migration. The second way is passing the
75
- :use_tranctions=>false option when calling Migrator.run (using
76
- the API), which will completely disable transactions for all
77
- migrations during the migrator run.
78
-
79
- * The postgres adapter now respects an :sslmode option when using
80
- pg as the underlying driver, you can set the value of this option to
81
- disable, allow, prefer, or require.
82
-
83
- * Database#create_schema and #drop_schema are now defined when
84
- connecting to PostgreSQL.
85
-
86
- * Database#supports_savepoints_in_prepared_transactions? has been
87
- added for checking if savepoints are supported inside prepared
88
- transactions. This is true if both savepoints and prepared
89
- transactions are both supported, except on MySQL > 5.5.12 (due to
90
- MySQL bug 64374).
91
-
92
- = Other Improvements
93
-
94
- * The mysql and mysql2 adapters now both provide an accurate number
95
- of rows matched, so Sequel::Model usage on those adapters will now
96
- raise a NoExistingObject exception by default if you attempt to
97
- delete or update an instance that no longer exists in the database.
98
-
99
- * Foreign key creation now works correctly without specifying the
100
- :key option when using MySQL with the InnoDB table engine. InnoDB
101
- requires that you list the column explicitly, even if you are
102
- referencing the primary key of the table, so if the :key option is
103
- not given, the database schema is introspected to find the primary
104
- key for the table. If you are attempting to create a table with
105
- a self-referential foreign key, it introspects the generator to
106
- get the primary key for the table.
107
-
108
- * The sqlite adapter will now return 1/0 stored in boolean columns as
109
- true/false. It will convert dates stored as Integers/Floats to
110
- Date objects by assuming they represent the julian date. It will
111
- convert times stored as Integers/Floats to Sequel::SQLTime objects
112
- by assuming they represent a number of seconds. It will convert
113
- datetimes stored as Integers by assuming they represent a unix
114
- epoch time integer, and datetimes stored as Floats by assuming the
115
- represent the julian date (with fractional part representing the
116
- time of day). These changes make Sequel handle SQLite's
117
- recommendations for boolean/date/time storage.
118
-
119
- * The instance_hooks plugin's (before|after)_*_hook methods now return
120
- self so they can be used in a method chain.
121
-
122
- * The list plugin now automatically adds new entries to the end of the
123
- list when creating the entries, if the position field is not
124
- specifically set.
125
-
126
- * An identifier_output_method is now respected in the mysql2 adapter.
127
-
128
- * NaN/Infinity Float values are now quoted correctly for input on
129
- PostgreSQL, and the postgres adapter correctly handles them on
130
- retrieval from the database.
131
-
132
- * The :collate column option is now respected when creating tables or
133
- altering columns on MySQL.
134
-
135
- * You can now force use of the TimestampMigrator when the
136
- IntegerMigrator would be used by default by calling
137
- TimestampMigrator.apply or .run.
138
-
139
- * Mock adapter usage with a specific SQL dialect now uses the
140
- appropriate defaults for quoting identifiers.
141
-
142
- * You can now disable the use of sudo in the rake install/uninstall
143
- tasks using the SUDO='' environment variable.
144
-
145
- * A very misleading error message has been fixed when attempting
146
- to constantize an invalid string in the model inflector.
147
-
148
- = Backwards Compatibility
149
-
150
- * The sqlite adapter now typecasts columns that SQLite stores as
151
- INTEGER/REAL. Previously, it only typecasted columns that
152
- SQLite stored as TEXT/BLOB. For details about SQLite storage, see
153
- http://www.sqlite.org/datatype3.html.
154
-
155
- Any custom type conversion procs used with the sqlite adapter should
156
- be modified to work with Integer/Float objects in addition to String
157
- objects.