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,43 +1,15 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel.require 'adapters/utils/emulate_offset_with_row_number'
3
+ require_relative '../utils/emulate_offset_with_row_number'
4
4
 
5
5
  module Sequel
6
6
  module DB2
7
7
  Sequel::Database.set_shared_adapter_scheme(:db2, self)
8
8
 
9
- # SEQUEL5: Remove
10
- @use_clob_as_blob = false
11
- class << self
12
- def use_clob_as_blob
13
- Sequel::Deprecation.deprecate("Sequel::DB2.use_clob_as_blob", "Call this method on the Database instance")
14
- @use_clob_as_blob
15
- end
16
- def use_clob_as_blob=(v)
17
- Sequel::Deprecation.deprecate("Sequel::DB2.use_clob_as_blob=", "Call this method on the Database instance")
18
- @use_clob_as_blob = v
19
- end
20
- end
21
-
22
9
  module DatabaseMethods
23
- AUTOINCREMENT = 'GENERATED ALWAYS AS IDENTITY'.freeze
24
- Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
25
- NOT_NULL = ' NOT NULL'.freeze
26
- Sequel::Deprecation.deprecate_constant(self, :NOT_NULL)
27
- NULL = ''.freeze
28
- Sequel::Deprecation.deprecate_constant(self, :NULL)
29
-
30
10
  # Whether to use clob as the generic File type, false by default.
31
- #attr_accessor :use_clob_as_blob # SEQUEL5
11
+ attr_accessor :use_clob_as_blob
32
12
 
33
- # SEQUEL5: Remove
34
- attr_writer :use_clob_as_blob
35
- def use_clob_as_blob
36
- v = @use_clob_as_blob
37
- v.nil? ? Sequel::DB2.instance_variable_get(:@use_clob_as_blob) : v
38
- end
39
-
40
- # DB2 always uses :db2 as it's database type
41
13
  def database_type
42
14
  :db2
43
15
  end
@@ -145,7 +117,6 @@ module Sequel
145
117
 
146
118
  private
147
119
 
148
- # Handle DB2 specific alter table operations.
149
120
  def alter_table_sql(table, op)
150
121
  case op[:op]
151
122
  when :add_column
@@ -302,36 +273,7 @@ module Sequel
302
273
  module DatasetMethods
303
274
  include EmulateOffsetWithRowNumber
304
275
 
305
- BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}#.freeze # SEQUEL5
306
-
307
- PAREN_CLOSE = ')'.freeze
308
- Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
309
- PAREN_OPEN = '('.freeze
310
- Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
311
- BOOL_TRUE = '1'.freeze
312
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
313
- BOOL_FALSE = '0'.freeze
314
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
315
- CAST_STRING_OPEN = "RTRIM(CHAR(".freeze
316
- Sequel::Deprecation.deprecate_constant(self, :CAST_STRING_OPEN)
317
- CAST_STRING_CLOSE = "))".freeze
318
- Sequel::Deprecation.deprecate_constant(self, :CAST_STRING_CLOSE)
319
- FETCH_FIRST_ROW_ONLY = " FETCH FIRST ROW ONLY".freeze
320
- Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST_ROW_ONLY)
321
- FETCH_FIRST = " FETCH FIRST ".freeze
322
- Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST)
323
- ROWS_ONLY = " ROWS ONLY".freeze
324
- Sequel::Deprecation.deprecate_constant(self, :ROWS_ONLY)
325
- EMPTY_FROM_TABLE = ' FROM "SYSIBM"."SYSDUMMY1"'.freeze
326
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_FROM_TABLE)
327
- HSTAR = "H*".freeze
328
- Sequel::Deprecation.deprecate_constant(self, :HSTAR)
329
- BLOB_OPEN = "BLOB(X'".freeze
330
- Sequel::Deprecation.deprecate_constant(self, :BLOB_OPEN)
331
- BLOB_CLOSE = "')".freeze
332
- Sequel::Deprecation.deprecate_constant(self, :BLOB_CLOSE)
333
- EMULATED_FUNCTION_MAP = {:char_length=>'length'.freeze}
334
- Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
276
+ BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}.freeze
335
277
 
336
278
  # DB2 casts strings using RTRIM and CHAR instead of VARCHAR.
337
279
  def cast_sql_append(sql, expr, type)
@@ -1,39 +1,19 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel.require %w'emulate_offset_with_row_number split_alter_table', 'adapters/utils'
3
+ require_relative '../utils/emulate_offset_with_row_number'
4
+ require_relative '../utils/split_alter_table'
4
5
 
5
6
  module Sequel
6
7
  module MSSQL
7
8
  Sequel::Database.set_shared_adapter_scheme(:mssql, self)
8
9
 
9
10
  def self.mock_adapter_setup(db)
10
- db.instance_eval do
11
+ db.instance_exec do
11
12
  @server_version = 11000000
12
13
  end
13
14
  end
14
15
 
15
16
  module DatabaseMethods
16
- AUTO_INCREMENT = 'IDENTITY(1,1)'.freeze
17
- Sequel::Deprecation.deprecate_constant(self, :AUTO_INCREMENT)
18
- SERVER_VERSION_RE = /^(\d+)\.(\d+)\.(\d+)/.freeze
19
- Sequel::Deprecation.deprecate_constant(self, :SERVER_VERSION_RE)
20
- SERVER_VERSION_SQL = "SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar)".freeze
21
- Sequel::Deprecation.deprecate_constant(self, :SERVER_VERSION_SQL)
22
- SQL_BEGIN = "BEGIN TRANSACTION".freeze
23
- Sequel::Deprecation.deprecate_constant(self, :SQL_BEGIN)
24
- SQL_COMMIT = "COMMIT TRANSACTION".freeze
25
- Sequel::Deprecation.deprecate_constant(self, :SQL_COMMIT)
26
- SQL_ROLLBACK = "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION".freeze
27
- Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK)
28
- SQL_ROLLBACK_TO_SAVEPOINT = 'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION autopoint_%d'.freeze
29
- Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK_TO_SAVEPOINT)
30
- SQL_SAVEPOINT = 'SAVE TRANSACTION autopoint_%d'.freeze
31
- Sequel::Deprecation.deprecate_constant(self, :SQL_SAVEPOINT)
32
- MSSQL_DEFAULT_RE = /\A(?:\(N?('.*')\)|\(\((-?\d+(?:\.\d+)?)\)\))\z/
33
- Sequel::Deprecation.deprecate_constant(self, :MSSQL_DEFAULT_RE)
34
- DECIMAL_TYPE_RE = /number|numeric|decimal/io
35
- Sequel::Deprecation.deprecate_constant(self, :DECIMAL_TYPE_RE)
36
-
37
17
  FOREIGN_KEY_ACTION_MAP = {0 => :no_action, 1 => :cascade, 2 => :set_null, 3 => :set_default}.freeze
38
18
 
39
19
  include Sequel::Database::SplitAlterTable
@@ -42,12 +22,7 @@ module Sequel
42
22
  # strings. True by default for compatibility, can be set to false for a possible
43
23
  # performance increase. This sets the default for all datasets created from this
44
24
  # Database object.
45
- attr_reader :mssql_unicode_strings
46
-
47
- def mssql_unicode_strings=(v)
48
- @mssql_unicode_strings = v
49
- reset_default_dataset
50
- end
25
+ attr_accessor :mssql_unicode_strings
51
26
 
52
27
  # Execute the given stored procedure with the given name.
53
28
  #
@@ -67,11 +42,11 @@ module Sequel
67
42
  #
68
43
  # Examples:
69
44
  #
70
- # DB.call_mssql_sproc(:SequelTest, {:args => ['input arg', :output]})
71
- # DB.call_mssql_sproc(:SequelTest, {:args => ['input arg', [:output, 'int', 'varname']]})
45
+ # DB.call_mssql_sproc(:SequelTest, {args: ['input arg', :output]})
46
+ # DB.call_mssql_sproc(:SequelTest, {args: ['input arg', [:output, 'int', 'varname']]})
72
47
  #
73
48
  # named params:
74
- # DB.call_mssql_sproc(:SequelTest, :args => {
49
+ # DB.call_mssql_sproc(:SequelTest, args: {
75
50
  # 'input_arg1_name' => 'input arg1 value',
76
51
  # 'input_arg2_name' => 'input arg2 value',
77
52
  # 'output_arg_name' => [:output, 'int', 'varname']
@@ -90,7 +65,7 @@ module Sequel
90
65
  method = :each_with_index
91
66
  end
92
67
 
93
- args.send(method) do |v, i|
68
+ args.public_send(method) do |v, i|
94
69
  if named_args
95
70
  k = v
96
71
  v, type, select = i
@@ -128,7 +103,6 @@ module Sequel
128
103
  ds.first
129
104
  end
130
105
 
131
- # Microsoft SQL Server uses the :mssql type.
132
106
  def database_type
133
107
  :mssql
134
108
  end
@@ -234,7 +208,7 @@ module Sequel
234
208
  dataset.send(:is_2008_or_later?)
235
209
  end
236
210
 
237
- # MSSQL supports savepoints, though it doesn't support committing/releasing them savepoint
211
+ # MSSQL supports savepoints, though it doesn't support releasing them
238
212
  def supports_savepoints?
239
213
  true
240
214
  end
@@ -276,7 +250,6 @@ module Sequel
276
250
  'IDENTITY(1,1)'
277
251
  end
278
252
 
279
- # MSSQL specific syntax for altering tables.
280
253
  def alter_table_sql(table, op)
281
254
  case op[:op]
282
255
  when :add_column
@@ -316,12 +289,10 @@ module Sequel
316
289
  end
317
290
  end
318
291
 
319
- # SQL to start a new savepoint
320
292
  def begin_savepoint_sql(depth)
321
293
  "SAVE TRANSACTION autopoint_#{depth}"
322
294
  end
323
295
 
324
- # SQL to BEGIN a transaction.
325
296
  def begin_transaction_sql
326
297
  "BEGIN TRANSACTION"
327
298
  end
@@ -339,13 +310,11 @@ module Sequel
339
310
  super(default, type)
340
311
  end
341
312
 
342
- # Commit the active transaction on the connection, does not commit/release
343
- # savepoints.
313
+ # Commit the active transaction on the connection, does not release savepoints.
344
314
  def commit_transaction(conn, opts=OPTS)
345
315
  log_connection_execute(conn, commit_transaction_sql) unless savepoint_level(conn) > 1
346
316
  end
347
317
 
348
- # SQL to COMMIT a transaction.
349
318
  def commit_transaction_sql
350
319
  "COMMIT TRANSACTION"
351
320
  end
@@ -389,12 +358,10 @@ module Sequel
389
358
  end
390
359
  end
391
360
 
392
- # The SQL to drop an index for the table.
393
361
  def drop_index_sql(table, op)
394
362
  "DROP INDEX #{quote_identifier(op[:name] || default_index_name(table, op[:columns]))} ON #{quote_schema_table(table)}"
395
363
  end
396
364
 
397
- # support for clustered index type
398
365
  def index_definition_sql(table_name, index)
399
366
  index_name = index[:name] || default_index_name(table_name, index[:columns])
400
367
  raise Error, "Partial indexes are not supported for this database" if index[:where] && !supports_partial_indexes?
@@ -424,17 +391,14 @@ module Sequel
424
391
  "sp_rename #{literal(quote_schema_table(name))}, #{quote_identifier(schema_and_table(new_name).pop)}"
425
392
  end
426
393
 
427
- # SQL to rollback to a savepoint
428
394
  def rollback_savepoint_sql(depth)
429
395
  "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION autopoint_#{depth}"
430
396
  end
431
397
 
432
- # SQL to ROLLBACK a transaction.
433
398
  def rollback_transaction_sql
434
399
  "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION"
435
400
  end
436
401
 
437
- # The closest MSSQL equivalent of a boolean datatype is the bit type.
438
402
  def schema_column_type(db_type)
439
403
  case db_type
440
404
  when /\A(?:bit)\z/io
@@ -537,111 +501,15 @@ module Sequel
537
501
  end)
538
502
  include EmulateOffsetWithRowNumber
539
503
 
540
- CONSTANT_MAP = {:CURRENT_DATE=>'CAST(CURRENT_TIMESTAMP AS DATE)'.freeze, :CURRENT_TIME=>'CAST(CURRENT_TIMESTAMP AS TIME)'.freeze}#.freeze # SEQUEL5
541
- EXTRACT_MAP = {:year=>"yy", :month=>"m", :day=>"d", :hour=>"hh", :minute=>"n", :second=>"s"}#.freeze # SEQUEL5
542
- #EXTRACT_MAP.each_value(&:freeze) # SEQUEL5
504
+ CONSTANT_MAP = {:CURRENT_DATE=>'CAST(CURRENT_TIMESTAMP AS DATE)'.freeze, :CURRENT_TIME=>'CAST(CURRENT_TIMESTAMP AS TIME)'.freeze}.freeze
505
+ EXTRACT_MAP = {:year=>"yy", :month=>"m", :day=>"d", :hour=>"hh", :minute=>"n", :second=>"s"}.freeze
506
+ EXTRACT_MAP.each_value(&:freeze)
543
507
  LIMIT_ALL = Object.new.freeze
544
508
 
545
- BOOL_TRUE = '1'.freeze
546
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
547
- BOOL_FALSE = '0'.freeze
548
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
549
- COMMA_SEPARATOR = ', '.freeze
550
- Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
551
- TABLE_HINT = " WITH (".freeze
552
- Sequel::Deprecation.deprecate_constant(self, :TABLE_HINT)
553
- READPAST = "READPAST".freeze
554
- Sequel::Deprecation.deprecate_constant(self, :READPAST)
555
- NOLOCK = 'NOLOCK'.freeze
556
- Sequel::Deprecation.deprecate_constant(self, :NOLOCK)
557
- UPDLOCK = 'UPDLOCK'.freeze
558
- Sequel::Deprecation.deprecate_constant(self, :UPDLOCK)
559
- WILDCARD = LiteralString.new('*').freeze
560
- Sequel::Deprecation.deprecate_constant(self, :WILDCARD)
561
- BRACKET_CLOSE = ']'.freeze
562
- Sequel::Deprecation.deprecate_constant(self, :BRACKET_CLOSE)
563
- BRACKET_OPEN = '['.freeze
564
- Sequel::Deprecation.deprecate_constant(self, :BRACKET_OPEN)
565
- COMMA = ', '.freeze
566
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
567
- PAREN_CLOSE = ')'.freeze
568
- Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
569
- PAREN_SPACE_OPEN = ' ('.freeze
570
- Sequel::Deprecation.deprecate_constant(self, :PAREN_SPACE_OPEN)
571
- SPACE = ' '.freeze
572
- Sequel::Deprecation.deprecate_constant(self, :SPACE)
573
- FROM = ' FROM '.freeze
574
- Sequel::Deprecation.deprecate_constant(self, :FROM)
575
- APOS = "'".freeze
576
- Sequel::Deprecation.deprecate_constant(self, :APOS)
577
- APOS_RE = /'/.freeze
578
- Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
579
- DOUBLE_APOS = "''".freeze
580
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
581
- INTO = " INTO ".freeze
582
- Sequel::Deprecation.deprecate_constant(self, :INTO)
583
- DOUBLE_BRACKET_CLOSE = ']]'.freeze
584
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_BRACKET_CLOSE)
585
- DATEPART_SECOND_OPEN = "CAST((datepart(".freeze
586
- Sequel::Deprecation.deprecate_constant(self, :DATEPART_SECOND_OPEN)
587
- DATEPART_SECOND_MIDDLE = ') + datepart(ns, '.freeze
588
- Sequel::Deprecation.deprecate_constant(self, :DATEPART_SECOND_MIDDLE)
589
- DATEPART_SECOND_CLOSE = ")/1000000000.0) AS double precision)".freeze
590
- Sequel::Deprecation.deprecate_constant(self, :DATEPART_SECOND_CLOSE)
591
- DATEPART_OPEN = "datepart(".freeze
592
- Sequel::Deprecation.deprecate_constant(self, :DATEPART_OPEN)
593
- OUTPUT_INSERTED = " OUTPUT INSERTED.*".freeze
594
- Sequel::Deprecation.deprecate_constant(self, :OUTPUT_INSERTED)
595
- HEX_START = '0x'.freeze
596
- Sequel::Deprecation.deprecate_constant(self, :HEX_START)
597
- UNICODE_STRING_START = "N'".freeze
598
- Sequel::Deprecation.deprecate_constant(self, :UNICODE_STRING_START)
599
- BACKSLASH_CRLF_RE = /\\((?:\r\n)|\n)/.freeze
600
- Sequel::Deprecation.deprecate_constant(self, :BACKSLASH_CRLF_RE)
601
- BACKSLASH_CRLF_REPLACE = '\\\\\\\\\\1\\1'.freeze
602
- Sequel::Deprecation.deprecate_constant(self, :BACKSLASH_CRLF_REPLACE)
603
- TOP_PAREN = " TOP (".freeze
604
- Sequel::Deprecation.deprecate_constant(self, :TOP_PAREN)
605
- TOP = " TOP ".freeze
606
- Sequel::Deprecation.deprecate_constant(self, :TOP)
607
- OUTPUT = " OUTPUT ".freeze
608
- Sequel::Deprecation.deprecate_constant(self, :OUTPUT)
609
- HSTAR = "H*".freeze
610
- Sequel::Deprecation.deprecate_constant(self, :HSTAR)
611
- CASE_SENSITIVE_COLLATION = 'Latin1_General_CS_AS'.freeze
612
- Sequel::Deprecation.deprecate_constant(self, :CASE_SENSITIVE_COLLATION)
613
- CASE_INSENSITIVE_COLLATION = 'Latin1_General_CI_AS'.freeze
614
- Sequel::Deprecation.deprecate_constant(self, :CASE_INSENSITIVE_COLLATION)
615
- DEFAULT_TIMESTAMP_FORMAT = "'%Y-%m-%dT%H:%M:%S%N%z'".freeze
616
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_TIMESTAMP_FORMAT)
617
- FORMAT_DATE = "'%Y%m%d'".freeze
618
- Sequel::Deprecation.deprecate_constant(self, :FORMAT_DATE)
619
- CROSS_APPLY = 'CROSS APPLY'.freeze
620
- Sequel::Deprecation.deprecate_constant(self, :CROSS_APPLY)
621
- OUTER_APPLY = 'OUTER APPLY'.freeze
622
- Sequel::Deprecation.deprecate_constant(self, :OUTER_APPLY)
623
- OFFSET = " OFFSET ".freeze
624
- Sequel::Deprecation.deprecate_constant(self, :OFFSET)
625
- ROWS = " ROWS".freeze
626
- Sequel::Deprecation.deprecate_constant(self, :ROWS)
627
- ROWS_ONLY = " ROWS ONLY".freeze
628
- Sequel::Deprecation.deprecate_constant(self, :ROWS_ONLY)
629
- FETCH_NEXT = " FETCH NEXT ".freeze
630
- Sequel::Deprecation.deprecate_constant(self, :FETCH_NEXT)
631
- NON_SQL_OPTIONS = (Dataset::NON_SQL_OPTIONS + [:disable_insert_output, :mssql_unicode_strings]).freeze
632
- Sequel::Deprecation.deprecate_constant(self, :NON_SQL_OPTIONS)
633
-
634
- Dataset.def_mutation_method(:disable_insert_output, :output, :module=>self)
635
509
  Dataset.def_sql_method(self, :delete, %w'with delete limit from output from2 where')
636
510
  Dataset.def_sql_method(self, :insert, %w'with insert into columns output values')
637
511
  Dataset.def_sql_method(self, :update, [['if is_2005_or_later?', %w'with update limit table set output from where'], ['else', %w'update table set output from where']])
638
512
 
639
- # Allow overriding of the mssql_unicode_strings option at the dataset level.
640
- def mssql_unicode_strings=(v)
641
- Sequel::Deprecation.deprecate("Dataset#mssql_unicode_strings=", "Switch to using with_mssql_unicode_strings, which returns a modified copy")
642
- @opts[:mssql_unicode_strings] = v
643
- end
644
-
645
513
  # Use the database's mssql_unicode_strings setting if the dataset hasn't overridden it.
646
514
  def mssql_unicode_strings
647
515
  opts.has_key?(:mssql_unicode_strings) ? opts[:mssql_unicode_strings] : db.mssql_unicode_strings
@@ -652,7 +520,6 @@ module Sequel
652
520
  clone(:mssql_unicode_strings=>v)
653
521
  end
654
522
 
655
- # MSSQL uses + for string concatenation, and LIKE is case insensitive by default.
656
523
  def complex_expression_sql_append(sql, op, args)
657
524
  case op
658
525
  when :'||'
@@ -751,8 +618,8 @@ module Sequel
751
618
  #
752
619
  # Examples:
753
620
  #
754
- # dataset.output(:output_table, [:deleted__id, :deleted__name])
755
- # dataset.output(:output_table, :id => :inserted__id, :name => :inserted__name)
621
+ # dataset.output(:output_table, [Sequel[:deleted][:id], Sequel[:deleted][:name]])
622
+ # dataset.output(:output_table, id: Sequel[:inserted][:id], name: Sequel[:inserted][:name])
756
623
  def output(into, values)
757
624
  raise(Error, "SQL Server versions 2000 and earlier do not support the OUTPUT clause") unless supports_output_clause?
758
625
  output = {}
@@ -897,7 +764,7 @@ module Sequel
897
764
  end
898
765
  end
899
766
 
900
- # MSSQL does not allow ordering in sub-clauses unless 'top' (limit) is specified
767
+ # MSSQL does not allow ordering in sub-clauses unless TOP (limit) is specified
901
768
  def aggregate_dataset
902
769
  (options_overlap(Sequel::Dataset::COUNT_FROM_SELF_OPTS) && !options_overlap([:limit])) ? unordered.from_self : super
903
770
  end
@@ -924,9 +791,7 @@ module Sequel
924
791
  # Allow update and delete for unordered, limited datasets only.
925
792
  def check_not_limited!(type)
926
793
  return if @opts[:skip_limit_check] && type != :truncate
927
- #SEQUEL5
928
- #raise Sequel::InvalidOperation, "Dataset##{type} not suppored on ordered, limited datasets" if opts[:order] && opts[:limit]
929
- Sequel::Deprecation.deprecate("Dataset##{type} on ordered, limited datasets", "Call unlimited to not use a limit, or unordered to not use an order, or skip_limit_check to ignore the limit") if @opts[:order] && @opts[:limit]
794
+ raise Sequel::InvalidOperation, "Dataset##{type} not suppored on ordered, limited datasets" if opts[:order] && opts[:limit]
930
795
  super if type == :truncate || @opts[:offset]
931
796
  end
932
797
 
@@ -988,7 +853,7 @@ module Sequel
988
853
  end
989
854
  end
990
855
 
991
- # Microsoft SQL Server 2012 has native support for offsets, but only for ordered datasets.
856
+ # Microsoft SQL Server 2012+ has native support for offsets, but only for ordered datasets.
992
857
  def emulate_offset_with_row_number?
993
858
  super && !(is_2012_or_later? && @opts[:order])
994
859
  end
@@ -1021,7 +886,7 @@ module Sequel
1021
886
  sql << '0x' << v.unpack("H*").first
1022
887
  end
1023
888
 
1024
- # Use YYYYmmdd format, since that's the only want that is
889
+ # Use YYYYmmdd format, since that's the only format that is
1025
890
  # multilanguage and not DATEFORMAT dependent.
1026
891
  def literal_date(v)
1027
892
  v.strftime("'%Y%m%d'")
@@ -1061,7 +926,7 @@ module Sequel
1061
926
  end
1062
927
  end
1063
928
 
1064
- # MSSQL uses TOP N for limit. For MSSQL 2005+ TOP (N) is used
929
+ # MSSQL 2000 uses TOP N for limit. For MSSQL 2005+ TOP (N) is used
1065
930
  # to allow the limit to be a bound variable.
1066
931
  def select_limit_sql(sql)
1067
932
  if l = @opts[:limit]
@@ -1092,7 +957,7 @@ module Sequel
1092
957
  end
1093
958
  alias delete_limit_sql update_limit_sql
1094
959
 
1095
- # Support different types of locking styles
960
+ # Handle dirty, skip locked, and for update locking
1096
961
  def select_lock_sql(sql)
1097
962
  lock = @opts[:lock]
1098
963
  skip_locked = @opts[:skip_locked]
@@ -1144,7 +1009,6 @@ module Sequel
1144
1009
  end
1145
1010
  end
1146
1011
 
1147
- # SQL fragment for MSSQL's OUTPUT clause.
1148
1012
  def output_sql(sql, type)
1149
1013
  return unless supports_output_clause?
1150
1014
  if output = @opts[:output]
@@ -1,105 +1,37 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel.require %w'replace split_alter_table unmodified_identifiers', 'adapters/utils'
3
+ require_relative '../utils/replace'
4
+ require_relative '../utils/split_alter_table'
5
+ require_relative '../utils/unmodified_identifiers'
4
6
 
5
7
  module Sequel
6
8
  module MySQL
7
9
  Sequel::Database.set_shared_adapter_scheme(:mysql, self)
8
10
 
9
11
  def self.mock_adapter_setup(db)
10
- db.instance_eval do
12
+ db.instance_exec do
11
13
  @server_version = 50617
12
14
  end
13
15
  end
14
16
 
15
- # SEQUEL5: Remove
16
- @convert_tinyint_to_bool = true
17
- @default_charset = nil
18
- @default_collate = nil
19
- @default_engine = nil
20
- class << self
21
- def convert_tinyint_to_bool
22
- Sequel::Deprecation.deprecate("Sequel::MySQL.convert_tinyint_to_bool", "Call this method on the Database instance")
23
- @convert_tinyint_to_bool
24
- end
25
- def convert_tinyint_to_bool=(v)
26
- Sequel::Deprecation.deprecate("Sequel::MySQL.convert_tinyint_to_bool=", "Call this method on the Database instance")
27
- @convert_tinyint_to_bool = v
28
- end
29
-
30
- def default_charset
31
- Sequel::Deprecation.deprecate("Sequel::MySQL.default_charset", "Call this method on the Database instance")
32
- @default_charset
33
- end
34
- def default_charset=(v)
35
- Sequel::Deprecation.deprecate("Sequel::MySQL.default_charset=", "Call this method on the Database instance")
36
- @default_charset = v
37
- end
38
-
39
- def default_collate
40
- Sequel::Deprecation.deprecate("Sequel::MySQL.default_collate", "Call this method on the Database instance")
41
- @default_collate
42
- end
43
- def default_collate=(v)
44
- Sequel::Deprecation.deprecate("Sequel::MySQL.default_collate=", "Call this method on the Database instance")
45
- @default_collate = v
46
- end
47
-
48
- def default_engine
49
- Sequel::Deprecation.deprecate("Sequel::MySQL.default_engine", "Call this method on the Database instance")
50
- @default_engine
51
- end
52
- def default_engine=(v)
53
- Sequel::Deprecation.deprecate("Sequel::MySQL.default_engine=", "Call this method on the Database instance")
54
- @default_engine = v
55
- end
56
- end
57
-
58
- # Methods shared by Database instances that connect to MySQL,
59
- # currently supported by the native and JDBC adapters.
60
17
  module DatabaseMethods
61
18
  include UnmodifiedIdentifiers::DatabaseMethods
62
19
  include Sequel::Database::SplitAlterTable
63
20
 
64
- AUTO_INCREMENT = 'AUTO_INCREMENT'.freeze
65
- Sequel::Deprecation.deprecate_constant(self, :AUTO_INCREMENT)
66
- PRIMARY = 'PRIMARY'.freeze
67
- Sequel::Deprecation.deprecate_constant(self, :PRIMARY)
68
- MYSQL_TIMESTAMP_RE = /\ACURRENT_(?:DATE|TIMESTAMP)?\z/
69
- Sequel::Deprecation.deprecate_constant(self, :MYSQL_TIMESTAMP_RE)
70
-
71
- CAST_TYPES = {String=>:CHAR, Integer=>:SIGNED, Time=>:DATETIME, DateTime=>:DATETIME, Numeric=>:DECIMAL, BigDecimal=>:DECIMAL, File=>:BINARY}#.freeze # SEQUEL5
72
- COLUMN_DEFINITION_ORDER = [:collate, :null, :default, :unique, :primary_key, :auto_increment, :references]#.freeze # SEQUEL5
73
-
21
+ CAST_TYPES = {String=>:CHAR, Integer=>:SIGNED, Time=>:DATETIME, DateTime=>:DATETIME, Numeric=>:DECIMAL, BigDecimal=>:DECIMAL, File=>:BINARY}.freeze
22
+ COLUMN_DEFINITION_ORDER = [:collate, :null, :default, :unique, :primary_key, :auto_increment, :references].freeze
74
23
 
75
24
  # Set the default charset used for CREATE TABLE. You can pass the
76
25
  # :charset option to create_table to override this setting.
77
- #attr_accessor :default_charset # SEQUEL5
26
+ attr_accessor :default_charset
78
27
 
79
28
  # Set the default collation used for CREATE TABLE. You can pass the
80
29
  # :collate option to create_table to override this setting.
81
- #attr_accessor :default_collate # SEQUEL5
30
+ attr_accessor :default_collate
82
31
 
83
32
  # Set the default engine used for CREATE TABLE. You can pass the
84
33
  # :engine option to create_table to override this setting.
85
- #attr_accessor :default_engine # SEQUEL5
86
-
87
- # SEQUEL5: Remove
88
- attr_writer :default_charset
89
- def default_charset
90
- v = @default_charset
91
- v.nil? ? Sequel::MySQL.instance_variable_get(:@default_charset) : v
92
- end
93
- attr_writer :default_collate
94
- def default_collate
95
- v = @default_collate
96
- v.nil? ? Sequel::MySQL.instance_variable_get(:@default_collate) : v
97
- end
98
- attr_writer :default_engine
99
- def default_engine
100
- v = @default_engine
101
- v.nil? ? Sequel::MySQL.instance_variable_get(:@default_engine) : v
102
- end
34
+ attr_accessor :default_engine
103
35
 
104
36
  # MySQL's cast rules are restrictive in that you can't just cast to any possible
105
37
  # database type.
@@ -107,13 +39,10 @@ module Sequel
107
39
  CAST_TYPES[type] || super
108
40
  end
109
41
 
110
- # Commit an existing prepared transaction with the given transaction
111
- # identifier string.
112
42
  def commit_prepared_transaction(transaction_id, opts=OPTS)
113
43
  run("XA COMMIT #{literal(transaction_id)}", opts)
114
44
  end
115
45
 
116
- # MySQL uses the :mysql database type
117
46
  def database_type
118
47
  :mysql
119
48
  end
@@ -163,7 +92,6 @@ module Sequel
163
92
  indexes = {}
164
93
  remove_indexes = []
165
94
  m = output_identifier_meth
166
- im = input_identifier_meth
167
95
  schema, table = schema_and_table(table)
168
96
 
169
97
  table = Sequel::SQL::Identifier.new(table)
@@ -184,8 +112,6 @@ module Sequel
184
112
  indexes.reject{|k,v| remove_indexes.include?(k)}
185
113
  end
186
114
 
187
- # Rollback an existing prepared transaction with the given transaction
188
- # identifier string.
189
115
  def rollback_prepared_transaction(transaction_id, opts=OPTS)
190
116
  run("XA ROLLBACK #{literal(transaction_id)}", opts)
191
117
  end
@@ -241,16 +167,6 @@ module Sequel
241
167
  full_tables('BASE TABLE', opts)
242
168
  end
243
169
 
244
- # Changes the database in use by issuing a USE statement. I would be
245
- # very careful if I used this.
246
- def use(db_name)
247
- Sequel::Deprecation.deprecate("Database#use", "Create a new Sequel::Database instance instead of using Database#use")
248
- disconnect
249
- @opts[:database] = db_name if self << "USE #{db_name}"
250
- @schemas = {}
251
- self
252
- end
253
-
254
170
  # Return an array of symbols specifying view names in the current database.
255
171
  #
256
172
  # Options:
@@ -324,7 +240,6 @@ module Sequel
324
240
  end
325
241
  end
326
242
 
327
- # MySQL server requires table names when dropping indexes.
328
243
  def alter_table_sql(table, op)
329
244
  case op[:op]
330
245
  when :drop_index
@@ -379,7 +294,6 @@ module Sequel
379
294
  sqls
380
295
  end
381
296
 
382
- # Use MySQL specific AUTO_INCREMENT text.
383
297
  def auto_increment_sql
384
298
  'AUTO_INCREMENT'
385
299
  end
@@ -400,7 +314,6 @@ module Sequel
400
314
  end
401
315
  end
402
316
 
403
- # The order of the column definition, as an array of symbols.
404
317
  def column_definition_order
405
318
  COLUMN_DEFINITION_ORDER
406
319
  end
@@ -488,7 +401,6 @@ module Sequel
488
401
  metadata_dataset.with_sql('SHOW FULL TABLES').server(opts[:server]).map{|r| m.call(r.values.first) if r.delete(:Table_type) == type}.compact
489
402
  end
490
403
 
491
- # Handle MySQL specific index SQL syntax
492
404
  def index_definition_sql(table_name, index)
493
405
  index_name = quote_identifier(index[:name] || default_index_name(table_name, index[:columns]))
494
406
  raise Error, "Partial indexes are not supported for this database" if index[:where] && !supports_partial_indexes?
@@ -520,7 +432,6 @@ module Sequel
520
432
  end
521
433
  end
522
434
 
523
- # Recognize MySQL set type.
524
435
  def schema_column_type(db_type)
525
436
  case db_type
526
437
  when /\Aset/io
@@ -629,99 +540,6 @@ module Sequel
629
540
 
630
541
  # Dataset methods shared by datasets that use MySQL databases.
631
542
  module DatasetMethods
632
- BOOL_TRUE = '1'.freeze
633
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
634
- BOOL_FALSE = '0'.freeze
635
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
636
- COMMA_SEPARATOR = ', '.freeze
637
- Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
638
- FOR_SHARE = ' LOCK IN SHARE MODE'.freeze
639
- Sequel::Deprecation.deprecate_constant(self, :FOR_SHARE)
640
- SQL_CALC_FOUND_ROWS = ' SQL_CALC_FOUND_ROWS'.freeze
641
- Sequel::Deprecation.deprecate_constant(self, :SQL_CALC_FOUND_ROWS)
642
- APOS = "'".freeze
643
- Sequel::Deprecation.deprecate_constant(self, :APOS)
644
- APOS_RE = /'/.freeze
645
- Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
646
- DOUBLE_APOS = "''".freeze
647
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
648
- SPACE = ' '.freeze
649
- Sequel::Deprecation.deprecate_constant(self, :SPACE)
650
- PAREN_CLOSE = ')'.freeze
651
- Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
652
- PAREN_OPEN = '('.freeze
653
- Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
654
- NOT_SPACE = 'NOT '.freeze
655
- Sequel::Deprecation.deprecate_constant(self, :NOT_SPACE)
656
- FROM = ' FROM '.freeze
657
- Sequel::Deprecation.deprecate_constant(self, :FROM)
658
- COMMA = ', '.freeze
659
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
660
- LIMIT = " LIMIT ".freeze
661
- Sequel::Deprecation.deprecate_constant(self, :LIMIT)
662
- GROUP_BY = " GROUP BY ".freeze
663
- Sequel::Deprecation.deprecate_constant(self, :GROUP_BY)
664
- ESCAPE = " ESCAPE ".freeze
665
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE)
666
- BACKSLASH = "\\".freeze
667
- Sequel::Deprecation.deprecate_constant(self, :BACKSLASH)
668
- REGEXP = 'REGEXP'.freeze
669
- Sequel::Deprecation.deprecate_constant(self, :REGEXP)
670
- LIKE = 'LIKE'.freeze
671
- Sequel::Deprecation.deprecate_constant(self, :LIKE)
672
- BINARY = 'BINARY '.freeze
673
- Sequel::Deprecation.deprecate_constant(self, :BINARY)
674
- CONCAT = "CONCAT".freeze
675
- Sequel::Deprecation.deprecate_constant(self, :CONCAT)
676
- CAST_BITCOMP_OPEN = "CAST(~".freeze
677
- Sequel::Deprecation.deprecate_constant(self, :CAST_BITCOMP_OPEN)
678
- CAST_BITCOMP_CLOSE = " AS SIGNED INTEGER)".freeze
679
- Sequel::Deprecation.deprecate_constant(self, :CAST_BITCOMP_CLOSE)
680
- STRAIGHT_JOIN = 'STRAIGHT_JOIN'.freeze
681
- Sequel::Deprecation.deprecate_constant(self, :STRAIGHT_JOIN)
682
- NATURAL_LEFT_JOIN = 'NATURAL LEFT JOIN'.freeze
683
- Sequel::Deprecation.deprecate_constant(self, :NATURAL_LEFT_JOIN)
684
- BACKTICK = '`'.freeze
685
- Sequel::Deprecation.deprecate_constant(self, :BACKTICK)
686
- BACKTICK_RE = /`/.freeze
687
- Sequel::Deprecation.deprecate_constant(self, :BACKTICK_RE)
688
- DOUBLE_BACKTICK = '``'.freeze
689
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_BACKTICK)
690
- EMPTY_COLUMNS = " ()".freeze
691
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_COLUMNS)
692
- EMPTY_VALUES = " VALUES ()".freeze
693
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_VALUES)
694
- IGNORE = " IGNORE".freeze
695
- Sequel::Deprecation.deprecate_constant(self, :IGNORE)
696
- ON_DUPLICATE_KEY_UPDATE = " ON DUPLICATE KEY UPDATE ".freeze
697
- Sequel::Deprecation.deprecate_constant(self, :ON_DUPLICATE_KEY_UPDATE)
698
- EQ_VALUES = '=VALUES('.freeze
699
- Sequel::Deprecation.deprecate_constant(self, :EQ_VALUES)
700
- EQ = '='.freeze
701
- Sequel::Deprecation.deprecate_constant(self, :EQ)
702
- WITH_ROLLUP = ' WITH ROLLUP'.freeze
703
- Sequel::Deprecation.deprecate_constant(self, :WITH_ROLLUP)
704
- EXPLAIN = 'EXPLAIN '.freeze
705
- Sequel::Deprecation.deprecate_constant(self, :EXPLAIN)
706
- EXPLAIN_EXTENDED = 'EXPLAIN EXTENDED '.freeze
707
- Sequel::Deprecation.deprecate_constant(self, :EXPLAIN_EXTENDED)
708
- BACKSLASH_RE = /\\/.freeze
709
- Sequel::Deprecation.deprecate_constant(self, :BACKSLASH_RE)
710
- QUAD_BACKSLASH = "\\\\\\\\".freeze
711
- Sequel::Deprecation.deprecate_constant(self, :QUAD_BACKSLASH)
712
- BLOB_START = "0x".freeze
713
- Sequel::Deprecation.deprecate_constant(self, :BLOB_START)
714
- EMPTY_BLOB = "''".freeze
715
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_BLOB)
716
- HSTAR = "H*".freeze
717
- Sequel::Deprecation.deprecate_constant(self, :HSTAR)
718
- CURRENT_TIMESTAMP_56 = 'CURRENT_TIMESTAMP(6)'.freeze
719
- Sequel::Deprecation.deprecate_constant(self, :CURRENT_TIMESTAMP_56)
720
- ONLY_OFFSET = ",18446744073709551615".freeze
721
- Sequel::Deprecation.deprecate_constant(self, :ONLY_OFFSET)
722
- NON_SQL_OPTIONS = (Dataset::NON_SQL_OPTIONS + [:insert_ignore, :update_ignore, :on_duplicate_key_update]).freeze
723
- Sequel::Deprecation.deprecate_constant(self, :NON_SQL_OPTIONS)
724
-
725
543
  MATCH_AGAINST = ["MATCH ".freeze, " AGAINST (".freeze, ")".freeze].freeze
726
544
  MATCH_AGAINST_BOOLEAN = ["MATCH ".freeze, " AGAINST (".freeze, " IN BOOLEAN MODE)".freeze].freeze
727
545
 
@@ -733,8 +551,6 @@ module Sequel
733
551
  include Sequel::Dataset::Replace
734
552
  include UnmodifiedIdentifiers::DatasetMethods
735
553
 
736
- # MySQL specific syntax for LIKE/REGEXP searches, as well as
737
- # string concatenation.
738
554
  def complex_expression_sql_append(sql, op, args)
739
555
  case op
740
556
  when :IN, :"NOT IN"
@@ -802,10 +618,10 @@ module Sequel
802
618
  # Sets up the select methods to delete from if deleting from a
803
619
  # joined dataset:
804
620
  #
805
- # DB[:a].join(:b, :a_id=>:id).delete
621
+ # DB[:a].join(:b, a_id: :id).delete
806
622
  # # DELETE a FROM a INNER JOIN b ON (b.a_id = a.id)
807
623
  #
808
- # DB[:a].join(:b, :a_id=>:id).delete_from(:a, :b).delete
624
+ # DB[:a].join(:b, a_id: :id).delete_from(:a, :b).delete
809
625
  # # DELETE a, b FROM a INNER JOIN b ON (b.a_id = a.id)
810
626
  def delete_from(*tables)
811
627
  clone(:delete_from=>tables)
@@ -838,26 +654,10 @@ module Sequel
838
654
  SQL::PlaceholderLiteralString.new((opts[:boolean] ? MATCH_AGAINST_BOOLEAN : MATCH_AGAINST), [Array(cols), terms])
839
655
  end
840
656
 
841
- # Transforms an CROSS JOIN to an INNER JOIN if the expr is not nil.
842
- # Raises an error on use of :full_outer type, since MySQL doesn't support it.
843
- def join_table(type, table, expr=nil, opts=OPTS, &block)
844
- if (type == :cross) && !expr.nil?
845
- Sequel::Deprecation.deprecate(":cross join type with conditions being converted to INNER JOIN on MySQL", "Use :inner join type instead")
846
- type = :inner
847
- end
848
- raise(Sequel::Error, "MySQL doesn't support FULL OUTER JOIN or NATURAL FULL JOIN") if type == :full_outer || type == :natural_full
849
- super(type, table, expr, opts, &block)
850
- end
851
-
852
- # Transforms :natural_inner to NATURAL LEFT JOIN and straight to
853
- # STRAIGHT_JOIN.
657
+ # Transforms :straight to STRAIGHT_JOIN.
854
658
  def join_type_sql(join_type)
855
- case join_type
856
- when :straight
659
+ if join_type == :straight
857
660
  'STRAIGHT_JOIN'
858
- when :natural_inner
859
- Sequel::Deprecation.deprecate(":natural_inner join type being converted to NATURAL LEFT JOIN on MySQL", "Use :natural_left join type for NATURAL LEFT JOIN, or :natural join type for NATURAL JOIN")
860
- 'NATURAL LEFT JOIN'
861
661
  else
862
662
  super
863
663
  end
@@ -868,7 +668,7 @@ module Sequel
868
668
  # inserting rows that violate the unique key restriction.
869
669
  #
870
670
  # dataset.insert_ignore.multi_insert(
871
- # [{:name => 'a', :value => 1}, {:name => 'b', :value => 2}]
671
+ # [{name: 'a', value: 1}, {name: 'b', value: 2}]
872
672
  # )
873
673
  # # INSERT IGNORE INTO tablename (name, value) VALUES (a, 1), (b, 2)
874
674
  def insert_ignore
@@ -886,21 +686,21 @@ module Sequel
886
686
  # inserting rows that violate the unique key restriction.
887
687
  #
888
688
  # dataset.on_duplicate_key_update.multi_insert(
889
- # [{:name => 'a', :value => 1}, {:name => 'b', :value => 2}]
689
+ # [{name: 'a', value: 1}, {name: 'b', value: 2}]
890
690
  # )
891
691
  # # INSERT INTO tablename (name, value) VALUES (a, 1), (b, 2)
892
692
  # # ON DUPLICATE KEY UPDATE name=VALUES(name), value=VALUES(value)
893
693
  #
894
694
  # dataset.on_duplicate_key_update(:value).multi_insert(
895
- # [{:name => 'a', :value => 1}, {:name => 'b', :value => 2}]
695
+ # [{name: 'a', value: 1}, {name: 'b', value: 2}]
896
696
  # )
897
697
  # # INSERT INTO tablename (name, value) VALUES (a, 1), (b, 2)
898
698
  # # ON DUPLICATE KEY UPDATE value=VALUES(value)
899
699
  #
900
700
  # dataset.on_duplicate_key_update(
901
- # :value => Sequel.lit('value + VALUES(value)')
701
+ # value: Sequel.lit('value + VALUES(value)')
902
702
  # ).multi_insert(
903
- # [{:name => 'a', :value => 1}, {:name => 'b', :value => 2}]
703
+ # [{name: 'a', value: 1}, {name: 'b', value: 2}]
904
704
  # )
905
705
  # # INSERT INTO tablename (name, value) VALUES (a, 1), (b, 2)
906
706
  # # ON DUPLICATE KEY UPDATE value=value + VALUES(value)
@@ -945,7 +745,7 @@ module Sequel
945
745
  end
946
746
 
947
747
  # MySQL's DISTINCT ON emulation using GROUP BY does not respect the
948
- # queries ORDER BY clause.
748
+ # query's ORDER BY clause.
949
749
  def supports_ordered_distinct_on?
950
750
  false
951
751
  end
@@ -955,9 +755,8 @@ module Sequel
955
755
  true
956
756
  end
957
757
 
958
- # MySQL does support fractional timestamps in literal timestamps, but it
959
- # ignores them. Also, using them seems to cause problems on 1.9. Since
960
- # they are ignored anyway, not using them is probably best.
758
+ # Check the database setting for whether fractional timestamps
759
+ # are suppported.
961
760
  def supports_timestamp_usecs?
962
761
  db.supports_timestamp_usecs?
963
762
  end
@@ -966,7 +765,7 @@ module Sequel
966
765
  # Useful if you have a unique key and want to just skip
967
766
  # updating rows that violate the unique key restriction.
968
767
  #
969
- # dataset.update_ignore.update({:name => 'a', :value => 1})
768
+ # dataset.update_ignore.update(name: 'a', value: 1)
970
769
  # # UPDATE IGNORE tablename SET name = 'a', value = 1
971
770
  def update_ignore
972
771
  clone(:update_ignore=>true)
@@ -1105,7 +904,7 @@ module Sequel
1105
904
  '1'
1106
905
  end
1107
906
 
1108
- # MySQL supports multiple rows in INSERT.
907
+ # MySQL supports multiple rows in VALUES in INSERT.
1109
908
  def multi_insert_sql_strategy
1110
909
  :values
1111
910
  end