sequel 5.20.0 → 5.49.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 (511) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +398 -1922
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +7 -7
  5. data/doc/advanced_associations.rdoc +4 -4
  6. data/doc/association_basics.rdoc +80 -16
  7. data/doc/cheat_sheet.rdoc +6 -5
  8. data/doc/code_order.rdoc +10 -12
  9. data/doc/dataset_filtering.rdoc +17 -2
  10. data/doc/fork_safety.rdoc +84 -0
  11. data/doc/migration.rdoc +11 -5
  12. data/doc/model_dataset_method_design.rdoc +1 -1
  13. data/doc/model_plugins.rdoc +1 -1
  14. data/doc/opening_databases.rdoc +10 -2
  15. data/doc/postgresql.rdoc +82 -3
  16. data/doc/querying.rdoc +4 -4
  17. data/doc/release_notes/5.21.0.txt +87 -0
  18. data/doc/release_notes/5.22.0.txt +48 -0
  19. data/doc/release_notes/5.23.0.txt +56 -0
  20. data/doc/release_notes/5.24.0.txt +56 -0
  21. data/doc/release_notes/5.25.0.txt +32 -0
  22. data/doc/release_notes/5.26.0.txt +35 -0
  23. data/doc/release_notes/5.27.0.txt +21 -0
  24. data/doc/release_notes/5.28.0.txt +16 -0
  25. data/doc/release_notes/5.29.0.txt +22 -0
  26. data/doc/release_notes/5.30.0.txt +20 -0
  27. data/doc/release_notes/5.31.0.txt +148 -0
  28. data/doc/release_notes/5.32.0.txt +46 -0
  29. data/doc/release_notes/5.33.0.txt +24 -0
  30. data/doc/release_notes/5.34.0.txt +40 -0
  31. data/doc/release_notes/5.35.0.txt +56 -0
  32. data/doc/release_notes/5.36.0.txt +60 -0
  33. data/doc/release_notes/5.37.0.txt +30 -0
  34. data/doc/release_notes/5.38.0.txt +28 -0
  35. data/doc/release_notes/5.39.0.txt +19 -0
  36. data/doc/release_notes/5.40.0.txt +40 -0
  37. data/doc/release_notes/5.41.0.txt +25 -0
  38. data/doc/release_notes/5.42.0.txt +136 -0
  39. data/doc/release_notes/5.43.0.txt +98 -0
  40. data/doc/release_notes/5.44.0.txt +32 -0
  41. data/doc/release_notes/5.45.0.txt +34 -0
  42. data/doc/release_notes/5.46.0.txt +87 -0
  43. data/doc/release_notes/5.47.0.txt +59 -0
  44. data/doc/release_notes/5.48.0.txt +14 -0
  45. data/doc/release_notes/5.49.0.txt +59 -0
  46. data/doc/sharding.rdoc +2 -0
  47. data/doc/sql.rdoc +13 -1
  48. data/doc/testing.rdoc +20 -7
  49. data/doc/transactions.rdoc +0 -8
  50. data/doc/validations.rdoc +1 -1
  51. data/doc/virtual_rows.rdoc +1 -1
  52. data/lib/sequel/adapters/ado/access.rb +1 -1
  53. data/lib/sequel/adapters/ado.rb +43 -35
  54. data/lib/sequel/adapters/ibmdb.rb +2 -2
  55. data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
  56. data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
  57. data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
  58. data/lib/sequel/adapters/jdbc.rb +24 -6
  59. data/lib/sequel/adapters/mysql.rb +1 -1
  60. data/lib/sequel/adapters/mysql2.rb +2 -3
  61. data/lib/sequel/adapters/odbc.rb +8 -6
  62. data/lib/sequel/adapters/oracle.rb +5 -4
  63. data/lib/sequel/adapters/postgres.rb +15 -9
  64. data/lib/sequel/adapters/shared/access.rb +6 -6
  65. data/lib/sequel/adapters/shared/mssql.rb +66 -21
  66. data/lib/sequel/adapters/shared/mysql.rb +27 -10
  67. data/lib/sequel/adapters/shared/oracle.rb +29 -23
  68. data/lib/sequel/adapters/shared/postgres.rb +271 -32
  69. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  70. data/lib/sequel/adapters/shared/sqlite.rb +161 -19
  71. data/lib/sequel/adapters/sqlanywhere.rb +1 -1
  72. data/lib/sequel/adapters/sqlite.rb +1 -1
  73. data/lib/sequel/adapters/tinytds.rb +15 -2
  74. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
  75. data/lib/sequel/ast_transformer.rb +6 -0
  76. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  77. data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
  78. data/lib/sequel/connection_pool/single.rb +1 -1
  79. data/lib/sequel/connection_pool/threaded.rb +2 -2
  80. data/lib/sequel/core.rb +333 -319
  81. data/lib/sequel/database/connecting.rb +3 -4
  82. data/lib/sequel/database/logging.rb +7 -1
  83. data/lib/sequel/database/misc.rb +31 -12
  84. data/lib/sequel/database/query.rb +3 -1
  85. data/lib/sequel/database/schema_generator.rb +53 -51
  86. data/lib/sequel/database/schema_methods.rb +38 -23
  87. data/lib/sequel/database/transactions.rb +17 -18
  88. data/lib/sequel/dataset/actions.rb +14 -9
  89. data/lib/sequel/dataset/features.rb +16 -0
  90. data/lib/sequel/dataset/misc.rb +2 -2
  91. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  92. data/lib/sequel/dataset/prepared_statements.rb +2 -0
  93. data/lib/sequel/dataset/query.rb +26 -9
  94. data/lib/sequel/dataset/sql.rb +76 -25
  95. data/lib/sequel/dataset.rb +4 -2
  96. data/lib/sequel/deprecated.rb +3 -1
  97. data/lib/sequel/exceptions.rb +2 -0
  98. data/lib/sequel/extensions/_pretty_table.rb +1 -2
  99. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  100. data/lib/sequel/extensions/async_thread_pool.rb +438 -0
  101. data/lib/sequel/extensions/blank.rb +8 -0
  102. data/lib/sequel/extensions/columns_introspection.rb +1 -2
  103. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  104. data/lib/sequel/extensions/connection_validator.rb +2 -2
  105. data/lib/sequel/extensions/core_refinements.rb +2 -0
  106. data/lib/sequel/extensions/date_arithmetic.rb +36 -24
  107. data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
  108. data/lib/sequel/extensions/eval_inspect.rb +2 -0
  109. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  110. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  111. data/lib/sequel/extensions/index_caching.rb +9 -7
  112. data/lib/sequel/extensions/inflector.rb +9 -1
  113. data/lib/sequel/extensions/integer64.rb +2 -0
  114. data/lib/sequel/extensions/migration.rb +11 -3
  115. data/lib/sequel/extensions/named_timezones.rb +56 -8
  116. data/lib/sequel/extensions/pagination.rb +1 -1
  117. data/lib/sequel/extensions/pg_array.rb +5 -0
  118. data/lib/sequel/extensions/pg_array_ops.rb +14 -6
  119. data/lib/sequel/extensions/pg_enum.rb +11 -3
  120. data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
  121. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  122. data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
  123. data/lib/sequel/extensions/pg_inet.rb +15 -5
  124. data/lib/sequel/extensions/pg_interval.rb +36 -8
  125. data/lib/sequel/extensions/pg_json.rb +387 -123
  126. data/lib/sequel/extensions/pg_json_ops.rb +238 -0
  127. data/lib/sequel/extensions/pg_loose_count.rb +3 -1
  128. data/lib/sequel/extensions/pg_range.rb +17 -9
  129. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  130. data/lib/sequel/extensions/pg_row.rb +4 -2
  131. data/lib/sequel/extensions/pg_row_ops.rb +24 -0
  132. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  133. data/lib/sequel/extensions/query.rb +3 -0
  134. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  135. data/lib/sequel/extensions/s.rb +2 -0
  136. data/lib/sequel/extensions/schema_dumper.rb +24 -7
  137. data/lib/sequel/extensions/server_block.rb +18 -7
  138. data/lib/sequel/extensions/sql_comments.rb +2 -2
  139. data/lib/sequel/extensions/string_agg.rb +1 -1
  140. data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
  141. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
  142. data/lib/sequel/extensions/to_dot.rb +9 -3
  143. data/lib/sequel/model/associations.rb +356 -117
  144. data/lib/sequel/model/base.rb +107 -68
  145. data/lib/sequel/model/errors.rb +10 -1
  146. data/lib/sequel/model/inflections.rb +1 -1
  147. data/lib/sequel/model/plugins.rb +9 -3
  148. data/lib/sequel/model.rb +3 -1
  149. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  150. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  151. data/lib/sequel/plugins/association_pks.rb +60 -18
  152. data/lib/sequel/plugins/association_proxies.rb +8 -2
  153. data/lib/sequel/plugins/async_thread_pool.rb +39 -0
  154. data/lib/sequel/plugins/auto_validations.rb +39 -5
  155. data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
  156. data/lib/sequel/plugins/blacklist_security.rb +1 -2
  157. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  158. data/lib/sequel/plugins/caching.rb +3 -0
  159. data/lib/sequel/plugins/class_table_inheritance.rb +33 -28
  160. data/lib/sequel/plugins/column_encryption.rb +728 -0
  161. data/lib/sequel/plugins/composition.rb +7 -2
  162. data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
  163. data/lib/sequel/plugins/constraint_validations.rb +2 -1
  164. data/lib/sequel/plugins/csv_serializer.rb +28 -9
  165. data/lib/sequel/plugins/dataset_associations.rb +4 -1
  166. data/lib/sequel/plugins/dirty.rb +60 -22
  167. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  168. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  169. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  170. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  171. data/lib/sequel/plugins/json_serializer.rb +57 -35
  172. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  173. data/lib/sequel/plugins/many_through_many.rb +108 -9
  174. data/lib/sequel/plugins/nested_attributes.rb +15 -3
  175. data/lib/sequel/plugins/pg_array_associations.rb +58 -41
  176. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
  177. data/lib/sequel/plugins/prepared_statements.rb +15 -12
  178. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
  179. data/lib/sequel/plugins/rcte_tree.rb +43 -35
  180. data/lib/sequel/plugins/serialization.rb +8 -3
  181. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  182. data/lib/sequel/plugins/sharding.rb +11 -5
  183. data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
  184. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  185. data/lib/sequel/plugins/static_cache.rb +9 -4
  186. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  187. data/lib/sequel/plugins/string_stripper.rb +1 -1
  188. data/lib/sequel/plugins/subclasses.rb +2 -0
  189. data/lib/sequel/plugins/throw_failures.rb +1 -1
  190. data/lib/sequel/plugins/timestamps.rb +1 -1
  191. data/lib/sequel/plugins/tree.rb +9 -4
  192. data/lib/sequel/plugins/typecast_on_load.rb +3 -2
  193. data/lib/sequel/plugins/unused_associations.rb +521 -0
  194. data/lib/sequel/plugins/update_or_create.rb +1 -1
  195. data/lib/sequel/plugins/validation_class_methods.rb +5 -1
  196. data/lib/sequel/plugins/validation_helpers.rb +18 -11
  197. data/lib/sequel/plugins/xml_serializer.rb +1 -1
  198. data/lib/sequel/sql.rb +20 -5
  199. data/lib/sequel/timezones.rb +63 -17
  200. data/lib/sequel/version.rb +1 -1
  201. metadata +113 -381
  202. data/Rakefile +0 -151
  203. data/doc/release_notes/4.0.0.txt +0 -262
  204. data/doc/release_notes/4.1.0.txt +0 -85
  205. data/doc/release_notes/4.10.0.txt +0 -226
  206. data/doc/release_notes/4.11.0.txt +0 -147
  207. data/doc/release_notes/4.12.0.txt +0 -105
  208. data/doc/release_notes/4.13.0.txt +0 -169
  209. data/doc/release_notes/4.14.0.txt +0 -68
  210. data/doc/release_notes/4.15.0.txt +0 -56
  211. data/doc/release_notes/4.16.0.txt +0 -36
  212. data/doc/release_notes/4.17.0.txt +0 -38
  213. data/doc/release_notes/4.18.0.txt +0 -36
  214. data/doc/release_notes/4.19.0.txt +0 -45
  215. data/doc/release_notes/4.2.0.txt +0 -129
  216. data/doc/release_notes/4.20.0.txt +0 -79
  217. data/doc/release_notes/4.21.0.txt +0 -94
  218. data/doc/release_notes/4.22.0.txt +0 -72
  219. data/doc/release_notes/4.23.0.txt +0 -65
  220. data/doc/release_notes/4.24.0.txt +0 -99
  221. data/doc/release_notes/4.25.0.txt +0 -181
  222. data/doc/release_notes/4.26.0.txt +0 -44
  223. data/doc/release_notes/4.27.0.txt +0 -78
  224. data/doc/release_notes/4.28.0.txt +0 -57
  225. data/doc/release_notes/4.29.0.txt +0 -41
  226. data/doc/release_notes/4.3.0.txt +0 -40
  227. data/doc/release_notes/4.30.0.txt +0 -37
  228. data/doc/release_notes/4.31.0.txt +0 -57
  229. data/doc/release_notes/4.32.0.txt +0 -132
  230. data/doc/release_notes/4.33.0.txt +0 -88
  231. data/doc/release_notes/4.34.0.txt +0 -86
  232. data/doc/release_notes/4.35.0.txt +0 -130
  233. data/doc/release_notes/4.36.0.txt +0 -116
  234. data/doc/release_notes/4.37.0.txt +0 -50
  235. data/doc/release_notes/4.38.0.txt +0 -67
  236. data/doc/release_notes/4.39.0.txt +0 -127
  237. data/doc/release_notes/4.4.0.txt +0 -92
  238. data/doc/release_notes/4.40.0.txt +0 -179
  239. data/doc/release_notes/4.41.0.txt +0 -77
  240. data/doc/release_notes/4.42.0.txt +0 -221
  241. data/doc/release_notes/4.43.0.txt +0 -87
  242. data/doc/release_notes/4.44.0.txt +0 -125
  243. data/doc/release_notes/4.45.0.txt +0 -370
  244. data/doc/release_notes/4.46.0.txt +0 -404
  245. data/doc/release_notes/4.47.0.txt +0 -56
  246. data/doc/release_notes/4.48.0.txt +0 -293
  247. data/doc/release_notes/4.49.0.txt +0 -222
  248. data/doc/release_notes/4.5.0.txt +0 -34
  249. data/doc/release_notes/4.6.0.txt +0 -30
  250. data/doc/release_notes/4.7.0.txt +0 -103
  251. data/doc/release_notes/4.8.0.txt +0 -175
  252. data/doc/release_notes/4.9.0.txt +0 -190
  253. data/spec/adapter_spec.rb +0 -4
  254. data/spec/adapters/db2_spec.rb +0 -170
  255. data/spec/adapters/mssql_spec.rb +0 -804
  256. data/spec/adapters/mysql_spec.rb +0 -1065
  257. data/spec/adapters/oracle_spec.rb +0 -371
  258. data/spec/adapters/postgres_spec.rb +0 -4125
  259. data/spec/adapters/spec_helper.rb +0 -44
  260. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  261. data/spec/adapters/sqlite_spec.rb +0 -652
  262. data/spec/bin_spec.rb +0 -278
  263. data/spec/core/connection_pool_spec.rb +0 -1250
  264. data/spec/core/database_spec.rb +0 -2865
  265. data/spec/core/dataset_spec.rb +0 -5515
  266. data/spec/core/deprecated_spec.rb +0 -70
  267. data/spec/core/expression_filters_spec.rb +0 -1455
  268. data/spec/core/mock_adapter_spec.rb +0 -722
  269. data/spec/core/object_graph_spec.rb +0 -336
  270. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  271. data/spec/core/schema_generator_spec.rb +0 -214
  272. data/spec/core/schema_spec.rb +0 -1826
  273. data/spec/core/spec_helper.rb +0 -24
  274. data/spec/core/version_spec.rb +0 -14
  275. data/spec/core_extensions_spec.rb +0 -763
  276. data/spec/core_model_spec.rb +0 -2
  277. data/spec/core_spec.rb +0 -1
  278. data/spec/deprecation_helper.rb +0 -30
  279. data/spec/extensions/accessed_columns_spec.rb +0 -51
  280. data/spec/extensions/active_model_spec.rb +0 -99
  281. data/spec/extensions/after_initialize_spec.rb +0 -28
  282. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  283. data/spec/extensions/association_dependencies_spec.rb +0 -125
  284. data/spec/extensions/association_pks_spec.rb +0 -423
  285. data/spec/extensions/association_proxies_spec.rb +0 -100
  286. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  287. data/spec/extensions/auto_validations_spec.rb +0 -229
  288. data/spec/extensions/blacklist_security_spec.rb +0 -95
  289. data/spec/extensions/blank_spec.rb +0 -69
  290. data/spec/extensions/boolean_readers_spec.rb +0 -93
  291. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  292. data/spec/extensions/caching_spec.rb +0 -273
  293. data/spec/extensions/caller_logging_spec.rb +0 -52
  294. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  295. data/spec/extensions/column_conflicts_spec.rb +0 -75
  296. data/spec/extensions/column_select_spec.rb +0 -129
  297. data/spec/extensions/columns_introspection_spec.rb +0 -90
  298. data/spec/extensions/columns_updated_spec.rb +0 -35
  299. data/spec/extensions/composition_spec.rb +0 -248
  300. data/spec/extensions/connection_expiration_spec.rb +0 -151
  301. data/spec/extensions/connection_validator_spec.rb +0 -144
  302. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  303. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  304. data/spec/extensions/constraint_validations_spec.rb +0 -439
  305. data/spec/extensions/core_refinements_spec.rb +0 -528
  306. data/spec/extensions/csv_serializer_spec.rb +0 -183
  307. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  308. data/spec/extensions/dataset_associations_spec.rb +0 -365
  309. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  310. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  311. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  312. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  313. data/spec/extensions/defaults_setter_spec.rb +0 -150
  314. data/spec/extensions/delay_add_association_spec.rb +0 -73
  315. data/spec/extensions/dirty_spec.rb +0 -189
  316. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  317. data/spec/extensions/eager_each_spec.rb +0 -62
  318. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  319. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  320. data/spec/extensions/error_splitter_spec.rb +0 -18
  321. data/spec/extensions/error_sql_spec.rb +0 -20
  322. data/spec/extensions/escaped_like_spec.rb +0 -40
  323. data/spec/extensions/eval_inspect_spec.rb +0 -81
  324. data/spec/extensions/finder_spec.rb +0 -260
  325. data/spec/extensions/force_encoding_spec.rb +0 -126
  326. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  327. data/spec/extensions/graph_each_spec.rb +0 -113
  328. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  329. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  330. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  331. data/spec/extensions/index_caching_spec.rb +0 -66
  332. data/spec/extensions/inflector_spec.rb +0 -183
  333. data/spec/extensions/input_transformer_spec.rb +0 -69
  334. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  335. data/spec/extensions/instance_filters_spec.rb +0 -79
  336. data/spec/extensions/instance_hooks_spec.rb +0 -246
  337. data/spec/extensions/integer64_spec.rb +0 -22
  338. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  339. data/spec/extensions/json_serializer_spec.rb +0 -336
  340. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  341. data/spec/extensions/list_spec.rb +0 -291
  342. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  343. data/spec/extensions/many_through_many_spec.rb +0 -2177
  344. data/spec/extensions/migration_spec.rb +0 -864
  345. data/spec/extensions/modification_detection_spec.rb +0 -93
  346. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  347. data/spec/extensions/named_timezones_spec.rb +0 -111
  348. data/spec/extensions/nested_attributes_spec.rb +0 -767
  349. data/spec/extensions/null_dataset_spec.rb +0 -85
  350. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  351. data/spec/extensions/pagination_spec.rb +0 -116
  352. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  353. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  354. data/spec/extensions/pg_array_spec.rb +0 -398
  355. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -172
  356. data/spec/extensions/pg_enum_spec.rb +0 -118
  357. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  358. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  359. data/spec/extensions/pg_hstore_spec.rb +0 -219
  360. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  361. data/spec/extensions/pg_inet_spec.rb +0 -72
  362. data/spec/extensions/pg_interval_spec.rb +0 -103
  363. data/spec/extensions/pg_json_ops_spec.rb +0 -289
  364. data/spec/extensions/pg_json_spec.rb +0 -262
  365. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  366. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  367. data/spec/extensions/pg_range_spec.rb +0 -519
  368. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  369. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  370. data/spec/extensions/pg_row_spec.rb +0 -363
  371. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  372. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  373. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  374. data/spec/extensions/prepared_statements_spec.rb +0 -177
  375. data/spec/extensions/pretty_table_spec.rb +0 -123
  376. data/spec/extensions/query_spec.rb +0 -94
  377. data/spec/extensions/rcte_tree_spec.rb +0 -381
  378. data/spec/extensions/round_timestamps_spec.rb +0 -39
  379. data/spec/extensions/s_spec.rb +0 -60
  380. data/spec/extensions/schema_caching_spec.rb +0 -64
  381. data/spec/extensions/schema_dumper_spec.rb +0 -870
  382. data/spec/extensions/select_remove_spec.rb +0 -38
  383. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  384. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  385. data/spec/extensions/serialization_spec.rb +0 -365
  386. data/spec/extensions/server_block_spec.rb +0 -97
  387. data/spec/extensions/server_logging_spec.rb +0 -45
  388. data/spec/extensions/sharding_spec.rb +0 -189
  389. data/spec/extensions/shared_caching_spec.rb +0 -151
  390. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  391. data/spec/extensions/singular_table_names_spec.rb +0 -22
  392. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  393. data/spec/extensions/spec_helper.rb +0 -63
  394. data/spec/extensions/split_array_nil_spec.rb +0 -24
  395. data/spec/extensions/split_values_spec.rb +0 -57
  396. data/spec/extensions/sql_comments_spec.rb +0 -33
  397. data/spec/extensions/sql_expr_spec.rb +0 -59
  398. data/spec/extensions/static_cache_spec.rb +0 -471
  399. data/spec/extensions/string_agg_spec.rb +0 -90
  400. data/spec/extensions/string_date_time_spec.rb +0 -95
  401. data/spec/extensions/string_stripper_spec.rb +0 -68
  402. data/spec/extensions/subclasses_spec.rb +0 -79
  403. data/spec/extensions/subset_conditions_spec.rb +0 -38
  404. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  405. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  406. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  407. data/spec/extensions/table_select_spec.rb +0 -83
  408. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  409. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  410. data/spec/extensions/throw_failures_spec.rb +0 -74
  411. data/spec/extensions/timestamps_spec.rb +0 -209
  412. data/spec/extensions/to_dot_spec.rb +0 -153
  413. data/spec/extensions/touch_spec.rb +0 -226
  414. data/spec/extensions/tree_spec.rb +0 -334
  415. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  416. data/spec/extensions/unlimited_update_spec.rb +0 -21
  417. data/spec/extensions/update_or_create_spec.rb +0 -83
  418. data/spec/extensions/update_primary_key_spec.rb +0 -105
  419. data/spec/extensions/update_refresh_spec.rb +0 -59
  420. data/spec/extensions/uuid_spec.rb +0 -101
  421. data/spec/extensions/validate_associated_spec.rb +0 -52
  422. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  423. data/spec/extensions/validation_contexts_spec.rb +0 -31
  424. data/spec/extensions/validation_helpers_spec.rb +0 -525
  425. data/spec/extensions/whitelist_security_spec.rb +0 -157
  426. data/spec/extensions/xml_serializer_spec.rb +0 -213
  427. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  428. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  429. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  430. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  431. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  432. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  433. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  434. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  435. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  436. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  437. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  438. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  439. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  440. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  441. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  442. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  443. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  444. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  445. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  446. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  447. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  448. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  449. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  450. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  451. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  452. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  453. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  454. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  455. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  456. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  457. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  458. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  459. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  460. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  461. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  462. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  463. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  464. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  465. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  466. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  467. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  468. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  469. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  470. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  471. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  472. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  473. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  474. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  475. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  476. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  477. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  478. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  479. data/spec/guards_helper.rb +0 -59
  480. data/spec/integration/associations_test.rb +0 -2597
  481. data/spec/integration/database_test.rb +0 -113
  482. data/spec/integration/dataset_test.rb +0 -1981
  483. data/spec/integration/eager_loader_test.rb +0 -687
  484. data/spec/integration/migrator_test.rb +0 -262
  485. data/spec/integration/model_test.rb +0 -203
  486. data/spec/integration/plugin_test.rb +0 -2396
  487. data/spec/integration/prepared_statement_test.rb +0 -405
  488. data/spec/integration/schema_test.rb +0 -889
  489. data/spec/integration/spec_helper.rb +0 -65
  490. data/spec/integration/timezone_test.rb +0 -86
  491. data/spec/integration/transaction_test.rb +0 -603
  492. data/spec/integration/type_test.rb +0 -127
  493. data/spec/model/association_reflection_spec.rb +0 -803
  494. data/spec/model/associations_spec.rb +0 -4738
  495. data/spec/model/base_spec.rb +0 -875
  496. data/spec/model/class_dataset_methods_spec.rb +0 -146
  497. data/spec/model/dataset_methods_spec.rb +0 -198
  498. data/spec/model/eager_loading_spec.rb +0 -2377
  499. data/spec/model/hooks_spec.rb +0 -370
  500. data/spec/model/inflector_spec.rb +0 -26
  501. data/spec/model/model_spec.rb +0 -956
  502. data/spec/model/plugins_spec.rb +0 -429
  503. data/spec/model/record_spec.rb +0 -2118
  504. data/spec/model/spec_helper.rb +0 -46
  505. data/spec/model/validations_spec.rb +0 -220
  506. data/spec/model_no_assoc_spec.rb +0 -1
  507. data/spec/model_spec.rb +0 -1
  508. data/spec/plugin_spec.rb +0 -1
  509. data/spec/sequel_coverage.rb +0 -15
  510. data/spec/sequel_warning.rb +0 -4
  511. data/spec/spec_config.rb +0 -12
@@ -1,175 +0,0 @@
1
- = New Features
2
-
3
- * A one_through_one association type has been added. This is similar
4
- to the many_to_many association type in that it uses a join table,
5
- but it returns a single record instead of an array of records.
6
- This is designed for cases where the foreign key in the join table
7
- that references the current table has a unique constraint, or where
8
- you want to use an order to just pick the first matching record.
9
-
10
- Similarly, the many_through_many plugin now also offers a
11
- one_through_many association.
12
-
13
- * An association_join method has been added to model datasets, for
14
- setting up joins based on associations. This basically does the
15
- same join that eager_graph would do, but does not make the other
16
- changes that eager_graph makes.
17
-
18
- Unlike eager_graph (which uses LEFT OUTER JOINs by default),
19
- association_join uses INNER JOINs, but there are also
20
- association_*_join methods (e.g. association_left_join) for
21
- using different join types.
22
-
23
- Similar to eager_graph, you can use cascading of associations or
24
- multiple associations.
25
-
26
- Album.association_join(:artist, :tracks)
27
- Artist.association_left_join(:albums=>:tracks)
28
-
29
- * Dataset#eager_graph_with_options has been added for model
30
- datasets. It currently supports a :join_type option, for
31
- overriding the type of join to use on a per-call basis, as well
32
- as a :limit_strategy option. The API is similar to eager_graph,
33
- except that the associations to eagerly load are passed in as
34
- a single argument, and it takes an options hash.
35
-
36
- The :limit_strategy option works similarly to the
37
- :eager_limit_strategy option when eagerly loading. If set to
38
- true and the database supports window functions, it will join
39
- the current dataset to a subquery that uses a window function
40
- to correctly restrict the join to only those objects that fall
41
- within the association's limit/offset.
42
-
43
- The :limit_strategy option is not on by default. It is possible
44
- for it to perform significantly worse than the default strategy
45
- (which uses array slicing in ruby). The :limit_strategy
46
- significantly changes the SQL used, and can change the results
47
- of the query if any filters/orders related to the association
48
- are used.
49
-
50
- It's recommended you only use the :limit_strategy option if you
51
- are experiencing a bottleneck and you have benchmarked that it
52
- is faster and still produces the desired results.
53
-
54
- Artist.eager_graph_with_options(:first_10_albums,
55
- :limit_strategy=>true)
56
- # SELECT artists.id, artists.name,
57
- # first_10_albums.id AS first_10_albums_id,
58
- # first_10_albums.name AS first_10_albums_name,
59
- # first_10_albums.artist_id,
60
- # first_10_albums.release_date
61
- # FROM artists
62
- # LEFT OUTER JOIN (
63
- # SELECT id, name, artist_id, release_date
64
- # FROM (
65
- # SELECT *, row_number() OVER (PARTITION BY tracks.album_id)
66
- # AS x_sequel_row_number_x
67
- # FROM albums
68
- # ) AS t1 WHERE (x_sequel_row_number_x <= 10)
69
- # ) AS first_10_albums ON (first_10_albums.artist_id = artists.id)
70
-
71
- * Dataset#full_text_search on PostgreSQL now supports :plain and
72
- :phrase options. :plain takes the search terms as a single
73
- string, and searches for rows where all terms are used.
74
- :phrase is similar to :plain, but also adds a substring search
75
- to ensure that the string given appears verbatim in the text.
76
-
77
- * A :graph_order association option has been added, for using a
78
- different order when using eager_graph. This is mostly
79
- designed for cases where :order should be qualified in other
80
- cases, but using a qualification breaks eager_graph because the
81
- correct qualifier is not known until runtime.
82
-
83
- * SQL::AliasedExpression#alias has been added as an alias for #aliaz.
84
-
85
- = Other Improvements
86
-
87
- * Sequel will now automatically use an eager limit strategy for
88
- *_one associations that use an :order option. For associations
89
- that are truly one-to-one, an :order option is not needed, so it
90
- only makes sense to have an :order option if the association
91
- could theoretically return multiple results (in which case an
92
- eager limit strategy is helpful).
93
-
94
- * The queries that Sequel uses to filter by associations when
95
- those associations have conditions are now simpler and easier
96
- for the database to execute.
97
-
98
- * The queries that Sequel uses for dataset associations now handle
99
- cases where unqualified identifiers were used in the receiving
100
- dataset that would be made ambiguous by a join.
101
-
102
- * A limit strategy is now used when filtering by associations if
103
- the association has a limit and the database supports window
104
- functions. This allows Sequel to setup a correct filter in
105
- such cases.
106
-
107
- Artist.where(:first_10_albums=>Album[1]).all
108
- # SELECT *
109
- # FROM artists
110
- # WHERE (artists.id IN (
111
- # SELECT albums.artist_id
112
- # FROM albums
113
- # WHERE ((albums.artist_id IS NOT NULL) AND (albums.id IN (
114
- # SELECT id FROM (
115
- # SELECT albums.id, row_number() OVER
116
- # (PARTITION BY albums.artist_id ORDER BY release_date)
117
- # AS x_sequel_row_number_x
118
- # FROM albums
119
- # ) AS t1
120
- # WHERE (x_sequel_row_number_x <= 10)
121
- # )) AND (albums.id = 1))))
122
-
123
- * A limit strategy is now used in the dataset_associations plugin
124
- if the association has a limit and the database supports window
125
- functions. This makes the resulting datasets return correct
126
- results.
127
-
128
- Artist.first_10_albums
129
- # SELECT *
130
- # FROM albums
131
- # WHERE ((albums.artist_id IN (
132
- # SELECT artists.id FROM artists)
133
- # ) AND (albums.id IN (
134
- # SELECT id FROM (
135
- # SELECT albums.id, row_number() OVER
136
- # (PARTITION BY albums.artist_id ORDER BY release_date)
137
- # AS x_sequel_row_number_x
138
- # FROM albums
139
- # ) AS t1
140
- # WHERE (x_sequel_row_number_x <= 10)
141
- # )))
142
- # ORDER BY release_date
143
-
144
- * You can now pass symbols with embedded qualifiers or aliases,
145
- as well as SQL::Identifier, SQL::QualifiedIdentifier, and
146
- SQL::AliasedExpression objects as the first argument to
147
- Dataset#graph.
148
-
149
- * The nested_attributes plugin now automatically handles presence
150
- validations on foreign keys when creating associated objects.
151
- It now sets the foreign key value (or a placeholder value)
152
- before validating such objects.
153
-
154
- * Offsets on *_one associations are now respected when using
155
- eager_graph.
156
-
157
- * eager graphing *_many associations with offsets no longer breaks
158
- if there are no associated results.
159
-
160
- * Database#register_array_type in the pg_array extension now works
161
- correctly if there is no existing scalar conversion proc for
162
- the type.
163
-
164
- * Unique, foreign key, and not null constraint violations are now
165
- recognized correctly on SQLite 3.8.2+.
166
-
167
- * The odbc adapter now returns fractional seconds in timestamps.
168
-
169
- * The obdc/mssql adapter now inputs timestamps with 3 decimal
170
- places.
171
-
172
- = Backwards Compatibility
173
-
174
- * The private Model.apply_window_function_eager_limit_strategy
175
- method has been removed.
@@ -1,190 +0,0 @@
1
- = Performance Enhancements
2
-
3
- * Dataset::PlaceholderLiteralizer has been added as an optimization
4
- framework. This allows you to record changes to a given dataset
5
- using placeholder arguments, and later quickly execute the query
6
- providing values for the placeholders. This is similar in idea
7
- to prepared statements, except that the SQL for each query can
8
- change depending on the values for the placeholders.
9
-
10
- Using this optimization framework, generating the SQL for query
11
- is about 3x faster, and since SQL generation time is a significant
12
- portion of total time for simple queries, simple queries can
13
- execute up to 50% faster.
14
-
15
- There are two APIs for this optimization framework. There is a
16
- lower level dataset API:
17
-
18
- loader = Sequel::Dataset::PlaceholderLiteralizer.
19
- loader(DB[:items]) do |pl, ds|
20
- ds.where(:id=>pl.arg).exclude(:name=>pl.arg).limit(1)
21
- end
22
-
23
- loader.first(1, "foo")
24
- # SELECT * FROM items WHERE ((id = 1) AND (name != 'foo')) LIMIT 1
25
-
26
- loader.first([1, 2], %w"foo bar")
27
- # SELECT * FROM items WHERE ((id IN (1, 2)) AND
28
- # (name NOT IN ('foo', 'bar'))) LIMIT 1
29
-
30
- There is also a higher level model API (Model.finder):
31
-
32
- class Item < Sequel::Model
33
- # Given class method that returns a dataset
34
- def self.by_id_and_not_name(id, not_name)
35
- where(:id=>id).exclude(:name=>not_name)
36
- end
37
-
38
- # Create optimized method that returns first value
39
- finder :by_id_and_not_name
40
- end
41
-
42
- # Call optimized method
43
- Album.first_by_id_and_not_name(1, 'foo')
44
- # SELECT * FROM items WHERE ((id = 1) AND (name != 'foo')) LIMIT 1
45
-
46
- Model.finder defaults to creating a method that returns the first
47
- matching row, but using the :type option you can create methods
48
- that call each, all, or get. There is also an option to choose the
49
- method name (:name), as well as one to specify the number of
50
- arguments to use if the method doesn't take a fixed number
51
- (:arity).
52
-
53
- Finally, Model.find, .first, and .first! now automatically use an
54
- optimized finder if given a single argument. Model.[] uses an
55
- optimized finder if given a single hash, and Model.[], .with_pk,
56
- and .with_pk! use an optimized finder if the model has a composite
57
- primary key. In all of these cases, these methods are about 50%
58
- faster than before.
59
-
60
- * The pure-ruby PostgreSQL array parser that ships with Sequel has
61
- been replaced with a strscan-based parser. This parser avoids
62
- O(n^2) performance for arrays with multibyte strings, and in general
63
- is much faster. Parsing an array with a single string with 100,000
64
- multibyte characters is about 1000x faster, and now about half the
65
- speed of the C implementation in sequel_pg.
66
-
67
- * Dataset#paged_each now has a :strategy=>:filter option that
68
- dramatically improves performance, especially if the columns
69
- being ordered by are indexed.
70
-
71
- Unfortunately, there are enough corner cases to this approach
72
- that it cannot be used by default. At the least, the dataset
73
- needs to be selecting the columns it is ordering by, not aliasing
74
- the columns it is ordering by in the SELECT clause, not have
75
- NULLs in any of the columns being ordered by, and not itself use
76
- a limit or offset.
77
-
78
- If you are ordering by expressions that are not simple column
79
- values, you can provide a :filter_value option proc that takes the
80
- last retrieved row and array of order by expressions, and returns
81
- an array of values in the last retrieved row for those order by
82
- expressions.
83
-
84
- * In the postgres adapter, Dataset#paged_each now automatically uses
85
- a cursor for improved performance.
86
-
87
- * In the mysql2 adapter, Dataset#paged_each now automatically uses
88
- streaming for improved performance, if streaming is supported.
89
-
90
- * Dataset#with_sql_{each,all,first,single_value,insert,update}
91
- have been added. These methods take specific SQL and execute
92
- it on the database, returning the appropriate value. They
93
- are significantly faster than the previous approach of
94
- with_sql(SQL).{each,all,first,single_value,insert,update},
95
- as they don't require cloning the dataset.
96
-
97
- = New Features
98
-
99
- * Database#create_join_table! and #create_join_table? have been added,
100
- for consistency with #create_table! and #create_table?.
101
-
102
- * A :hold option has been added to Dataset#use_cursor in the postgres
103
- adapter, which uses WITH HOLD in the query, allowing for usage of
104
- the cursor outside the enclosing transaction. When :hold is used,
105
- Sequel does not automatically use a transaction around the cursor
106
- call.
107
-
108
- * Dataset#where_current_of has been added to the postgres adapter,
109
- for updating rows based on a cursor's current position. This can
110
- be used to update a large dataset where new values depend on
111
- some ruby method, without keeping all rows in memory.
112
-
113
- ds = DB[:huge_table]
114
- ds.use_cursor(:rows_per_fetch=>1).each do |row|
115
- ds.where_current_of.update(:column=>ruby_method(row))
116
- end
117
-
118
- * A current_datetime_timestamp extension has been added, for
119
- creating Time/DateTime instances that are literalized as
120
- CURRENT_TIMESTAMP. When the dataset uses this extension, models
121
- that use the touch and timestamps plugins will use
122
- CURRENT_TIMESTAMP for the timestamps.
123
-
124
- * The jdbc adapter now supports a :driver option, useful when
125
- Sequel doesn't have direct support for the underlying driver, and
126
- where java.sql.DriverManager.getConnection does not work
127
- correctly due to Java class loading issues.
128
-
129
- = Other Improvements
130
-
131
- * Multiple corner cases in Dataset#eager_graph have been fixed.
132
-
133
- * Calling Dataset#columns when using the eager_each plugin no
134
- longer triggers eager loading.
135
-
136
- * Database#column_schema_to_ruby_default is now a public method
137
- in the schema_dumper extension.
138
-
139
- * When validating associated objects for one_to_many and one_to_one
140
- associations in the nested_attributes plugin, don't remove column
141
- values if the association's foreign key is the associated model's
142
- primary key.
143
-
144
- * On PostgreSQL, Dataset#disable_insert_returning has been added
145
- back. This disables the automatic use of RETURNING for INSERTs
146
- for the dataset. This is necessary in cases where INSERT
147
- RETURNING doesn't work, such as PostgreSQL <8.2 (or PostgreSQL
148
- variants that forked before 8.2), or when using partitioning
149
- with trigger functions, or conditional rules.
150
-
151
- Note that if you use disable_insert_returning, insert will not
152
- return the autoincremented primary key. You need to call
153
- currval or lastval manually using the same connection to get
154
- the value, or use nextval to get the value to use before
155
- inserting.
156
-
157
- * The pg_array extension now uses the correct database type when
158
- typecasting values for smallint, oid, real, character, and varchar
159
- arrays. Previously, Sequel did not use the correct database type
160
- in some cases (e.g. text[] for a varchar[]), which resulted in
161
- errors if the value was used in a filter expression.
162
-
163
- * Additional unique constraint violations are now recognized on
164
- SQLite.
165
-
166
- * Check constraint violations are now recognized on SQLite >=3.8.2.
167
-
168
- * Adapters that emulate bitwise operators now do so using an append
169
- only design, similar to how all other queries are built in Sequel.
170
-
171
- = Backwards Compatibility
172
-
173
- * In some cases Sequel no longer adds superfluous parentheses when
174
- constructing SQL strings. If you are testing for specific SQL,
175
- this can cause test failures.
176
-
177
- * The pg_array extension no longer recognizes the :typecast_method
178
- option when registering an array type. The option allowed reuse
179
- of an existing typecast method, but as that results in an incorrect
180
- type at the database level, the option was fundementally broken.
181
-
182
- * The internals of the PostgreSQL array parser have changed. If you
183
- were relying on them, you'll need to update your code.
184
-
185
- * Dataset#complex_expression_arg_pairs private method now returns
186
- nested expression objects instead of an already literalized string
187
- in some cases. Custom adapters that call this method will probably
188
- need to be changed. It's recommended that such adapters switch to
189
- using the new Dataset#complex_expression_emulate_append method if
190
- possible.
data/spec/adapter_spec.rb DELETED
@@ -1,4 +0,0 @@
1
- if !ARGV.empty? && ARGV.first != 'none'
2
- require_relative "adapters/#{ARGV.first}_spec"
3
- end
4
- Dir['./spec/integration/*_test.rb'].each{|f| require f}
@@ -1,170 +0,0 @@
1
- SEQUEL_ADAPTER_TEST = :db2
2
-
3
- require_relative 'spec_helper'
4
-
5
- if DB.table_exists?(:test)
6
- DB.drop_table(:test)
7
- end
8
-
9
- describe Sequel::Database do
10
- before do
11
- @db = DB
12
- @db.create_table(:test){String :a}
13
- @ds = @db[:test]
14
- end
15
-
16
- after do
17
- @db.drop_table(:test)
18
- end
19
-
20
- it "should provide disconnect functionality after preparing a connection" do
21
- @ds.prepare(:first, :a).call
22
- @db.disconnect
23
- @db.pool.size.must_equal 0
24
- end
25
-
26
- it "should return version correctly" do
27
- @db.db2_version.must_match(/DB2 v/i)
28
- end
29
- end
30
-
31
- describe "Simple Dataset operations" do
32
- before(:all) do
33
- DB.use_clob_as_blob = true
34
- DB.create_table!(:items) do
35
- Integer :id, :primary_key => true
36
- Integer :number
37
- column :bin_string, 'varchar(20) for bit data'
38
- column :bin_clob, 'clob'
39
- end
40
- @ds = DB[:items]
41
- end
42
- after(:each) do
43
- @ds.delete
44
- end
45
- after(:all) do
46
- DB.use_clob_as_blob = false
47
- DB.drop_table(:items)
48
- end
49
-
50
- it "should insert with a primary key specified" do
51
- @ds.insert(:id => 1, :number => 10)
52
- @ds.insert(:id => 100, :number => 20)
53
- @ds.select_hash(:id, :number).must_equal(1 => 10, 100 => 20)
54
- end
55
-
56
- it "should insert into binary columns" do
57
- @ds.insert(:id => 1, :bin_string => Sequel.blob("\1"), :bin_clob => Sequel.blob("\2"))
58
- @ds.select(:bin_string, :bin_clob).first.must_equal(:bin_string => "\1", :bin_clob => "\2")
59
- end
60
- end
61
-
62
- describe Sequel::Database do
63
- before do
64
- @db = DB
65
- end
66
- after do
67
- @db.drop_table(:items)
68
- end
69
-
70
- it "should parse primary keys from the schema properly" do
71
- @db.create_table!(:items){Integer :number}
72
- @db.schema(:items).collect{|k,v| k if v[:primary_key]}.compact.must_equal []
73
- @db.create_table!(:items){primary_key :number}
74
- @db.schema(:items).collect{|k,v| k if v[:primary_key]}.compact.must_equal [:number]
75
- @db.create_table!(:items){Integer :number1, :null => false; Integer :number2, :null => false; primary_key [:number1, :number2]}
76
- @db.schema(:items).collect{|k,v| k if v[:primary_key]}.compact.must_equal [:number1, :number2]
77
- end
78
-
79
- it "should not error on alter_table operations that need REORG" do
80
- @db.create_table!(:items) do
81
- varchar :a
82
- end
83
- @db.alter_table(:items) do
84
- add_column :b, :varchar, :null => true
85
- set_column_allow_null :a, false
86
- add_index :a, :unique => true
87
- end
88
- end
89
- end
90
-
91
- describe "Sequel::IBMDB::Database#convert_smallint_to_bool" do
92
- before do
93
- @db = DB
94
- @db.create_table!(:booltest){column :b, 'smallint'; column :i, 'integer'}
95
- @ds = @db[:booltest]
96
- end
97
- after do
98
- @db.convert_smallint_to_bool = true
99
- @db.drop_table(:booltest)
100
- end
101
-
102
- it "should consider smallint datatypes as boolean if set, but not larger smallints" do
103
- @db.schema(:booltest, :reload=>true).first.last[:type].must_equal :boolean
104
- @db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
105
- @db.convert_smallint_to_bool = false
106
- @db.schema(:booltest, :reload=>true).first.last[:type].must_equal :integer
107
- @db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
108
- end
109
-
110
- it "should return smallints as bools and integers as integers when set" do
111
- @db.convert_smallint_to_bool = true
112
- @ds.delete
113
- @ds.insert(:b=>true, :i=>10)
114
- @ds.all.must_equal [{:b=>true, :i=>10}]
115
- @ds.delete
116
- @ds.insert(:b=>false, :i=>0)
117
- @ds.all.must_equal [{:b=>false, :i=>0}]
118
- @ds.delete
119
- @ds.insert(:b=>true, :i=>1)
120
- @ds.all.must_equal [{:b=>true, :i=>1}]
121
-
122
- @ds = @ds.with_convert_smallint_to_bool(false)
123
- @ds.delete
124
- @ds.insert(:b=>true, :i=>10)
125
- @ds.all.must_equal [{:b=>1, :i=>10}]
126
- end
127
-
128
- it "should return all smallints as integers when unset" do
129
- @db.convert_smallint_to_bool = false
130
- @ds.delete
131
- @ds.insert(:b=>true, :i=>10)
132
- @ds.all.must_equal [{:b=>1, :i=>10}]
133
- @ds.delete
134
- @ds.insert(:b=>false, :i=>0)
135
- @ds.all.must_equal [{:b=>0, :i=>0}]
136
-
137
- @ds.delete
138
- @ds.insert(:b=>1, :i=>10)
139
- @ds.all.must_equal [{:b=>1, :i=>10}]
140
- @ds.delete
141
- @ds.insert(:b=>0, :i=>0)
142
- @ds.all.must_equal [{:b=>0, :i=>0}]
143
-
144
- @ds = @ds.with_convert_smallint_to_bool(true)
145
- @ds.delete
146
- @ds.insert(:b=>true, :i=>10)
147
- @ds.all.must_equal [{:b=>true, :i=>10}]
148
- end
149
- end if DB.adapter_scheme == :ibmdb
150
-
151
- describe "Simple Dataset operations in transactions" do
152
- before do
153
- DB.create_table!(:items_insert_in_transaction) do
154
- Integer :id, :primary_key => true
155
- integer :number
156
- end
157
- @ds = DB[:items_insert_in_transaction]
158
- end
159
- after do
160
- DB.drop_table(:items_insert_in_transaction)
161
- end
162
-
163
- it "should insert correctly with a primary key specified inside a transaction" do
164
- DB.transaction do
165
- @ds.insert(:id=>100, :number=>20)
166
- @ds.count.must_equal 1
167
- @ds.order(:id).all.must_equal [{:id=>100, :number=>20}]
168
- end
169
- end
170
- end