sequel 4.49.0 → 5.3.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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +130 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +6 -9
  6. data/doc/advanced_associations.rdoc +91 -168
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.2.0.txt +33 -0
  30. data/doc/release_notes/5.3.0.txt +121 -0
  31. data/doc/schema_modification.rdoc +78 -64
  32. data/doc/security.rdoc +97 -88
  33. data/doc/sharding.rdoc +43 -30
  34. data/doc/sql.rdoc +53 -65
  35. data/doc/testing.rdoc +4 -5
  36. data/doc/thread_safety.rdoc +2 -4
  37. data/doc/transactions.rdoc +18 -17
  38. data/doc/validations.rdoc +48 -45
  39. data/doc/virtual_rows.rdoc +87 -115
  40. data/lib/sequel/adapters/ado/access.rb +7 -13
  41. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  42. data/lib/sequel/adapters/ado.rb +9 -25
  43. data/lib/sequel/adapters/amalgalite.rb +3 -18
  44. data/lib/sequel/adapters/ibmdb.rb +9 -45
  45. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  46. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  47. data/lib/sequel/adapters/jdbc/h2.rb +6 -26
  48. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
  49. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  50. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  51. data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
  52. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  53. data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
  54. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  55. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  56. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  57. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  58. data/lib/sequel/adapters/jdbc.rb +18 -74
  59. data/lib/sequel/adapters/mock.rb +4 -30
  60. data/lib/sequel/adapters/mysql.rb +7 -44
  61. data/lib/sequel/adapters/mysql2.rb +5 -23
  62. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  63. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  64. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  65. data/lib/sequel/adapters/odbc.rb +0 -19
  66. data/lib/sequel/adapters/oracle.rb +8 -13
  67. data/lib/sequel/adapters/postgres.rb +28 -150
  68. data/lib/sequel/adapters/postgresql.rb +1 -1
  69. data/lib/sequel/adapters/shared/access.rb +11 -51
  70. data/lib/sequel/adapters/shared/db2.rb +3 -61
  71. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  72. data/lib/sequel/adapters/shared/mysql.rb +61 -227
  73. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  74. data/lib/sequel/adapters/shared/postgres.rb +58 -264
  75. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  76. data/lib/sequel/adapters/shared/sqlite.rb +22 -101
  77. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  78. data/lib/sequel/adapters/sqlite.rb +2 -19
  79. data/lib/sequel/adapters/tinytds.rb +5 -15
  80. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  81. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
  82. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  83. data/lib/sequel/adapters/utils/replace.rb +0 -5
  84. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  85. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  86. data/lib/sequel/ast_transformer.rb +3 -94
  87. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  88. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  89. data/lib/sequel/connection_pool/single.rb +0 -2
  90. data/lib/sequel/connection_pool/threaded.rb +94 -110
  91. data/lib/sequel/connection_pool.rb +38 -28
  92. data/lib/sequel/core.rb +42 -101
  93. data/lib/sequel/database/connecting.rb +23 -60
  94. data/lib/sequel/database/dataset.rb +6 -9
  95. data/lib/sequel/database/dataset_defaults.rb +4 -48
  96. data/lib/sequel/database/features.rb +5 -4
  97. data/lib/sequel/database/logging.rb +2 -9
  98. data/lib/sequel/database/misc.rb +36 -55
  99. data/lib/sequel/database/query.rb +8 -13
  100. data/lib/sequel/database/schema_generator.rb +93 -64
  101. data/lib/sequel/database/schema_methods.rb +61 -79
  102. data/lib/sequel/database/transactions.rb +4 -24
  103. data/lib/sequel/database.rb +12 -2
  104. data/lib/sequel/dataset/actions.rb +57 -107
  105. data/lib/sequel/dataset/dataset_module.rb +4 -16
  106. data/lib/sequel/dataset/features.rb +35 -30
  107. data/lib/sequel/dataset/graph.rb +40 -49
  108. data/lib/sequel/dataset/misc.rb +12 -37
  109. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  110. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  111. data/lib/sequel/dataset/query.rb +91 -161
  112. data/lib/sequel/dataset/sql.rb +33 -225
  113. data/lib/sequel/dataset.rb +18 -10
  114. data/lib/sequel/deprecated.rb +18 -27
  115. data/lib/sequel/exceptions.rb +1 -17
  116. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  117. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  118. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  119. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  120. data/lib/sequel/extensions/connection_validator.rb +1 -1
  121. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  122. data/lib/sequel/extensions/core_extensions.rb +39 -49
  123. data/lib/sequel/extensions/core_refinements.rb +39 -45
  124. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  125. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  126. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  127. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  128. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  129. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  130. data/lib/sequel/extensions/from_block.rb +1 -35
  131. data/lib/sequel/extensions/graph_each.rb +2 -2
  132. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  133. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  134. data/lib/sequel/extensions/inflector.rb +4 -4
  135. data/lib/sequel/extensions/migration.rb +27 -43
  136. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  137. data/lib/sequel/extensions/null_dataset.rb +2 -8
  138. data/lib/sequel/extensions/pagination.rb +1 -17
  139. data/lib/sequel/extensions/pg_array.rb +20 -189
  140. data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
  141. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  142. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  143. data/lib/sequel/extensions/pg_inet.rb +3 -16
  144. data/lib/sequel/extensions/pg_interval.rb +1 -20
  145. data/lib/sequel/extensions/pg_json.rb +7 -27
  146. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  147. data/lib/sequel/extensions/pg_range.rb +6 -121
  148. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  149. data/lib/sequel/extensions/pg_row.rb +5 -77
  150. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  151. data/lib/sequel/extensions/query.rb +3 -4
  152. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  153. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  154. data/lib/sequel/extensions/select_remove.rb +3 -3
  155. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  156. data/lib/sequel/extensions/sql_comments.rb +2 -2
  157. data/lib/sequel/extensions/string_agg.rb +11 -8
  158. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  159. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  160. data/lib/sequel/model/associations.rb +129 -131
  161. data/lib/sequel/model/base.rb +133 -731
  162. data/lib/sequel/model/default_inflections.rb +1 -1
  163. data/lib/sequel/model/errors.rb +0 -3
  164. data/lib/sequel/model/exceptions.rb +2 -6
  165. data/lib/sequel/model/inflections.rb +1 -26
  166. data/lib/sequel/model/plugins.rb +1 -0
  167. data/lib/sequel/model.rb +27 -62
  168. data/lib/sequel/plugins/active_model.rb +2 -5
  169. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  170. data/lib/sequel/plugins/association_pks.rb +14 -28
  171. data/lib/sequel/plugins/association_proxies.rb +6 -7
  172. data/lib/sequel/plugins/auto_validations.rb +4 -4
  173. data/lib/sequel/plugins/before_after_save.rb +0 -43
  174. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  175. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  176. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  177. data/lib/sequel/plugins/caching.rb +5 -5
  178. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  179. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  180. data/lib/sequel/plugins/column_select.rb +2 -2
  181. data/lib/sequel/plugins/composition.rb +15 -24
  182. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  183. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  184. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  185. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  186. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  187. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  188. data/lib/sequel/plugins/finder.rb +16 -10
  189. data/lib/sequel/plugins/force_encoding.rb +1 -7
  190. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  191. data/lib/sequel/plugins/input_transformer.rb +10 -11
  192. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  193. data/lib/sequel/plugins/instance_filters.rb +5 -5
  194. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  195. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  196. data/lib/sequel/plugins/json_serializer.rb +19 -19
  197. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  198. data/lib/sequel/plugins/list.rb +6 -6
  199. data/lib/sequel/plugins/many_through_many.rb +11 -8
  200. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  201. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  202. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  203. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  204. data/lib/sequel/plugins/pg_row.rb +2 -11
  205. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  206. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  207. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  208. data/lib/sequel/plugins/serialization.rb +15 -33
  209. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  210. data/lib/sequel/plugins/sharding.rb +2 -8
  211. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  212. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  213. data/lib/sequel/plugins/static_cache.rb +8 -9
  214. data/lib/sequel/plugins/string_stripper.rb +3 -3
  215. data/lib/sequel/plugins/subclasses.rb +1 -1
  216. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  217. data/lib/sequel/plugins/table_select.rb +2 -2
  218. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  219. data/lib/sequel/plugins/timestamps.rb +6 -7
  220. data/lib/sequel/plugins/touch.rb +4 -8
  221. data/lib/sequel/plugins/tree.rb +3 -3
  222. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  223. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  224. data/lib/sequel/plugins/update_or_create.rb +3 -3
  225. data/lib/sequel/plugins/update_refresh.rb +3 -3
  226. data/lib/sequel/plugins/uuid.rb +7 -11
  227. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  228. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  229. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  230. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  231. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  232. data/lib/sequel/sql.rb +145 -276
  233. data/lib/sequel/timezones.rb +8 -23
  234. data/lib/sequel/version.rb +2 -2
  235. data/lib/sequel.rb +1 -1
  236. data/spec/adapter_spec.rb +1 -1
  237. data/spec/adapters/db2_spec.rb +2 -103
  238. data/spec/adapters/mssql_spec.rb +89 -68
  239. data/spec/adapters/mysql_spec.rb +111 -478
  240. data/spec/adapters/oracle_spec.rb +1 -9
  241. data/spec/adapters/postgres_spec.rb +459 -664
  242. data/spec/adapters/spec_helper.rb +12 -31
  243. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  244. data/spec/adapters/sqlite_spec.rb +8 -146
  245. data/spec/bin_spec.rb +11 -16
  246. data/spec/core/connection_pool_spec.rb +173 -74
  247. data/spec/core/database_spec.rb +96 -244
  248. data/spec/core/dataset_spec.rb +99 -414
  249. data/spec/core/deprecated_spec.rb +3 -3
  250. data/spec/core/expression_filters_spec.rb +37 -144
  251. data/spec/core/mock_adapter_spec.rb +241 -4
  252. data/spec/core/object_graph_spec.rb +11 -60
  253. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  254. data/spec/core/schema_generator_spec.rb +51 -40
  255. data/spec/core/schema_spec.rb +88 -77
  256. data/spec/core/spec_helper.rb +6 -24
  257. data/spec/core/version_spec.rb +1 -1
  258. data/spec/core_extensions_spec.rb +7 -83
  259. data/spec/core_model_spec.rb +2 -2
  260. data/spec/deprecation_helper.rb +2 -14
  261. data/spec/extensions/accessed_columns_spec.rb +1 -1
  262. data/spec/extensions/active_model_spec.rb +3 -3
  263. data/spec/extensions/after_initialize_spec.rb +1 -1
  264. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  265. data/spec/extensions/association_dependencies_spec.rb +1 -1
  266. data/spec/extensions/association_pks_spec.rb +30 -92
  267. data/spec/extensions/association_proxies_spec.rb +1 -1
  268. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  269. data/spec/extensions/auto_validations_spec.rb +1 -1
  270. data/spec/extensions/blacklist_security_spec.rb +1 -1
  271. data/spec/extensions/blank_spec.rb +1 -1
  272. data/spec/extensions/boolean_readers_spec.rb +1 -1
  273. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  274. data/spec/extensions/caching_spec.rb +1 -1
  275. data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
  276. data/spec/extensions/column_conflicts_spec.rb +1 -1
  277. data/spec/extensions/column_select_spec.rb +4 -4
  278. data/spec/extensions/columns_introspection_spec.rb +1 -1
  279. data/spec/extensions/columns_updated_spec.rb +1 -1
  280. data/spec/extensions/composition_spec.rb +8 -30
  281. data/spec/extensions/connection_expiration_spec.rb +3 -3
  282. data/spec/extensions/connection_validator_spec.rb +3 -3
  283. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  284. data/spec/extensions/constraint_validations_spec.rb +1 -1
  285. data/spec/extensions/core_refinements_spec.rb +1 -3
  286. data/spec/extensions/csv_serializer_spec.rb +4 -9
  287. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  288. data/spec/extensions/dataset_associations_spec.rb +2 -1
  289. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  290. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  291. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  292. data/spec/extensions/defaults_setter_spec.rb +2 -2
  293. data/spec/extensions/delay_add_association_spec.rb +8 -9
  294. data/spec/extensions/dirty_spec.rb +1 -1
  295. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  296. data/spec/extensions/eager_each_spec.rb +2 -2
  297. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  298. data/spec/extensions/error_splitter_spec.rb +1 -1
  299. data/spec/extensions/error_sql_spec.rb +1 -1
  300. data/spec/extensions/eval_inspect_spec.rb +1 -1
  301. data/spec/extensions/finder_spec.rb +1 -1
  302. data/spec/extensions/force_encoding_spec.rb +2 -5
  303. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  304. data/spec/extensions/graph_each_spec.rb +5 -5
  305. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  306. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  307. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  308. data/spec/extensions/inflector_spec.rb +1 -1
  309. data/spec/extensions/input_transformer_spec.rb +7 -2
  310. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  311. data/spec/extensions/instance_filters_spec.rb +1 -1
  312. data/spec/extensions/instance_hooks_spec.rb +1 -95
  313. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  314. data/spec/extensions/json_serializer_spec.rb +1 -1
  315. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  316. data/spec/extensions/list_spec.rb +5 -6
  317. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  318. data/spec/extensions/many_through_many_spec.rb +25 -33
  319. data/spec/extensions/migration_spec.rb +12 -2
  320. data/spec/extensions/modification_detection_spec.rb +1 -1
  321. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  322. data/spec/extensions/named_timezones_spec.rb +3 -3
  323. data/spec/extensions/nested_attributes_spec.rb +1 -29
  324. data/spec/extensions/null_dataset_spec.rb +1 -11
  325. data/spec/extensions/optimistic_locking_spec.rb +2 -2
  326. data/spec/extensions/pagination_spec.rb +1 -1
  327. data/spec/extensions/pg_array_associations_spec.rb +22 -26
  328. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_array_spec.rb +3 -48
  330. data/spec/extensions/pg_enum_spec.rb +1 -1
  331. data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
  332. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  333. data/spec/extensions/pg_hstore_spec.rb +22 -31
  334. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_inet_spec.rb +1 -14
  336. data/spec/extensions/pg_interval_spec.rb +3 -13
  337. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  338. data/spec/extensions/pg_json_spec.rb +1 -13
  339. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  340. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  341. data/spec/extensions/pg_range_spec.rb +3 -88
  342. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  343. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  344. data/spec/extensions/pg_row_spec.rb +1 -44
  345. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  346. data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
  347. data/spec/extensions/prepared_statements_spec.rb +13 -48
  348. data/spec/extensions/pretty_table_spec.rb +40 -9
  349. data/spec/extensions/query_spec.rb +1 -12
  350. data/spec/extensions/rcte_tree_spec.rb +23 -34
  351. data/spec/extensions/round_timestamps_spec.rb +1 -5
  352. data/spec/extensions/s_spec.rb +1 -1
  353. data/spec/extensions/schema_caching_spec.rb +1 -1
  354. data/spec/extensions/schema_dumper_spec.rb +43 -32
  355. data/spec/extensions/select_remove_spec.rb +1 -1
  356. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  357. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  358. data/spec/extensions/serialization_spec.rb +5 -17
  359. data/spec/extensions/server_block_spec.rb +1 -1
  360. data/spec/extensions/server_logging_spec.rb +2 -2
  361. data/spec/extensions/sharding_spec.rb +1 -1
  362. data/spec/extensions/shared_caching_spec.rb +1 -28
  363. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  364. data/spec/extensions/singular_table_names_spec.rb +1 -1
  365. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  366. data/spec/extensions/spec_helper.rb +5 -27
  367. data/spec/extensions/split_array_nil_spec.rb +1 -1
  368. data/spec/extensions/split_values_spec.rb +1 -1
  369. data/spec/extensions/sql_comments_spec.rb +1 -1
  370. data/spec/extensions/sql_expr_spec.rb +1 -1
  371. data/spec/extensions/static_cache_spec.rb +1 -1
  372. data/spec/extensions/string_agg_spec.rb +2 -2
  373. data/spec/extensions/string_date_time_spec.rb +1 -1
  374. data/spec/extensions/string_stripper_spec.rb +1 -1
  375. data/spec/extensions/subclasses_spec.rb +1 -1
  376. data/spec/extensions/subset_conditions_spec.rb +1 -1
  377. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  378. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  379. data/spec/extensions/synchronize_sql_spec.rb +124 -0
  380. data/spec/extensions/table_select_spec.rb +4 -4
  381. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  382. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  383. data/spec/extensions/timestamps_spec.rb +5 -7
  384. data/spec/extensions/to_dot_spec.rb +1 -1
  385. data/spec/extensions/touch_spec.rb +1 -1
  386. data/spec/extensions/tree_spec.rb +1 -1
  387. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  388. data/spec/extensions/unlimited_update_spec.rb +1 -1
  389. data/spec/extensions/update_or_create_spec.rb +12 -16
  390. data/spec/extensions/update_primary_key_spec.rb +4 -3
  391. data/spec/extensions/update_refresh_spec.rb +1 -1
  392. data/spec/extensions/uuid_spec.rb +10 -13
  393. data/spec/extensions/validate_associated_spec.rb +1 -1
  394. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  395. data/spec/extensions/validation_contexts_spec.rb +1 -1
  396. data/spec/extensions/validation_helpers_spec.rb +10 -44
  397. data/spec/extensions/whitelist_security_spec.rb +5 -5
  398. data/spec/extensions/xml_serializer_spec.rb +8 -13
  399. data/spec/guards_helper.rb +2 -1
  400. data/spec/integration/associations_test.rb +1 -23
  401. data/spec/integration/database_test.rb +7 -7
  402. data/spec/integration/dataset_test.rb +12 -47
  403. data/spec/integration/eager_loader_test.rb +1 -1
  404. data/spec/integration/migrator_test.rb +1 -1
  405. data/spec/integration/model_test.rb +4 -82
  406. data/spec/integration/plugin_test.rb +7 -23
  407. data/spec/integration/prepared_statement_test.rb +8 -88
  408. data/spec/integration/schema_test.rb +10 -10
  409. data/spec/integration/spec_helper.rb +17 -21
  410. data/spec/integration/timezone_test.rb +5 -5
  411. data/spec/integration/transaction_test.rb +3 -55
  412. data/spec/integration/type_test.rb +9 -9
  413. data/spec/model/association_reflection_spec.rb +24 -9
  414. data/spec/model/associations_spec.rb +124 -303
  415. data/spec/model/base_spec.rb +43 -137
  416. data/spec/model/class_dataset_methods_spec.rb +2 -20
  417. data/spec/model/dataset_methods_spec.rb +1 -20
  418. data/spec/model/eager_loading_spec.rb +48 -17
  419. data/spec/model/hooks_spec.rb +5 -300
  420. data/spec/model/inflector_spec.rb +1 -1
  421. data/spec/model/model_spec.rb +29 -339
  422. data/spec/model/plugins_spec.rb +2 -16
  423. data/spec/model/record_spec.rb +33 -129
  424. data/spec/model/spec_helper.rb +5 -15
  425. data/spec/model/validations_spec.rb +1 -1
  426. data/spec/sequel_warning.rb +1 -12
  427. metadata +19 -65
  428. data/doc/active_record.rdoc +0 -927
  429. data/lib/sequel/adapters/cubrid.rb +0 -160
  430. data/lib/sequel/adapters/do/mysql.rb +0 -69
  431. data/lib/sequel/adapters/do/postgres.rb +0 -46
  432. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  433. data/lib/sequel/adapters/do.rb +0 -166
  434. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  435. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  436. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  437. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  438. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  439. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  440. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  441. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  442. data/lib/sequel/adapters/shared/informix.rb +0 -63
  443. data/lib/sequel/adapters/shared/progress.rb +0 -40
  444. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  445. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  446. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  447. data/lib/sequel/adapters/swift.rb +0 -169
  448. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  449. data/lib/sequel/dataset/mutation.rb +0 -98
  450. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  451. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  452. data/lib/sequel/extensions/filter_having.rb +0 -65
  453. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  454. data/lib/sequel/extensions/meta_def.rb +0 -37
  455. data/lib/sequel/extensions/query_literals.rb +0 -86
  456. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  457. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  458. data/lib/sequel/extensions/set_overrides.rb +0 -82
  459. data/lib/sequel/no_core_ext.rb +0 -4
  460. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  461. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  462. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  463. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  464. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  465. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  466. data/lib/sequel/plugins/schema.rb +0 -84
  467. data/lib/sequel/plugins/scissors.rb +0 -37
  468. data/spec/core/dataset_mutation_spec.rb +0 -253
  469. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  470. data/spec/extensions/before_after_save_spec.rb +0 -40
  471. data/spec/extensions/filter_having_spec.rb +0 -42
  472. data/spec/extensions/from_block_spec.rb +0 -21
  473. data/spec/extensions/hash_aliases_spec.rb +0 -26
  474. data/spec/extensions/identifier_columns_spec.rb +0 -19
  475. data/spec/extensions/meta_def_spec.rb +0 -35
  476. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  477. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  478. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  479. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  480. data/spec/extensions/query_literals_spec.rb +0 -185
  481. data/spec/extensions/schema_spec.rb +0 -123
  482. data/spec/extensions/scissors_spec.rb +0 -27
  483. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  484. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel.require 'adapters/shared/postgres'
3
+ require_relative 'shared/postgres'
4
4
 
5
5
  begin
6
6
  require 'pg'
@@ -26,12 +26,6 @@ end
26
26
 
27
27
  module Sequel
28
28
  module Postgres
29
- # SEQUEL5: Remove
30
- TYPE_CONVERTOR = Class.new do
31
- def bytea(s) ::Sequel::SQL::Blob.new(Adapter.unescape_bytea(s)) end
32
- end.new
33
- Sequel::Deprecation.deprecate_constant(self, :TYPE_CONVERTOR)
34
-
35
29
  if Sequel::Postgres::USES_PG
36
30
  # Whether the given sequel_pg version integer is supported.
37
31
  def self.sequel_pg_version_supported?(version)
@@ -39,19 +33,6 @@ module Sequel
39
33
  end
40
34
  end
41
35
 
42
- # SEQUEL5: Remove
43
- @use_iso_date_format = true
44
- class << self
45
- def use_iso_date_format
46
- Sequel::Deprecation.deprecate("Sequel::Postgres.use_iso_date_format", "Use the :use_iso_date_format Database option instead")
47
- @use_iso_date_format
48
- end
49
- def use_iso_date_format=(v)
50
- Sequel::Deprecation.deprecate("Sequel::Postgres.use_iso_date_format=", "Use the :use_iso_date_format Database option instead")
51
- @use_iso_date_format = v
52
- end
53
- end
54
-
55
36
  # PGconn subclass for connection specific methods used with the
56
37
  # pg or postgres-pr driver.
57
38
  class Adapter < PGconn
@@ -61,7 +42,7 @@ module Sequel
61
42
  if defined?(::PG::ConnectionBad)
62
43
  DISCONNECT_ERROR_CLASSES << ::PG::ConnectionBad
63
44
  end
64
- #DISCONNECT_ERROR_CLASSES.freeze # SEQUEL5
45
+ DISCONNECT_ERROR_CLASSES.freeze
65
46
 
66
47
  disconnect_errors = [
67
48
  'could not receive data from server',
@@ -89,7 +70,6 @@ module Sequel
89
70
  # Escape bytea values. Uses historical format instead of hex
90
71
  # format for maximum compatibility.
91
72
  def escape_bytea(str)
92
- # each_byte used instead of [] for 1.9 compatibility
93
73
  str.gsub(/[\000-\037\047\134\177-\377]/n){|b| "\\#{sprintf('%o', b.each_byte{|x| break x}).rjust(3, '0')}"}
94
74
  end
95
75
 
@@ -160,40 +140,25 @@ module Sequel
160
140
 
161
141
  private
162
142
 
163
- # Return the PGResult object that is returned by executing the given
164
- # sql and args.
143
+ # Return the PGResult containing the query results.
165
144
  def execute_query(sql, args)
166
145
  @db.log_connection_yield(sql, self, args){args ? async_exec(sql, args) : async_exec(sql)}
167
146
  end
168
147
  end
169
148
 
170
- # Database class for PostgreSQL databases used with Sequel and the
171
- # pg, postgres, or postgres-pr driver.
172
149
  class Database < Sequel::Database
173
150
  include Sequel::Postgres::DatabaseMethods
174
151
 
175
- INFINITE_TIMESTAMP_STRINGS = ['infinity'.freeze, '-infinity'.freeze].freeze
176
- INFINITE_DATETIME_VALUES = ([PLUS_INFINITY, MINUS_INFINITY] + INFINITE_TIMESTAMP_STRINGS).freeze
177
-
178
152
  set_adapter_scheme :postgresql
179
153
  set_adapter_scheme :postgres
180
154
 
181
- # Whether infinite timestamps/dates should be converted on retrieval. By default, no
182
- # conversion is done, so an error is raised if you attempt to retrieve an infinite
183
- # timestamp/date. You can set this to :nil to convert to nil, :string to leave
184
- # as a string, or :float to convert to an infinite float.
185
- attr_reader :convert_infinite_timestamps
186
-
187
155
  # Convert given argument so that it can be used directly by pg. Currently, pg doesn't
188
- # handle fractional seconds in Time/DateTime or blobs with "\0", and it won't ever
189
- # handle Sequel::SQLTime values correctly. Only public for use by the adapter, shouldn't
190
- # be used by external code.
156
+ # handle fractional seconds in Time/DateTime or blobs with "\0". Only public for use by
157
+ # the adapter, shouldn't be used by external code.
191
158
  def bound_variable_arg(arg, conn)
192
159
  case arg
193
160
  when Sequel::SQL::Blob
194
161
  {:value=>arg, :type=>17, :format=>1}
195
- when Sequel::SQLTime
196
- literal(arg)
197
162
  when DateTime, Time
198
163
  literal(arg)
199
164
  else
@@ -230,7 +195,7 @@ module Sequel
230
195
  conn.set_notice_receiver(&receiver)
231
196
  end
232
197
  else
233
- unless typecast_value_boolean(@opts.fetch(:force_standard_strings, Postgres.instance_variable_get(:@force_standard_strings))) # , true)) # SEQUEL5
198
+ unless typecast_value_boolean(@opts.fetch(:force_standard_strings, true))
234
199
  raise Error, "Cannot create connection using postgres-pr unless force_standard_strings is set"
235
200
  end
236
201
 
@@ -258,39 +223,21 @@ module Sequel
258
223
  conn
259
224
  end
260
225
 
261
- # Set whether to allow infinite timestamps/dates. Make sure the
262
- # conversion proc for date reflects that setting.
263
- def convert_infinite_timestamps=(v)
264
- @convert_infinite_timestamps = case v
265
- when Symbol
266
- v
267
- when 'nil'
268
- :nil
269
- when 'string'
270
- :string
271
- when 'float'
272
- :float
273
- when String
274
- typecast_value_boolean(v)
275
- else
276
- false
277
- end
226
+ # Always false, support was moved to pg_extended_date_support extension.
227
+ # Needs to stay defined here so that sequel_pg works.
228
+ def convert_infinite_timestamps
229
+ false
230
+ end
278
231
 
279
- pr = old_pr = @use_iso_date_format ? TYPE_TRANSLATOR.method(:date) : Sequel.method(:string_to_date)
280
- if v
281
- pr = lambda do |val|
282
- case val
283
- when *INFINITE_TIMESTAMP_STRINGS
284
- infinite_timestamp_value(val)
285
- else
286
- old_pr.call(val)
287
- end
288
- end
232
+ # Enable pg_extended_date_support extension if symbol or string is given.
233
+ def convert_infinite_timestamps=(v)
234
+ case v
235
+ when Symbol, String, true
236
+ extension(:pg_extended_date_support)
237
+ self.convert_infinite_timestamps = v
289
238
  end
290
- add_conversion_proc(1082, pr)
291
239
  end
292
240
 
293
- # Disconnect given connection
294
241
  def disconnect_connection(conn)
295
242
  conn.finish
296
243
  rescue PGError, IOError
@@ -322,7 +269,6 @@ module Sequel
322
269
  end
323
270
  end
324
271
 
325
- # Execute the given SQL with the given args on an available connection.
326
272
  def execute(sql, opts=OPTS, &block)
327
273
  synchronize(opts[:server]){|conn| check_database_errors{_execute(conn, sql, opts, &block)}}
328
274
  end
@@ -340,6 +286,9 @@ module Sequel
340
286
  # a version of PostgreSQL before 9.0, you will probably want to
341
287
  # use a string if you are using any options at all, as the syntax
342
288
  # Sequel uses for options is only compatible with PostgreSQL 9.0+.
289
+ # This should be the full COPY statement passed to PostgreSQL, not
290
+ # just the SELECT query. If a string is given, the :format and
291
+ # :options options are ignored.
343
292
  # Dataset :: Uses a query instead of a table name when copying.
344
293
  # other :: Uses a table name (usually a symbol) when copying.
345
294
  #
@@ -490,21 +439,6 @@ module Sequel
490
439
  end
491
440
  end
492
441
 
493
- # If convert_infinite_timestamps is true and the value is infinite, return an appropriate
494
- # value based on the convert_infinite_timestamps setting.
495
- def to_application_timestamp(value)
496
- if convert_infinite_timestamps
497
- case value
498
- when *INFINITE_TIMESTAMP_STRINGS
499
- infinite_timestamp_value(value)
500
- else
501
- super
502
- end
503
- else
504
- super
505
- end
506
- end
507
-
508
442
  private
509
443
 
510
444
  # Execute the given SQL string or prepared statement on the connection object.
@@ -524,7 +458,7 @@ module Sequel
524
458
  # Add the primary_keys and primary_key_sequences instance variables,
525
459
  # so we can get the correct return values for inserted rows.
526
460
  def adapter_initialize
527
- @use_iso_date_format = typecast_value_boolean(@opts.fetch(:use_iso_date_format, Postgres.instance_variable_get(:@use_iso_date_format))) # , true)) # SEQUEL5
461
+ @use_iso_date_format = typecast_value_boolean(@opts.fetch(:use_iso_date_format, true))
528
462
  initialize_postgres_adapter
529
463
  add_conversion_proc(17, method(:unescape_bytea)) if USES_PG
530
464
  add_conversion_proc(1082, TYPE_TRANSLATOR.method(:date)) if @use_iso_date_format
@@ -611,70 +545,19 @@ module Sequel
611
545
  end
612
546
  end
613
547
 
614
- # Return an appropriate value for the given infinite timestamp string.
615
- def infinite_timestamp_value(value)
616
- case convert_infinite_timestamps
617
- when :nil
618
- nil
619
- when :string
620
- value
621
- else
622
- value == 'infinity' ? PLUS_INFINITY : MINUS_INFINITY
623
- end
624
- end
625
-
626
548
  # Don't log, since logging is done by the underlying connection.
627
549
  def log_connection_execute(conn, sql)
628
550
  conn.execute(sql)
629
551
  end
630
552
 
631
- # If the value is an infinite value (either an infinite float or a string returned by
632
- # by PostgreSQL for an infinite timestamp), return it without converting it if
633
- # convert_infinite_timestamps is set.
634
- def typecast_value_date(value)
635
- if convert_infinite_timestamps
636
- case value
637
- when *INFINITE_DATETIME_VALUES
638
- value
639
- else
640
- super
641
- end
642
- else
643
- super
644
- end
645
- end
646
-
647
- # If the value is an infinite value (either an infinite float or a string returned by
648
- # by PostgreSQL for an infinite timestamp), return it without converting it if
649
- # convert_infinite_timestamps is set.
650
- def typecast_value_datetime(value)
651
- if convert_infinite_timestamps
652
- case value
653
- when *INFINITE_DATETIME_VALUES
654
- value
655
- else
656
- super
657
- end
658
- else
659
- super
660
- end
553
+ def rollback_transaction(conn, opts=OPTS)
554
+ super unless conn.transaction_status == 0
661
555
  end
662
556
  end
663
557
 
664
- # Dataset class for PostgreSQL datasets that use the pg, postgres, or
665
- # postgres-pr driver.
666
558
  class Dataset < Sequel::Dataset
667
559
  include Sequel::Postgres::DatasetMethods
668
560
 
669
- Database::DatasetClass = self
670
- Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
671
- APOS = "'".freeze
672
- Sequel::Deprecation.deprecate_constant(self, :APOS)
673
- DEFAULT_CURSOR_NAME = 'sequel_cursor'.freeze
674
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_CURSOR_NAME)
675
-
676
- # Yield all rows returned by executing the given SQL and converting
677
- # the types.
678
561
  def fetch_rows(sql)
679
562
  return cursor_fetch_rows(sql){|h| yield h} if @opts[:cursor]
680
563
  execute(sql){|res| yield_hash_rows(res, fetch_rows_set_cols(res)){|h| yield h}}
@@ -702,8 +585,8 @@ module Sequel
702
585
  # Usage:
703
586
  #
704
587
  # DB[:huge_table].use_cursor.each{|row| p row}
705
- # DB[:huge_table].use_cursor(:rows_per_fetch=>10000).each{|row| p row}
706
- # DB[:huge_table].use_cursor(:cursor_name=>'my_cursor').each{|row| p row}
588
+ # DB[:huge_table].use_cursor(rows_per_fetch: 10000).each{|row| p row}
589
+ # DB[:huge_table].use_cursor(cursor_name: 'my_cursor').each{|row| p row}
707
590
  #
708
591
  # This is untested with the prepared statement/bound variable support,
709
592
  # and unlikely to work with either.
@@ -716,15 +599,14 @@ module Sequel
716
599
  # large dataset by updating individual rows while processing the dataset
717
600
  # via a cursor:
718
601
  #
719
- # DB[:huge_table].use_cursor(:rows_per_fetch=>1).each do |row|
720
- # DB[:huge_table].where_current_of.update(:column=>ruby_method(row))
602
+ # DB[:huge_table].use_cursor(rows_per_fetch: 1).each do |row|
603
+ # DB[:huge_table].where_current_of.update(column: ruby_method(row))
721
604
  # end
722
605
  def where_current_of(cursor_name='sequel_cursor')
723
606
  clone(:where=>Sequel.lit(['CURRENT OF '], Sequel.identifier(cursor_name)))
724
607
  end
725
608
 
726
609
  if USES_PG
727
-
728
610
  PREPARED_ARG_PLACEHOLDER = LiteralString.new('$').freeze
729
611
 
730
612
  # PostgreSQL specific argument mapper used for mapping the named
@@ -789,7 +671,7 @@ module Sequel
789
671
  cursor_name = quote_identifier(cursor[:cursor_name] || 'sequel_cursor')
790
672
  rows_per_fetch = cursor[:rows_per_fetch].to_i
791
673
 
792
- db.send(*(hold ? [:synchronize, server_opts[:server]] : [:transaction, server_opts])) do
674
+ db.public_send(*(hold ? [:synchronize, server_opts[:server]] : [:transaction, server_opts])) do
793
675
  begin
794
676
  execute_ddl("DECLARE #{cursor_name} NO SCROLL CURSOR WITH#{'OUT' unless hold} HOLD FOR #{sql}", server_opts)
795
677
  rows_per_fetch = 1000 if rows_per_fetch <= 0
@@ -869,7 +751,3 @@ if Sequel::Postgres::USES_PG && !ENV['NO_SEQUEL_PG']
869
751
  rescue LoadError
870
752
  end
871
753
  end
872
-
873
- # SEQUEL5: Remove
874
- SEQUEL_POSTGRES_USES_PG = Sequel::Postgres::USES_PG
875
- Sequel::Deprecation.deprecate_constant(Object, :SEQUEL_POSTGRES_USES_PG)
@@ -1,3 +1,3 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel.require 'adapters/postgres'
3
+ require_relative 'postgres'
@@ -1,6 +1,7 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel.require %w'emulate_offset_with_reverse_and_count unmodified_identifiers', 'adapters/utils'
3
+ require_relative '../utils/emulate_offset_with_reverse_and_count'
4
+ require_relative '../utils/unmodified_identifiers'
4
5
 
5
6
  module Sequel
6
7
  module Access
@@ -9,7 +10,6 @@ module Sequel
9
10
  module DatabaseMethods
10
11
  include UnmodifiedIdentifiers::DatabaseMethods
11
12
 
12
- # Access uses type :access as the database_type
13
13
  def database_type
14
14
  :access
15
15
  end
@@ -56,7 +56,6 @@ module Sequel
56
56
  DATABASE_ERROR_REGEXPS
57
57
  end
58
58
 
59
- # The SQL to drop an index for the table.
60
59
  def drop_index_sql(table, op)
61
60
  "DROP INDEX #{quote_identifier(op[:name] || default_index_name(table, op[:columns]))} ON #{quote_schema_table(table)}"
62
61
  end
@@ -85,52 +84,12 @@ module Sequel
85
84
  include EmulateOffsetWithReverseAndCount
86
85
  include UnmodifiedIdentifiers::DatasetMethods
87
86
 
88
- EXTRACT_MAP = {:year=>"'yyyy'", :month=>"'m'", :day=>"'d'", :hour=>"'h'", :minute=>"'n'", :second=>"'s'"}#.freeze # SEQUEL5
89
- #EXTRACT_MAP.each_value(&:freeze) # SEQUEL5
90
- OPS = {:'%'=>' Mod '.freeze, :'||'=>' & '.freeze}#.freeze # SEQUEL5
91
- CAST_TYPES = {String=>:CStr, Integer=>:CLng, Date=>:CDate, Time=>:CDate, DateTime=>:CDate, Numeric=>:CDec, BigDecimal=>:CDec, File=>:CStr, Float=>:CDbl, TrueClass=>:CBool, FalseClass=>:CBool}#.freeze # SEQUEL5
92
-
93
- DATE_FORMAT = '#%Y-%m-%d#'.freeze
94
- Sequel::Deprecation.deprecate_constant(self, :DATE_FORMAT)
95
- TIMESTAMP_FORMAT = '#%Y-%m-%d %H:%M:%S#'.freeze
96
- Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_FORMAT)
97
- TOP = " TOP ".freeze
98
- Sequel::Deprecation.deprecate_constant(self, :TOP)
99
- BRACKET_CLOSE = ']'.freeze
100
- Sequel::Deprecation.deprecate_constant(self, :BRACKET_CLOSE)
101
- BRACKET_OPEN = '['.freeze
102
- Sequel::Deprecation.deprecate_constant(self, :BRACKET_OPEN)
103
- COMMA = ', '.freeze
104
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
105
- PAREN_CLOSE = ')'.freeze
106
- Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
107
- PAREN_OPEN = '('.freeze
108
- Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
109
- INTO = " INTO ".freeze
110
- Sequel::Deprecation.deprecate_constant(self, :INTO)
111
- FROM = ' FROM '.freeze
112
- Sequel::Deprecation.deprecate_constant(self, :FROM)
113
- SPACE = ' '.freeze
114
- Sequel::Deprecation.deprecate_constant(self, :SPACE)
115
- NOT_EQUAL = ' <> '.freeze
116
- Sequel::Deprecation.deprecate_constant(self, :NOT_EQUAL)
117
- BOOL_FALSE = '0'.freeze
118
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
119
- BOOL_TRUE = '-1'.freeze
120
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
121
- DATE_FUNCTION = 'Date()'.freeze
122
- Sequel::Deprecation.deprecate_constant(self, :DATE_FUNCTION)
123
- NOW_FUNCTION = 'Now()'.freeze
124
- Sequel::Deprecation.deprecate_constant(self, :NOW_FUNCTION)
125
- TIME_FUNCTION = 'Time()'.freeze
126
- Sequel::Deprecation.deprecate_constant(self, :TIME_FUNCTION)
127
- DATEPART_OPEN = "datepart(".freeze
128
- Sequel::Deprecation.deprecate_constant(self, :DATEPART_OPEN)
129
- EMULATED_FUNCTION_MAP = {:char_length=>:len}
130
- Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
131
-
132
- # Access doesn't support CASE, but it can be emulated with nested
133
- # IIF function calls.
87
+ EXTRACT_MAP = {:year=>"'yyyy'", :month=>"'m'", :day=>"'d'", :hour=>"'h'", :minute=>"'n'", :second=>"'s'"}.freeze
88
+ EXTRACT_MAP.each_value(&:freeze)
89
+ OPS = {:'%'=>' Mod '.freeze, :'||'=>' & '.freeze}.freeze
90
+ CAST_TYPES = {String=>:CStr, Integer=>:CLng, Date=>:CDate, Time=>:CDate, DateTime=>:CDate, Numeric=>:CDec, BigDecimal=>:CDec, File=>:CStr, Float=>:CDbl, TrueClass=>:CBool, FalseClass=>:CBool}.freeze
91
+
92
+ # Access doesn't support CASE, so emulate it with nested IIF function calls.
134
93
  def case_expression_sql_append(sql, ce)
135
94
  literal_append(sql, ce.with_merged_expression.conditions.reverse.inject(ce.default){|exp,(cond,val)| Sequel::SQL::Function.new(:IIF, cond, val, exp)})
136
95
  end
@@ -189,7 +148,7 @@ module Sequel
189
148
  end
190
149
  end
191
150
 
192
- # Use Date() and Now() for CURRENT_DATE and CURRENT_TIMESTAMP
151
+ # Use Date(), Now(), and Time() for CURRENT_DATE, CURRENT_TIMESTAMP, and CURRENT_TIME
193
152
  def constant_sql_append(sql, constant)
194
153
  case constant
195
154
  when :CURRENT_DATE
@@ -317,7 +276,8 @@ module Sequel
317
276
  end
318
277
  end
319
278
 
320
- # Access uses [] for quoting identifiers
279
+ # Access uses [] for quoting identifiers, and can't handle
280
+ # ] inside identifiers.
321
281
  def quoted_identifier_append(sql, v)
322
282
  sql << '[' << v.to_s << ']'
323
283
  end
@@ -1,43 +1,15 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel.require 'adapters/utils/emulate_offset_with_row_number'
3
+ require_relative '../utils/emulate_offset_with_row_number'
4
4
 
5
5
  module Sequel
6
6
  module DB2
7
7
  Sequel::Database.set_shared_adapter_scheme(:db2, self)
8
8
 
9
- # SEQUEL5: Remove
10
- @use_clob_as_blob = false
11
- class << self
12
- def use_clob_as_blob
13
- Sequel::Deprecation.deprecate("Sequel::DB2.use_clob_as_blob", "Call this method on the Database instance")
14
- @use_clob_as_blob
15
- end
16
- def use_clob_as_blob=(v)
17
- Sequel::Deprecation.deprecate("Sequel::DB2.use_clob_as_blob=", "Call this method on the Database instance")
18
- @use_clob_as_blob = v
19
- end
20
- end
21
-
22
9
  module DatabaseMethods
23
- AUTOINCREMENT = 'GENERATED ALWAYS AS IDENTITY'.freeze
24
- Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
25
- NOT_NULL = ' NOT NULL'.freeze
26
- Sequel::Deprecation.deprecate_constant(self, :NOT_NULL)
27
- NULL = ''.freeze
28
- Sequel::Deprecation.deprecate_constant(self, :NULL)
29
-
30
10
  # Whether to use clob as the generic File type, false by default.
31
- #attr_accessor :use_clob_as_blob # SEQUEL5
11
+ attr_accessor :use_clob_as_blob
32
12
 
33
- # SEQUEL5: Remove
34
- attr_writer :use_clob_as_blob
35
- def use_clob_as_blob
36
- v = @use_clob_as_blob
37
- v.nil? ? Sequel::DB2.instance_variable_get(:@use_clob_as_blob) : v
38
- end
39
-
40
- # DB2 always uses :db2 as it's database type
41
13
  def database_type
42
14
  :db2
43
15
  end
@@ -145,7 +117,6 @@ module Sequel
145
117
 
146
118
  private
147
119
 
148
- # Handle DB2 specific alter table operations.
149
120
  def alter_table_sql(table, op)
150
121
  case op[:op]
151
122
  when :add_column
@@ -302,36 +273,7 @@ module Sequel
302
273
  module DatasetMethods
303
274
  include EmulateOffsetWithRowNumber
304
275
 
305
- BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}#.freeze # SEQUEL5
306
-
307
- PAREN_CLOSE = ')'.freeze
308
- Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
309
- PAREN_OPEN = '('.freeze
310
- Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
311
- BOOL_TRUE = '1'.freeze
312
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
313
- BOOL_FALSE = '0'.freeze
314
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
315
- CAST_STRING_OPEN = "RTRIM(CHAR(".freeze
316
- Sequel::Deprecation.deprecate_constant(self, :CAST_STRING_OPEN)
317
- CAST_STRING_CLOSE = "))".freeze
318
- Sequel::Deprecation.deprecate_constant(self, :CAST_STRING_CLOSE)
319
- FETCH_FIRST_ROW_ONLY = " FETCH FIRST ROW ONLY".freeze
320
- Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST_ROW_ONLY)
321
- FETCH_FIRST = " FETCH FIRST ".freeze
322
- Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST)
323
- ROWS_ONLY = " ROWS ONLY".freeze
324
- Sequel::Deprecation.deprecate_constant(self, :ROWS_ONLY)
325
- EMPTY_FROM_TABLE = ' FROM "SYSIBM"."SYSDUMMY1"'.freeze
326
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_FROM_TABLE)
327
- HSTAR = "H*".freeze
328
- Sequel::Deprecation.deprecate_constant(self, :HSTAR)
329
- BLOB_OPEN = "BLOB(X'".freeze
330
- Sequel::Deprecation.deprecate_constant(self, :BLOB_OPEN)
331
- BLOB_CLOSE = "')".freeze
332
- Sequel::Deprecation.deprecate_constant(self, :BLOB_CLOSE)
333
- EMULATED_FUNCTION_MAP = {:char_length=>'length'.freeze}
334
- Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
276
+ BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}.freeze
335
277
 
336
278
  # DB2 casts strings using RTRIM and CHAR instead of VARCHAR.
337
279
  def cast_sql_append(sql, expr, type)