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,221 +0,0 @@
1
- Deprecated Methods/Features Removed
2
- -----------------------------------
3
-
4
- Methods and features that were deprecated in 2.12.0 have been removed
5
- in 3.0.0. Many features were moved into plugins or extensions, so in
6
- many cases you just need to require an extension or use Model.plugin
7
- and not make any changes to your code. See the 2.12.0 release notes
8
- for the list of methods/features deprecated in 2.12.0.
9
-
10
- If you are upgrading from a previous 2.x release, please upgrade to
11
- 2.12.0 first, fix your code to remove all deprecation warnings, and
12
- then upgrade to 3.0.0.
13
-
14
- New Adapter
15
- -----------
16
-
17
- * Sequel now has an Amalgalite adapter. Amalgalite is a ruby
18
- extension that embeds SQLite without requiring a separate SQLite
19
- installation. The adapter is functionality complete but
20
- significantly slower than the native SQLite adapter.
21
-
22
- New Features
23
- ------------
24
-
25
- * The JDBC, PostgreSQL, MySQL, and SQLite adapters all now have a
26
- Database#indexes method that returns indexes for a given table:
27
-
28
- DB.indexes(:songs)
29
- => {:songs_name_index=>{:unique=>true, :columns=>[:name]},
30
- :songs_lyricid_index=>{:unique=>false, :columns=>[:lyricid]}}
31
-
32
- * A schema_dumper extension was added to Sequel. It supports dumping
33
- the schema of a table (including indexes) as a string that can be
34
- evaluated in the context of a Database object to create the table.
35
- It also supports dumping all tables in the database as a string
36
- containing a Migration subclass that will rebuild the database.
37
-
38
- require 'sequel/extensions/schema_dumper'
39
- DB.dump_table_schema(:table)
40
- DB.dump_schema_migration
41
- DB.dump_schema_migration(:same_db=>true)
42
- DB.dump_schema_migration(:indexes=>false)
43
- DB.dump_indexes_migration
44
-
45
- The :same_db option causes Sequel to not translate column types
46
- to generic column types. By default, the migration created will
47
- use generic types so it will run on other databases. However, if
48
- you only want to support a single database, using the :same_db
49
- option will make the migration use the exact database type parsed
50
- from the database.
51
-
52
- The :indexes=>false option causes indexes not be included in the
53
- migration. The dump_indexes_migration can be used to create a
54
- separate migration with the indexes. This can be useful if you
55
- plan on loading a lot of data right after creating the tables,
56
- since it is faster to add indexes after the data has been added.
57
-
58
- * Using options with the generic database types is now supported to
59
- a limited extent. For example, the following code now works:
60
-
61
- DB.create_table(:table) do
62
- String :a, :size=>50 # varchar(50)
63
- String :b, :text=>true # text
64
- String :c, :fixed=>true, :size=>30 # char(30)
65
- Time :ts # timestamp
66
- Time :t, :only_time=>true # time
67
- end
68
-
69
- * Using Dataset#filter and related methods with multiple arguments
70
- now works much more intuitively:
71
-
72
- # 2.12.0
73
- dataset.filter(:a, :b=>1) # a IS NULL AND (b = 1) IS NULL
74
- # 3.0.0
75
- dataset.filter(:a, :b=>1) # a AND b = 1
76
-
77
- * You can now create temporary tables by passing the :temp=>true
78
- option to Database#create_table.
79
-
80
- * The Oracle shared adapter now supports emulation of
81
- autoincrementing primary keys by creating a sequence and a trigger,
82
- similar to how the Firebird adapter works.
83
-
84
- * The Database#database_type method was added that returns a symbol
85
- specifying the database type being used. This can be different
86
- than Database.adapter_scheme if you are using an adapter like
87
- JDBC that allows connecting to multiple different types of
88
- databases.
89
-
90
- * Database#drop_index and related methods now support an options
91
- hash that respects the :name option, so they can now be used to
92
- drop an index that doesn't use the default index name.
93
-
94
- * The PostgreSQL shared adapter now supports a
95
- Database#reset_primary_key_sequence method to reset the
96
- primary key sequence for a given table, based on code from
97
- ActiveRecord.
98
-
99
- * SQL::QualifiedIdentifiers can now be qualified, allowing you to do:
100
-
101
- :column.qualify(:table).qualify(:schema)
102
-
103
- * Using the :db_type=>'mssql' option with the DBI adapter will now
104
- load the MSSQL support.
105
-
106
- * The MySQL shared adapter now supports Dataset#full_text_sql, which
107
- you can use in queries like the following:
108
-
109
- ds.select(:table.*, ds.full_text_sql(:column, 'value').as(:ft))
110
-
111
- Other Improvements
112
- ------------------
113
-
114
- * Sequel will now release connections from the connection pool
115
- automatically if they are held by a dead thread. This can happen
116
- if you are using MRI 1.8 and you are heavily multithreaded or
117
- you call Thread#exit! or similar method explicitly. Those methods
118
- skip the execution of ensure blocks which normally release the
119
- connections when the threads exit.
120
-
121
- * Model#save will now always use the same server when refreshing data
122
- after an insert. This fixes an issue when Sequel's master/slave
123
- database support is used with models.
124
-
125
- * SQL Array references are now quoted correctly, so code like this
126
- now works:
127
-
128
- :table__column.sql_subscript(1)
129
-
130
- * The PostgreSQL shared adapter now handles sequences that need to be
131
- quoted correctly (previously these were quoted twice).
132
-
133
- * String quoting on Oracle no longer doubles backslashes.
134
-
135
- * Database#count now works correctly when used on MSSQL when using
136
- an adapter that doesn't handle unnamed columns.
137
-
138
- * Full text searching in the MySQL adapter now works correctly when
139
- multiple search terms are used.
140
-
141
- * Altering a column's name, type, default, or NULL/NOT NULL status
142
- on MySQL now keeps other relevent column information. For example,
143
- if you alter a column's type, it'll keep an existing default. This
144
- functionality isn't complete, there may be other column information
145
- that is lost.
146
-
147
- * Fix creation of an index with a given type on MySQL, since MySQL's
148
- documentation lies.
149
-
150
- * The schema parser now handles decimal types with size specifiers,
151
- fixing use on MySQL.
152
-
153
- * Dataset#quote_identifier now works correctly when given an
154
- SQL::Identifier. This allows you to do:
155
-
156
- dataset.select{sum(hours).as(hours)}
157
-
158
- Backwards Compatibility
159
- -----------------------
160
-
161
- * Sequel will now use instance_eval on all virtual row blocks without
162
- an argument. This can lead to much nicer code:
163
-
164
- dataset.filter{(number > 10) & (name > 'M')}
165
- # WHERE number > 10 AND name > 'M'
166
-
167
- 2.12.0 raised a deprecation warning if you used a virtual row block
168
- without an argument and you hadn't set
169
- Sequel.virtual_row_instance_eval = true.
170
-
171
- * Dataset#exclude now inverts the given argument, instead of negating
172
- it. This only changes its behavior if it is called with a hash or
173
- array of all two pairs that have more than one element.
174
-
175
- # 2.12.0
176
- dataset.exclude(:a=>1, :b=>1) # a != 1 AND b != 1
177
- # 3.0.0
178
- dataset.exclude(:a=>1, :b=>1) # a != 1 OR b != 1
179
-
180
- This was done for consistency, since exclude would only negate a
181
- hash if it was given an argument, it would invert the same hash
182
- if you used a block:
183
-
184
- # 2.12.0
185
- dataset.exclude{{:a=>1, :b=>1}} # a != 1 OR b != 1
186
-
187
- If you want the previous behavior,
188
- change the code to the following:
189
-
190
- dataset.filter({:a=>1, :b=>1}.sql_negate)
191
-
192
- * As noted above, the methods/features deprecated in 2.12.0 were
193
- removed.
194
-
195
- * The private Dataset#select_*_sql methods now only take a single
196
- argument, the SQL string being built.
197
-
198
- * Dataset#from when called without arguments would previously cause an
199
- error to be raised when the SQL string is generated. Now it causes
200
- no FROM clause to be used, similar to how Dataset#select with no
201
- arguments causes SELECT * to be used.
202
-
203
- * The internals of the generic type support and the schema generators
204
- were changed significantly, which could have some fallout in terms
205
- of old migrations breaking if they used the generic types and were
206
- relying on some undocumented behavior (such as using Integer as a
207
- type with the :unsigned option).
208
-
209
- * The Firebird adapter no longer translates the text database
210
- specific type. Use the following instead:
211
-
212
- String :column, :text=>true
213
-
214
- * The MySQL shared adapter used to use the timestamp type for Time,
215
- now it uses datetime. This is because the timestamp type cannot
216
- represent everything that the ruby Time class can represent.
217
-
218
- * Metaprogramming#metaattr_accessor and #metaattr_reader methods were
219
- removed.
220
-
221
- * Dataset#irregular_function_sql was removed.
@@ -1,406 +0,0 @@
1
- New Plugins
2
- -----------
3
-
4
- 3 new plugins were added that implement features supported by
5
- DataMapper: identity_map, tactical_eager_loading, and
6
- lazy_attributes. These plugins don't add any real new features,
7
- since you can do most of what they allow before simply by being
8
- a little more explicit in your Sequel code. However, some people
9
- prefer a less explicit approach that uses a bit more magic, and
10
- now Sequel can accomodate them.
11
-
12
- * The identity_map plugin allows you to create a 1-1
13
- correspondence of model objects to database rows via a temporary
14
- thread-local identity map. It makes the following statment true:
15
-
16
- Sequel::Model.with_identity_map do
17
- Album.filter{(id > 0) & (id < 2)}.first.object_id == \
18
- Album.first(:id=>1).object_id
19
- end
20
-
21
- As the code above implies, you need to use the with_identity_map
22
- method with a block to use the identity mapping feature.
23
-
24
- By itself, identity maps don't offer much, but Sequel uses them
25
- as a cache when looking up objects by primary key or looking up
26
- many_to_one associated objects. Basically, it can be used as a
27
- performance enhancer, and it also allows the support of the
28
- lazy_attributes plugin.
29
-
30
- The identity_map plugin is expected to be most useful in web
31
- applications. With that in mind, here's a Rack middleware that
32
- wraps each request in a with_identity_map call, so the
33
- identity_map features are available inside the web app:
34
-
35
- Sequel::Model.plugin :identity_map
36
- class SequelIdentityMap
37
- def initialize(app)
38
- @app = app
39
- end
40
- def call(env)
41
- Sequel::Model.with_identity_map{@app.call(env)}
42
- end
43
- end
44
-
45
- * The tactical_eager_loading plugin allows you to eagerly load an
46
- association for all models retrieved in the same group whenever
47
- one of the models accesses the association:
48
-
49
- # 2 queries total
50
- Album.filter{id<100}.all do |a|
51
- a.artists
52
- end
53
-
54
- In order for this correctly, you must use Dataset#all to load the
55
- records, you cannot iterate over them via Dataset#each. This is
56
- because eager loading requires that you have all records in
57
- advance, and when using Dataset#each you cannot know about later
58
- records in the dataset.
59
-
60
- Before, you could just be explicit about the associations you
61
- needed and make sure to eagerly load them using eager before
62
- calling Dataset#all.
63
-
64
- * The lazy_attributes plugin builds on the identity_map and
65
- tactical_eager_loading plugins and allows you to create
66
- attributes that are lazily loaded from the database:
67
-
68
- Album.plugin :lazy_attributes, :review
69
-
70
- This will remove the :review attribute from being selected by
71
- default. If you try to access the attribute after it is selected,
72
- it'll retrieve the value from the database. If the object was
73
- retrieved with a group of other objects and an identity map is in
74
- use, it'll retrieve the lazy attribute for the entire group of
75
- objects at once, similar to the tatical_eager_loading plugin:
76
-
77
- # 2 queries total
78
- Sequel::Model.with_identity_map do
79
- Album.filter{id<100}.all do |a|
80
- a.review
81
- end
82
- end
83
-
84
- Before, you could just set the default selected columns for a model
85
- to not include the lazy attributes, and just use select_more to
86
- add them to any query where the resulting model objects will
87
- need the attributes.
88
-
89
- * A many_through_many plugin was also added. This very powerful
90
- plugin allows you to create associations to multiple objects through
91
- multiple join tables. Here are some examples:
92
-
93
- # Assume the following many to many associations:
94
- Artist.many_to_many :albums
95
- Album.many_to_many :tags
96
-
97
- # Same as Artist.many_to_many :albums
98
- Artist.many_through_many :albums,
99
- [[:albums_artists, :artist_id, :album_id]]
100
-
101
- # All tags associated to any album this artist is associated to
102
- Artist.many_through_many :tags,
103
- [[:albums_artists, :artist_id, :album_id],
104
- [:albums, :id, :id],
105
- [:albums_tags, :album_id, :tag_id]]
106
-
107
- # All artists associated to any album this artist is associated to
108
- Artist.many_through_many :artists,
109
- [[:albums_artists, :artist_id, :album_id],
110
- [:albums, :id, :id],
111
- [:albums_artists, :album_id, :artist_id]]
112
-
113
- # All albums by artists that are associated to any album this
114
- # artist is associated to
115
- Artist.many_through_many :artist_albums,
116
- [[:albums_artists, :artist_id, :album_id],
117
- [:albums, :id, :id],
118
- [:albums_artists, :album_id, :artist_id],
119
- [:artists, :id, :id],
120
- [:albums_artists, :artist_id, :album_id]]
121
-
122
- Basically, for each join table between this model and the
123
- associated model, you use an array with a join table name, left key
124
- name (key closer to this model), and right key name (key closer to
125
- the associated model).
126
-
127
- In usual Sequel fashion, this association type works not just
128
- for single objects, but it can also be eagerly loaded via eager or
129
- eager_graph. There are numerous additional configuration options,
130
- please see the RDoc for details.
131
-
132
- New bin/sequel Features
133
- -----------------------
134
-
135
- The bin/sequel command line tool now supports the following options:
136
-
137
- * -C: Copies one database to another. You must specify two database
138
- arguments. Works similar to Taps, copying the table schema, then
139
- the table data, then creating the indexes.
140
-
141
- * -d: Dump the schema of the database in the database-independent
142
- migration format.
143
-
144
- * -D: Dump the schema of the database in the database-specific
145
- migration format.
146
-
147
- * -h: Display the help
148
-
149
- * -t: Output the full backtrace if an exception is raised
150
-
151
- The bin/sequel tool is now better about checking which options can
152
- be used together. It also now supports using the -L option multiple
153
- times and having it load model files from multiple directory trees.
154
-
155
- New Features
156
- ------------
157
-
158
- * Dataset#qualify_to and #qualify_to_first_source were added. They
159
- allow you to qualify unqualified columns in the current dataset
160
- to the given table or the first source. This can be used to join
161
- a dataset that has unqualified columns to a new table which has
162
- columns with the same name.
163
-
164
- For example, take this dataset:
165
-
166
- ds = DB[:albums].select(:name).order(:name).filter(:id=>1)
167
- # SELECT name FROM albums WHERE (id = 1) ORDER BY name
168
-
169
- Let's say you want to join it to the artists table:
170
-
171
- ds2 = ds.join(:artists, :id=>:artist_id)
172
- # SELECT name FROM albums
173
- # INNER JOIN artists ON (artists.id = albums.artist_id)
174
- # WHERE (id = 1) ORDER BY name
175
-
176
- That's going to give you an error, as the artists table already has
177
- columns named id and name. This new feature allows you to do the
178
- following:
179
-
180
- ds2 = ds.qualify_to_first_source.join(:artists, :id=>:artist_id)
181
- # SELECT albums.name FROM albums
182
- # INNER JOIN artists ON (artists.id = albums.artist_id)
183
- # WHERE (albums.id = 1) ORDER BY albums.name
184
-
185
- By doing this, all unqualified columns are qualified, so you get
186
- a usable query. This is expected to be most useful for users that
187
- have a default order or filter on their models and want to join
188
- the model to another table. Before you had to replace the filters,
189
- selection, etc. manually, or use qualified columns by default even
190
- though the weren't needed in most cases.
191
-
192
- * Savepoints are now supported using SQLite and MySQL, assuming you
193
- are using a database version that supports them. You need to
194
- pass the :savepoint option to Database#transaction to use a
195
- savepoint.
196
-
197
- * Model plugins can now depend on other plugins, simply by calling
198
- the Model.plugin method inside the plugin's apply method:
199
-
200
- module LazyAttributes
201
- def self.apply(model)
202
- model.plugin :tactical_eager_loading
203
- end
204
-
205
- * Model.plugin now takes a block with is passed to the plugin's
206
- apply and configure method (see Backwards Compatibility section for
207
- more information on the configure method).
208
-
209
- * You can see which plugins are loaded for a model by using
210
- Model.plugins.
211
-
212
- * You can use Sequel.extension method to load extensions:
213
-
214
- Sequel.extension :pagination, :query
215
-
216
- This will only load extensions that ship with Sequel, unlike the
217
- Model.plugin method which will also load external plugins.
218
-
219
- * You can now use Database#create_table? to create the table if it
220
- doesn't already exist (a very common need, it seems). The schema
221
- plugin now supports Model.create_table? as well.
222
-
223
- * #sql_subscript is now an allowed method on most SQL expression
224
- objects that Sequel generates. Also, arguments to #sql_subscript
225
- can now be other expressions instead of just integers.
226
-
227
- * Associations can now take a :cartesian_product_number option, which
228
- can be used to tell Sequel whether to turn on duplicate object
229
- detection when eagerly loading objects through eager_graph. This
230
- number should be 0 if the association can never create multiple
231
- rows for each row in the current table, 1 if it can create multiple
232
- rows in the each row in the current table, and 2 if the association
233
- itself causes a cartesian product.
234
-
235
- * On MySQL, Dataset#insert_ignore now affects #insert as well as
236
- multi_insert and import.
237
-
238
- * Database#create_table now supports an :ignore_index_errors option,
239
- and Database#add_index now supports an :ignore_errors option.
240
- These are used by the schema_dumper when dumping an database
241
- schema to be restored on another database type, since indexes
242
- aren't usually required for proper operation and some indexes
243
- can't be transferred.
244
-
245
- * The ADO adapter now takes a :provider option, which can be used
246
- to set the provider.
247
-
248
- * The ADO adapter now takes a :command_timeout option, which tells
249
- the connection how long to wait before giving up and raising an
250
- exception.
251
-
252
- * The Sequel.amalgalite adapter method was added. Like the
253
- Sequel.sqlite method, you can call it with no arguments to get
254
- an in memory database.
255
-
256
- Other Improvements
257
- ------------------
258
-
259
- * MySQL "commands out of sync" errors should no longer occur unless
260
- you are nesting queries (calling Dataset#each inside Dataset#each).
261
- A bug dating at least to 2007 and possibly since the initial
262
- creation of the Sequel MySQL adapter was the cause. Before, SQL
263
- that caused a result set that was sent using a method where Sequel
264
- doesn't yield a result set would cause the "commands out of sync"
265
- error on the following query. For example, the following code
266
- would cause the error:
267
-
268
- DB << "SHOW DATABASES"
269
-
270
- If for some reason a "commands out of sync" error does occur,
271
- Sequel will disconnect the connection from the connection pool,
272
- so it won't continually stay in the pool and raise errors every
273
- time it is used.
274
-
275
- * The schema_dumper extension is much better about parsing defaults
276
- from the database. It can now correctly parse most defaults on
277
- MySQL, SQLite, and PostgreSQL databases. It no longer includes
278
- defaults that it can't parse to a ruby object unless a database-
279
- specific dump is requested.
280
-
281
- * The schema_dumper extension now dumps tables in alphabetical order.
282
-
283
- * Ordered and limited datasets are now handled correctly when using
284
- union, intersect, and except. Also, union, intersect, and except
285
- now always return a from_self dataset, so further limiting,
286
- filtering, and ordering of them now works as expected.
287
-
288
- * Dataset#graph now works correctly with a complex dataset without
289
- having to use from_self. Before, code like the following didn't
290
- do what was expected:
291
-
292
- DB[:albums].
293
- graph(DB[:artists].filter{name > 'M'}, :id=>:artist_id)
294
-
295
- Before, the filter on DB[:artists] would be dropped. Now, Sequel
296
- correctly uses a subselect.
297
-
298
- * You can now specify serialization formats per column in the
299
- serialization plugin, either by calling the plugin multiple
300
- times or by using the new serialize_attributes method:
301
-
302
- Album.plugin :serialization
303
- Album.serialize_attributes :marshal, :review
304
- Album.serialize_attributes :yaml, :name
305
- Album.serialization_map #{:name=>:yaml, :review=>:marshal}
306
-
307
- The public API for the serialization plugin is still backwards
308
- compatible, but the internals have changed slightly to support
309
- this new feature.
310
-
311
- * You can now use eager_graph to eagerly load associations for models
312
- that lack primary keys.
313
-
314
- * The :eager_graph association option now works when lazily-loading
315
- many_to_many associations.
316
-
317
- * Dataset#add_graph_aliases now works correctly even if
318
- set_graph_aliases hasn't been used.
319
-
320
- * The PostgreSQL Database#tables method now assumes the public schema
321
- if a schema is not given and there is no default_schema.
322
-
323
- * The PostgreSQL Database#indexes method no longer returns partial
324
- indexes or functional indexes.
325
-
326
- * The MySQL Database#indexes method no longer returns indexes on
327
- partial columns (prefix indexes).
328
-
329
- * Default values for String :text=>true and File columns on MySQL
330
- are ignored, since MySQL doesn't support them. They are not
331
- ignored if you use text and blob, since then you are using the
332
- database-specific syntax and Sequel doesn't do translation when
333
- the database-specific syntax is used.
334
-
335
- * On PostgreSQL, attempting the reset the primary key sequence for a
336
- table without a primary key no longer causes an error.
337
-
338
- * Using a placeholder string in an association's :condition option
339
- now works correctly (e.g. :conditions=>['n = ?', 1])
340
-
341
- * An error is no longer raised if you attempt to load a plugin that
342
- has a DatasetMethods module but no public dataset methods.
343
-
344
- * The check for dataset[n] where n is an integer was fixed. It now
345
- raises an error inside of returning a limited dataset.
346
-
347
- * On PostgreSQL, Dataset#insert with static SQL now works correctly.
348
-
349
- * A reflection.rdoc file was added giving an overview of Sequel's
350
- reflection support.
351
-
352
- * The Migrator now works correctly with file names like
353
- 001_12312412_file_name.rb.
354
-
355
- * The association code now requires the classes match when looking
356
- for a reciprocal association.
357
-
358
- * An unlikely threading bug (race condition) was possible when using
359
- the validation_class_methods plugin. The plugin was refactored and
360
- now uses a mutex to avoid the issue. One of the refactoring changes
361
- makes it so that you can no longer use a class level vaildation
362
- inside a Class.new block (since inherited isn't called until the
363
- block finishes).
364
-
365
- * The exception messages when Sequel.string_to_* fail have been fixed.
366
-
367
- * The String :text=>true generic database type has been fixed when
368
- using the Firebird adapter.
369
-
370
- Backwards Compatibility
371
- -----------------------
372
-
373
- * A plugin's apply method is now only called the first time a plugin
374
- is loaded. Plugins can now have a configure method that is called
375
- every time the plugin is loaded, and is always called after the
376
- instance methods, class methods, and dataset method submodules have
377
- been added to the model. This is different from apply, which is
378
- called before the submodules are loaded.
379
-
380
- If you are a plugin author, please check your implementation to
381
- make sure this doesn't cause problems for you. If you have
382
- questions, please post on the Sequel mailing list.
383
-
384
- This new plugin feature will make certain things a lot easier, and
385
- it should be mostly backwards compatible. However, if a plugin
386
- was previously expected to be loaded multiple times with the apply
387
- method called each time, it will no longer work correctly.
388
-
389
- * The plugin_opts methods defined now include multiple args in an
390
- array if multiple args are given. Before, the plugin_opts methods
391
- just returned the first argument.
392
-
393
- * Database#table_exists? no longer checks the cached schema
394
- information. By default, it will always do a database query
395
- (unless overridden in an adapter). This shouldn't affect the
396
- results, but if were using the method a lot and expecting it to
397
- use cached information, it doesn't have the same performance
398
- characteristics.
399
-
400
- * The internal storage of the :select option for datasets have
401
- changed. You can no longer use a hash as a way of aliasing
402
- columns. Dataset#select now does the translation from the hash to
403
- SQL::AliasedExpression instances. Basically, if you were using
404
- Dataset#clone directly with a :select option with hashes for
405
- aliasing, you should switch to using Dataset#select or changing
406
- the hashes to AliasedExpressions yourself.