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,366 +0,0 @@
1
- New Features
2
- ------------
3
-
4
- * Dataset#filter and related methods now accept a string with named
5
- placeholders, and a hash with placeholder values:
6
-
7
- ds.filter('copies_sold > :sales', :sales=>500000)
8
-
9
- Sequel's general support for this syntax is nicer:
10
-
11
- ds.filter{copies_sold > 500000}
12
-
13
- But named placeholder support can make it easier to port code
14
- from other database libraries. Also, it works much better than
15
- the ? placeholder support if you have a long SQL statement:
16
-
17
- DB['SELECT :n FROM t WHERE p > :q AND p < :r', :n=>1,:q=>2,:r=>3]
18
-
19
- Sequel doesn't subsitute values that don't appear in the hash:
20
-
21
- ds.where('price < :p AND id in :ids', :p=>100)
22
- # WHERE (price < 100 AND id in :ids)
23
-
24
- This makes it easier to spot missed placeholders, and avoids issues
25
- with PostgreSQL's :: casting syntax or : inside string literals.
26
-
27
- * The Model add_ association method now accepts a hash and creates
28
- a new associated model object associated to the receiver:
29
-
30
- Artist[:name=>'YJM'].add_album(:name=>'RF')
31
-
32
- * The Model remove_ association method now accepts a primary key
33
- and removes the associated model object from the association. For
34
- models using composite primary keys, an array of primary key values
35
- can be used. Example:
36
-
37
- Artist[:name=>'YJM'].remove_album(1) # regular pk
38
- Artist[:name=>'YJM'].remove_album([2, 3]) # composite pk
39
-
40
- * Dataset#bind was added, allowing you to bind values before calling
41
- Dataset#call. This is more consistent with Sequel's general
42
- approach where queries can be built in any order.
43
-
44
- * The native postgres adapter now has Dataset#use_cursor, which
45
- allows you to process huge datasets without keeping all records in
46
- memory. The default number of rows per cursor fetch is 1000, but
47
- that can be modified:
48
-
49
- DB[:huge_table].use_cursor.each{|r| p r}
50
- DB[:huge_table].use_cursor(:rows_per_fetch=>10000).each{|r| p r}
51
-
52
- This probably won't work with prepared statements or
53
- bound variables.
54
-
55
- * The nested_attributes plugin now adds newly created objects to the
56
- cached association array immediately, even though the changes
57
- are not persisted to the database until after the object is saved.
58
- The reasoning for this is that otherwise there is no way to access
59
- the newly created associated objects before the save, and no way
60
- to access them at all if validation fails.
61
-
62
- This makes the nested_attributes plugin much easier to use, since
63
- now you can just iterate over the cached association array when
64
- building the form. If validation fails, it will have the newly
65
- created failed objects in the array, so you can easily display the
66
- form as the user entered it for them to make changes.
67
-
68
- This change doesn't affect many_to_one associations, since those
69
- don't have a cached association array. This also does not affect
70
- updating existing records, since those are already in the cached
71
- array.
72
-
73
- * You can now easily override the default options used in the
74
- validation_helpers plugin (the recommended validation plugin).
75
- Options can be overridden at a global level:
76
-
77
- Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:format].
78
- merge!(:message=>"incorrect format", :allow_missing=>true)
79
-
80
- Options can also be overridden on a per-class level:
81
-
82
- class Album < Sequel::Model
83
- plugin :validation_helpers
84
- DEFAULT_VALIDATION_OPTIONS = {
85
- :format=>{:message=>"incorrect format", :allow_missing=>true}}
86
-
87
- private
88
-
89
- def default_validation_helpers_options(type)
90
- super.merge(DEFAULT_VALIDATION_OPTIONS[type] || {})
91
- end
92
- end
93
-
94
- * You can now use a proc instead of a string for the
95
- validation_helpers :message option. This should allow much
96
- easier internationalization support. If a proc is given, Sequel
97
- calls it to get the format string to use. Whether the proc should
98
- take an argument depends on whether the associated validation
99
- method takes an argument before the array of columns to validate,
100
- and the argument provided is what is passed to the proc. The
101
- exception to this is the validates_not_string method, which doesn't
102
- take an argument, but does pass one to the proc (a symbol with the
103
- schema type of the column).
104
-
105
- Combined with the above default option support, full
106
- internationalization support for the validation_helpers plugin
107
- should be fairly easy.
108
-
109
- * The nested_attributes plugin now accepts a :fields option that
110
- specifies the fields that are allowed. If specified, the
111
- plugin will use set_only instead of set when mass assigning
112
- attributes. Without this, the only way to control which fields
113
- are allowed is to set allowed/restricted attributes at a class
114
- level in the associated class.
115
-
116
- * Associations now accept a :distinct option which uses the SQL
117
- DISTINCT clause. This can be used instead of :uniq for
118
- many_to_many and many_through_many associations to handle
119
- the uniqueness in the database instead of in ruby. It can
120
- also be useful for one_to_many associations to models that
121
- don't have primary keys.
122
-
123
- * The caching plugin now accepts an :ignore_exceptions option that
124
- allows it to work with memcached (which raises exceptions instead
125
- of returning nil for missing records).
126
-
127
- * Sequel now emulates JOIN USING poorly using JOIN ON for databases
128
- that don't support JOIN USING (MSSQL and H2). This isn't
129
- guaranteed to work for all queries, since USING and ON have
130
- different semantics, but should work in most cases.
131
-
132
- * The MSSQL shared adapter now supports insert_select, for faster
133
- model object creation. If for some reason you need to disable it,
134
- you can use disable_insert_output.
135
-
136
- * Model#modified! has been added which explicitly marks the object
137
- as modified. So even if no column values have been modified,
138
- calling save_changes/update will still run through the regular
139
- save process and call all before and after save/update hooks.
140
-
141
- * Model#marshallable! has been added which removes unmarshallable
142
- attributes from the object. Previously, you couldn't marshal
143
- a saved model object because it contained a dataset with a
144
- singleton class. Custom _dump and _load methods could be used
145
- instead, but this approach is easier to implement.
146
-
147
- * Dataset#literal_other now calls sql_literal on the object with
148
- the current dataset instance, if the object responds to it.
149
- This makes it easier to support the literalization of arbitrary
150
- objects.
151
-
152
- Note that if the object is a subclass of a class handled by
153
- an existing dataset literalization method, you cannot use this
154
- method. You have to override the specific Dataset#literal_* method
155
- in that case.
156
-
157
- * Model#save_changes now accepts an option hash that is passed to
158
- save:
159
-
160
- album.save_changes(:validate=>false)
161
-
162
- * A bunch of Dataset#*_join methods have been added, for specific
163
- join types:
164
-
165
- * cross_join
166
- * natural_join
167
- * full_join
168
- * left_join
169
- * right_join
170
- * natural_full_join
171
- * natural_left_join
172
- * natural_right_join
173
-
174
- Previously, you had to use join_table(:cross, ...) to use a CROSS
175
- JOIN.
176
-
177
- * You can now create clustered indexes on Microsoft SQL Server using
178
- the :clustered option.
179
-
180
- * AssociationReflection#associated_object_keys has been added,
181
- specifying the keys in the associated model object that are related
182
- to this association.
183
-
184
- * Sequel::SQL::SQLArray#to_a was added.
185
-
186
- Other Improvements
187
- ------------------
188
-
189
- * Constant lookup in virtual row blocks now works correctly in ruby
190
- 1.9. Virtual row blocks are based on BasicObject on ruby 1.9,
191
- which doesn't allow referencing objects in the top level scope. So
192
- the following code would cause an error on 1.9:
193
-
194
- DB[:bonds].filter{maturity_date > Time.now}
195
-
196
- Sequel now uses a Sequel::BasicObject class on 1.9 with a
197
- const_missing that looks up constants in Object, which allows the
198
- above code to work.
199
-
200
- * Sequel no longer attempts to load associated objects when
201
- one of the key fields in the current table is NULL. This fixes
202
- the behavior when the :primary_key option for the association
203
- is used to point to a non-primary key.
204
-
205
- A consequence of this change is that attempting to load a
206
- *_to_many association for a new model object now returns
207
- an empty array instead of raising an exception. This has its
208
- own advantage of allowing the same association viewing code
209
- to work on both new and existing objects. Previously, you had
210
- to actively avoid calling the association method on new objects,
211
- or Sequel would raise an exception.
212
-
213
- * Dataset aggreate methods (sum/avg/min/max/range/interval) now
214
- work correctly with limited, grouped, or compound datasets.
215
- Previously, count worked with them, but other aggregate methods
216
- did not. These methods now use a subquery if called on a
217
- limited, grouped or compound dataset.
218
-
219
- * It is no longer required to have an existing GROUP BY clause
220
- to use a HAVING clause (except on SQLite, which doesn't permit
221
- it). Sequel has always had this limitation, but it's not required
222
- by the SQL standard, and there are valid reasons to use HAVING
223
- without GROUP BY.
224
-
225
- * Sequel will now emulate support for databases that don't support
226
- multiple column IN/NOT IN syntax, such as MSSQL and SQLite:
227
-
228
- ds.filter([:col1, :col2]=>[[1, 2], [3, 4]].sql_array)
229
- # default: WHERE (col1, col2) IN ((1, 2), (3, 4))
230
- # emulated: WHERE (((col1 = 1) AND (col2 = 2)) OR
231
- # ((col1 = 3) AND (col2 = 4)))
232
-
233
- This is necessary for eager loading associated objects for models
234
- with composite primary keys.
235
-
236
- * Sequel now emulates :column.ilike('blah%') for case insensitive
237
- searches on MSSQL and H2. MSSQL is case insensitive by default,
238
- so it is the same as like. H2 is case sensitive, so Sequel
239
- uses a case insensitive cast there.
240
-
241
- * The nested_attributes plugin no longer allows modification of
242
- keys related to the association. This fixes a possible security
243
- issue with the plugin, where a user could associate the nested
244
- record to a different record. For example:
245
-
246
- Artist.one_to_many :albums
247
- Artist.plugin :nested_attributes
248
- Artist.nested_attributes :albums
249
- artist = Artist.create
250
- artist2 = Artist.create
251
- album = Album.create
252
- artist.add_album(album)
253
- artist.albums_attributes = [{:id=>album.id,
254
- :artist_id=>artist2.id}]
255
- artist.save
256
-
257
- * The one_to_many remove_* association method now makes sure that the
258
- object to be removed is currently associated to this object.
259
- Before, the method could be abused to disassociate the object from
260
- whatever object it was associated to.
261
-
262
- * Model add_ and remove_ association methods now check that the passed
263
- object is of the correct class.
264
-
265
- * Calling the add_* association method no longer adds the record
266
- to the cached association array if the object is already in the
267
- array. Previously, Sequel did this for reciprocal associations,
268
- but not for regular associations.
269
-
270
- This makes the most sense for one_to_many associations, since
271
- those can only be associated to the object once. For many_to_many
272
- associations, if you want an option to disable the behavior, please
273
- bring it up on the Sequel mailing list.
274
-
275
- * An array with a string and placeholders that is passed to
276
- Dataset#filter is no longer modified. Previously:
277
-
278
- options = ["name like ?", "%dog%"]
279
- DB[:players].where(options)
280
- options # => ["%dog%"]
281
-
282
- * Getting the most recently inserted autoincremented primary key
283
- is now optimized when connecting to MySQL via JDBC.
284
-
285
- * Model.inherited now calls Class.inherited.
286
-
287
- * The MSSQL shared adapter once again works on ruby 1.9. It was
288
- broken in 3.5.0 due to minor syntax issues.
289
-
290
- * The force_encoding plugin now handles refreshing an existing
291
- object, either explicitly or implicitly when new objects are
292
- created.
293
-
294
- To use the force_encoding plugin with the identity_map plugin, the
295
- identity_map plugin should be loaded first.
296
-
297
- * Using nil as a bound variable now works on PostgreSQL. Before,
298
- Sequel would incorrectly use "" instead of NULL, since it
299
- transformed all objects to strings before binding them. Sequel
300
- now binds the objects directly.
301
-
302
- * The Amalgalite adapter is now significantly faster, especially for
303
- code that modifies the schema or submits arbitrary SQL statements
304
- using Database <<, run, or execute_ddl.
305
-
306
- * Model#save_changes is now used when updating existing associated
307
- objects in the nested_attributes plugin. This should be
308
- significantly faster for the common case of submitting a complex
309
- form with nested objects without making modifications.
310
-
311
- * You can now prepare insert statements that take multiple arguments,
312
- such as insert(1, 2, 3) and insert(columns, values).
313
-
314
- * Dataset#group_and_count now supports aliased columns.
315
-
316
- * Adding indexes to tables outside the default schema now works.
317
-
318
- * Eager graphing now works better with models that use aliased tables.
319
-
320
- * Sequel now correctly parses the column schema information for tables
321
- in a non-default schema on Microsoft SQL Server.
322
-
323
- * changed_columns is now cleared for when saving new model objects
324
- for adapters that support insert_select, such as PostgreSQL.
325
-
326
- * Dataset#replace on MySQL now works correctly when default values
327
- are used.
328
-
329
- * Dataset#lock on PostgreSQL now works correctly.
330
-
331
- * Dataset#explain now works correctly on SQLite, and works using
332
- any adapter. It also works correctly on Amalgalite.
333
-
334
- * The JDBC adapter now handles binding Time arguments correctly when
335
- using prepared statements.
336
-
337
- * Model add_ and remove_ association methods now have more
338
- descriptive exception messages.
339
-
340
- * Dataset#simple_select_all? now ignores options that don't affect
341
- the SQL, such as :server.
342
-
343
- * Dataset#window in the PostgreSQL adapter now respects existing
344
- named windows.
345
-
346
- * Sequel now better handles a failure to begin a new transaction.
347
-
348
- * The dataset code was split into some additional files for improved
349
- readability.
350
-
351
- * Many documentation improvements were made.
352
-
353
- Backwards Compatibility
354
- -----------------------
355
-
356
- * Model::Errors no longer uses a default proc, but emulates one in the
357
- [] method. This is unlikely to have a negative affect unless you
358
- are calling a method on it that doesn't call [] (maybe using it in
359
- a C extension?).
360
-
361
- * Model#table_name now only provides the alias if an aliased table is
362
- used.
363
-
364
- * The Sequel::Dataset::STOCK_COUNT_OPTS constant has been removed.
365
-
366
- * Dataset#lock on PostgreSQL now returns nil instead of a dataset.
@@ -1,179 +0,0 @@
1
- New Features
2
- ------------
3
-
4
- * Sequel now has support for deleting and updating joined datasets
5
- on MySQL and PostgreSQL. Previously, Sequel only supported this to
6
- a limited extent on Microsoft SQL Server, and support there has been
7
- improved as well.
8
-
9
- This allows you to do:
10
-
11
- DB.create_table!(:a){Integer :a; Integer :d}
12
- DB.create_table!(:b){Integer :b; Integer :e}
13
- DB.create_table!(:c){Integer :c; Integer :f}
14
-
15
- # Insert some rows
16
-
17
- ds = DB.from(:a, :b).
18
- join(:c, :c=>:e.identifier).
19
- where(:d=>:b)
20
- ds.where(:f=>6).update(:a => 10)
21
- ds.where(:f=>5).delete
22
-
23
- Which will set the a column to 10 for all rows in table a, where
24
- an associated row in table c (through table b) has a value of 6 for
25
- column f. It will delete rows from table a where an associated row
26
- in table c (through table b) has a value of 5 for column f.
27
-
28
- Sequel assumes the that first FROM table is the table being
29
- updated/deleted. MySQL and Microsoft SQL Server do not require
30
- multiple FROM tables, but PostgreSQL does.
31
-
32
- * Dataset #select_map, #select_order_map, and #select_hash
33
- convenience methods were added for quickly creating arrays and
34
- hashes from a dataset.
35
-
36
- select_map and select_order_map both return arrays of values for the
37
- column specified. The column can be specified either via an argument
38
- or a block, similar to Dataset#get. Both accept any valid objects as
39
- arguments.
40
-
41
- select_hash returns a hash. It requires two symbol arguments, but
42
- can handle implicit qualifiers or aliases in the symbols.
43
-
44
- Neither of these methods offer any new functionality, they just cut
45
- down on the number of required key strokes:
46
-
47
- select_map(:column) # select(:column).map(:column)
48
- select_order_map(:column) # select(:column).order(:column).
49
- # map(:column)
50
- select_hash(:key_column, :value_column)
51
- # select(:key_column, :value_column).
52
- # to_hash(:key_column, :value_column)
53
-
54
- * The NULL, NOTNULL, TRUE, SQLTRUE, FALSE, and SQLFALSE constants
55
- were added to Sequel::SQL::Constants. This allows you to do:
56
-
57
- include Sequel::SQL::Constants
58
- DB[:table].where(:a=>'1', :b=>NOTNULL)
59
-
60
- Previously, the shortest way to do this was:
61
-
62
- DB[:table].where(:a=>'1').exclude(:b=>nil)
63
-
64
- It may make the code more descriptive:
65
-
66
- DB[:table].where(:b=>NULL)
67
- # compared to
68
- DB[:table].where(:b=>nil)
69
-
70
- This gives the option to use SQL terminology instead of ruby
71
- terminology.
72
-
73
- The other advantage of using the constants it that they handle
74
- operators and methods like other Sequel::SQL objects:
75
-
76
- NULL & SQLFALSE # BooleanExpression => "(NULL AND FALSE)"
77
- nil & false # false
78
-
79
- NULL + :a # NumericExpression => "(NULL + a)"
80
- nil + :a # raises NoMethodError
81
- NULL.sql_string + :a # StringExpression => "(NULL || a)"
82
- NULL.as(:b) # AliasedExpression => "NULL AS b"
83
-
84
- For complex systems that want to represent SQL boolean objects
85
- in ruby (where you don't know exactly how they'll be used), using
86
- the constants is recommended.
87
-
88
- In order not to be too verbose, including Sequel::SQL::Constants
89
- is recommended. It's not done by default, but you can still
90
- reference the constants under the main Sequel module by default
91
- (e.g. Sequel::NULL).
92
-
93
- * The validates_unique method in the validation_helpers plugin now
94
- supports an :only_if_modified option, which should speed up the
95
- common case where the unique attribute is not modified for an
96
- existing record. It's not on by default, since it's possible the
97
- database could be changed between retrieving the model object and
98
- updating it.
99
-
100
- * The Dataset #union, #intersect, and #except methods now accept an
101
- :alias option which is used as the alias for the returned dataset.
102
-
103
- DB[:table].union(DB[:old_table], :alias=>:table)
104
-
105
- * Model#destroy now supports a :transaction option, similar to
106
- Model#save.
107
-
108
- * The shared Oracle adapter now supports Dataset#sequence for
109
- returning autogenerated primary key values on insert from a
110
- related sequence.
111
-
112
- This makes Oracle work correctly when using models, with
113
- something like the following:
114
-
115
- class Album < Sequel::Model
116
- set_dataset dataset.sequence(:seq_albums_id)
117
- end
118
-
119
- You currently need to call Dataset#sequence in every model
120
- class where the underlying table uses a sequence to generate
121
- primary key values.
122
-
123
- Other Improvements
124
- ------------------
125
-
126
- * In Model #save and #destroy when using transactions and when
127
- raise_on_save_failure is false, ensure that transactions are rolled
128
- back if a before hook returns false.
129
-
130
- * Dataset#group_and_count now handles arguments other than Symbols.
131
- A previous change to the method raised an exception if a Symbol was
132
- not provided. It also handles AliasedExpressions natively, so the
133
- following works correctly:
134
-
135
- DB[:table].group_and_count(:column.as(:alias))
136
-
137
- * Sequel no longer uses native autoreconnection in the mysql adapter.
138
- Native autoreconnection has problems with prepared statements,
139
- where a new native connection is used behind Sequel's back, so
140
- Sequel thinks the prepared statement has already been defined on
141
- the connection, when it fact it hasn't. Any other changes that
142
- affect the state of the connection will be lost when native
143
- autoreconnection is used as well.
144
-
145
- Sequel's connection pool already handles reconnection if it detects
146
- a disconnection. This commit also adds an additional exception
147
- message to recognize as a disconnect. If there other exception
148
- messages related to disconnects, please post them on the Sequel
149
- mailing list.
150
-
151
- * The schema_dumper plugin now specifies the :type option for primary
152
- key if it isn't Integer.
153
-
154
- * On PostgreSQL, the bigserial type is used if :type=>Bignum is
155
- given as an option to primary key. This makes it operate more
156
- similarly to other adapters that support autoincrementing 64-bit
157
- integer primary keys.
158
-
159
- * The native mysql adapter will now attempt to load options in the
160
- [client] section of the my.cnf file.
161
-
162
- * The rake spec tasks for the project now work correctly with RSpec
163
- 1.2.9.
164
-
165
- Backwards Compatibility
166
- -----------------------
167
-
168
- * Dataset::GET_ERROR_MSG and Dataset::MAP_ERROR_MSG constants were
169
- removed. Both were replaced with Dataset::ARG_BLOCK_ERROR_MSG.
170
-
171
- * The behavior of the Model#save_failure private instance method was
172
- modified. It now always raises an exception, and validation
173
- failures no longer call it.
174
-
175
- * The internals of how autogenerated primary key metadata is stored
176
- when creating tables on PostgreSQL has been modified.
177
-
178
- * The native MySQL adapter no longer sets the OPT_LOCAL_INFILE option
179
- to "client" on the native connection.
@@ -1,151 +0,0 @@
1
- New Features
2
- ------------
3
-
4
- * Dataset#each_server was added, allowing you to run the same query
5
- (most likely insert/update/delete) on all shards. This is useful
6
- if you have a sharded database but have lookup tables that should
7
- be identical on all shards. It works by yielding copies of the
8
- current dataset that are tied to each server/shard:
9
-
10
- DB[:table].filter(:id=>1).each_server do |ds|
11
- ds.update(:name=>'foo')
12
- end
13
-
14
- * Database#each_server was added, allowing you to run schema
15
- modification methods on all shards. It works by yielding a
16
- new Sequel::Database object for each shard, that will connect to
17
- only that shard:
18
-
19
- DB.each_server do |db|
20
- db.create_table(:t){Integer :num}
21
- end
22
-
23
- * You can now add and remove servers/shards from the connection
24
- pool while Sequel is running:
25
-
26
- DB.add_servers(:shard1=>{:host=>'s1'}, :shard2=>{:host=>'s2'})
27
- DB.remove_servers(:shard1, :shard2)
28
-
29
- * When you attempt to disconnect from a server that has connections
30
- currently in use, Sequel will now schedule those connections to
31
- be disconnected when they are returned to the pool. Previously,
32
- Sequel disconnected available connections, but ignored connections
33
- currently in use, so it wasn't possible to guarantee complete
34
- disconnection from the server. Even with this new feature, you can
35
- only guarantee eventual disconnection, since disconnection of
36
- connections in use happens asynchronously.
37
-
38
- * Database#disconnect now accepts a :servers option specifying the
39
- server(s) from which to disconnect. This should be a symbol or
40
- array of symbols representing servers/shards. Only those specified
41
- will be disconnected:
42
-
43
- DB.disconnect(:servers=>[:shard1, :shard2])
44
-
45
- * A validates_type validation was added to the validation_helpers
46
- plugin. It allows you to check that a given column contains
47
- the correct type. I can be helpful if you are also using the
48
- serialization plugin to store serialized ruby objects, by making
49
- sure that the objects are of the correct type (e.g. Hash):
50
-
51
- def validate
52
- validates_type(Hash, :options)
53
- end
54
-
55
- * Sequel::SQL::Expression#== is now supported for all expressions:
56
-
57
- :column.qualify(:table).cast(:type) == \
58
- :column.qualify(:table).cast(:type)
59
- # => true
60
- :column.qualify(:table).cast(:type) == \
61
- :other_column.qualify(:table).cast(:type)
62
- # => false
63
-
64
- * When using the generic File type to create blob columns on
65
- MySQL, you can specify the specific database type by using the
66
- :size option (with :tiny, :medium, and :long values recognized):
67
-
68
- DB.create_table(:docs){File :body, :size=>:long} # longblob
69
-
70
- * The mysql adapter will now default to using mysqlplus, falling
71
- back to use mysql. mysqlplus is significantly better for threaded
72
- code because queries do not block the entire interpreter.
73
-
74
- * The JDBC adapter is now able to detect certain types of disconnect
75
- errors.
76
-
77
- * ConnectionPool.servers and Database.servers were added, which
78
- return an array of symbols specifying the servers/shards in use.
79
-
80
- Other Improvements
81
- ------------------
82
-
83
- * The single-threaded connection pool now raises
84
- DatabaseConnectionErrors if unable to connect, so it now operates
85
- more similarly to the default connection pool.
86
-
87
- * The single-threaded connection pool now operates more similar
88
- to the default connection pool when given a nonexistent server.
89
-
90
- * PGErrors are now correctly converted to DatabaseErrors in the
91
- postgres adapter when preparing statements or executing prepared
92
- statements.
93
-
94
- * DatabaseDisconnectErrors are now raised correctly in the postgres
95
- adapter if the connection status is not OK after a query raises an
96
- error.
97
-
98
- * In the mysql adapter, multiple statements in a single query should
99
- now be handled correctly in the all cases, not just when using
100
- Dataset#each. So you can now submit multiple queries in a single
101
- string to Database#run.
102
-
103
- * Model object creation on Microsoft SQL Server 2000 once again
104
- works correctly. Previously, an optimization was used that was
105
- only supported on 2005+.
106
-
107
- * Backslashes are no longer doubled inside string literals when
108
- connecting to Microsoft SQL Server.
109
-
110
- * The ORDER clause now correctly comes after the HAVING clause on
111
- Microsoft SQL Server.
112
-
113
- * Sequel now checks that there is an active transaction before
114
- rolling back transactions on Microsoft SQL Server, since
115
- there are cases where Microsoft SQL Server will roll back
116
- transactions implicitly.
117
-
118
- * Blobs are now handled correctly when connecting to H2.
119
-
120
- * 64-bit integers are now handled correctly in JDBC prepared
121
- statements.
122
-
123
- * In the boolean_readers plugin, correctly handle columns not in
124
- the db_schema, and don't raise an error if the model's columns
125
- can't be determined.
126
-
127
- * In the identity_map plugin, remove instances from the cache if they
128
- are deleted or destroyed.
129
-
130
- Backwards Compatibility
131
- -----------------------
132
-
133
- * Dataset::FROM_SELF_KEEP_OPTS was merged into
134
- Dataset::NON_SQL_OPTIONS. While used in different places, they
135
- were used for the same purpose, and entries missing from one should
136
- have been included in the other.
137
-
138
- * The connection pool internals changed substantially. Now,
139
- ConnectionPool #allocated and #available_connections will return
140
- nil instead of an array or hash if they are called with a
141
- nonexistent server. These are generally only used internally,
142
- though they are part of the public API. #created_count and #size
143
- still return the size of the :default server when called with a
144
- nonexistent server, though.
145
-
146
- * The meta_eval and metaclass private methods were removed from
147
- Sequel::MetaProgramming (only the meta_def public method remains).
148
- If you want these methods, use the metaid gem.
149
-
150
- * The irregular ox->oxen pluralization rule was removed from the
151
- default inflections, as it screws up the more common box->boxes.