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,459 +0,0 @@
1
- = New Adapter Support
2
-
3
- * Sequel now has much better support for Oracle, both in the
4
- ruby-oci8-based oracle adapter and in the jdbc/oracle adapter.
5
-
6
- * Sequel now has much better support for connecting to HSQLDB
7
- using the jdbc adapter. This support does not work correctly
8
- with the jdbc-hsqldb gem, since the version it uses is too
9
- old. You'll need to load the .jar file manually until the
10
- gem is updated.
11
-
12
- * Sequel now has much better support for connecting to Apache
13
- Derby databases using the jdbc adapter. This works with
14
- the jdbc-derby gem, but it's recommend you grab an updated
15
- .jar file as the jdbc-derby gem doesn't currently support
16
- truncate or booleans.
17
-
18
- * The db2 adapter has had most of the remaining issues fixed,
19
- and can now run Sequel's test suite cleanly. It's still
20
- recommended that users switch to the ibmdb adapter if they
21
- are connecting to DB2.
22
-
23
- * A mock adapter has been added which provides a mock Database
24
- object that allows you to easily set the returned rows, the
25
- number of rows modified by update/delete, and the
26
- autogenerating primary key integer for insert. It also allows
27
- you to set specific columns in the dataset when retrieving
28
- rows. The specs were full of partial implementations of
29
- mock adapters, this mock adapter is much more complete and
30
- offers full support for mocking transactions and database
31
- sharding. Example:
32
-
33
- DB = Sequel.mock(:fetch=>{:id=>1}, :numrows=>2, :autoid=>3)
34
- DB[:items].all # => [{:id => 1}]
35
- DB[:items].insert # => 3
36
- DB[:items].insert # => 4
37
- DB[:items].delete # => 2
38
- DB[:items].update(:id=>2) # => 2
39
- DB.sqls # => ['SELECT ...', 'INSERT ...', ...]
40
-
41
- In addition to being useful in the specs, the mock adapter is
42
- also used if you use bin/sequel without a database argument,
43
- which makes it much easier to play around with Sequel on the
44
- command line without being tied to a real database.
45
-
46
- = New Transaction Features
47
-
48
- * Database after_commit and after_rollback hooks have been added,
49
- allowing you to set procs that are called after the currently-
50
- in-effect transaction commits or rolls back. If the Database
51
- is not currently in a transaction, the after_commit proc is
52
- called immediately and the after_rollback proc is ignored.
53
-
54
- * Model after_commit, after_rollback, after_destroy_commit, and
55
- after_destroy_rollback hooks have been added that use the new
56
- Database after_commit/after_rollback hook to execute code after
57
- commit or rollback.
58
-
59
- * Database#transaction now supports a :rollback => :reraise option
60
- to reraise any Sequel::Rollback exceptions raised by the block.
61
-
62
- * Database#transaction now supports a :rollback => :always option
63
- to always rollback the transaction, which is mostly useful when
64
- using transaction-based testing.
65
-
66
- * Sequel.transaction has been added, allowing you to run
67
- simultaneous transactions on multiple Database objects:
68
-
69
- Sequel.transaction([DB1, DB2]){...}
70
- # similar to:
71
- DB1.transaction{DB2.transaction{...}}
72
-
73
- You can combine this with the :rollback => :always option to
74
- easily use multiple databases in the same test suite and make sure
75
- that changes are rolled back on all of them.
76
-
77
- * Database#in_transaction? has been added so that users can detect
78
- whether the code is currently inside a transaction.
79
-
80
- * The generic JDBC transaction support, used by 6 of Sequel's jdbc
81
- subapters, now supports savepoints if the underlying JDBC driver
82
- supports savepoints.
83
-
84
- = Other New Features
85
-
86
- * A dataset_associations plugin has been added, allowing datasets
87
- to call association methods, which return datasets of rows in
88
- the associated table that are associated to rows in the current
89
- dataset.
90
-
91
- # Dataset of tracks from albums with name < 'M'
92
- # by artists with name > 'M'
93
-
94
- Artist.filter(:name > 'M').albums.filter(:name < 'M').tracks
95
-
96
- # SELECT * FROM tracks
97
- # WHERE (tracks.album_id IN (
98
- # SELECT albums.id FROM albums
99
- # WHERE ((albums.artist_id IN (
100
- # SELECT artists.id FROM artists
101
- # WHERE (name > 'M')))
102
- # AND (name < 'M'))))
103
-
104
- * Database#extend_datasets has been added, allowing you to do the
105
- equivalent of extending all of the database's future datasets
106
- with a module. For performance, it creates an anonymous
107
- subclass of the current dataset class and includes a module in
108
- it, and uses the subclass to create future datasets.
109
-
110
- Using this feature allows you to override any dataset method
111
- and call super, similar to how Sequel::Model plugins work. The
112
- method takes either a module:
113
-
114
- Sequel.extension :columns_introspection
115
- DB.extend_datasets(Sequel::ColumnsIntrospection)
116
-
117
- or a block that it uses to create an anonymous module:
118
-
119
- DB.extend_datasets do
120
- # Always select from table.* instead of *
121
- def from(*tables)
122
- ds = super
123
- if !@opts[:select] || @opts[:select].empty?
124
- ds = ds.select_all(*tables)
125
- end
126
- ds
127
- end
128
- end
129
-
130
- * Database#<< and Dataset#<< now return self, which allow them
131
- to be used in chaining:
132
-
133
- DB << "UPDATE foo SET bar_id = NULL" << "DROP TABLE bars"
134
- DB[:foo] << {:bar_id=>0} << DB[:bars].select(:id)
135
-
136
- * A Database#timezone accessor has been added, allowing you to
137
- override Sequel.database_timezone on a per-Database basis, which
138
- allows you to use two separate Database objects in the same
139
- process that have different timezones.
140
-
141
- * You can now modify the type conversion procs on a per-Database
142
- basis when using the mysql, sqlite, and ibmdb adapters, by
143
- modifying the hash returned by Database#conversion_procs.
144
-
145
- * Model.dataset_module now accepts a Module instance as an argument,
146
- and extends the model's dataset with that module.
147
-
148
- * When using the postgres adapter with the pg driver, you can now
149
- use Database#listen to wait for notifications. All adapters that
150
- connect to postgres now support Database#notify to send
151
- notifications:
152
-
153
- # process 1
154
- DB.listen('foo') do |ev, pid, payload|
155
- ev # => 'foo'
156
- notify_pid # => some Integer
157
- payload # => 'bar'
158
- end
159
-
160
- # process 2
161
- DB.notify('foo', :payload=>'bar')
162
-
163
- * many_to_one associations now have a :qualify option that can be set
164
- to false to not qualify the primary key when loading the
165
- association. This shouldn't be necessary to use in most cases, but
166
- in some cases qualifying a primary key breaks certain queries (e.g.
167
- using JOIN USING on the same column on Oracle).
168
-
169
- * Database#schema can now take a dataset as an argument if it just
170
- selects from a single table. If a dataset is provided, the
171
- schema parsing will use that dataset's identifier_input_method
172
- and identifier_output_method for the parsing, instead of the
173
- database's default. This makes it possible for Model classes
174
- to correctly get the table schema if they use a dataset whose
175
- identifier_(input|output)_method differs from the database
176
- default.
177
-
178
- * On databases that support common table expressions (CTEs) but do
179
- not support CTE usage in subselects, Sequel now emulates support
180
- by moving CTEs from the subselect to the main select when using
181
- the Dataset from, from_self, with, with_recursive, union,
182
- intersect, and except methods.
183
-
184
- * The bitwise compliment operator is now emulated on H2.
185
-
186
- * You can now set the convert_tinyint_to_bool setting on a
187
- per-Database basis in the mysql and mysql2 adapters.
188
-
189
- * You can now set the convert_invalid_date_time setting on a
190
- per-Database basis in the mysql adapter.
191
-
192
- * Database instances now have a dataset_class accessor that allows
193
- you to set which class is used when creating datasets. This is
194
- mostly used to implement the extend_datasets support, but it
195
- could be useful for other purposes.
196
-
197
- * Dataset#unused_table_alias now accepts an optional 2nd argument,
198
- which should be an array of additional symbols that should be
199
- considered as already used.
200
-
201
- * Dataset#requires_placeholder_type_specifiers? has been added to
202
- check if the dataset requires you use type specifiers for
203
- bound variable placeholders.
204
-
205
- The prepared_statements plugin now checks this setting and works
206
- correctly on adapters that set it to true, such as oracle.
207
-
208
- * Dataset#recursive_cte_requires_column_aliases? has been added
209
- to check if you must provide a column list for a recursive CTE.
210
-
211
- The rcte_tree plugin now checks this setting an works correctly
212
- on databases that set it to true, such as Oracle and HSQLDB.
213
-
214
- = Performance Improvements
215
-
216
- * Numerous optimizations were made to loading model objects from
217
- the database, resulting in a 7-16% speedup.
218
-
219
- Model.call was added, and now .load is just an alias for .call.
220
- This allows you to make the model dataset's row_proc the model
221
- itself, instead of needing a separate block, which improves
222
- performance.
223
-
224
- While Model.load used to call .new (and therefore #initialize),
225
- Model.call uses .allocate/#set_values/#after_initialize for speed.
226
- This saves a method call or two, and skips setting the @new
227
- instance variable.
228
-
229
- * Dataset#map, #to_hash, #select_map, #select_order_map, and
230
- #select_hash are now faster if any of the provided arguments are
231
- an array of symbols.
232
-
233
- * The Model.[] optimization is now applied in more cases.
234
-
235
- = Other Improvements
236
-
237
- * Sequel now creates accessor methods for all columns in a model's
238
- table, even if the dataset doesn't select the columns. This has
239
- been the specified behavior for a while, but the spec was broken.
240
- This allows you do to:
241
-
242
- Model.dataset = DB[:table].select(:column1, :column2)
243
- Model.select_more(:column3).first.column3
244
-
245
- * Model.def_dataset_method now correctly handles method names that
246
- can't be used directly (such as method names with spaces). This
247
- isn't so the method can be used with arbitrary user input, but
248
- it will allow safe creation of dataset methods that are derived
249
- from column names, which could contain spaces.
250
-
251
- * Model.def_dataset_method no longer overrides private model
252
- methods.
253
-
254
- * The optimization that Model.[] uses now works correctly if the
255
- model's dataset uses a different identifier_input_method than
256
- the database.
257
-
258
- * Sharding is supported correctly by default for the transactions
259
- used by model objects. Previously, you had to use the sharding
260
- plugin to make sure the same shard was used for transactions as
261
- for the insert/update/delete statements.
262
-
263
- * Sequel now fully supports using an aliased table for the
264
- :join_table option of a many_to_many association. The only real
265
- use case for an aliased :join_table option is when the join table
266
- is the same as the associated model table.
267
-
268
- * A bug when eagerly loading a many_through_many association with
269
- composite keys where one of the join tables requires an alias
270
- has been fixed.
271
-
272
- * Sequel's transaction internals have had substantial improvments.
273
- You can now open up simultaneous transactions on two separate
274
- shards of the same Database object in the same thread. The new
275
- design allows for future support of connection pools that aren't
276
- based on threads. Sequel no longer abuses thread-local variables
277
- to store savepoint state.
278
-
279
- * Dataset#select_map and #select_order_map now return an array of
280
- single element arrays if given an array with a single entry as
281
- an argument. Previously, they returned an array of values, which
282
- wasn't consistent.
283
-
284
- * Sequel's emulation of bitwise operators with more than 2 arguments
285
- now works on all adapters that use the emulation. The emulation
286
- was broken in 3.28.0 when more than 2 arguments were used on H2,
287
- DB2, Microsoft SQL Server, PostgreSQL, and SQLite.
288
-
289
- * Dataset#columns now correctly handles the emulated offset support
290
- used on DB2, Oracle, and Microsoft SQL Server when using the
291
- jdbc, odbc, ado, and dbi adapters. Previously, Dataet#columns
292
- could contain the row number column, which wasn't in the
293
- hashes yielded by Dataset#each.
294
-
295
- * Sequel can now parse primary key information on Microsoft SQL
296
- Server. Previously, the only adapter that supported this was the
297
- jdbc adapter, which uses the generic JDBC support. The shared
298
- mssql adapter now supports parsing the information directly from
299
- the database system tables. This means that if you are using
300
- Model objects with a Microsoft SQL Server database using the
301
- tinytds, odbc, or ado adapters, the model primary key
302
- information will be set automatically.
303
-
304
- * Sequel's prepared statement support no longer defines singleton
305
- methods on the prepared statement objects.
306
-
307
- * StringMethods#like is now case sensitive on SQLite and Microsoft
308
- SQL Server, making it more similar to other databases.
309
-
310
- * Sequel now works around an SQLite column naming bug if you select
311
- columns qualified with the alias of a subselect without providing
312
- an alias for the column itself.
313
-
314
- * Sequel now handles more bound variable types when using bound
315
- variables outside of prepared statements on SQLite.
316
-
317
- * Sequel now works around a bug in certain versions of the
318
- JDBC/SQLite driver when emulating alter table support for
319
- operations such as drop_column.
320
-
321
- * Sequel now emulates the add_constraint and drop_constraint
322
- alter table operations on SQLite, though the emulation has
323
- issues.
324
-
325
- * Sequel now correctly handles composite primary keys when
326
- emulating alter_table operations on SQLite.
327
-
328
- * Sequel now applies the correct PRAGMA statements by default when
329
- connecting to SQLite via the amalgalite and swift adapters.
330
-
331
- * Sequel now supports using savepoints inside prepared transactions
332
- on MySQL.
333
-
334
- * Sequel now closes JDBC ResultSet objects as soon as it is done
335
- using them, leading to potentially lower memory usage in the JDBC
336
- adapter, and fixes issues if you try to drop a table before
337
- GC has collected a related ResultSet.
338
-
339
- * Sequel can now correctly insert all default values into a table
340
- on DB2. Before, this didn't work correctly if the table had more
341
- than one column.
342
-
343
- * Another type of disconnection error is now recognized in the
344
- mysql2 adapter.
345
-
346
- * Sequel now uses better error messages if you attempt to execute a
347
- prepared statement without a name using the postgres, mysql, and
348
- mysql2 adapters.
349
-
350
- * Some small fixes have been made that allow Sequel to run better
351
- when $SAFE=1. However, Sequel is not officially supported using
352
- $SAFE > 0, so there could be many issues remaining.
353
-
354
- * Sequel's core and model specs were cleaned up by using the mock
355
- adapter to eliminate a lot of redundant code.
356
-
357
- * Sequel's integration tests were sped up considerably, halving
358
- the execution time on some adapters.
359
-
360
- = Backwards Compatibility
361
-
362
- * Because Model.load is now an alias for .call, plugins should no
363
- longer override load. Instead, they should override .call.
364
-
365
- * Loading model objects from the database no longer calls
366
- Model#initialize. Instead, it calls Model.allocate,
367
- Model#set_values, and Model#after_initialize. So if you were
368
- overriding #initialize and expecting the changes to affect model
369
- objects loaded from the database, you need to change your code.
370
-
371
- Additionally, @new is no longer set to false for objects retieved
372
- from the database, since setting it to false hurts performance.
373
- Model#new? still returns true or false, so this only affects you
374
- if you are checking the instance variables directly.
375
-
376
- * Dataset#<< no longer returns the autogenerated primary key for the
377
- inserted row. As mentioned above, it now returns self to allow for
378
- chaining. If you were previously relying on the return value,
379
- switch from #<< to #insert.
380
-
381
- * Dataset#map no longer calls the row_proc if given an argument, and
382
- Dataset#to_hash no longer calls the row_proc if given two arguments.
383
- This should only affect your code if you were using a row_proc that
384
- modified the content of the hash (e.g. Model#after_initialize). If
385
- you were relying on the old behavior, switch:
386
-
387
- dataset.map(:foo)
388
- # to
389
- dataset.map{|r| r[:foo]}
390
-
391
- dataset.to_hash(:foo, :bar)
392
- # to
393
- h = {}
394
- dataset.each{|r| h[r[:foo]] = r[:bar]}
395
- h
396
-
397
- * Model classes now need to have a dataset before you can define
398
- associations on them.
399
-
400
- * Model classes now pass their dataset to Database#schema, instead of
401
- their table name.
402
-
403
- * The :eager_block association option (which defaults to the
404
- association's block argument) is now called before the :eager_graph
405
- association option has been applied, instead of after.
406
-
407
- * The many_to_many association reflection :qualified_right_key entry
408
- is now a method named qualified_right_key. Switch any
409
- code using association_reflection[:qualified_right_key] to use
410
- association_reflection.qualified_right_key.
411
-
412
- * If you are using like on SQLite and Microsoft SQL Server and want
413
- it to be case insensitive, switch to using ilike:
414
-
415
- # Case sensitive
416
- DB[:foos].where(:name.like('bar%'))
417
- # Case insensitive
418
- DB[:foos].where(:name.ilike('bar%'))
419
-
420
- Sequel now sets the case_sensitive_like PRAGMA to true by default
421
- on SQLite. To set it to false instead, pass the
422
- :case_sensitive_like=>false option to the database when creating it.
423
-
424
- * Sequel's alter table emulation on SQLite now renames the current
425
- table then populates the replacement table, instead of
426
- populating the replacement table at a temporary name, dropping
427
- the current table, and then renaming the replacement table.
428
-
429
- * The strings 'n' and 'no' (case insensitive) when typecasted to
430
- boolean are now considered false values instead of true.
431
-
432
- * The transaction internals had extensive changes, if you have any
433
- code that depended on the transaction internals, it will probably
434
- require changes.
435
-
436
- * Using the Sequel::MySQL module settings for convert_tinyint_to_bool
437
- and convert_invalid_date_time now only affects future Database
438
- objects. You should switch to using the per-Database methods
439
- if you are currently using the Sequel::MySQL module methods.
440
-
441
- * The customized transaction support in the do (DataObjects) adapter
442
- was removed. All three subadapters (postgres, mysql, sqlite) of
443
- the do adapter implement their own transaction support, so this
444
- should have no effect unless you were using the do adapter with
445
- a different database type.
446
-
447
- * The oracle support changed dramatically, so if you were relying
448
- on the internals of the oracle support, you should take extra
449
- care when upgrading.
450
-
451
- = Advance Notice
452
-
453
- * The next release of Sequel will contain significant changes to
454
- how a dataset is literalized into an SQL string. If you have
455
- a custom plugin, extension, or adapter that overrides a
456
- method containing "literal", "sql", or "quote", or you make
457
- other modifications or extensions to how Sequel currently
458
- literalizes datasets to SQL, your code will likely need to
459
- be modified to support the next release.
@@ -1,192 +0,0 @@
1
- New Features
2
- ------------
3
-
4
- * An association_proxies plugin has been added. This is not a
5
- full-blown proxy implementation, but it allows you to write code
6
- such as:
7
-
8
- artist.albums.filter{num_tracks > 10}
9
-
10
- Without the plugin, you have to call filter specifically on the
11
- association's dataset:
12
-
13
- artist.albums_dataset.filter{num_tracks > 10}
14
-
15
- The plugin works by proxying array methods to the array of
16
- associated objects, and all other methods to the association's
17
- dataset. This results in the following behavior:
18
-
19
- # Will load the associated objects (unless they are already
20
- # cached), and return the length of the array
21
- artist.albums.length
22
-
23
- # Will issue an SQL query with COUNT (even if the association
24
- # is already cached), and return the result
25
- artist.albums.count
26
-
27
- * The add_*/remove_*/remove_all_* association methods now take
28
- additional arguments that are passed down to the
29
- _add_*/_remove_*/_remove_all_* methods. One of the things this
30
- allows you to do is update additional columns in join tables for
31
- many_to_many associations:
32
-
33
- class Album
34
- many_to_many :artists
35
- def _add_artist(artist, values={})
36
- DB[:albums_artists].
37
- insert(values.merge(:album_id=>id,
38
- :artist_id=>artist.id))
39
- end
40
- end
41
-
42
- album = Album[1]
43
- artist1 = Artist[2]
44
- artist2 = Artist[3]
45
- album.add_artist(artist1, :relationship=>'composer')
46
- album.add_artist(artist2, :relationship=>'arranger')
47
-
48
- * The JDBC adapter now accepts a :convert_types option to turn off
49
- Java type conversion. The option is true by default for
50
- backwards compatibility and correctness, but can be set to false
51
- to double performance. The option can be set at the database
52
- and dataset levels:
53
-
54
- DB = Sequel.jdbc('jdbc:postgresql://host/database',
55
- :convert_types=>false)
56
- DB.convert_types = true
57
- ds = DB[:table]
58
- ds.convert_types = false
59
-
60
- * Dataset#from_self now takes an option hash and respects an
61
- :alias option, giving the table alias to use.
62
-
63
- * Dataset#unlimited was added, similar to unfiltered and unordered.
64
-
65
- * SQL::WindowFunction is now a subclass of SQL::GenericExpression,
66
- so you can alias it and treat it like any other SQL::Function.
67
-
68
- Other Improvements
69
- ------------------
70
-
71
- * Microsoft SQL Server support is much, much better in Sequel 3.3.0
72
- than in previous versions. Support is pretty good with the ODBC,
73
- ADO, and JDBC adapters, close to the level of support for
74
- PostreSQL, MySQL, SQLite, and H2. Improvements are too numerous
75
- to list, but here are some highlights:
76
-
77
- * Dataset#insert now returns the primary key (identity field), so
78
- it can be used easier with models.
79
-
80
- * Transactions can now use savepoints (except on ADO).
81
-
82
- * Offsets are supported when using SQL Server 2005 or 2008, using
83
- a ROW_NUMBER window function. However, you must specify an
84
- order for your dataset (which you probably are already doing if
85
- you are using offsets).
86
-
87
- * Schema parsing has been implemented, though it doesn't support
88
- primary key parsing (except on JDBC, since the JDBC support is
89
- used there).
90
-
91
- * The SQL syntax Sequel uses is now much more compatible, and
92
- most schema modification methods and database types now work
93
- correctly.
94
-
95
- * The ADO and ODBC adapters both work much better now. The ADO
96
- adapter no longer attempts to use transactions, since I've found
97
- that ADO does not give a stable native connection (and hence
98
- transactions weren't possible). I strongly recommend against
99
- using the ADO adapter in production.
100
-
101
- * The H2 JDBC subadapter now supports rename_column, set_column_null,
102
- set_column_type, and add_foreign_key.
103
-
104
- * Altering a columns type, null status, or default is now supported
105
- on SQLite. You can also add primary keys and unique columns.
106
-
107
- * Both the ADO and ODBC adapters now catch the native exception
108
- classes and raise Sequel::DatabaseErrors.
109
-
110
- * Model classes now default to associating to other classes in the
111
- same scope. This makes it easier to use namespaced models.
112
-
113
- * The schema parser and schema dumper now support the following
114
- types: nchar, nvarchar, ntext, smalldatetime, smallmoney, binary,
115
- and varbinary.
116
-
117
- * You can now specify the null status for a column using :allow_null
118
- in addition to :null. This is to make it easier to use the
119
- table creation methods with the results of the schema parser.
120
-
121
- * Renaming a NOT NULL column without a default now works on MySQL.
122
-
123
- * Model class initialization now raises an exception if there is a
124
- problem connecting to the database.
125
-
126
- * Connection pool performance has been increased slightly.
127
-
128
- * The literal_time method in the ODBC adapter has been fixed.
129
-
130
- * An unlikely but potential bug in the MySQL adapter has been fixed.
131
-
132
- Backwards Compatibility
133
- -----------------------
134
-
135
- * The convert_tinyint_to_bool setting moved from the main Sequel
136
- module to the Sequel::MySQL module. The native MySQL adapter is
137
- the only adapter that converted tinyint columns to booleans when
138
- the rows are returned, so you can only use the setting with the
139
- native MySQL adapter.
140
-
141
- Additionally, the setting's behavior has changed. When parsing
142
- the schema, now only tinyint(1) columns are now considered as
143
- boolean, instead of all tinyint columns. This allows you to use
144
- tinyint(4) columns for storing small integers and tinyint(1)
145
- columns as booleans, and not have the schema parsing support
146
- consider the tinyint(4) columns as booleans. Unfortunately,
147
- due to limitations in the native MySQL driver, all tinyint
148
- column values are converted to booleans upon retrieval, not just
149
- tinyint(1) column values.
150
-
151
- Unfortunately, the previous Sequel behavior was to use the
152
- default tinyint size (tinyint(4)) when creating boolean columns
153
- (using the TrueClass or FalseClass generic types). If you were
154
- using the generic type support to create the columns, you should
155
- modify your database to change the column type from tinyint(4) to
156
- tinyint(1).
157
-
158
- If you use MySQL with tinyint columns, these changes have the
159
- potential to break applications. Care should be taken when
160
- upgrading if these changes apply to you.
161
-
162
- * Model classes now default to associating to other classes in the
163
- same scope. It's highly unlikely anyone was relying on the
164
- previous behavior, but if you have a model inside a module that
165
- you are associating to a model outside of a module, you now need
166
- to specify the associated class using the :class option.
167
-
168
- * Model#save no longer includes the primary key fields in the SET
169
- clause of the UPDATE query, only in the WHERE clause. I'm not
170
- sure if this affects backwards compatibility of production code,
171
- but it can break tests that expect specific SQL.
172
-
173
- * Behavior to handle empty identifiers has now been standardized.
174
- If any database adapter returns an empty identifier, Sequel will
175
- use 'untitled' as the identifier. This can break backwards
176
- compatibility if the adapter previously used another default and
177
- you were relying on that default. This was necessary to fix any
178
- possible "interning empty string" exceptions.
179
-
180
- * On MSSQL, Sequel now uses the datetime type instead of the
181
- timestamp type for generic DateTimes. It now uses bit for the
182
- TrueClass and FalseClass generic types, and image for the File
183
- generic type.
184
-
185
- * Sequel now unescapes URL parts:
186
-
187
- Sequel.connect(ado:///db?host=server%5cinstance)
188
-
189
- However, this can break backward compatibility if you previously
190
- expected it not to be unescaped.
191
-
192
- * The columns_for private SQLite Database method has been removed.