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,420 +0,0 @@
1
- = Prepared Statement Plugins
2
-
3
- * The prepared_statements plugin makes Sequel::Model classes use
4
- prepared statements for creating, updating, and destroying model
5
- instances, as well as looking up model objects by primary key.
6
- With this plugin, all of the following will use prepared
7
- statements:
8
-
9
- Artist.plugin :prepared_statements
10
- Artist.create(:name=>'Foo')
11
- a = Artist[1]
12
- a.update(:name=>'Bar')
13
- a.destroy
14
-
15
- * The prepared_statements_safe plugin reduces the number of
16
- prepared statements that can be created by doing two things. First,
17
- it makes the INSERT statements used when creating instances to use
18
- as many columns as possible, setting specific values for all
19
- columns with parseable default values. Second, it changes
20
- save_changes to just use save, saving all columns instead of just
21
- the changed ones.
22
-
23
- The reason for this plugin is that Sequel's default behavior of
24
- using only the values specifically set when creating instances
25
- and having update only set changed columns by default can lead
26
- to a large number of prepared statements being created.
27
-
28
- For prepared statements to be used, each set of columns in the
29
- insert and update statements needs to have its own prepared
30
- statement. If you have a table with 1 primary key column and
31
- 4 other columns, you can have up to 2^4 = 16 prepared statements
32
- created, one for each subset of the 4 columns. If you have 1
33
- primary key column and 20 other columns, there are over a million
34
- subsets, and you could hit your database limit for prepared
35
- statements (a denial of service attack).
36
-
37
- Using the prepared_statements_safe plugin mitigates this
38
- issue by reducing the number of columns that may or may not be
39
- present in the query, in many cases making sure that each model
40
- will only have a single INSERT and a single UPDATE prepared
41
- statement.
42
-
43
- * The prepared_statements_associations plugin allows normal
44
- association method calls to use prepared statements if possible.
45
- For example:
46
-
47
- Artist.plugin :prepared_statements_associations
48
- Artist.many_to_one :albums
49
- Artist[1].albums
50
-
51
- Will use a prepared statement to return the albums for that artist.
52
- This plugin works for all supported association types. There are
53
- some associations (filtered and custom associations) that Sequel
54
- cannot currently use a prepared statement reliably, for those
55
- Sequel will use a regular query.
56
-
57
- * The prepared_statements_with_pk plugin allows the new
58
- Dataset#with_pk method (explained below) to use prepared statements.
59
- For example:
60
-
61
- Artist.plugin :prepared_statements_with_pk
62
- Artist.filter(...).with_pk(1)
63
-
64
- Will use a prepared statement for this query. The most benefit
65
- from prepared statements come from queries that are expensive to
66
- parse and plan but quick to execute, so using this plugin with
67
- a complex filter can in certain cases yield significant performance
68
- improvements.
69
-
70
- However, this plugin should be considered unsafe as it is possible
71
- that it will create an unbounded number of prepared statements. It
72
- extracts parameters from the dataset using Dataset#unbind
73
- (explained below), so if your code has conditions that vary per
74
- query but that Dataset#unbind does not handle, an unbounded number
75
- of prepared statements can be created. For example:
76
-
77
- Artist.filter(:a=>params[:b].to_i).with_pk[1]
78
- Artist.exclude{a > params[:b].to_i}.with_pk[1]
79
-
80
- are safe, but:
81
-
82
- Artist.filter(:a=>[1, params[:b].to_i]).with_pk[1]
83
- Artist.exclude{a > params[:b].to_i + 2}.with_pk[1]
84
-
85
- are not. For queries that are not safe, Dataset#with_pk should
86
- not be used with this plugin, you should switch to looking up by
87
- primary key manually (for a regular query):
88
-
89
- Artist.filter(:a=>[1, params[:b].to_i])[:id=>1]
90
-
91
- or using the prepared statement API to create a custom prepared
92
- statement:
93
-
94
- # PS = {}
95
- PS[:name] ||= Artist.filter(:a=>[1, :$b], :id=>:$id).
96
- prepare(:select, :name)
97
- PS[:name].call(:b=>params[:b].to_i, :id=>1)
98
-
99
- = Other New Features
100
-
101
- * Filtering by associations got a lot more powerful. Sequel 3.23.0
102
- introduced filtering by associations:
103
-
104
- Album.filter(:artist=>artist)
105
-
106
- This capability is much expanded in 3.24.0, allowing you to
107
- exclude by associations:
108
-
109
- Album.exclude(:artist=>artist)
110
-
111
- This will match all albums not by that artist.
112
-
113
- You can also filter or exclude by multiple associated objects:
114
-
115
- Album.filter(:artist=>[artist1, artist2])
116
- Album.exclude(:artist=>[artist1, artist2])
117
-
118
- The filtered dataset will match all albums by either of those
119
- two artists, and the excluded dataset will match all albums not
120
- by either of those two artists.
121
-
122
- You can also filter or exclude by using a model dataset:
123
-
124
- Album.filter(:artist=>Artist.filter(:name.like('A%'))).all
125
- Album.exclude(:artist=>Artist.filter(:name.like('A%'))).all
126
-
127
- Here the filtered dataset will match all albums where the
128
- associated artist has a name that begins with A, and the excluded
129
- dataset will match all albums where the associated artist does not
130
- have a name that begins with A.
131
-
132
- All of these types of filtering and excluding work with all of
133
- association types that ship with Sequel, even the many_through_many
134
- plugin.
135
-
136
- * Sequel now supports around hooks, which wrap the related before
137
- hook, behavior, and after hook. Like other Sequel hooks, these
138
- are implemented as instance methods. For example, if you wanted
139
- to log DatabaseErrors raised during save:
140
-
141
- class Artist < Sequel::Model
142
- def around_save
143
- super
144
- rescue Sequel::DatabaseError => e
145
- # log the error
146
- raise
147
- end
148
- end
149
-
150
- All around hooks should call super, not yield. If an around hook
151
- doesn't call super or yield, it is treated as a hook failure,
152
- similar to before hooks returning false.
153
-
154
- For around_validation, the return value of super should be whether
155
- the object is valid. For other around hooks, the return value of
156
- super is currently true, but it's possible that will change in the
157
- future.
158
-
159
- * Dataset#with_pk has been added to model datasets that allows you
160
- to find the object with the matching primary key:
161
-
162
- Artist.filter(:name.like('A%')).with_pk(1)
163
-
164
- This should make easier the common case where you want to find
165
- a particular object that is associated to another object:
166
-
167
- Artist[1].albums_dataset.with_pk(2)
168
-
169
- Before, there was no way to do that without manually specifying
170
- the primary key:
171
-
172
- Artist[1].albums_dataset[:id=>2]
173
-
174
- To use a composite primary key with with_pk, you have to provide
175
- an array:
176
-
177
- Artist[1].albums_dataset.with_pk([1, 2])
178
-
179
- * Dataset#[] for model datasets will now call with_pk if given a
180
- single Integer argument. This makes the above case even easier:
181
-
182
- Artist[1].albums_dataset[2]
183
-
184
- Note that for backwards compatibility, this only works for
185
- single integer primary keys. If you have a composite primary key
186
- or a string/varchar primary key, you have to use with_pk.
187
-
188
- * Dataset#unbind has been added, which allows you to take a dataset
189
- that uses static bound values and convert them to placeholders.
190
- Currently, the only cases handled are SQL::ComplexExpression
191
- objects that use a =, !=, <, >, <=, or >= operator where the first
192
- argument is a Symbol, SQL::Indentifier, or
193
- SQL::QualifiedIdentifier, and the second argument is a Numeric,
194
- String, Date, or Time. Dataset#unbind returns a two element array,
195
- where the first element is a modified copy of the receiver, and the
196
- second element is a bound variable hash:
197
-
198
- ds, bv = DB[:table].filter(:a=>1).unbind
199
- ds # DB[:table].filter(:a=>:$a)
200
- bv # {:a=>1}
201
-
202
- The purpose of doing this is that you can then use prepare or call
203
- on the returned dataset with the returned bound variables:
204
-
205
- ds.call(:select, bv)
206
- # SELECT * FROM table WHERE (a = ?); [1]
207
-
208
- ps = ds.prepare(:select, :ps_name)
209
- # PREPARE ps_name AS SELECT * FROM table WHERE (a = ?)
210
- ps.call(bv)
211
- # EXECUTE ps_name(1)
212
-
213
- Basically, Dataset#unbind takes a specific statement and attempts
214
- to turn it into a generic statement, along with the placeholder
215
- values it extracted.
216
-
217
- Unfortunately, Dataset#unbind cannot handle all cases. For
218
- example:
219
-
220
- DB[:table].filter{a + 1 > 10}.unbind
221
-
222
- will not unbind any values. Also, if you have a query with
223
- multiple different values for a variable, it will raise an
224
- UnbindDuplicate exception:
225
-
226
- DB[:table].filter(:a=>1).or(:a=>2).unbind
227
-
228
- * A defaults_setter plugin has been added that makes it easy to
229
- automatically set default values when creating new objects. This
230
- plugin makes Sequel::Model behave more like ActiveRecord in that
231
- new model instances (before saving) will have default values
232
- parsed from the database. Unlike ActiveRecord, only values with
233
- non-NULL defaults are set. Also, Sequel allows you to easily
234
- modify the default values used:
235
-
236
- Album.plugin :default_values
237
- Album.new.values # {:copies_sold => 0}
238
- Album.default_values[:copies_sold] = 42
239
- Album.new.values # {:copies_sold => 42}
240
-
241
- Before, this was commonly done in an after_initialize hook, but
242
- that's slower as it is also called for model instances loaded from
243
- the database.
244
-
245
- * A Database#views method has been added that returns an array
246
- of symbols representing view names in the database. This works
247
- just like Database#tables except it returns views.
248
-
249
- * A Sequel::ASTTransformer class was added that makes it easy to
250
- write custom transformers of Sequel's internal abstract syntax
251
- trees. Dataset#qualify now uses a subclass of ASTTransformer to do
252
- its transformations, as does the new Dataset#unbind.
253
-
254
- = Other Improvements
255
-
256
- * Database#create_table? now uses a single query with IF NOT EXISTS
257
- if the database supports such syntax. Previously, it issued a
258
- SELECT query to determine table existence. Sequel currently
259
- supports this syntax on MySQL, H2, and SQLite 3.3.0+.
260
-
261
- The Database#supports_create_table_if_not_exists? method was added
262
- to allow users to determine whether this syntax is supported.
263
-
264
- * Multiple column IN/NOT IN emulation now works correctly with
265
- model datasets (or other datasets that use a row_proc).
266
-
267
- * You can now correctly invert SQL::Constant instances:
268
-
269
- Sequel::NULL # NULL
270
- ~Sequel::NULL # NOT NULL
271
- Sequel::TRUE # TRUE
272
- ~Sequel::TRUE # FALSE
273
-
274
- * A bug in the association_pks plugin has been fixed in the case
275
- where the associated table had a different primary key column name
276
- than the current table.
277
-
278
- * The emulated prepared statement support now supports nil and false
279
- as bound values.
280
-
281
- * The to_dot extension was refactored for greater readability. The
282
- only change was a small fix in the display for SQL::Subscript
283
- instances.
284
-
285
- * The Dataset#supports_insert_select? method is now available to let
286
- you know if the dataset supports insert_select. You should use
287
- this method instead of respond_to? for checking for insert_select
288
- support.
289
-
290
- * Prepared statements/bound variable can now use a new :insert_select
291
- type for preparing a statement that will insert a row and return
292
- the row inserted, if the dataset supports insert_select.
293
-
294
- * The Model#initialize_set private method now exists for easier plugin
295
- writing. It is only called for new model objects, with the hash
296
- given to initialize. By default, it just calls set.
297
-
298
- * A small bug when creating anonymous subclasses of Sequel::Model on
299
- ruby 1.9 has been fixed.
300
-
301
- * If Thread#kill is used inside a transaction on ruby 1.8 or
302
- rubinius, the transaction is rolled back. This situation is not
303
- handled correctly on JRuby or ruby 1.9, and I'm not sure it's
304
- possible to handle correctly on those implementations.
305
-
306
- * The postgres adapter now supports the
307
- Sequel::Postgres::PG_NAMED_TYPES hash for associating conversion
308
- procs for custom types that don't necessarily have the same type
309
- oid on different databases. This hash uses symbol keys and
310
- proc values:
311
-
312
- Sequel::Postgres::PG_NAMED_TYPES[:interval] = proc{|v| ...}
313
-
314
- The conversion procs now use a separate hash per Database object
315
- instead of a hash shared across all Database objects. You
316
- can now modify the types for a particular Database object, but
317
- you have to use the type oid:
318
-
319
- DB.conversion_procs[42] = proc{|v| ...}
320
-
321
- * On SQLite and MSSQL, literalization of true and false values given
322
- directly to Dataset#filter has been fixed. So the following now
323
- works correctly on those databases:
324
-
325
- DB[:table].filter(true)
326
- DB[:table].filter(false)
327
-
328
- Unfortunately, because SQLite and MSSQL don't have a real boolean
329
- type, these will not work:
330
-
331
- DB[:table].filter{a & true}
332
- DB[:table].filter{a & false}
333
-
334
- You currently have to work around the issue by doing:
335
-
336
- DB[:table].filter{a & Sequel::TRUE}
337
- DB[:table].filter{a & Sequel::FALSE}
338
-
339
- It is possible that a future version of Sequel will remove the need
340
- for this workaround, but that requires having a separate
341
- literalization method specific to filters.
342
-
343
- * The MySQL bit type is no longer treated as a boolean. On MySQL, the
344
- bit type is a bitfield, which is very different than the MSSQL bit
345
- type, which is the closest thing to a boolean on MSSQL.
346
-
347
- * The bool database type is now recognized as a boolean. Some SQLite
348
- databases use bool, such as the ones used in Firefox.
349
-
350
- * SQL_AUTO_IS_NULL=0 is now set by default when connecting to MySQL
351
- using the swift or jdbc adapters. Previously, it was only set by
352
- default when using the mysql or mysql2 adapters.
353
-
354
- * Dataset#limit now works correctly on Access, using the TOP syntax.
355
-
356
- * Dataset#limit now works correctly on DB2, using the FETCH FIRST
357
- syntax.
358
-
359
- * The jdbc mssql subadapter was split into separate subadapters for
360
- sqlserver (using Microsoft's driver) and jtds (using the open
361
- source JTDS driver).
362
-
363
- * The jdbc jtds subadapter now supports converting Java CLOB
364
- objects to ruby strings.
365
-
366
- * Tables from the INFORMATION_SCHEMA are now ignored when parsing
367
- schema on JDBC.
368
-
369
- * The informix adapter has been split into shared/specific parts, and
370
- a jdbc informix subadapter has been added.
371
-
372
- * Dataset#insert_select now works correctly on MSSQL when the core
373
- extensions are disabled.
374
-
375
- * The sqlite adapter now logs when preparing a statement.
376
-
377
- * You no longer need to be a PostgreSQL superuser to run the postgres
378
- adapter specs.
379
-
380
- * The connection pool specs are now about 10 times faster and not
381
- subject to race conditions due to using Queues instead of
382
- sleeping.
383
-
384
- = Backwards Compatibility
385
-
386
- * Model#save no longer calls Model#valid?. It now calls the
387
- Model#_valid? private method that Model#valid? also calls. To mark
388
- a model instance invalid, you should override the Model#validate
389
- method and add validation errors to the object.
390
-
391
- * The BeforeHookFailure exception class has been renamed to
392
- HookFailure since hook failures can now be raised by around hooks
393
- that don't call super. BeforeHookFailure is now an alias to
394
- HookFailure, so no code should break, but you should update your
395
- code to reflect the new name.
396
-
397
- * Any custom argument mappers used for prepared statements now need
398
- to implement the prepared_arg? private instance method and have it
399
- return true.
400
-
401
- * If your databases uses bit as a boolean type and isn't MSSQL, it's
402
- possible that those columns will no longer be treated as booleans.
403
- Please report such an issue on the bugtracker.
404
-
405
- * It is possible that the filtering and excluding by association
406
- datasets will break backwards compatibility in some apps. This can
407
- only occur if you are using a symbol with the same name as an
408
- association with a model dataset whose model is the same as the
409
- associated class. As associations almost never have the same names
410
- as columns, this would require either aliasing or joining to
411
- another table. If for some reason this does break your app, you
412
- can work around it by changing the symbol to an SQL::Identifier or
413
- a literal string.
414
-
415
- * The Sequel::Postgres.use_iso_date_format= method now only affects
416
- future Database objects.
417
-
418
- * On MySQL, Database#tables no longer returns view names, it only
419
- returns table names. You have to use Database#views to get view
420
- names now.
@@ -1,88 +0,0 @@
1
- = New Features
2
-
3
- * drop_table, drop_view, drop_column, and drop_constraint all now
4
- support a :cascade option for using CASCADE.
5
-
6
- DB.drop_table(:tab, :cascade=>true)
7
- # DROP TABLE tab CASCADE
8
-
9
- DB.drop_column(:tab, :col, :cascade=>true)
10
- # ALTER TABLE tab DROP COLUMN col CASCADE
11
-
12
- A few databases support CASCADE for dropping tables and views,
13
- but only PostgreSQL appears to support it for columns and
14
- constraints. Using the :cascade option when the underlying
15
- database doesn't support it will probably result in a
16
- DatabaseError being raised.
17
-
18
- * You can now use datasets as expressions, allowing things such as:
19
-
20
- DB[:table1].select(:column1) > DB[:table2].select(:column2)
21
- # (SELECT column1 FROM table1) > (SELECT column2 FROM table2)
22
-
23
- DB[:table1].select(:column1).cast(Integer)
24
- # CAST((SELECT column1 FROM table1) AS integer)
25
-
26
- * Dataset#select_group has been added for grouping and selecting on
27
- the same columns.
28
-
29
- DB[:a].select_group(:b, :c)
30
- # SELECT b, c FROM a GROUP BY b, c
31
-
32
- * Dataset#exclude_where and #exclude_having methods have been added,
33
- allowing you to specify which clause to affect. #exclude's
34
- behavior is still to add to the HAVING clause if one is present,
35
- and use the WHERE clause otherwise.
36
-
37
- * Dataset#select_all now accepts optional arguments and will select
38
- all columns from those arguments if present:
39
-
40
- DB[:a].select_all(:a)
41
- # SELECT a.* FROM a
42
-
43
- DB.from(:a, :b).select_all(:a, :b)
44
- # SELECT a.*, b.* FROM a, b
45
-
46
- * Dataset#group and #group_and_count now both accept virtual row
47
- blocks:
48
-
49
- DB[:a].select(:b).group{c(d)}
50
- # SELECT b FROM a GROUP BY c(d)
51
-
52
- * If you use a LiteralString as a validation error message,
53
- Errors#full_messages will now not add the related column name to
54
- the start of the error message.
55
-
56
- * Model.set_dataset now accepts SQL::Identifier,
57
- SQL::QualifiedIdentifier, and SQL::AliasedExpression instances,
58
- treating them like Symbols.
59
-
60
- = Other Improvements
61
-
62
- * The association_pks plugin's setter method will now automatically
63
- convert a given array of strings to an array of integers if the
64
- primary key field is an integer field, which should make it easier
65
- to use in web applications.
66
-
67
- * nil bound variable, prepared statement, and stored procedure
68
- arguments are now handled correctly in the JDBC adapter.
69
-
70
- * On 1.9, you can now load plugins even when ::ClassMethods,
71
- ::InstanceMethods, or ::DatasetMethods is defined.
72
-
73
- = Backwards Compatibility
74
-
75
- * The tinytds adapter now only works with tiny_tds 0.4.5 and greater.
76
- Also, if you were using the tinytds adapter with FreeTDS 0.91rc1,
77
- you need to upgrade to FreeTDS 0.91rc2 for it to work. Also, if
78
- you were referencing an entry in the freetds.conf file, you now
79
- need to specify it directly using the :dataserver option when
80
- connecting, the adapter no longer copies the :host option to the
81
- :dataserver option.
82
-
83
- * On postgresql, Sequel now no longer drops tables with CASCADE by
84
- default. You now have to use the :cascade option to drop_table if
85
- you want to use CASCADE.
86
-
87
- * The Database#drop_table_sql private method now takes an additional
88
- options hash argument.
@@ -1,88 +0,0 @@
1
- = Performance Enhancements
2
-
3
- * The internal implementation of eager_graph has been made 75% to
4
- 225% faster than before, with greater benefits to more complex
5
- graphs.
6
-
7
- * Dataset creation has been made much faster (2.5x on 1.8 and 4.4x on
8
- 1.9), and dataset cloning has been made significantly faster (40%
9
- on 1.8 and 20% on 1.9).
10
-
11
- = Other Improvements
12
-
13
- * Strings passed to setter methods for integer columns are no longer
14
- considered to be in octal format if they include leading zeroes.
15
- The previous behavior was never intended, but was a side effect of
16
- using Kernel#Integer. Strings with leading zeroes are now treated
17
- as decimal, and you can still use the 0x prefix to treat them as
18
- hexidecimal. If anyone was relying on the old octal behavior, let
19
- me know and I'll add an extension that restores the octal behavior.
20
-
21
- * The identity_map plugin now works with the standard eager loading
22
- of many_to_many and many_through_many associations.
23
-
24
- * Database#create_table! now only attempts to drop the table if it
25
- already exists. Previously, it attempted to drop the table
26
- unconditionally ignoring any errors, which resulted in misleading
27
- error messages if dropping the table raised an error caused by
28
- permissions or referential integrity issues.
29
-
30
- * The default connection pool now correctly handles the case where a
31
- disconnect error is raised and an exception is raised while
32
- running the disconnection proc.
33
-
34
- * Disconnection errors are now detected when issuing transaction
35
- statements such as BEGIN/ROLLBACK/COMMIT. Previously, these
36
- statements did not handle disconnect errors on most adapters.
37
-
38
- * More disconnection errors are now detected. Specifically, the ado
39
- adapter and do postgres subadapter now handle disconnect errors,
40
- and the postgres adapter handles more types of disconnect errors.
41
-
42
- * Database#table_exists? now always issues a query to select from the
43
- table, it no longer attempts to parse the schema to determine the
44
- information on PostgreSQL and Oracle.
45
-
46
- * Date, DateTime, and Time values are now literalized correctly on
47
- Microsoft Access.
48
-
49
- * Connecting with the mysql adapter with an options hash now works if
50
- the :port option is a string, which makes it easier to use when the
51
- connection information is stored in YAML.
52
-
53
- * The xml_serializer plugin now works around a bug in pure-Java
54
- nokogiri regarding the handling of nil values.
55
-
56
- * Nicer error messages are now used if there is an attempt to call
57
- an invalid or restricted setter method.
58
-
59
- * The RDocs are now formatted with hanna-nouveau, which allows for
60
- section ordering, so the Database and Dataset RDoc pages are
61
- more friendly.
62
-
63
- = Backwards Compatibility
64
-
65
- * If you call a Dataset method such as #each on an eager_graphed
66
- dataset, you now get plain hashes that have column alias symbol
67
- keys and their values. Previously, you got a graphed response with
68
- table alias keys and model values. It's not wise to depend on the
69
- behavior, the only supported way of returning records when eager
70
- loading is to use #all.
71
-
72
- * An error is now raised if you attempt to eager load via
73
- Dataset#eager a many_to_many association that includes an
74
- :eager_graph option. Previously, incorrect SQL would have been
75
- generated and an error raised by the database.
76
-
77
- * Datasets are no longer guaranteed to have @row_proc,
78
- @indentifier_input_method, and @identifier_output_method defined
79
- as instance variables. You should be be using methods to access
80
- them anyway.
81
-
82
- * Database#table_exists? on PostgreSQL no longer accepts an options
83
- hash. Previously, you could use a :schema option. You must now
84
- provide the schema inside the table argument (e.g. :schema__table).
85
-
86
- * If you want to use the rdoc tasks in Sequel's Rakefile, and you are
87
- still using the hanna RDoc template with RDoc 2.3, you need to
88
- upgrade to using hanna-nouveau with RDoc 3.8+.
@@ -1,82 +0,0 @@
1
- = New Features
2
-
3
- * Model.dataset_module has been added for easily adding methods to
4
- a model's dataset:
5
-
6
- Album.dataset_module do
7
- def with_name_like(x)
8
- filter(:name.like(x))
9
- end
10
- def selling_at_least(x)
11
- filter{copies_sold > x}
12
- end
13
- end
14
- Album.with_name_like('Foo%').selling_at_least(100000).all
15
-
16
- Previously, you could use def_dataset_method to accomplish the
17
- same thing. dataset_module is generally cleaner, plus you are
18
- using actual methods instead of blocks, so calling the methods
19
- is faster on some ruby implementations.
20
-
21
- * Sequel now uses a Sequel::SQLTime class (a subclass of Time) when
22
- dealing with values for SQL time columns (which don't have a date
23
- component). These values are handled correctly when used in
24
- filters or insert/update statements (using only the time
25
- component), so Sequel can now successfully round trip values for
26
- time columns. Not all adapters support returning time column
27
- values as SQLTime instances, but the most common ones do.
28
-
29
- * You can now drop foreign key, primary key, and unique constraints
30
- on MySQL by passing the :type=>(:foreign_key|:primary_key|:unique)
31
- option to Database#drop_constraint.
32
-
33
- * The ODBC adapter now has initial support for the DB2 database, use
34
- the :db_type=>'db2' option to load the support.
35
-
36
- = Other Improvements
37
-
38
- * The mysql2 adapter now uses native prepared statements.
39
-
40
- * The tinytds adapter now uses uses sp_executesql for prepared
41
- statements.
42
-
43
- * DateTime and Time objects are now converted to Date objects when
44
- they are assigned to a date column in a Model instance.
45
-
46
- * When converting a Date object to a DateTime object, the resulting
47
- DateTime object now has no fractional day components. Previously,
48
- depending on your timezone settings, it could have had fractional
49
- day components.
50
-
51
- * The mysql2 adapter now supports stored procedures, as long as they
52
- don't return results.
53
-
54
- * Mass assignment protection now handles including modules in model
55
- classes and extending model instances with modules. Previously, if
56
- you defined a setter method in a module, access to it may have been
57
- restricted.
58
-
59
- * The prepared_statements_safe plugin now works on classes without
60
- datasets, so you can now do the following to load it for all models:
61
-
62
- Sequel::Model.plugin :prepared_statements_safe
63
-
64
- * Dataset#hash now works correctly when handling SQL::Expression
65
- instances.
66
-
67
- * Model#hash now correctly handles classes with no primary key or with
68
- a composite primary key.
69
-
70
- * Model#exists? now always returns false for new model objects.
71
-
72
- = Backwards Compatibility
73
-
74
- * If you were previously setting primary key values manually for new
75
- model objects and then calling exists? to see if the instance is
76
- already in the database, you need to change your code from:
77
-
78
- model.exists?
79
-
80
- to:
81
-
82
- model.this.get(1).nil?