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 %w'adapters/utils/unmodified_identifiers'
3
+ require_relative '../utils/unmodified_identifiers'
4
4
 
5
5
  module Sequel
6
6
  # Top level module for holding all PostgreSQL-related modules and classes
@@ -23,17 +23,6 @@ module Sequel
23
23
  PLUS_INFINITY = 1.0/0.0
24
24
  MINUS_INFINITY = -1.0/0.0
25
25
 
26
- NAN_STR = 'NaN'.freeze
27
- Sequel::Deprecation.deprecate_constant(self, :NAN_STR)
28
- PLUS_INFINITY_STR = 'Infinity'.freeze
29
- Sequel::Deprecation.deprecate_constant(self, :PLUS_INFINITY_STR)
30
- MINUS_INFINITY_STR = '-Infinity'.freeze
31
- Sequel::Deprecation.deprecate_constant(self, :MINUS_INFINITY_STR)
32
- TRUE_STR = 't'.freeze
33
- Sequel::Deprecation.deprecate_constant(self, :TRUE_STR)
34
- DASH_STR = '-'.freeze
35
- Sequel::Deprecation.deprecate_constant(self, :DASH_STR)
36
-
37
26
  TYPE_TRANSLATOR = tt = Class.new do
38
27
  def boolean(s) s == 't' end
39
28
  def integer(s) s.to_i end
@@ -62,24 +51,9 @@ module Sequel
62
51
  end
63
52
  ::Sequel::SQL::Blob.new(str)
64
53
  end
65
- end.new#.freeze # SEQUEL5
66
-
67
- # Type OIDs for string types used by PostgreSQL. These types don't
68
- # have conversion procs associated with them (since the data is
69
- # already in the form of a string).
70
- STRING_TYPES = [18, 19, 25, 1042, 1043] # SEQUEL5: Remove
71
-
72
- # Hash with type name strings/symbols and callable values for converting PostgreSQL types.
73
- # Non-builtin types that don't have fixed numbers should use this to register
74
- # conversion procs.
75
- PG_NAMED_TYPES = {} unless defined?(PG_NAMED_TYPES)
76
- PG_NAMED__TYPES = PG_NAMED_TYPES
77
- Sequel::Deprecation.deprecate_constant(self, :PG_NAMED_TYPES)
54
+ end.new.freeze
78
55
 
79
- # Hash with integer keys and callable values for converting PostgreSQL types.
80
- PG_TYPES = {} unless defined?(PG_TYPES)
81
-
82
- #CONVERSION_PROCS = {} # SEQUEL5
56
+ CONVERSION_PROCS = {}
83
57
 
84
58
  {
85
59
  [16] => tt.method(:boolean),
@@ -92,14 +66,10 @@ module Sequel
92
66
  [1184, 1114] => ::Sequel.method(:database_to_application_timestamp),
93
67
  }.each do |k,v|
94
68
  k.each do |n|
95
- PG_TYPES[n] = v
96
- #CONVERSION_PROCS[n] = v # SEQUEL5
69
+ CONVERSION_PROCS[n] = v
97
70
  end
98
71
  end
99
- PG__TYPES = PG_TYPES
100
- Sequel::Deprecation.deprecate_constant(self, :PG_TYPES)
101
-
102
- #CONVERSION_PROCS.freeze # SEQUEL5
72
+ CONVERSION_PROCS.freeze
103
73
 
104
74
  module MockAdapterDatabaseMethods
105
75
  def bound_variable_arg(arg, conn)
@@ -112,39 +82,13 @@ module Sequel
112
82
  end
113
83
 
114
84
  def self.mock_adapter_setup(db)
115
- db.instance_eval do
85
+ db.instance_exec do
116
86
  @server_version = 90500
117
87
  initialize_postgres_adapter
118
88
  extend(MockAdapterDatabaseMethods)
119
89
  end
120
90
  end
121
91
 
122
- CONVERTED_EXCEPTIONS = []
123
- Sequel::Deprecation.deprecate_constant(self, :CONVERTED_EXCEPTIONS)
124
-
125
- # SEQUEL5: Remove
126
- @client_min_messages = :warning
127
- @force_standard_strings = true
128
- class << self
129
- def client_min_messages
130
- Sequel::Deprecation.deprecate("Sequel::Postgres.client_min_messages", "Use the :client_min_messages Database option instead")
131
- @client_min_messages
132
- end
133
- def client_min_messages=(v)
134
- Sequel::Deprecation.deprecate("Sequel::Postgres.client_min_messages=", "Use the :client_min_messages Database option instead")
135
- @client_min_messages = v
136
- end
137
-
138
- def force_standard_strings
139
- Sequel::Deprecation.deprecate("Sequel::Postgres.force_standard_strings", "Use the :force_standard_strings Database option instead")
140
- @force_standard_strings
141
- end
142
- def force_standard_strings=(v)
143
- Sequel::Deprecation.deprecate("Sequel::Postgres.force_standard_strings=", "Use the :force_standard_strings Database option instead")
144
- @force_standard_strings = v
145
- end
146
- end
147
-
148
92
  class CreateTableGenerator < Sequel::Schema::CreateTableGenerator
149
93
  # Add an exclusion constraint when creating the table. Elements should be
150
94
  # an array of 2 element arrays, with the first element being the column or
@@ -185,21 +129,13 @@ module Sequel
185
129
  # Error raised when Sequel determines a PostgreSQL exclusion constraint has been violated.
186
130
  class ExclusionConstraintViolation < Sequel::ConstraintViolation; end
187
131
 
188
- # Methods shared by Database instances that connect to PostgreSQL.
189
132
  module DatabaseMethods
190
133
  include UnmodifiedIdentifiers::DatabaseMethods
191
134
 
192
- RE_CURRVAL_ERROR = /currval of sequence "(.*)" is not yet defined in this session|relation "(.*)" does not exist/.freeze
193
- Sequel::Deprecation.deprecate_constant(self, :RE_CURRVAL_ERROR)
194
- POSTGRES_DEFAULT_RE = /\A(?:B?('.*')::[^']+|\((-?\d+(?:\.\d+)?)\))\z/
195
- Sequel::Deprecation.deprecate_constant(self, :POSTGRES_DEFAULT_RE)
196
- UNLOGGED = 'UNLOGGED '.freeze
197
- Sequel::Deprecation.deprecate_constant(self, :UNLOGGED)
198
-
199
135
  PREPARED_ARG_PLACEHOLDER = LiteralString.new('$').freeze
200
136
  FOREIGN_KEY_LIST_ON_DELETE_MAP = {'a'=>:no_action, 'r'=>:restrict, 'c'=>:cascade, 'n'=>:set_null, 'd'=>:set_default}.freeze
201
137
  ON_COMMIT = {:drop => 'DROP', :delete_rows => 'DELETE ROWS', :preserve_rows => 'PRESERVE ROWS'}.freeze
202
- #ON_COMMIT.each_value(&:freeze) # SEQUEL5
138
+ ON_COMMIT.each_value(&:freeze)
203
139
 
204
140
  # SQL fragment for custom sequences (ones not created by serial primary key),
205
141
  # Returning the schema and literal form of the sequence name, by parsing
@@ -263,27 +199,16 @@ module Sequel
263
199
  conversion_procs[oid] = callable
264
200
  end
265
201
 
266
- # Add a conversion proc for a named type. This should be used
267
- # for types without fixed OIDs, which includes all types that
268
- # are not included in a default PostgreSQL installation. If
269
- # a block is given, it is used as the conversion proc, otherwise
270
- # the conversion proc is looked up in the PG_NAMED_TYPES hash.
202
+ # Add a conversion proc for a named type, using the given block.
203
+ # This should be used for types without fixed OIDs, which includes all types that
204
+ # are not included in a default PostgreSQL installation.
271
205
  def add_named_conversion_proc(name, &block)
272
- unless block
273
- if block = PG_NAMED__TYPES[name]
274
- Sequel::Deprecation.deprecate("Sequel::PG_NAMED_TYPES", "Call Database#add_named_conversion_proc directly for each database you want to support the #{name} type")
275
- end
206
+ unless oid = from(:pg_type).where(:typtype=>['b', 'e'], :typname=>name.to_s).get(:oid)
207
+ raise Error, "No matching type in pg_type for #{name.inspect}"
276
208
  end
277
- add_named_conversion_procs(conversion_procs, name=>block) # SEQUEL5: Remove
278
- # SEQUEL5:
279
- #unless oid = from(:pg_type).where(:typtype=>['b', 'e'], :typname=>name.to_s).get(:oid)
280
- # raise Error, "No matching type in pg_type for #{name.inspect}"
281
- #end
282
- #add_conversion_proc(oid, block) # SEQUEL5
209
+ add_conversion_proc(oid, block)
283
210
  end
284
211
 
285
- # Commit an existing prepared transaction with the given transaction
286
- # identifier string.
287
212
  def commit_prepared_transaction(transaction_id, opts=OPTS)
288
213
  run("COMMIT PREPARED #{literal(transaction_id)}", opts)
289
214
  end
@@ -347,7 +272,6 @@ module Sequel
347
272
  self << create_trigger_sql(table, name, function, opts)
348
273
  end
349
274
 
350
- # PostgreSQL uses the :postgres database type.
351
275
  def database_type
352
276
  :postgres
353
277
  end
@@ -486,10 +410,9 @@ module Sequel
486
410
  else
487
411
  range = 0...32
488
412
  order = [Sequel[:indc][:relname], SQL::CaseExpression.new(range.map{|x| [SQL::Subscript.new(Sequel[:ind][:indkey], [x]), x]}, 32, Sequel[:att][:attnum])]
489
- attnums = range.map{|x| SQL::Subscript.new(Sequel[:ind][:indkey], [x])} unless server_version >= 80100
490
413
  end
491
414
 
492
- attnums ||= SQL::Function.new(:ANY, Sequel[:ind][:indkey])
415
+ attnums = SQL::Function.new(:ANY, Sequel[:ind][:indkey])
493
416
 
494
417
  ds = metadata_dataset.
495
418
  from{pg_class.as(:tab)}.
@@ -507,7 +430,8 @@ module Sequel
507
430
  order(*order).
508
431
  select{[indc[:relname].as(:name), ind[:indisunique].as(:unique), att[:attname].as(:column), con[:condeferrable].as(:deferrable)]}
509
432
 
510
- ds = ds.where(:indisready=>true, :indcheckxmin=>false) if server_version >= 80300
433
+ ds = ds.where(:indisready=>true) if server_version >= 80300
434
+ ds = ds.where(:indislive=>true) if server_version >= 90300
511
435
 
512
436
  indexes = {}
513
437
  ds.each do |r|
@@ -575,28 +499,28 @@ module Sequel
575
499
  run "REFRESH MATERIALIZED VIEW#{' CONCURRENTLY' if opts[:concurrently]} #{quote_schema_table(name)}"
576
500
  end
577
501
 
578
- # SEQUEL5: Remove
579
- def reset_conversion_procs
580
- Sequel::Deprecation.deprecate('Database#reset_conversion_procs', 'There should no longer be a need to reset conversion procs')
581
- @conversion_procs = get_conversion_procs
582
- conversion_procs_updated
583
- @conversion_procs
584
- end
585
-
586
502
  # Reset the primary key sequence for the given table, basing it on the
587
503
  # maximum current value of the table's primary key.
588
504
  def reset_primary_key_sequence(table)
589
505
  return unless seq = primary_key_sequence(table)
590
506
  pk = SQL::Identifier.new(primary_key(table))
591
507
  db = self
592
- seq_ds = db.from(LiteralString.new(seq))
593
508
  s, t = schema_and_table(table)
594
509
  table = Sequel.qualify(s, t) if s
595
- get{setval(seq, db[table].select{coalesce(max(pk)+seq_ds.select{:increment_by}, seq_ds.select(:min_value))}, false)}
510
+
511
+ if server_version >= 100000
512
+ seq_ds = metadata_dataset.from(:pg_sequence).where(:seqrelid=>regclass_oid(LiteralString.new(seq)))
513
+ increment_by = :seqincrement
514
+ min_value = :seqmin
515
+ else
516
+ seq_ds = metadata_dataset.from(LiteralString.new(seq))
517
+ increment_by = :increment_by
518
+ min_value = :min_value
519
+ end
520
+
521
+ get{setval(seq, db[table].select(coalesce(max(pk)+seq_ds.select(increment_by), seq_ds.select(min_value))), false)}
596
522
  end
597
523
 
598
- # Rollback an existing prepared transaction with the given transaction
599
- # identifier string.
600
524
  def rollback_prepared_transaction(transaction_id, opts=OPTS)
601
525
  run("ROLLBACK PREPARED #{literal(transaction_id)}", opts)
602
526
  end
@@ -620,7 +544,6 @@ module Sequel
620
544
  0
621
545
  end
622
546
  end
623
- Sequel::Deprecation.deprecate('Sequel no longer supports PostgreSQL <8.2, some things may not work.') if @server_version < 80200
624
547
  @server_version
625
548
  end
626
549
 
@@ -700,10 +623,10 @@ module Sequel
700
623
  # Creates a dataset that uses the VALUES clause:
701
624
  #
702
625
  # DB.values([[1, 2], [3, 4]])
703
- # VALUES ((1, 2), (3, 4))
626
+ # # VALUES ((1, 2), (3, 4))
704
627
  #
705
628
  # DB.values([[1, 2], [3, 4]]).order(:column2).limit(1, 1)
706
- # VALUES ((1, 2), (3, 4)) ORDER BY column2 LIMIT 1 OFFSET 1
629
+ # # VALUES ((1, 2), (3, 4)) ORDER BY column2 LIMIT 1 OFFSET 1
707
630
  def values(v)
708
631
  @default_dataset.clone(:values=>v)
709
632
  end
@@ -723,21 +646,10 @@ module Sequel
723
646
 
724
647
  private
725
648
 
726
- # SEQUEL5: Remove
727
- def add_named_conversion_procs(procs, named_procs)
728
- unless (named_procs).empty?
729
- convert_named_procs_to_procs(named_procs).each do |oid, pr|
730
- procs[oid] ||= pr
731
- end
732
- conversion_procs_updated
733
- end
734
- end
735
-
736
649
  def alter_table_add_column_sql(table, op)
737
650
  "ADD COLUMN#{' IF NOT EXISTS' if op[:if_not_exists]} #{column_definition_sql(op)}"
738
651
  end
739
652
 
740
- # Use a PostgreSQL-specific alter table generator
741
653
  def alter_table_generator_class
742
654
  Postgres::AlterTableGenerator
743
655
  end
@@ -821,14 +733,14 @@ module Sequel
821
733
  (super || op[:op] == :validate_constraint) && op[:op] != :rename_column
822
734
  end
823
735
 
824
- VALID_CLIENT_MIN_MESSAGES = %w'DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 LOG NOTICE WARNING ERROR FATAL PANIC'.freeze
736
+ VALID_CLIENT_MIN_MESSAGES = %w'DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 LOG NOTICE WARNING ERROR FATAL PANIC'.freeze.each(&:freeze)
825
737
  # The SQL queries to execute when starting a new connection.
826
738
  def connection_configuration_sqls
827
739
  sqls = []
828
740
 
829
- sqls << "SET standard_conforming_strings = ON" if typecast_value_boolean(@opts.fetch(:force_standard_strings, Postgres.instance_variable_get(:@force_standard_strings))) # , true)) # SEQUEL5
741
+ sqls << "SET standard_conforming_strings = ON" if typecast_value_boolean(@opts.fetch(:force_standard_strings, true))
830
742
 
831
- cmm = @opts.fetch(:client_min_messages, Postgres.instance_variable_get(:@client_min_messages)) # , :warning) # SEQUEL5
743
+ cmm = @opts.fetch(:client_min_messages, :warning)
832
744
  if cmm && !cmm.to_s.empty?
833
745
  cmm = cmm.to_s.upcase.strip
834
746
  unless VALID_CLIENT_MIN_MESSAGES.include?(cmm)
@@ -872,34 +784,6 @@ module Sequel
872
784
  end
873
785
  end
874
786
 
875
- # SEQUEL5: Remove
876
- def conversion_procs_updated
877
- nil
878
- end
879
-
880
- # SEQUEL5: Remove
881
- def convert_named_procs_to_procs(named_procs)
882
- h = {}
883
- from(:pg_type).where(:typtype=>['b', 'e'], :typname=>named_procs.keys.map(&:to_s)).select_map([:oid, :typname]).each do |oid, name|
884
- h[oid.to_i] = named_procs[name.untaint.to_sym]
885
- end
886
- h
887
- end
888
-
889
- # SEQUEL5: Remove
890
- def copy_conversion_procs(oids)
891
- Sequel::Deprecation.deprecate("Database#copy_conversion_procs", "There is no reason to use this anymore")
892
- procs = conversion_procs
893
- oids.each do |oid|
894
- procs[oid] = PG__TYPES[oid]
895
- end
896
- conversion_procs_updated
897
- end
898
-
899
- EXCLUSION_CONSTRAINT_SQL_STATE = '23P01'.freeze
900
- Sequel::Deprecation.deprecate_constant(self, :EXCLUSION_CONSTRAINT_SQL_STATE)
901
- DEADLOCK_SQL_STATE = '40P01'.freeze
902
- Sequel::Deprecation.deprecate_constant(self, :DEADLOCK_SQL_STATE)
903
787
  def database_specific_error_class_from_sqlstate(sqlstate)
904
788
  if sqlstate == '23P01'
905
789
  ExclusionConstraintViolation
@@ -1041,7 +925,6 @@ module Sequel
1041
925
  result += " AS #{sql}"
1042
926
  end
1043
927
 
1044
- # Use a PostgreSQL-specific create table generator
1045
928
  def create_table_generator_class
1046
929
  Postgres::CreateTableGenerator
1047
930
  end
@@ -1098,8 +981,8 @@ module Sequel
1098
981
  "DROP #{'MATERIALIZED ' if opts[:materialized]}VIEW#{' IF EXISTS' if opts[:if_exists]} #{quote_schema_table(name)}#{' CASCADE' if opts[:cascade]}"
1099
982
  end
1100
983
 
1101
- # If opts includes a :schema option, or a default schema is used, restrict the dataset to
1102
- # that schema. Otherwise, just exclude the default PostgreSQL schemas except for public.
984
+ # If opts includes a :schema option, use it, otherwise restrict the filter to only the
985
+ # currently visible schemas.
1103
986
  def filter_schema(ds, opts)
1104
987
  expr = if schema = opts[:schema]
1105
988
  schema.to_s
@@ -1109,18 +992,6 @@ module Sequel
1109
992
  ds.where{{pg_namespace[:nspname]=>expr}}
1110
993
  end
1111
994
 
1112
- # SEQUEL5: Remove
1113
- def get_conversion_procs
1114
- procs = PG__TYPES.dup
1115
- procs[1184] = procs[1114] = method(:to_application_timestamp)
1116
- unless PG_NAMED__TYPES.empty?
1117
- Sequel::Deprecation.deprecate("Sequel::PG_NAMED_TYPES", "Call Database#add_named_conversion_proc directly for each Database instance where you want to support the following type(s): #{PG_NAMED__TYPES.keys.join(', ')}")
1118
- end
1119
- add_named_conversion_procs(procs, PG_NAMED__TYPES)
1120
- procs
1121
- end
1122
-
1123
- # PostgreSQL specific index SQL.
1124
995
  def index_definition_sql(table_name, index)
1125
996
  cols = index[:columns]
1126
997
  index_name = index[:name] || default_index_name(table_name, cols)
@@ -1129,6 +1000,7 @@ module Sequel
1129
1000
  else
1130
1001
  literal(Array(cols))
1131
1002
  end
1003
+ if_not_exists = " IF NOT EXISTS" if index[:if_not_exists]
1132
1004
  unique = "UNIQUE " if index[:unique]
1133
1005
  index_type = index[:type]
1134
1006
  filter = index[:where] || index[:filter]
@@ -1140,7 +1012,7 @@ module Sequel
1140
1012
  when :spatial
1141
1013
  index_type = :gist
1142
1014
  end
1143
- "CREATE #{unique}INDEX#{' CONCURRENTLY' if index[:concurrently]} #{quote_identifier(index_name)} ON #{quote_schema_table(table_name)} #{"USING #{index_type} " if index_type}#{expr}#{filter}"
1015
+ "CREATE #{unique}INDEX#{' CONCURRENTLY' if index[:concurrently]}#{if_not_exists} #{quote_identifier(index_name)} ON #{quote_schema_table(table_name)} #{"USING #{index_type} " if index_type}#{expr}#{filter}"
1144
1016
  end
1145
1017
 
1146
1018
  # Setup datastructures shared by all postgres adapters.
@@ -1148,10 +1020,8 @@ module Sequel
1148
1020
  @primary_keys = {}
1149
1021
  @primary_key_sequences = {}
1150
1022
  @supported_types = {}
1151
- @conversion_procs = get_conversion_procs # SEQUEL5: Remove
1152
- conversion_procs_updated # SEQUEL5: Remove
1153
- # @conversion_procs = CONVERSION_PROCS.dup # SEQUEL5
1154
- # procs[1184] = procs[1114] = method(:to_application_timestamp) # SEQUEL5
1023
+ procs = @conversion_procs = CONVERSION_PROCS.dup
1024
+ procs[1184] = procs[1114] = method(:to_application_timestamp)
1155
1025
  end
1156
1026
 
1157
1027
  # Backbone of the tables and views support.
@@ -1168,8 +1038,7 @@ module Sequel
1168
1038
  end
1169
1039
  end
1170
1040
 
1171
- # Use a dollar sign instead of question mark for the argument
1172
- # placeholder.
1041
+ # Use a dollar sign instead of question mark for the argument placeholder.
1173
1042
  def prepared_arg_placeholder
1174
1043
  PREPARED_ARG_PLACEHOLDER
1175
1044
  end
@@ -1196,8 +1065,7 @@ module Sequel
1196
1065
  Sequel.cast(expr.to_s,:regclass).cast(:oid)
1197
1066
  end
1198
1067
 
1199
- # Remove the cached entries for primary keys and sequences when a table is
1200
- # changed.
1068
+ # Remove the cached entries for primary keys and sequences when a table is changed.
1201
1069
  def remove_cached_schema(table)
1202
1070
  tab = quote_schema_table(table)
1203
1071
  Sequel.synchronize do
@@ -1213,7 +1081,6 @@ module Sequel
1213
1081
  "ALTER TABLE #{quote_schema_table(name)} RENAME TO #{quote_identifier(schema_and_table(new_name).last)}"
1214
1082
  end
1215
1083
 
1216
- # Recognize PostgreSQL interval type.
1217
1084
  def schema_column_type(db_type)
1218
1085
  case db_type
1219
1086
  when /\Ainterval\z/io
@@ -1315,7 +1182,7 @@ module Sequel
1315
1182
  # PostgreSQL prefers the text datatype. If a fixed size is requested,
1316
1183
  # the char type is used. If the text type is specifically
1317
1184
  # disallowed or there is a size specified, use the varchar type.
1318
- # Otherwise use the type type.
1185
+ # Otherwise use the text type.
1319
1186
  def type_literal_generic_string(column)
1320
1187
  if column[:fixed]
1321
1188
  "char(#{column[:size]||255})"
@@ -1332,85 +1199,11 @@ module Sequel
1332
1199
  end
1333
1200
  end
1334
1201
 
1335
- # Instance methods for datasets that connect to a PostgreSQL database.
1336
1202
  module DatasetMethods
1337
1203
  include UnmodifiedIdentifiers::DatasetMethods
1338
1204
 
1339
- ACCESS_SHARE = 'ACCESS SHARE'.freeze
1340
- Sequel::Deprecation.deprecate_constant(self, :ACCESS_SHARE)
1341
- ACCESS_EXCLUSIVE = 'ACCESS EXCLUSIVE'.freeze
1342
- Sequel::Deprecation.deprecate_constant(self, :ACCESS_EXCLUSIVE)
1343
- BOOL_FALSE = 'false'.freeze
1344
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
1345
- BOOL_TRUE = 'true'.freeze
1346
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
1347
- COMMA_SEPARATOR = ', '.freeze
1348
- Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
1349
- EXCLUSIVE = 'EXCLUSIVE'.freeze
1350
- Sequel::Deprecation.deprecate_constant(self, :EXCLUSIVE)
1351
- EXPLAIN = 'EXPLAIN '.freeze
1352
- Sequel::Deprecation.deprecate_constant(self, :EXPLAIN)
1353
- EXPLAIN_ANALYZE = 'EXPLAIN ANALYZE '.freeze
1354
- Sequel::Deprecation.deprecate_constant(self, :EXPLAIN_ANALYZE)
1355
- FOR_SHARE = ' FOR SHARE'.freeze
1356
- Sequel::Deprecation.deprecate_constant(self, :FOR_SHARE)
1357
- PG_TIMESTAMP_FORMAT = "TIMESTAMP '%Y-%m-%d %H:%M:%S".freeze
1358
- Sequel::Deprecation.deprecate_constant(self, :PG_TIMESTAMP_FORMAT)
1359
- QUERY_PLAN = 'QUERY PLAN'.to_sym
1360
- Sequel::Deprecation.deprecate_constant(self, :QUERY_PLAN)
1361
- ROW_EXCLUSIVE = 'ROW EXCLUSIVE'.freeze
1362
- Sequel::Deprecation.deprecate_constant(self, :ROW_EXCLUSIVE)
1363
- ROW_SHARE = 'ROW SHARE'.freeze
1364
- Sequel::Deprecation.deprecate_constant(self, :ROW_SHARE)
1365
- SHARE = 'SHARE'.freeze
1366
- Sequel::Deprecation.deprecate_constant(self, :SHARE)
1367
- SHARE_ROW_EXCLUSIVE = 'SHARE ROW EXCLUSIVE'.freeze
1368
- Sequel::Deprecation.deprecate_constant(self, :SHARE_ROW_EXCLUSIVE)
1369
- SHARE_UPDATE_EXCLUSIVE = 'SHARE UPDATE EXCLUSIVE'.freeze
1370
- Sequel::Deprecation.deprecate_constant(self, :SHARE_UPDATE_EXCLUSIVE)
1371
- SQL_WITH_RECURSIVE = "WITH RECURSIVE ".freeze
1372
- Sequel::Deprecation.deprecate_constant(self, :SQL_WITH_RECURSIVE)
1373
- SPACE = ' '.freeze
1374
- Sequel::Deprecation.deprecate_constant(self, :SPACE)
1375
- FROM = ' FROM '.freeze
1376
- Sequel::Deprecation.deprecate_constant(self, :FROM)
1377
- APOS = "'".freeze
1378
- Sequel::Deprecation.deprecate_constant(self, :APOS)
1379
- APOS_RE = /'/.freeze
1380
- Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
1381
- DOUBLE_APOS = "''".freeze
1382
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
1383
- PAREN_CLOSE = ')'.freeze
1384
- Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
1385
- PAREN_OPEN = '('.freeze
1386
- Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
1387
- COMMA = ', '.freeze
1388
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
1389
- ESCAPE = " ESCAPE ".freeze
1390
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE)
1391
- BACKSLASH = "\\".freeze
1392
- Sequel::Deprecation.deprecate_constant(self, :BACKSLASH)
1393
- AS = ' AS '.freeze
1394
- Sequel::Deprecation.deprecate_constant(self, :AS)
1395
- XOR_OP = ' # '.freeze
1396
- Sequel::Deprecation.deprecate_constant(self, :XOR_OP)
1397
- CRLF = "\r\n".freeze
1398
- Sequel::Deprecation.deprecate_constant(self, :CRLF)
1399
- BLOB_RE = /[\000-\037\047\134\177-\377]/n.freeze
1400
- Sequel::Deprecation.deprecate_constant(self, :BLOB_RE)
1401
- WINDOW = " WINDOW ".freeze
1402
- Sequel::Deprecation.deprecate_constant(self, :WINDOW)
1403
- SELECT_VALUES = "VALUES ".freeze
1404
- Sequel::Deprecation.deprecate_constant(self, :SELECT_VALUES)
1405
- EMPTY_STRING = ''.freeze
1406
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_STRING)
1407
- SKIP_LOCKED = " SKIP LOCKED".freeze
1408
- Sequel::Deprecation.deprecate_constant(self, :SKIP_LOCKED)
1409
- NON_SQL_OPTIONS = (Dataset::NON_SQL_OPTIONS + [:cursor, :insert_conflict]).freeze
1410
- Sequel::Deprecation.deprecate_constant(self, :NON_SQL_OPTIONS)
1411
-
1412
1205
  NULL = LiteralString.new('NULL').freeze
1413
- LOCK_MODES = ['ACCESS SHARE', 'ROW SHARE', 'ROW EXCLUSIVE', 'SHARE UPDATE EXCLUSIVE', 'SHARE', 'SHARE ROW EXCLUSIVE', 'EXCLUSIVE', 'ACCESS EXCLUSIVE'].each(&:freeze)#.freeze # SEQUEL5
1206
+ LOCK_MODES = ['ACCESS SHARE', 'ROW SHARE', 'ROW EXCLUSIVE', 'SHARE UPDATE EXCLUSIVE', 'SHARE', 'SHARE ROW EXCLUSIVE', 'EXCLUSIVE', 'ACCESS EXCLUSIVE'].each(&:freeze).freeze
1414
1207
 
1415
1208
  Dataset.def_sql_method(self, :delete, [['if server_version >= 90100', %w'with delete from using where returning'], ['else', %w'delete from using where returning']])
1416
1209
  Dataset.def_sql_method(self, :insert, [['if server_version >= 90500', %w'with insert into columns values conflict returning'], ['elsif server_version >= 90100', %w'with insert into columns values returning'], ['else', %w'insert into columns values returning']])
@@ -1561,28 +1354,28 @@ module Sequel
1561
1354
  #
1562
1355
  # Examples:
1563
1356
  #
1564
- # DB[:table].insert_conflict.insert(:a=>1, :b=>2)
1357
+ # DB[:table].insert_conflict.insert(a: 1, b: 2)
1565
1358
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1566
1359
  # # ON CONFLICT DO NOTHING
1567
1360
  #
1568
- # DB[:table].insert_conflict(:constraint=>:table_a_uidx).insert(:a=>1, :b=>2)
1361
+ # DB[:table].insert_conflict(constraint: :table_a_uidx).insert(a: 1, b: 2)
1569
1362
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1570
1363
  # # ON CONFLICT ON CONSTRAINT table_a_uidx DO NOTHING
1571
1364
  #
1572
- # DB[:table].insert_conflict(:target=>:a).insert(:a=>1, :b=>2)
1365
+ # DB[:table].insert_conflict(target: :a).insert(a: 1, b: 2)
1573
1366
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1574
1367
  # # ON CONFLICT (a) DO NOTHING
1575
1368
  #
1576
- # DB[:table].insert_conflict(:target=>:a, :conflict_where=>{:c=>true}).insert(:a=>1, :b=>2)
1369
+ # DB[:table].insert_conflict(target: :a, conflict_where: {c: true}).insert(a: 1, b: 2)
1577
1370
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1578
1371
  # # ON CONFLICT (a) WHERE (c IS TRUE) DO NOTHING
1579
1372
  #
1580
- # DB[:table].insert_conflict(:target=>:a, :update=>{:b=>:excluded__b}).insert(:a=>1, :b=>2)
1373
+ # DB[:table].insert_conflict(target: :a, update: {b: Sequel[:excluded][:b]}).insert(a: 1, b: 2)
1581
1374
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1582
1375
  # # ON CONFLICT (a) DO UPDATE SET b = excluded.b
1583
1376
  #
1584
- # DB[:table].insert_conflict(:constraint=>:table_a_uidx,
1585
- # :update=>{:b=>:excluded__b}, :update_where=>{:table__status_id=>1}).insert(:a=>1, :b=>2)
1377
+ # DB[:table].insert_conflict(constraint: :table_a_uidx,
1378
+ # update: {b: Sequel[:excluded][:b]}, update_where: {Sequel[:table][:status_id] => 1}).insert(a: 1, b: 2)
1586
1379
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1587
1380
  # # ON CONFLICT ON CONSTRAINT table_a_uidx
1588
1381
  # # DO UPDATE SET b = excluded.b WHERE (table.status_id = 1)
@@ -1593,7 +1386,7 @@ module Sequel
1593
1386
  # Ignore uniqueness/exclusion violations when inserting, using ON CONFLICT DO NOTHING.
1594
1387
  # Exists mostly for compatibility to MySQL's insert_ignore. Example:
1595
1388
  #
1596
- # DB[:table].insert_ignore.insert(:a=>1, :b=>2)
1389
+ # DB[:table].insert_ignore.insert(a: 1, b: 2)
1597
1390
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1598
1391
  # # ON CONFLICT DO NOTHING
1599
1392
  def insert_ignore
@@ -1616,7 +1409,7 @@ module Sequel
1616
1409
 
1617
1410
  # Locks all tables in the dataset's FROM clause (but not in JOINs) with
1618
1411
  # the specified mode (e.g. 'EXCLUSIVE'). If a block is given, starts
1619
- # a new transaction, locks the table, and yields. If a block is not given
1412
+ # a new transaction, locks the table, and yields. If a block is not given,
1620
1413
  # just locks the tables. Note that PostgreSQL will probably raise an error
1621
1414
  # if you lock the table outside of an existing transaction. Returns nil.
1622
1415
  def lock(mode, opts=OPTS)
@@ -1679,7 +1472,7 @@ module Sequel
1679
1472
  server_version >= 90500
1680
1473
  end
1681
1474
 
1682
- # PostgreSQL 9.3rc1+ supports lateral subqueries
1475
+ # PostgreSQL 9.3+ supports lateral subqueries
1683
1476
  def supports_lateral_subqueries?
1684
1477
  server_version >= 90300
1685
1478
  end
@@ -1725,10 +1518,11 @@ module Sequel
1725
1518
  # :only and :restart only work correctly on PostgreSQL 8.4+.
1726
1519
  #
1727
1520
  # Usage:
1728
- # DB[:table].truncate # TRUNCATE TABLE "table"
1729
- # # => nil
1730
- # DB[:table].truncate(:cascade => true, :only=>true, :restart=>true) # TRUNCATE TABLE ONLY "table" RESTART IDENTITY CASCADE
1731
- # # => nil
1521
+ # DB[:table].truncate
1522
+ # # TRUNCATE TABLE "table"
1523
+ #
1524
+ # DB[:table].truncate(cascade: true, only: true, restart: true)
1525
+ # # TRUNCATE TABLE ONLY "table" RESTART IDENTITY CASCADE
1732
1526
  def truncate(opts = OPTS)
1733
1527
  if opts.empty?
1734
1528
  super()