sequel 4.49.0 → 5.0.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 (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  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/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,24 +1,19 @@
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 Oracle
7
7
  Sequel::Database.set_shared_adapter_scheme(:oracle, self)
8
8
 
9
9
  def self.mock_adapter_setup(db)
10
- db.instance_eval do
10
+ db.instance_exec do
11
11
  @server_version = 11000000
12
12
  @primary_key_sequences = {}
13
13
  end
14
14
  end
15
15
 
16
16
  module DatabaseMethods
17
- TEMPORARY = 'GLOBAL TEMPORARY '.freeze
18
- Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
19
- AUTOINCREMENT = ''.freeze
20
- Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
21
-
22
17
  attr_accessor :autosequence
23
18
 
24
19
  def create_sequence(name, opts=OPTS)
@@ -37,7 +32,6 @@ module Sequel
37
32
  self << drop_sequence_sql(name)
38
33
  end
39
34
 
40
- # Oracle uses the :oracle database type
41
35
  def database_type
42
36
  :oracle
43
37
  end
@@ -88,7 +82,7 @@ module Sequel
88
82
  false
89
83
  end
90
84
 
91
- IGNORE_OWNERS = %w'APEX_040000 CTXSYS EXFSYS MDSYS OLAPSYS ORDDATA ORDSYS SYS SYSTEM XDB XDBMETADATA XDBPM XFILES WMSYS'#.freeze # SEQUEL5
85
+ IGNORE_OWNERS = %w'APEX_040000 CTXSYS EXFSYS MDSYS OLAPSYS ORDDATA ORDSYS SYS SYSTEM XDB XDBMETADATA XDBPM XFILES WMSYS'.freeze
92
86
 
93
87
  def tables(opts=OPTS)
94
88
  m = output_identifier_meth
@@ -146,7 +140,6 @@ module Sequel
146
140
 
147
141
  private
148
142
 
149
- # Handle Oracle specific ALTER TABLE SQL
150
143
  def alter_table_sql(table, op)
151
144
  case op[:op]
152
145
  when :add_column
@@ -253,7 +246,7 @@ module Sequel
253
246
  TRANSACTION_ISOLATION_LEVELS = {:uncommitted=>'READ COMMITTED'.freeze,
254
247
  :committed=>'READ COMMITTED'.freeze,
255
248
  :repeatable=>'SERIALIZABLE'.freeze,
256
- :serializable=>'SERIALIZABLE'.freeze}#.freeze # SEQUEL5
249
+ :serializable=>'SERIALIZABLE'.freeze}.freeze
257
250
  # Oracle doesn't support READ UNCOMMITTED OR REPEATABLE READ transaction
258
251
  # isolation levels, so upgrade to the next highest level in those cases.
259
252
  def set_transaction_isolation_sql(level)
@@ -322,31 +315,6 @@ module Sequel
322
315
  ROW_NUMBER_EXPRESSION = LiteralString.new('ROWNUM').freeze
323
316
  BITAND_PROC = lambda{|a, b| Sequel.lit(["CAST(BITAND(", ", ", ") AS INTEGER)"], a, b)}
324
317
 
325
- SPACE = ' '.freeze
326
- Sequel::Deprecation.deprecate_constant(self, :SPACE)
327
- APOS = "'".freeze
328
- Sequel::Deprecation.deprecate_constant(self, :APOS)
329
- APOS_RE = /'/.freeze
330
- Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
331
- DOUBLE_APOS = "''".freeze
332
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
333
- FROM = ' FROM '.freeze
334
- Sequel::Deprecation.deprecate_constant(self, :FROM)
335
- TIMESTAMP_FORMAT = "TIMESTAMP '%Y-%m-%d %H:%M:%S%N %z'".freeze
336
- Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_FORMAT)
337
- TIMESTAMP_OFFSET_FORMAT = "%+03i:%02i".freeze
338
- Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_OFFSET_FORMAT)
339
- BOOL_FALSE = "'N'".freeze
340
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
341
- BOOL_TRUE = "'Y'".freeze
342
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
343
- HSTAR = "H*".freeze
344
- Sequel::Deprecation.deprecate_constant(self, :HSTAR)
345
- DUAL = ' FROM DUAL'.freeze
346
- Sequel::Deprecation.deprecate_constant(self, :DUAL)
347
- SKIP_LOCKED = " SKIP LOCKED".freeze
348
- Sequel::Deprecation.deprecate_constant(self, :SKIP_LOCKED)
349
-
350
318
  include(Module.new do
351
319
  Dataset.def_sql_method(self, :select, %w'with select distinct columns from join where group having compounds order limit lock')
352
320
  end)
@@ -418,7 +386,8 @@ module Sequel
418
386
  clone(:sequence=>s)
419
387
  end
420
388
 
421
- # Handle LIMIT by using a unlimited subselect filtered with ROWNUM.
389
+ # Handle LIMIT by using a unlimited subselect filtered with ROWNUM,
390
+ # unless Oracle 12 is used.
422
391
  def select_sql
423
392
  return super if @opts[:sql]
424
393
  return super if supports_fetch_next_rows?
@@ -467,6 +436,7 @@ module Sequel
467
436
  sql << " ROWS ONLY"
468
437
  end
469
438
  end
439
+
470
440
  # Oracle requires recursive CTEs to have column aliases.
471
441
  def recursive_cte_requires_column_aliases?
472
442
  true
@@ -481,7 +451,8 @@ module Sequel
481
451
  false
482
452
  end
483
453
 
484
- # Oracle supports FETCH NEXT ROWS since 12c
454
+ # Oracle supports FETCH NEXT ROWS since 12c, but it doesn't work when
455
+ # locking or when skipping locked rows.
485
456
  def supports_fetch_next_rows?
486
457
  server_version >= 12000000 && !(@opts[:lock] || @opts[:skip_locked])
487
458
  end
@@ -551,7 +522,7 @@ module Sequel
551
522
  db.server_version(@opts[:server])
552
523
  end
553
524
 
554
- # Oracle supports pattern matching via regular expressions
525
+ # Oracle 10+ supports pattern matching via regular expressions
555
526
  def supports_regexp?
556
527
  server_version >= 10010002
557
528
  end
@@ -565,7 +536,8 @@ module Sequel
565
536
  end
566
537
 
567
538
  # Oracle doesn't support the use of AS when aliasing a dataset. It doesn't require
568
- # the use of AS anywhere, so this disables it in all cases.
539
+ # the use of AS anywhere, so this disables it in all cases. Oracle also does not support
540
+ # derived column lists in aliases.
569
541
  def as_sql_append(sql, aliaz, column_aliases=nil)
570
542
  raise Error, "oracle does not support derived column lists" if column_aliases
571
543
  sql << ' '
@@ -581,7 +553,7 @@ module Sequel
581
553
  ' FROM DUAL'
582
554
  end
583
555
 
584
- # There is no function on Microsoft SQL Server that does character length
556
+ # There is no function on Oracle that does character length
585
557
  # and respects trailing spaces (datalength respects trailing spaces, but
586
558
  # counts bytes instead of characters). Use a hack to work around the
587
559
  # trailing spaces issue.
@@ -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,17 @@ 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
+ name = name.to_s if name.is_a?(Symbol)
207
+ unless oid = from(:pg_type).where(:typtype=>['b', 'e'], :typname=>name.to_s).get(:oid)
208
+ raise Error, "No matching type in pg_type for #{name.inspect}"
276
209
  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
210
+ add_conversion_proc(oid, block)
283
211
  end
284
212
 
285
- # Commit an existing prepared transaction with the given transaction
286
- # identifier string.
287
213
  def commit_prepared_transaction(transaction_id, opts=OPTS)
288
214
  run("COMMIT PREPARED #{literal(transaction_id)}", opts)
289
215
  end
@@ -347,7 +273,6 @@ module Sequel
347
273
  self << create_trigger_sql(table, name, function, opts)
348
274
  end
349
275
 
350
- # PostgreSQL uses the :postgres database type.
351
276
  def database_type
352
277
  :postgres
353
278
  end
@@ -575,14 +500,6 @@ module Sequel
575
500
  run "REFRESH MATERIALIZED VIEW#{' CONCURRENTLY' if opts[:concurrently]} #{quote_schema_table(name)}"
576
501
  end
577
502
 
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
503
  # Reset the primary key sequence for the given table, basing it on the
587
504
  # maximum current value of the table's primary key.
588
505
  def reset_primary_key_sequence(table)
@@ -595,8 +512,6 @@ module Sequel
595
512
  get{setval(seq, db[table].select{coalesce(max(pk)+seq_ds.select{:increment_by}, seq_ds.select(:min_value))}, false)}
596
513
  end
597
514
 
598
- # Rollback an existing prepared transaction with the given transaction
599
- # identifier string.
600
515
  def rollback_prepared_transaction(transaction_id, opts=OPTS)
601
516
  run("ROLLBACK PREPARED #{literal(transaction_id)}", opts)
602
517
  end
@@ -620,7 +535,6 @@ module Sequel
620
535
  0
621
536
  end
622
537
  end
623
- Sequel::Deprecation.deprecate('Sequel no longer supports PostgreSQL <8.2, some things may not work.') if @server_version < 80200
624
538
  @server_version
625
539
  end
626
540
 
@@ -700,10 +614,10 @@ module Sequel
700
614
  # Creates a dataset that uses the VALUES clause:
701
615
  #
702
616
  # DB.values([[1, 2], [3, 4]])
703
- # VALUES ((1, 2), (3, 4))
617
+ # # VALUES ((1, 2), (3, 4))
704
618
  #
705
619
  # DB.values([[1, 2], [3, 4]]).order(:column2).limit(1, 1)
706
- # VALUES ((1, 2), (3, 4)) ORDER BY column2 LIMIT 1 OFFSET 1
620
+ # # VALUES ((1, 2), (3, 4)) ORDER BY column2 LIMIT 1 OFFSET 1
707
621
  def values(v)
708
622
  @default_dataset.clone(:values=>v)
709
623
  end
@@ -723,21 +637,10 @@ module Sequel
723
637
 
724
638
  private
725
639
 
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
640
  def alter_table_add_column_sql(table, op)
737
641
  "ADD COLUMN#{' IF NOT EXISTS' if op[:if_not_exists]} #{column_definition_sql(op)}"
738
642
  end
739
643
 
740
- # Use a PostgreSQL-specific alter table generator
741
644
  def alter_table_generator_class
742
645
  Postgres::AlterTableGenerator
743
646
  end
@@ -821,14 +724,14 @@ module Sequel
821
724
  (super || op[:op] == :validate_constraint) && op[:op] != :rename_column
822
725
  end
823
726
 
824
- VALID_CLIENT_MIN_MESSAGES = %w'DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 LOG NOTICE WARNING ERROR FATAL PANIC'.freeze
727
+ VALID_CLIENT_MIN_MESSAGES = %w'DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 LOG NOTICE WARNING ERROR FATAL PANIC'.freeze.each(&:freeze)
825
728
  # The SQL queries to execute when starting a new connection.
826
729
  def connection_configuration_sqls
827
730
  sqls = []
828
731
 
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
732
+ sqls << "SET standard_conforming_strings = ON" if typecast_value_boolean(@opts.fetch(:force_standard_strings, true))
830
733
 
831
- cmm = @opts.fetch(:client_min_messages, Postgres.instance_variable_get(:@client_min_messages)) # , :warning) # SEQUEL5
734
+ cmm = @opts.fetch(:client_min_messages, :warning)
832
735
  if cmm && !cmm.to_s.empty?
833
736
  cmm = cmm.to_s.upcase.strip
834
737
  unless VALID_CLIENT_MIN_MESSAGES.include?(cmm)
@@ -872,34 +775,6 @@ module Sequel
872
775
  end
873
776
  end
874
777
 
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
778
  def database_specific_error_class_from_sqlstate(sqlstate)
904
779
  if sqlstate == '23P01'
905
780
  ExclusionConstraintViolation
@@ -1041,7 +916,6 @@ module Sequel
1041
916
  result += " AS #{sql}"
1042
917
  end
1043
918
 
1044
- # Use a PostgreSQL-specific create table generator
1045
919
  def create_table_generator_class
1046
920
  Postgres::CreateTableGenerator
1047
921
  end
@@ -1098,8 +972,8 @@ module Sequel
1098
972
  "DROP #{'MATERIALIZED ' if opts[:materialized]}VIEW#{' IF EXISTS' if opts[:if_exists]} #{quote_schema_table(name)}#{' CASCADE' if opts[:cascade]}"
1099
973
  end
1100
974
 
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.
975
+ # If opts includes a :schema option, use it, otherwise restrict the filter to only the
976
+ # currently visible schemas.
1103
977
  def filter_schema(ds, opts)
1104
978
  expr = if schema = opts[:schema]
1105
979
  schema.to_s
@@ -1109,18 +983,6 @@ module Sequel
1109
983
  ds.where{{pg_namespace[:nspname]=>expr}}
1110
984
  end
1111
985
 
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
986
  def index_definition_sql(table_name, index)
1125
987
  cols = index[:columns]
1126
988
  index_name = index[:name] || default_index_name(table_name, cols)
@@ -1129,6 +991,7 @@ module Sequel
1129
991
  else
1130
992
  literal(Array(cols))
1131
993
  end
994
+ if_not_exists = " IF NOT EXISTS" if index[:if_not_exists]
1132
995
  unique = "UNIQUE " if index[:unique]
1133
996
  index_type = index[:type]
1134
997
  filter = index[:where] || index[:filter]
@@ -1140,7 +1003,7 @@ module Sequel
1140
1003
  when :spatial
1141
1004
  index_type = :gist
1142
1005
  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}"
1006
+ "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
1007
  end
1145
1008
 
1146
1009
  # Setup datastructures shared by all postgres adapters.
@@ -1148,10 +1011,8 @@ module Sequel
1148
1011
  @primary_keys = {}
1149
1012
  @primary_key_sequences = {}
1150
1013
  @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
1014
+ procs = @conversion_procs = CONVERSION_PROCS.dup
1015
+ procs[1184] = procs[1114] = method(:to_application_timestamp)
1155
1016
  end
1156
1017
 
1157
1018
  # Backbone of the tables and views support.
@@ -1168,8 +1029,7 @@ module Sequel
1168
1029
  end
1169
1030
  end
1170
1031
 
1171
- # Use a dollar sign instead of question mark for the argument
1172
- # placeholder.
1032
+ # Use a dollar sign instead of question mark for the argument placeholder.
1173
1033
  def prepared_arg_placeholder
1174
1034
  PREPARED_ARG_PLACEHOLDER
1175
1035
  end
@@ -1196,8 +1056,7 @@ module Sequel
1196
1056
  Sequel.cast(expr.to_s,:regclass).cast(:oid)
1197
1057
  end
1198
1058
 
1199
- # Remove the cached entries for primary keys and sequences when a table is
1200
- # changed.
1059
+ # Remove the cached entries for primary keys and sequences when a table is changed.
1201
1060
  def remove_cached_schema(table)
1202
1061
  tab = quote_schema_table(table)
1203
1062
  Sequel.synchronize do
@@ -1213,7 +1072,6 @@ module Sequel
1213
1072
  "ALTER TABLE #{quote_schema_table(name)} RENAME TO #{quote_identifier(schema_and_table(new_name).last)}"
1214
1073
  end
1215
1074
 
1216
- # Recognize PostgreSQL interval type.
1217
1075
  def schema_column_type(db_type)
1218
1076
  case db_type
1219
1077
  when /\Ainterval\z/io
@@ -1315,7 +1173,7 @@ module Sequel
1315
1173
  # PostgreSQL prefers the text datatype. If a fixed size is requested,
1316
1174
  # the char type is used. If the text type is specifically
1317
1175
  # disallowed or there is a size specified, use the varchar type.
1318
- # Otherwise use the type type.
1176
+ # Otherwise use the text type.
1319
1177
  def type_literal_generic_string(column)
1320
1178
  if column[:fixed]
1321
1179
  "char(#{column[:size]||255})"
@@ -1332,85 +1190,11 @@ module Sequel
1332
1190
  end
1333
1191
  end
1334
1192
 
1335
- # Instance methods for datasets that connect to a PostgreSQL database.
1336
1193
  module DatasetMethods
1337
1194
  include UnmodifiedIdentifiers::DatasetMethods
1338
1195
 
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
1196
  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
1197
+ LOCK_MODES = ['ACCESS SHARE', 'ROW SHARE', 'ROW EXCLUSIVE', 'SHARE UPDATE EXCLUSIVE', 'SHARE', 'SHARE ROW EXCLUSIVE', 'EXCLUSIVE', 'ACCESS EXCLUSIVE'].each(&:freeze).freeze
1414
1198
 
1415
1199
  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
1200
  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 +1345,28 @@ module Sequel
1561
1345
  #
1562
1346
  # Examples:
1563
1347
  #
1564
- # DB[:table].insert_conflict.insert(:a=>1, :b=>2)
1348
+ # DB[:table].insert_conflict.insert(a: 1, b: 2)
1565
1349
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1566
1350
  # # ON CONFLICT DO NOTHING
1567
1351
  #
1568
- # DB[:table].insert_conflict(:constraint=>:table_a_uidx).insert(:a=>1, :b=>2)
1352
+ # DB[:table].insert_conflict(constraint: :table_a_uidx).insert(a: 1, b: 2)
1569
1353
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1570
1354
  # # ON CONFLICT ON CONSTRAINT table_a_uidx DO NOTHING
1571
1355
  #
1572
- # DB[:table].insert_conflict(:target=>:a).insert(:a=>1, :b=>2)
1356
+ # DB[:table].insert_conflict(target: :a).insert(a: 1, b: 2)
1573
1357
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1574
1358
  # # ON CONFLICT (a) DO NOTHING
1575
1359
  #
1576
- # DB[:table].insert_conflict(:target=>:a, :conflict_where=>{:c=>true}).insert(:a=>1, :b=>2)
1360
+ # DB[:table].insert_conflict(target: :a, conflict_where: {c: true}).insert(a: 1, b: 2)
1577
1361
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1578
1362
  # # ON CONFLICT (a) WHERE (c IS TRUE) DO NOTHING
1579
1363
  #
1580
- # DB[:table].insert_conflict(:target=>:a, :update=>{:b=>:excluded__b}).insert(:a=>1, :b=>2)
1364
+ # DB[:table].insert_conflict(target: :a, update: {b: Sequel[:excluded][:b]}).insert(a: 1, b: 2)
1581
1365
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1582
1366
  # # ON CONFLICT (a) DO UPDATE SET b = excluded.b
1583
1367
  #
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)
1368
+ # DB[:table].insert_conflict(constraint: :table_a_uidx,
1369
+ # update: {b: Sequel[:excluded][:b]}, update_where: {Sequel[:table][:status_id] => 1}).insert(a: 1, b: 2)
1586
1370
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1587
1371
  # # ON CONFLICT ON CONSTRAINT table_a_uidx
1588
1372
  # # DO UPDATE SET b = excluded.b WHERE (table.status_id = 1)
@@ -1593,7 +1377,7 @@ module Sequel
1593
1377
  # Ignore uniqueness/exclusion violations when inserting, using ON CONFLICT DO NOTHING.
1594
1378
  # Exists mostly for compatibility to MySQL's insert_ignore. Example:
1595
1379
  #
1596
- # DB[:table].insert_ignore.insert(:a=>1, :b=>2)
1380
+ # DB[:table].insert_ignore.insert(a: 1, b: 2)
1597
1381
  # # INSERT INTO TABLE (a, b) VALUES (1, 2)
1598
1382
  # # ON CONFLICT DO NOTHING
1599
1383
  def insert_ignore
@@ -1616,7 +1400,7 @@ module Sequel
1616
1400
 
1617
1401
  # Locks all tables in the dataset's FROM clause (but not in JOINs) with
1618
1402
  # 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
1403
+ # a new transaction, locks the table, and yields. If a block is not given,
1620
1404
  # just locks the tables. Note that PostgreSQL will probably raise an error
1621
1405
  # if you lock the table outside of an existing transaction. Returns nil.
1622
1406
  def lock(mode, opts=OPTS)
@@ -1679,7 +1463,7 @@ module Sequel
1679
1463
  server_version >= 90500
1680
1464
  end
1681
1465
 
1682
- # PostgreSQL 9.3rc1+ supports lateral subqueries
1466
+ # PostgreSQL 9.3+ supports lateral subqueries
1683
1467
  def supports_lateral_subqueries?
1684
1468
  server_version >= 90300
1685
1469
  end
@@ -1725,10 +1509,11 @@ module Sequel
1725
1509
  # :only and :restart only work correctly on PostgreSQL 8.4+.
1726
1510
  #
1727
1511
  # 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
1512
+ # DB[:table].truncate
1513
+ # # TRUNCATE TABLE "table"
1514
+ #
1515
+ # DB[:table].truncate(cascade: true, only: true, restart: true)
1516
+ # # TRUNCATE TABLE ONLY "table" RESTART IDENTITY CASCADE
1732
1517
  def truncate(opts = OPTS)
1733
1518
  if opts.empty?
1734
1519
  super()