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
@@ -15,7 +15,7 @@ module Sequel
15
15
  # Example:
16
16
  #
17
17
  # loader = Sequel::Dataset::PlaceholderLiteralizer.loader(DB[:items]) do |pl, ds|
18
- # ds.where(:id=>pl.arg).exclude(:name=>pl.arg).limit(1)
18
+ # ds.where(id: pl.arg).exclude(name: pl.arg).limit(1)
19
19
  # end
20
20
  # loader.first(1, "foo")
21
21
  # # SELECT * FROM items WHERE ((id = 1) AND (name != 'foo')) LIMIT 1
@@ -27,7 +27,7 @@ module Sequel
27
27
  # Note that this method does not handle all possible cases. For example:
28
28
  #
29
29
  # loader = Sequel::Dataset::PlaceholderLiteralizer.loader(DB[:items]) do |pl, ds|
30
- # ds.join(pl.arg, :item_id=>:id)
30
+ # ds.join(pl.arg, item_id: :id)
31
31
  # end
32
32
  # loader.all(:cart_items)
33
33
  #
@@ -35,7 +35,7 @@ module Sequel
35
35
  # best to add a table alias when joining:
36
36
  #
37
37
  # loader = Sequel::Dataset::PlaceholderLiteralizer.loader(DB[:items]) do |pl, ds|
38
- # ds.join(Sequel.as(pl.arg, :t), :item_id=>:id)
38
+ # ds.join(Sequel.as(pl.arg, :t), item_id: :id)
39
39
  # end
40
40
  # loader.all(:cart_items)
41
41
  #
@@ -107,7 +107,7 @@ module Sequel
107
107
  end
108
108
 
109
109
  # Record the offset at which the argument is used in the SQL query, and any
110
- # transforming
110
+ # transforming block.
111
111
  def use(sql, arg, transformer)
112
112
  @args << [sql, sql.length, arg, transformer]
113
113
  end
@@ -37,23 +37,10 @@ module Sequel
37
37
  end
38
38
  private_class_method :prepared_statements_module
39
39
 
40
- def self.def_deprecated_opts_setter(mod, *meths)
41
- meths.each do |meth|
42
- mod.send(:define_method, :"#{meth}=") do |v|
43
- # :nocov:
44
- Sequel::Deprecation.deprecate("Dataset##{meth}=", "The API has changed, and this value should now be passed in as an option via Dataset#clone")
45
- @opts[meth] = v
46
- # :nocov:
47
- end
48
- end
49
- end
50
-
51
40
  # Default implementation of the argument mapper to allow
52
41
  # native database support for bind variables and prepared
53
42
  # statements (as opposed to the emulated ones used by default).
54
43
  module ArgumentMapper
55
- Dataset.def_deprecated_opts_setter(self, :prepared_statement_name, :bind_arguments)
56
-
57
44
  # The name of the prepared statement, if any.
58
45
  def prepared_statement_name
59
46
  @opts[:prepared_statement_name]
@@ -89,11 +76,6 @@ module Sequel
89
76
  # into the query, which works on all databases, as it is no different
90
77
  # from using the dataset without bind variables.
91
78
  module PreparedStatementMethods
92
- Dataset.def_deprecated_opts_setter(self, :log_sql, :prepared_type, :prepared_args, :orig_dataset, :prepared_modify_values)
93
-
94
- PLACEHOLDER_RE = /\A\$(.*)\z/
95
- Sequel::Deprecation.deprecate_constant(self, :PLACEHOLDER_RE)
96
-
97
79
  # Whether to log the full SQL query. By default, just the prepared statement
98
80
  # name is generally logged on adapters that support native prepared statements.
99
81
  def log_sql
@@ -141,6 +123,12 @@ module Sequel
141
123
  orig_dataset.columns
142
124
  end
143
125
 
126
+ # Disallow use of delayed evaluations in prepared statements.
127
+ def delayed_evaluation_sql_append(sql, delay)
128
+ raise Error, "delayed evaluations cannot be used in prepared statements" if @opts[:no_delayed_evaluations]
129
+ super
130
+ end
131
+
144
132
  # Returns the SQL for the prepared statement, depending on
145
133
  # the type of the statement and the prepared_modify_values.
146
134
  def prepared_sql
@@ -188,13 +176,10 @@ module Sequel
188
176
 
189
177
  protected
190
178
 
191
- # Run the method based on the type of prepared statement, with
192
- # :select running #all to get all of the rows, and the other
193
- # types running the method with the same name as the type.
179
+ # Run the method based on the type of prepared statement.
194
180
  def run(&block)
195
181
  case prepared_type
196
182
  when :select, :all
197
- # Most common scenario, so listed first
198
183
  all(&block)
199
184
  when :each
200
185
  each(&block)
@@ -208,18 +193,17 @@ module Sequel
208
193
  elsif prepared_type == :delete
209
194
  delete
210
195
  else
211
- send(prepared_type, *prepared_modify_values)
196
+ public_send(prepared_type, *prepared_modify_values)
212
197
  end
213
198
  when :insert_pk
214
199
  fetch_rows(prepared_sql){|r| return r.values.first}
215
200
  when Array
216
201
  case prepared_type[0]
217
202
  when :map, :as_hash, :to_hash, :to_hash_groups
218
- send(*prepared_type, &block)
203
+ public_send(*prepared_type, &block)
219
204
  end
220
205
  else
221
- Sequel::Deprecation.deprecate("Using an unsupported prepared statement type (#{prepared_type.inspect})", 'Switch to using :select as the prepared statement type')
222
- all(&block)
206
+ raise Error, "unsupported prepared statement type used: #{prepared_type.inspect}"
223
207
  end
224
208
  end
225
209
 
@@ -235,8 +219,7 @@ module Sequel
235
219
  @opts[:bind_vars].has_key?(k)
236
220
  end
237
221
 
238
- # The symbol cache should always be skipped, since placeholders
239
- # are symbols.
222
+ # The symbol cache should always be skipped, since placeholders are symbols.
240
223
  def skip_symbol_cache?
241
224
  true
242
225
  end
@@ -286,7 +269,7 @@ module Sequel
286
269
  # already been set for this dataset, they are updated with the contents
287
270
  # of bind_vars.
288
271
  #
289
- # DB[:table].where(:id=>:$id).bind(:id=>1).call(:first)
272
+ # DB[:table].where(id: :$id).bind(id: 1).call(:first)
290
273
  # # SELECT * FROM table WHERE id = ? LIMIT 1 -- (1)
291
274
  # # => {:id=>1}
292
275
  def bind(bind_vars={})
@@ -307,7 +290,7 @@ module Sequel
307
290
  # run the sql with the bind variables specified in the hash. +values+ is a hash passed to
308
291
  # insert or update (if one of those types is used), which may contain placeholders.
309
292
  #
310
- # DB[:table].where(:id=>:$id).call(:first, :id=>1)
293
+ # DB[:table].where(id: :$id).call(:first, id: 1)
311
294
  # # SELECT * FROM table WHERE id = ? LIMIT 1 -- (1)
312
295
  # # => {:id=>1}
313
296
  def call(type, bind_variables={}, *values, &block)
@@ -315,36 +298,25 @@ module Sequel
315
298
  end
316
299
 
317
300
  # Prepare an SQL statement for later execution. Takes a type similar to #call,
318
- # and the +name+ symbol of the prepared statement. While +name+ defaults to +nil+,
319
- # it should always be provided as a symbol for the name of the prepared statement,
320
- # as some databases require that prepared statements have names.
301
+ # and the +name+ symbol of the prepared statement.
321
302
  #
322
303
  # This returns a clone of the dataset extended with PreparedStatementMethods,
323
304
  # which you can +call+ with the hash of bind variables to use.
324
305
  # The prepared statement is also stored in
325
- # the associated database, where it can be called by name.
306
+ # the associated Database, where it can be called by name.
326
307
  # The following usage is identical:
327
308
  #
328
- # ps = DB[:table].where(:name=>:$name).prepare(:first, :select_by_name)
309
+ # ps = DB[:table].where(name: :$name).prepare(:first, :select_by_name)
329
310
  #
330
- # ps.call(:name=>'Blah')
311
+ # ps.call(name: 'Blah')
331
312
  # # SELECT * FROM table WHERE name = ? -- ('Blah')
332
313
  # # => {:id=>1, :name=>'Blah'}
333
314
  #
334
- # DB.call(:select_by_name, :name=>'Blah') # Same thing
335
- def prepare(type, name=nil, *values)
336
- ps = to_prepared_statement(type, values, :name=>name, :extend=>prepared_statement_modules)
337
-
338
- if name
339
- ps.prepared_sql
340
- db.set_prepared_statement(name, ps)
341
- else
342
- # :nocov:
343
- # SEQUEL5: Add coverage
344
- Sequel::Deprecation.deprecate("Dataset#prepare will change to requiring a name argument in Sequel 5, please update your code") unless name
345
- # :nocov:
346
- end
347
-
315
+ # DB.call(:select_by_name, name: 'Blah') # Same thing
316
+ def prepare(type, name, *values)
317
+ ps = to_prepared_statement(type, values, :name=>name, :extend=>prepared_statement_modules, :no_delayed_evaluations=>true)
318
+ ps.prepared_sql
319
+ db.set_prepared_statement(name, ps)
348
320
  ps
349
321
  end
350
322
 
@@ -357,7 +329,7 @@ module Sequel
357
329
  mods += [PreparedStatementMethods]
358
330
 
359
331
  bind.
360
- clone(:prepared_statement_name=>opts[:name], :prepared_type=>type, :prepared_modify_values=>values, :orig_dataset=>self, :no_cache_sql=>true, :prepared_args=>@opts[:prepared_args]||[]).
332
+ clone(:prepared_statement_name=>opts[:name], :prepared_type=>type, :prepared_modify_values=>values, :orig_dataset=>self, :no_cache_sql=>true, :prepared_args=>@opts[:prepared_args]||[], :no_delayed_evaluations=>opts[:no_delayed_evaluations]).
361
333
  with_extend(*mods)
362
334
  end
363
335
 
@@ -14,13 +14,12 @@ module Sequel
14
14
 
15
15
  EMPTY_ARRAY = [].freeze
16
16
 
17
- # The dataset options that require the removal of cached columns
18
- # if changed.
17
+ # The dataset options that require the removal of cached columns if changed.
19
18
  COLUMN_CHANGE_OPTS = [:select, :sql, :from, :join].freeze
20
19
 
21
20
  # Which options don't affect the SQL generation. Used by simple_select_all?
22
21
  # to determine if this is a simple SELECT * FROM table.
23
- NON_SQL_OPTIONS = [:server, :graph, :graph_aliases, :row_proc, :quote_identifiers, :identifier_input_method, :identifier_output_method, :skip_symbol_cache].freeze # SEQUEL5: Remove graph_aliases
22
+ NON_SQL_OPTIONS = [:server, :graph, :row_proc, :quote_identifiers, :skip_symbol_cache].freeze
24
23
 
25
24
  # These symbols have _join methods created (e.g. inner_join) that
26
25
  # call join_table with the symbol, passing along the arguments and
@@ -37,14 +36,13 @@ module Sequel
37
36
 
38
37
  # Methods that return modified datasets
39
38
  QUERY_METHODS = ((<<-METHS).split.map(&:to_sym) + JOIN_METHODS).freeze
40
- add_graph_aliases and distinct except exclude exclude_having exclude_where
39
+ add_graph_aliases distinct except exclude exclude_having
41
40
  filter for_update from from_self graph grep group group_and_count group_append group_by having intersect invert
42
41
  limit lock_style naked offset or order order_append order_by order_more order_prepend qualify
43
42
  reverse reverse_order select select_all select_append select_group select_more server
44
43
  set_graph_aliases unfiltered ungraphed ungrouped union
45
44
  unlimited unordered where with with_recursive with_sql
46
45
  METHS
47
- # SEQUEL5: Remove and, exclude_where
48
46
 
49
47
  # Register an extension callback for Dataset objects. ext should be the
50
48
  # extension name symbol, and mod should either be a Module that the
@@ -67,12 +65,6 @@ module Sequel
67
65
  Sequel.synchronize{EXTENSIONS[ext] = block}
68
66
  end
69
67
 
70
- # Alias for where.
71
- def and(*cond, &block)
72
- Sequel::Deprecation.deprecate("Sequel::Dataset#and", "Use #where, or use the sequel_4_dataset_methods extension")
73
- where(*cond, &block)
74
- end
75
-
76
68
  # On Ruby 2.4+, use clone(:freeze=>false) to create clones, because
77
69
  # we use true freezing in that case, and we need to modify the opts
78
70
  # in the frozen copy.
@@ -89,13 +81,13 @@ module Sequel
89
81
  # If the options changed include options in COLUMN_CHANGE_OPTS, the cached
90
82
  # columns are deleted. This method should generally not be called
91
83
  # directly by user code.
92
- def clone(opts = OPTS)
84
+ def clone(opts = (return self; nil))
93
85
  c = super(:freeze=>false)
94
86
  c.opts.merge!(opts)
95
87
  unless opts.each_key{|o| break if COLUMN_CHANGE_OPTS.include?(o)}
96
88
  c.clear_columns_cache
97
89
  end
98
- c.freeze if frozen? # SEQUEL5: Remove if frozen?
90
+ c.freeze
99
91
  c
100
92
  end
101
93
  else
@@ -106,7 +98,7 @@ module Sequel
106
98
  unless opts.each_key{|o| break if COLUMN_CHANGE_OPTS.include?(o)}
107
99
  c.clear_columns_cache
108
100
  end
109
- c.freeze if frozen? # SEQUEL5: c.opts.freeze
101
+ c.opts.freeze
110
102
  c
111
103
  end
112
104
  # :nocov:
@@ -140,10 +132,10 @@ module Sequel
140
132
  # DB[:items].except(DB[:other_items])
141
133
  # # SELECT * FROM (SELECT * FROM items EXCEPT SELECT * FROM other_items) AS t1
142
134
  #
143
- # DB[:items].except(DB[:other_items], :all=>true, :from_self=>false)
135
+ # DB[:items].except(DB[:other_items], all: true, from_self: false)
144
136
  # # SELECT * FROM items EXCEPT ALL SELECT * FROM other_items
145
137
  #
146
- # DB[:items].except(DB[:other_items], :alias=>:i)
138
+ # DB[:items].except(DB[:other_items], alias: :i)
147
139
  # # SELECT * FROM (SELECT * FROM items EXCEPT SELECT * FROM other_items) AS i
148
140
  def except(dataset, opts=OPTS)
149
141
  raise(InvalidOperation, "EXCEPT not supported") unless supports_intersect_except?
@@ -154,10 +146,10 @@ module Sequel
154
146
  # Performs the inverse of Dataset#where. Note that if you have multiple filter
155
147
  # conditions, this is not the same as a negation of all conditions.
156
148
  #
157
- # DB[:items].exclude(:category => 'software')
149
+ # DB[:items].exclude(category: 'software')
158
150
  # # SELECT * FROM items WHERE (category != 'software')
159
151
  #
160
- # DB[:items].exclude(:category => 'software', :id=>3)
152
+ # DB[:items].exclude(category: 'software', id: 3)
161
153
  # # SELECT * FROM items WHERE ((category != 'software') OR (id != 3))
162
154
  #
163
155
  # Also note that SQL uses 3-valued boolean logic (+true+, +false+, +NULL+), so
@@ -165,7 +157,7 @@ module Sequel
165
157
  # not match rows that were NULL originally. If you take the earlier
166
158
  # example:
167
159
  #
168
- # DB[:items].exclude(:category => 'software')
160
+ # DB[:items].exclude(category: 'software')
169
161
  # # SELECT * FROM items WHERE (category != 'software')
170
162
  #
171
163
  # Note that this does not match rows where +category+ is +NULL+. This
@@ -173,7 +165,7 @@ module Sequel
173
165
  # or not the +NULL+ category is +software+. You can explicitly
174
166
  # specify how to handle +NULL+ values if you want:
175
167
  #
176
- # DB[:items].exclude(Sequel.~(:category=>nil) & {:category => 'software'})
168
+ # DB[:items].exclude(Sequel.~(category: nil) & {category: 'software'})
177
169
  # # SELECT * FROM items WHERE ((category IS NULL) OR (category != 'software'))
178
170
  def exclude(*cond, &block)
179
171
  add_filter(:where, cond, true, &block)
@@ -190,12 +182,6 @@ module Sequel
190
182
  add_filter(:having, cond, true, &block)
191
183
  end
192
184
 
193
- # Alias for exclude.
194
- def exclude_where(*cond, &block)
195
- Sequel::Deprecation.deprecate("Sequel::Dataset#exclude_where", "Use #exclude, or use the sequel_4_dataset_methods extension")
196
- exclude(*cond, &block)
197
- end
198
-
199
185
  if TRUE_FREEZE
200
186
  # Return a clone of the dataset loaded with the given dataset extensions.
201
187
  # If no related extension file exists or the extension does not have
@@ -203,7 +189,7 @@ module Sequel
203
189
  def extension(*a)
204
190
  c = _clone(:freeze=>false)
205
191
  c.send(:_extension!, a)
206
- c.freeze if frozen? # SEQUEL5: Remove if frozen?
192
+ c.freeze
207
193
  c
208
194
  end
209
195
  else
@@ -269,7 +255,10 @@ module Sequel
269
255
  end
270
256
 
271
257
  # Returns a dataset selecting from the current dataset.
272
- # Supplying the :alias option controls the alias of the result.
258
+ # Options:
259
+ # :alias :: Controls the alias of the table
260
+ # :column_aliases :: Also aliases columns, using derived column lists.
261
+ # Only used in conjunction with :alias.
273
262
  #
274
263
  # ds = DB[:items].order(:name).select(:id, :name)
275
264
  # # SELECT id,name FROM items ORDER BY name
@@ -277,10 +266,10 @@ module Sequel
277
266
  # ds.from_self
278
267
  # # SELECT * FROM (SELECT id, name FROM items ORDER BY name) AS t1
279
268
  #
280
- # ds.from_self(:alias=>:foo)
269
+ # ds.from_self(alias: :foo)
281
270
  # # SELECT * FROM (SELECT id, name FROM items ORDER BY name) AS foo
282
271
  #
283
- # ds.from_self(:alias=>:foo, :column_aliases=>[:c1, :c2])
272
+ # ds.from_self(alias: :foo, column_aliases: [:c1, :c2])
284
273
  # # SELECT * FROM (SELECT id, name FROM items ORDER BY name) AS foo(c1, c2)
285
274
  def from_self(opts=OPTS)
286
275
  fs = {}
@@ -293,9 +282,9 @@ module Sequel
293
282
  end
294
283
 
295
284
  # Match any of the columns to any of the patterns. The terms can be
296
- # strings (which use LIKE) or regular expressions (which are only
297
- # supported on MySQL and PostgreSQL). Note that the total number of
298
- # pattern matches will be Array(columns).length * Array(terms).length,
285
+ # strings (which use LIKE) or regular expressions if the database supports that.
286
+ # Note that the total number of pattern matches will be
287
+ # Array(columns).length * Array(terms).length,
299
288
  # which could cause performance issues.
300
289
  #
301
290
  # Options (all are boolean):
@@ -316,15 +305,15 @@ module Sequel
316
305
  # # SELECT * FROM items WHERE ((a LIKE '%test%' ESCAPE '\') OR (a LIKE 'foo' ESCAPE '\')
317
306
  # # OR (b LIKE '%test%' ESCAPE '\') OR (b LIKE 'foo' ESCAPE '\'))
318
307
  #
319
- # dataset.grep([:a, :b], %w'%foo% %bar%', :all_patterns=>true)
308
+ # dataset.grep([:a, :b], %w'%foo% %bar%', all_patterns: true)
320
309
  # # SELECT * FROM a WHERE (((a LIKE '%foo%' ESCAPE '\') OR (b LIKE '%foo%' ESCAPE '\'))
321
310
  # # AND ((a LIKE '%bar%' ESCAPE '\') OR (b LIKE '%bar%' ESCAPE '\')))
322
311
  #
323
- # dataset.grep([:a, :b], %w'%foo% %bar%', :all_columns=>true)
312
+ # dataset.grep([:a, :b], %w'%foo% %bar%', all_columns: true)
324
313
  # # SELECT * FROM a WHERE (((a LIKE '%foo%' ESCAPE '\') OR (a LIKE '%bar%' ESCAPE '\'))
325
314
  # # AND ((b LIKE '%foo%' ESCAPE '\') OR (b LIKE '%bar%' ESCAPE '\')))
326
315
  #
327
- # dataset.grep([:a, :b], %w'%foo% %bar%', :all_patterns=>true, :all_columns=>true)
316
+ # dataset.grep([:a, :b], %w'%foo% %bar%', all_patterns: true, all_columns: true)
328
317
  # # SELECT * FROM a WHERE ((a LIKE '%foo%' ESCAPE '\') AND (b LIKE '%foo%' ESCAPE '\')
329
318
  # # AND (a LIKE '%bar%' ESCAPE '\') AND (b LIKE '%bar%' ESCAPE '\'))
330
319
  def grep(columns, patterns, opts=OPTS)
@@ -372,11 +361,11 @@ module Sequel
372
361
  # # SELECT first_name, last_name, count(*) AS count FROM items GROUP BY first_name, last_name
373
362
  # # => [{:first_name=>'a', :last_name=>'b', :count=>1}, ...]
374
363
  #
375
- # DB[:items].group_and_count(:first_name___name).all
364
+ # DB[:items].group_and_count(Sequel[:first_name].as(:name)).all
376
365
  # # SELECT first_name AS name, count(*) AS count FROM items GROUP BY first_name
377
366
  # # => [{:name=>'a', :count=>1}, ...]
378
367
  #
379
- # DB[:items].group_and_count{substr(first_name, 1, 1).as(initial)}.all
368
+ # DB[:items].group_and_count{substr(:first_name, 1, 1).as(:initial)}.all
380
369
  # # SELECT substr(first_name, 1, 1) AS initial, count(*) AS count FROM items GROUP BY substr(first_name, 1, 1)
381
370
  # # => [{:initial=>'a', :count=>1}, ...]
382
371
  def group_and_count(*columns, &block)
@@ -414,7 +403,7 @@ module Sequel
414
403
 
415
404
  # Returns a copy of the dataset with the HAVING conditions changed. See #where for argument types.
416
405
  #
417
- # DB[:items].group(:sum).having(:sum=>10)
406
+ # DB[:items].group(:sum).having(sum: 10)
418
407
  # # SELECT * FROM items GROUP BY sum HAVING (sum = 10)
419
408
  def having(*cond, &block)
420
409
  add_filter(:having, cond, &block)
@@ -432,10 +421,10 @@ module Sequel
432
421
  # DB[:items].intersect(DB[:other_items])
433
422
  # # SELECT * FROM (SELECT * FROM items INTERSECT SELECT * FROM other_items) AS t1
434
423
  #
435
- # DB[:items].intersect(DB[:other_items], :all=>true, :from_self=>false)
424
+ # DB[:items].intersect(DB[:other_items], all: true, from_self: false)
436
425
  # # SELECT * FROM items INTERSECT ALL SELECT * FROM other_items
437
426
  #
438
- # DB[:items].intersect(DB[:other_items], :alias=>:i)
427
+ # DB[:items].intersect(DB[:other_items], alias: :i)
439
428
  # # SELECT * FROM (SELECT * FROM items INTERSECT SELECT * FROM other_items) AS i
440
429
  def intersect(dataset, opts=OPTS)
441
430
  raise(InvalidOperation, "INTERSECT not supported") unless supports_intersect_except?
@@ -446,10 +435,10 @@ module Sequel
446
435
  # Inverts the current WHERE and HAVING clauses. If there is neither a
447
436
  # WHERE or HAVING clause, adds a WHERE clause that is always false.
448
437
  #
449
- # DB[:items].where(:category => 'software').invert
438
+ # DB[:items].where(category: 'software').invert
450
439
  # # SELECT * FROM items WHERE (category != 'software')
451
440
  #
452
- # DB[:items].where(:category => 'software', :id=>3).invert
441
+ # DB[:items].where(category: 'software', id: 3).invert
453
442
  # # SELECT * FROM items WHERE ((category != 'software') OR (id != 3))
454
443
  #
455
444
  # See documentation for exclude for how inversion is handled in regards
@@ -521,10 +510,10 @@ module Sequel
521
510
  # DB[:a].join_table(:cross, :b)
522
511
  # # SELECT * FROM a CROSS JOIN b
523
512
  #
524
- # DB[:a].join_table(:inner, DB[:b], :c=>d)
513
+ # DB[:a].join_table(:inner, DB[:b], c: d)
525
514
  # # SELECT * FROM a INNER JOIN (SELECT * FROM b) AS t1 ON (t1.c = a.d)
526
515
  #
527
- # DB[:a].join_table(:left, :b___c, [:d])
516
+ # DB[:a].join_table(:left, Sequel[:b].as(:c), [:d])
528
517
  # # SELECT * FROM a LEFT JOIN b AS c USING (d)
529
518
  #
530
519
  # DB[:a].natural_join(:b).join_table(:inner, :c) do |ta, jta, js|
@@ -624,7 +613,7 @@ module Sequel
624
613
  # or JOIN clauses, it will surround the subquery with LATERAL to enable it
625
614
  # to deal with previous tables in the query:
626
615
  #
627
- # DB.from(:a, DB[:b].where(:a__c=>:b__d).lateral)
616
+ # DB.from(:a, DB[:b].where(Sequel[:a][:c]=>Sequel[:b][:d]).lateral)
628
617
  # # SELECT * FROM a, LATERAL (SELECT * FROM b WHERE (a.c = b.d))
629
618
  def lateral
630
619
  clone(:lateral=>true)
@@ -676,8 +665,7 @@ module Sequel
676
665
 
677
666
  # Returns a cloned dataset without a row_proc.
678
667
  #
679
- # ds = DB[:items]
680
- # ds.row_proc = proc(&:invert)
668
+ # ds = DB[:items].with_row_proc(:invert.to_proc)
681
669
  # ds.all # => [{2=>:id}]
682
670
  # ds.naked.all # => [{:id=>2}]
683
671
  def naked
@@ -699,13 +687,13 @@ module Sequel
699
687
 
700
688
  # Adds an alternate filter to an existing WHERE clause using OR. If there
701
689
  # is no WHERE clause, then the default is WHERE true, and OR would be redundant,
702
- # so return an unmodified clone of the dataset in that case.
690
+ # so return the dataset in that case.
703
691
  #
704
692
  # DB[:items].where(:a).or(:b) # SELECT * FROM items WHERE a OR b
705
693
  # DB[:items].or(:b) # SELECT * FROM items
706
694
  def or(*cond, &block)
707
695
  if @opts[:where].nil?
708
- clone
696
+ self
709
697
  else
710
698
  add_filter(:where, cond, false, :OR, &block)
711
699
  end
@@ -720,7 +708,7 @@ module Sequel
720
708
  # DB[:items].order(:name) # SELECT * FROM items ORDER BY name
721
709
  # DB[:items].order(:a, :b) # SELECT * FROM items ORDER BY a, b
722
710
  # DB[:items].order(Sequel.lit('a + b')) # SELECT * FROM items ORDER BY a + b
723
- # DB[:items].order(:a + :b) # SELECT * FROM items ORDER BY (a + b)
711
+ # DB[:items].order(Sequel[:a] + :b) # SELECT * FROM items ORDER BY (a + b)
724
712
  # DB[:items].order(Sequel.desc(:name)) # SELECT * FROM items ORDER BY name DESC
725
713
  # DB[:items].order(Sequel.asc(:name, :nulls=>:last)) # SELECT * FROM items ORDER BY name ASC NULLS LAST
726
714
  # DB[:items].order{sum(name).desc} # SELECT * FROM items ORDER BY sum(name) DESC
@@ -762,14 +750,14 @@ module Sequel
762
750
 
763
751
  # Qualify to the given table, or first source if no table is given.
764
752
  #
765
- # DB[:items].where(:id=>1).qualify
753
+ # DB[:items].where(id: 1).qualify
766
754
  # # SELECT items.* FROM items WHERE (items.id = 1)
767
755
  #
768
- # DB[:items].where(:id=>1).qualify(:i)
756
+ # DB[:items].where(id: 1).qualify(:i)
769
757
  # # SELECT i.* FROM items WHERE (i.id = 1)
770
758
  def qualify(table=first_source)
771
759
  o = @opts
772
- return clone if o[:sql] # SEQUEL5: return self
760
+ return self if o[:sql]
773
761
  h = {}
774
762
  (o.keys & QUALIFY_KEYS).each do |k|
775
763
  h[k] = qualified_expression(o[k], table)
@@ -864,7 +852,7 @@ module Sequel
864
852
  # DB[:items].select_group(:a, :b)
865
853
  # # SELECT a, b FROM items GROUP BY a, b
866
854
  #
867
- # DB[:items].select_group(:c___a){f(c2)}
855
+ # DB[:items].select_group(Sequel[:c].as(:a)){f(c2)}
868
856
  # # SELECT c AS a, f(c2) FROM items GROUP BY c, f(c2)
869
857
  def select_group(*columns, &block)
870
858
  virtual_row_columns(columns, block)
@@ -915,26 +903,9 @@ module Sequel
915
903
  end
916
904
  end
917
905
 
918
- # Unbind bound variables from this dataset's filter and return an array of two
919
- # objects. The first object is a modified dataset where the filter has been
920
- # replaced with one that uses bound variable placeholders. The second object
921
- # is the hash of unbound variables. You can then prepare and execute (or just
922
- # call) the dataset with the bound variables to get results.
923
- #
924
- # ds, bv = DB[:items].where(:a=>1).unbind
925
- # ds # SELECT * FROM items WHERE (a = $a)
926
- # bv # {:a => 1}
927
- # ds.call(:select, bv)
928
- def unbind
929
- Sequel::Deprecation.deprecate("Dataset#unbind", "Switch to using placeholders manually instead of unbinding them")
930
- u = Unbinder.new
931
- ds = clone(:where=>u.transform(opts[:where]), :join=>u.transform(opts[:join]))
932
- [ds, u.binds]
933
- end
934
-
935
906
  # Returns a copy of the dataset with no filters (HAVING or WHERE clause) applied.
936
907
  #
937
- # DB[:items].group(:a).having(:a=>1).where(:b).unfiltered
908
+ # DB[:items].group(:a).having(a: 1).where(:b).unfiltered
938
909
  # # SELECT * FROM items GROUP BY a
939
910
  def unfiltered
940
911
  cached_dataset(:_unfiltered_ds){clone(:where => nil, :having => nil)}
@@ -942,7 +913,7 @@ module Sequel
942
913
 
943
914
  # Returns a copy of the dataset with no grouping (GROUP or HAVING clause) applied.
944
915
  #
945
- # DB[:items].group(:a).having(:a=>1).where(:b).ungrouped
916
+ # DB[:items].group(:a).having(a: 1).where(:b).ungrouped
946
917
  # # SELECT * FROM items WHERE b
947
918
  def ungrouped
948
919
  cached_dataset(:_ungrouped_ds){clone(:group => nil, :having => nil)}
@@ -959,10 +930,10 @@ module Sequel
959
930
  # DB[:items].union(DB[:other_items])
960
931
  # # SELECT * FROM (SELECT * FROM items UNION SELECT * FROM other_items) AS t1
961
932
  #
962
- # DB[:items].union(DB[:other_items], :all=>true, :from_self=>false)
933
+ # DB[:items].union(DB[:other_items], all: true, from_self: false)
963
934
  # # SELECT * FROM items UNION ALL SELECT * FROM other_items
964
935
  #
965
- # DB[:items].union(DB[:other_items], :alias=>:i)
936
+ # DB[:items].union(DB[:other_items], alias: :i)
966
937
  # # SELECT * FROM (SELECT * FROM items UNION SELECT * FROM other_items) AS i
967
938
  def union(dataset, opts=OPTS)
968
939
  compound_clone(:union, dataset, opts)
@@ -986,18 +957,10 @@ module Sequel
986
957
  #
987
958
  # Accepts the following argument types:
988
959
  #
989
- # Hash :: list of equality/inclusion expressions
990
- # Array :: depends:
991
- # * If first member is a string, assumes the rest of the arguments
992
- # are parameters and interpolates them into the string.
993
- # * If all members are arrays of length two, treats the same way
994
- # as a hash, except it allows for duplicate keys to be
995
- # specified.
996
- # * Otherwise, treats each argument as a separate condition.
997
- # String :: taken literally
960
+ # Hash, Array of pairs :: list of equality/inclusion expressions
998
961
  # Symbol :: taken as a boolean column argument (e.g. WHERE active)
999
- # Sequel::SQL::BooleanExpression :: an existing condition expression,
1000
- # probably created using the Sequel expression filter DSL.
962
+ # Sequel::SQL::BooleanExpression, Sequel::LiteralString :: an existing condition expression, probably created
963
+ # using the Sequel expression filter DSL.
1001
964
  #
1002
965
  # where also accepts a block, which should return one of the above argument
1003
966
  # types, and is treated the same way. This block yields a virtual row object,
@@ -1008,16 +971,16 @@ module Sequel
1008
971
  #
1009
972
  # Examples:
1010
973
  #
1011
- # DB[:items].where(:id => 3)
974
+ # DB[:items].where(id: 3)
1012
975
  # # SELECT * FROM items WHERE (id = 3)
1013
976
  #
1014
- # DB[:items].where('price < ?', 100)
977
+ # DB[:items].where(Sequel.lit('price < ?', 100))
1015
978
  # # SELECT * FROM items WHERE price < 100
1016
979
  #
1017
980
  # DB[:items].where([[:id, [1,2,3]], [:id, 0..10]])
1018
981
  # # SELECT * FROM items WHERE ((id IN (1, 2, 3)) AND ((id >= 0) AND (id <= 10)))
1019
982
  #
1020
- # DB[:items].where('price < 100')
983
+ # DB[:items].where(Sequel.lit('price < 100'))
1021
984
  # # SELECT * FROM items WHERE price < 100
1022
985
  #
1023
986
  # DB[:items].where(:active)
@@ -1028,7 +991,7 @@ module Sequel
1028
991
  #
1029
992
  # Multiple where calls can be chained for scoping:
1030
993
  #
1031
- # software = dataset.where(:category => 'software').where{price < 100}
994
+ # software = dataset.where(category: 'software').where{price < 100}
1032
995
  # # SELECT * FROM items WHERE ((category = 'software') AND (price < 100))
1033
996
  #
1034
997
  # See the {"Dataset Filtering" guide}[rdoc-ref:doc/dataset_filtering.rdoc] for more examples and details.
@@ -1042,7 +1005,7 @@ module Sequel
1042
1005
  # :args :: Specify the arguments/columns for the CTE, should be an array of symbols.
1043
1006
  # :recursive :: Specify that this is a recursive CTE
1044
1007
  #
1045
- # DB[:items].with(:items, DB[:syx].where(:name.like('A%')))
1008
+ # DB[:items].with(:items, DB[:syx].where(Sequel[:name].like('A%')))
1046
1009
  # # WITH items AS (SELECT * FROM syx WHERE (name LIKE 'A%' ESCAPE '\')) SELECT * FROM items
1047
1010
  def with(name, dataset, opts=OPTS)
1048
1011
  raise(Error, 'This dataset does not support common table expressions') unless supports_cte?
@@ -1061,15 +1024,15 @@ module Sequel
1061
1024
  # :union_all :: Set to false to use UNION instead of UNION ALL combining the nonrecursive and recursive parts.
1062
1025
  #
1063
1026
  # DB[:t].with_recursive(:t,
1064
- # DB[:i1].select(:id, :parent_id).where(:parent_id=>nil),
1065
- # DB[:i1].join(:t, :id=>:parent_id).select(:i1__id, :i1__parent_id),
1027
+ # DB[:i1].select(:id, :parent_id).where(parent_id: nil),
1028
+ # DB[:i1].join(:t, id: :parent_id).select(Sequel[:i1][:id], Sequel[:i1][:parent_id]),
1066
1029
  # :args=>[:id, :parent_id])
1067
1030
  #
1068
- # # WITH RECURSIVE "t"("id", "parent_id") AS (
1069
- # # SELECT "id", "parent_id" FROM "i1" WHERE ("parent_id" IS NULL)
1031
+ # # WITH RECURSIVE t(id, parent_id) AS (
1032
+ # # SELECT id, parent_id FROM i1 WHERE (parent_id IS NULL)
1070
1033
  # # UNION ALL
1071
- # # SELECT "i1"."id", "i1"."parent_id" FROM "i1" INNER JOIN "t" ON ("t"."id" = "i1"."parent_id")
1072
- # # ) SELECT * FROM "t"
1034
+ # # SELECT i1.id, i1.parent_id FROM i1 INNER JOIN t ON (t.id = i1.parent_id)
1035
+ # # ) SELECT * FROM t
1073
1036
  def with_recursive(name, nonrecursive, recursive, opts=OPTS)
1074
1037
  raise(Error, 'This datatset does not support common table expressions') unless supports_cte?
1075
1038
  if hoist_cte?(nonrecursive)
@@ -1093,7 +1056,7 @@ module Sequel
1093
1056
  c = _clone(:freeze=>false)
1094
1057
  c.extend(*mods) unless mods.empty?
1095
1058
  c.extend(DatasetModule.new(&block)) if block
1096
- c.freeze if frozen? # SEQUEL5: Remove if frozen?
1059
+ c.freeze
1097
1060
  c
1098
1061
  end
1099
1062
  else
@@ -1111,7 +1074,7 @@ module Sequel
1111
1074
  #
1112
1075
  # ds = DB[:items]
1113
1076
  # ds.all # => [{:id=>2}]
1114
- # ds.with_row_proc(proc(&:invert)).all # => [{2=>:id}]
1077
+ # ds.with_row_proc(:invert.to_proc).all # => [{2=>:id}]
1115
1078
  def with_row_proc(callable)
1116
1079
  clone(:row_proc=>callable)
1117
1080
  end
@@ -1132,7 +1095,7 @@ module Sequel
1132
1095
  # Note that datasets that specify custom SQL using this method will generally
1133
1096
  # ignore future dataset methods that modify the SQL used, as specifying custom SQL
1134
1097
  # overrides Sequel's SQL generator. You should probably limit yourself to the following
1135
- # dataset methods when using this method:
1098
+ # dataset methods when using this method, or use the implicit_subquery extension:
1136
1099
  #
1137
1100
  # * each
1138
1101
  # * all
@@ -1146,13 +1109,9 @@ module Sequel
1146
1109
  # * update (if an UPDATE statement, with no arguments)
1147
1110
  # * insert (if an INSERT statement, with no arguments)
1148
1111
  # * truncate (if a TRUNCATE statement, with no arguments)
1149
- #
1150
- # If you want to use arbitrary dataset methods on a dataset that uses custom SQL, call
1151
- # from_self on the dataset, which wraps the custom SQL in a subquery, and allows normal
1152
- # dataset methods that modify the SQL to work.
1153
1112
  def with_sql(sql, *args)
1154
1113
  if sql.is_a?(Symbol)
1155
- sql = send(sql, *args)
1114
+ sql = public_send(sql, *args)
1156
1115
  else
1157
1116
  sql = SQL::PlaceholderLiteralString.new(sql, args) unless args.empty?
1158
1117
  end
@@ -1220,30 +1179,18 @@ module Sequel
1220
1179
 
1221
1180
  def add_filter(clause, cond, invert=false, combine=:AND, &block)
1222
1181
  if cond == EMPTY_ARRAY && !block
1223
- Sequel::Deprecation.deprecate("Passing no arguments and no block to a filtering method", "Include at least one argument or a block when calling a filtering method")
1224
- #raise Error, "must provide an argument to a filtering method if not passing a block" # SEQUEL5
1182
+ raise Error, "must provide an argument to a filtering method if not passing a block"
1225
1183
  end
1226
1184
 
1227
1185
  cond = cond.first if cond.size == 1
1228
1186
 
1229
1187
  empty = cond == OPTS || cond == EMPTY_ARRAY
1230
- old_empty = cond.respond_to?(:empty?) && cond.empty?
1231
- if old_empty && !empty
1232
- Sequel::Deprecation.deprecate("Treating #{cond.inspect} as a empty filter expression", "Only {} and [] are considered empty expressions now")
1233
- empty = true
1234
- end
1235
1188
 
1236
1189
  if empty && !block
1237
- clone
1190
+ self
1238
1191
  else
1239
1192
  if cond == nil
1240
- if block
1241
- Sequel::Deprecation.deprecate("Ignoring explicit nil argument when passing a block to a filtering method", "Do not pass an explicit nil argument to the filtering method, only pass the block")
1242
- end
1243
- unless @opts[clause]
1244
- Sequel::Deprecation.deprecate("Ignoring explicit nil argument to a filtering method if dataset has no explicit filter", "Starting in Sequel 5, this will add a NULL condition")
1245
- end
1246
- #cond = Sequel::NULL # SEQUEL5
1193
+ cond = Sequel::NULL
1247
1194
  end
1248
1195
  if empty && block
1249
1196
  cond = nil
@@ -1256,17 +1203,6 @@ module Sequel
1256
1203
  end
1257
1204
  end
1258
1205
 
1259
- # :nocov:
1260
- def _filter_or_exclude(invert, clause, *cond, &block)
1261
- Sequel::Deprecation.deprecate("Sequel::Dataset#_filter/_filter_or_exclude (private methods)", "Switch to calling a public dataset filtering method directly")
1262
- add_filter(clause, cond, invert, &block)
1263
- end
1264
-
1265
- def _filter(clause, *cond, &block)
1266
- _filter_or_exclude(false, clause, *cond, &block)
1267
- end
1268
- # :nocov:
1269
-
1270
1206
  # The default :qualify option to use for join tables if one is not specified.
1271
1207
  def default_join_table_qualification
1272
1208
  :symbol
@@ -1290,22 +1226,13 @@ module Sequel
1290
1226
  when Array
1291
1227
  if Sequel.condition_specifier?(expr)
1292
1228
  SQL::BooleanExpression.from_value_pairs(expr)
1293
- #else # SEQUEL5
1294
- # raise(Error, "Invalid filter expression: #{expr.inspect}")
1295
- elsif (sexpr = expr[0]).is_a?(String)
1296
- Sequel::Deprecation.deprecate("Calling a dataset filtering method with multiple arguments or an array where the first argument/element is a string", "Use Sequel.lit(#{sexpr.inspect}#{", #{expr[1..-1].map(&:inspect).join(', ')}" if expr.length > 1}) to create an SQL fragment expression and pass that to the dataset filtering method, or use the auto_literal_strings extension")
1297
- SQL::PlaceholderLiteralString.new(sexpr, expr[1..-1], true)
1298
1229
  else
1299
- Sequel::Deprecation.deprecate("Passing multiple arguments as filter arguments when not using a conditions specifier (#{expr.inspect})", "Pass the arguments to separate filter methods or use Sequel.& to combine them")
1300
- SQL::BooleanExpression.new(:AND, *expr.map{|x| filter_expr(x)})
1230
+ raise Error, "Invalid filter expression: #{expr.inspect}"
1301
1231
  end
1302
- when Proc
1303
- Sequel::Deprecation.deprecate("Passing Proc objects as filter arguments", "Pass them as blocks to the filtering methods or to Sequel.expr")
1304
- filter_expr(Sequel.virtual_row(&expr))
1305
1232
  when LiteralString
1306
1233
  LiteralString.new("(#{expr})")
1307
- when Numeric, SQL::NumericExpression, SQL::StringExpression #, Proc, String # SEQUEL5
1308
- raise(Error, "Invalid filter expression: #{expr.inspect}")
1234
+ when Numeric, SQL::NumericExpression, SQL::StringExpression, Proc, String
1235
+ raise Error, "Invalid filter expression: #{expr.inspect}"
1309
1236
  when TrueClass, FalseClass
1310
1237
  if supports_where_true?
1311
1238
  SQL::BooleanExpression.new(:NOOP, expr)
@@ -1314,9 +1241,6 @@ module Sequel
1314
1241
  else
1315
1242
  SQL::Constants::SQLFALSE
1316
1243
  end
1317
- when String
1318
- Sequel::Deprecation.deprecate("Calling a dataset filtering method with a plain string", "Use Sequel.lit(#{expr.inspect}) to create a literal string and pass that to the dataset filtering method, or use the auto_literal_strings extension")
1319
- LiteralString.new("(#{expr})")
1320
1244
  when PlaceholderLiteralizer::Argument
1321
1245
  expr.transform{|v| filter_expr(v)}
1322
1246
  when SQL::PlaceholderLiteralString
@@ -1361,14 +1285,6 @@ module Sequel
1361
1285
  server?(:default)
1362
1286
  end
1363
1287
 
1364
- # SEQUEL5: Remove
1365
- def non_sql_options
1366
- # :nocov:
1367
- Sequel::Deprecation.deprecate("Dataset#non_sql_options (private method)", "Convert the related code to use the non_sql_option? method")
1368
- NON_SQL_OPTIONS
1369
- # :nocov:
1370
- end
1371
-
1372
1288
  # Whether the given option key does not affect the generated SQL.
1373
1289
  def non_sql_option?(key)
1374
1290
  NON_SQL_OPTIONS.include?(key)