sequel 4.49.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +130 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +6 -9
  6. data/doc/advanced_associations.rdoc +91 -168
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.2.0.txt +33 -0
  30. data/doc/release_notes/5.3.0.txt +121 -0
  31. data/doc/schema_modification.rdoc +78 -64
  32. data/doc/security.rdoc +97 -88
  33. data/doc/sharding.rdoc +43 -30
  34. data/doc/sql.rdoc +53 -65
  35. data/doc/testing.rdoc +4 -5
  36. data/doc/thread_safety.rdoc +2 -4
  37. data/doc/transactions.rdoc +18 -17
  38. data/doc/validations.rdoc +48 -45
  39. data/doc/virtual_rows.rdoc +87 -115
  40. data/lib/sequel/adapters/ado/access.rb +7 -13
  41. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  42. data/lib/sequel/adapters/ado.rb +9 -25
  43. data/lib/sequel/adapters/amalgalite.rb +3 -18
  44. data/lib/sequel/adapters/ibmdb.rb +9 -45
  45. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  46. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  47. data/lib/sequel/adapters/jdbc/h2.rb +6 -26
  48. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
  49. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  50. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  51. data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
  52. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  53. data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
  54. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  55. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  56. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  57. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  58. data/lib/sequel/adapters/jdbc.rb +18 -74
  59. data/lib/sequel/adapters/mock.rb +4 -30
  60. data/lib/sequel/adapters/mysql.rb +7 -44
  61. data/lib/sequel/adapters/mysql2.rb +5 -23
  62. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  63. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  64. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  65. data/lib/sequel/adapters/odbc.rb +0 -19
  66. data/lib/sequel/adapters/oracle.rb +8 -13
  67. data/lib/sequel/adapters/postgres.rb +28 -150
  68. data/lib/sequel/adapters/postgresql.rb +1 -1
  69. data/lib/sequel/adapters/shared/access.rb +11 -51
  70. data/lib/sequel/adapters/shared/db2.rb +3 -61
  71. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  72. data/lib/sequel/adapters/shared/mysql.rb +61 -227
  73. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  74. data/lib/sequel/adapters/shared/postgres.rb +58 -264
  75. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  76. data/lib/sequel/adapters/shared/sqlite.rb +22 -101
  77. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  78. data/lib/sequel/adapters/sqlite.rb +2 -19
  79. data/lib/sequel/adapters/tinytds.rb +5 -15
  80. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  81. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
  82. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  83. data/lib/sequel/adapters/utils/replace.rb +0 -5
  84. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  85. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  86. data/lib/sequel/ast_transformer.rb +3 -94
  87. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  88. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  89. data/lib/sequel/connection_pool/single.rb +0 -2
  90. data/lib/sequel/connection_pool/threaded.rb +94 -110
  91. data/lib/sequel/connection_pool.rb +38 -28
  92. data/lib/sequel/core.rb +42 -101
  93. data/lib/sequel/database/connecting.rb +23 -60
  94. data/lib/sequel/database/dataset.rb +6 -9
  95. data/lib/sequel/database/dataset_defaults.rb +4 -48
  96. data/lib/sequel/database/features.rb +5 -4
  97. data/lib/sequel/database/logging.rb +2 -9
  98. data/lib/sequel/database/misc.rb +36 -55
  99. data/lib/sequel/database/query.rb +8 -13
  100. data/lib/sequel/database/schema_generator.rb +93 -64
  101. data/lib/sequel/database/schema_methods.rb +61 -79
  102. data/lib/sequel/database/transactions.rb +4 -24
  103. data/lib/sequel/database.rb +12 -2
  104. data/lib/sequel/dataset/actions.rb +57 -107
  105. data/lib/sequel/dataset/dataset_module.rb +4 -16
  106. data/lib/sequel/dataset/features.rb +35 -30
  107. data/lib/sequel/dataset/graph.rb +40 -49
  108. data/lib/sequel/dataset/misc.rb +12 -37
  109. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  110. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  111. data/lib/sequel/dataset/query.rb +91 -161
  112. data/lib/sequel/dataset/sql.rb +33 -225
  113. data/lib/sequel/dataset.rb +18 -10
  114. data/lib/sequel/deprecated.rb +18 -27
  115. data/lib/sequel/exceptions.rb +1 -17
  116. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  117. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  118. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  119. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  120. data/lib/sequel/extensions/connection_validator.rb +1 -1
  121. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  122. data/lib/sequel/extensions/core_extensions.rb +39 -49
  123. data/lib/sequel/extensions/core_refinements.rb +39 -45
  124. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  125. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  126. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  127. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  128. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  129. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  130. data/lib/sequel/extensions/from_block.rb +1 -35
  131. data/lib/sequel/extensions/graph_each.rb +2 -2
  132. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  133. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  134. data/lib/sequel/extensions/inflector.rb +4 -4
  135. data/lib/sequel/extensions/migration.rb +27 -43
  136. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  137. data/lib/sequel/extensions/null_dataset.rb +2 -8
  138. data/lib/sequel/extensions/pagination.rb +1 -17
  139. data/lib/sequel/extensions/pg_array.rb +20 -189
  140. data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
  141. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  142. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  143. data/lib/sequel/extensions/pg_inet.rb +3 -16
  144. data/lib/sequel/extensions/pg_interval.rb +1 -20
  145. data/lib/sequel/extensions/pg_json.rb +7 -27
  146. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  147. data/lib/sequel/extensions/pg_range.rb +6 -121
  148. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  149. data/lib/sequel/extensions/pg_row.rb +5 -77
  150. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  151. data/lib/sequel/extensions/query.rb +3 -4
  152. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  153. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  154. data/lib/sequel/extensions/select_remove.rb +3 -3
  155. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  156. data/lib/sequel/extensions/sql_comments.rb +2 -2
  157. data/lib/sequel/extensions/string_agg.rb +11 -8
  158. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  159. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  160. data/lib/sequel/model/associations.rb +129 -131
  161. data/lib/sequel/model/base.rb +133 -731
  162. data/lib/sequel/model/default_inflections.rb +1 -1
  163. data/lib/sequel/model/errors.rb +0 -3
  164. data/lib/sequel/model/exceptions.rb +2 -6
  165. data/lib/sequel/model/inflections.rb +1 -26
  166. data/lib/sequel/model/plugins.rb +1 -0
  167. data/lib/sequel/model.rb +27 -62
  168. data/lib/sequel/plugins/active_model.rb +2 -5
  169. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  170. data/lib/sequel/plugins/association_pks.rb +14 -28
  171. data/lib/sequel/plugins/association_proxies.rb +6 -7
  172. data/lib/sequel/plugins/auto_validations.rb +4 -4
  173. data/lib/sequel/plugins/before_after_save.rb +0 -43
  174. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  175. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  176. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  177. data/lib/sequel/plugins/caching.rb +5 -5
  178. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  179. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  180. data/lib/sequel/plugins/column_select.rb +2 -2
  181. data/lib/sequel/plugins/composition.rb +15 -24
  182. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  183. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  184. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  185. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  186. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  187. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  188. data/lib/sequel/plugins/finder.rb +16 -10
  189. data/lib/sequel/plugins/force_encoding.rb +1 -7
  190. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  191. data/lib/sequel/plugins/input_transformer.rb +10 -11
  192. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  193. data/lib/sequel/plugins/instance_filters.rb +5 -5
  194. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  195. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  196. data/lib/sequel/plugins/json_serializer.rb +19 -19
  197. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  198. data/lib/sequel/plugins/list.rb +6 -6
  199. data/lib/sequel/plugins/many_through_many.rb +11 -8
  200. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  201. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  202. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  203. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  204. data/lib/sequel/plugins/pg_row.rb +2 -11
  205. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  206. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  207. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  208. data/lib/sequel/plugins/serialization.rb +15 -33
  209. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  210. data/lib/sequel/plugins/sharding.rb +2 -8
  211. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  212. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  213. data/lib/sequel/plugins/static_cache.rb +8 -9
  214. data/lib/sequel/plugins/string_stripper.rb +3 -3
  215. data/lib/sequel/plugins/subclasses.rb +1 -1
  216. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  217. data/lib/sequel/plugins/table_select.rb +2 -2
  218. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  219. data/lib/sequel/plugins/timestamps.rb +6 -7
  220. data/lib/sequel/plugins/touch.rb +4 -8
  221. data/lib/sequel/plugins/tree.rb +3 -3
  222. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  223. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  224. data/lib/sequel/plugins/update_or_create.rb +3 -3
  225. data/lib/sequel/plugins/update_refresh.rb +3 -3
  226. data/lib/sequel/plugins/uuid.rb +7 -11
  227. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  228. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  229. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  230. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  231. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  232. data/lib/sequel/sql.rb +145 -276
  233. data/lib/sequel/timezones.rb +8 -23
  234. data/lib/sequel/version.rb +2 -2
  235. data/lib/sequel.rb +1 -1
  236. data/spec/adapter_spec.rb +1 -1
  237. data/spec/adapters/db2_spec.rb +2 -103
  238. data/spec/adapters/mssql_spec.rb +89 -68
  239. data/spec/adapters/mysql_spec.rb +111 -478
  240. data/spec/adapters/oracle_spec.rb +1 -9
  241. data/spec/adapters/postgres_spec.rb +459 -664
  242. data/spec/adapters/spec_helper.rb +12 -31
  243. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  244. data/spec/adapters/sqlite_spec.rb +8 -146
  245. data/spec/bin_spec.rb +11 -16
  246. data/spec/core/connection_pool_spec.rb +173 -74
  247. data/spec/core/database_spec.rb +96 -244
  248. data/spec/core/dataset_spec.rb +99 -414
  249. data/spec/core/deprecated_spec.rb +3 -3
  250. data/spec/core/expression_filters_spec.rb +37 -144
  251. data/spec/core/mock_adapter_spec.rb +241 -4
  252. data/spec/core/object_graph_spec.rb +11 -60
  253. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  254. data/spec/core/schema_generator_spec.rb +51 -40
  255. data/spec/core/schema_spec.rb +88 -77
  256. data/spec/core/spec_helper.rb +6 -24
  257. data/spec/core/version_spec.rb +1 -1
  258. data/spec/core_extensions_spec.rb +7 -83
  259. data/spec/core_model_spec.rb +2 -2
  260. data/spec/deprecation_helper.rb +2 -14
  261. data/spec/extensions/accessed_columns_spec.rb +1 -1
  262. data/spec/extensions/active_model_spec.rb +3 -3
  263. data/spec/extensions/after_initialize_spec.rb +1 -1
  264. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  265. data/spec/extensions/association_dependencies_spec.rb +1 -1
  266. data/spec/extensions/association_pks_spec.rb +30 -92
  267. data/spec/extensions/association_proxies_spec.rb +1 -1
  268. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  269. data/spec/extensions/auto_validations_spec.rb +1 -1
  270. data/spec/extensions/blacklist_security_spec.rb +1 -1
  271. data/spec/extensions/blank_spec.rb +1 -1
  272. data/spec/extensions/boolean_readers_spec.rb +1 -1
  273. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  274. data/spec/extensions/caching_spec.rb +1 -1
  275. data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
  276. data/spec/extensions/column_conflicts_spec.rb +1 -1
  277. data/spec/extensions/column_select_spec.rb +4 -4
  278. data/spec/extensions/columns_introspection_spec.rb +1 -1
  279. data/spec/extensions/columns_updated_spec.rb +1 -1
  280. data/spec/extensions/composition_spec.rb +8 -30
  281. data/spec/extensions/connection_expiration_spec.rb +3 -3
  282. data/spec/extensions/connection_validator_spec.rb +3 -3
  283. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  284. data/spec/extensions/constraint_validations_spec.rb +1 -1
  285. data/spec/extensions/core_refinements_spec.rb +1 -3
  286. data/spec/extensions/csv_serializer_spec.rb +4 -9
  287. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  288. data/spec/extensions/dataset_associations_spec.rb +2 -1
  289. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  290. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  291. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  292. data/spec/extensions/defaults_setter_spec.rb +2 -2
  293. data/spec/extensions/delay_add_association_spec.rb +8 -9
  294. data/spec/extensions/dirty_spec.rb +1 -1
  295. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  296. data/spec/extensions/eager_each_spec.rb +2 -2
  297. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  298. data/spec/extensions/error_splitter_spec.rb +1 -1
  299. data/spec/extensions/error_sql_spec.rb +1 -1
  300. data/spec/extensions/eval_inspect_spec.rb +1 -1
  301. data/spec/extensions/finder_spec.rb +1 -1
  302. data/spec/extensions/force_encoding_spec.rb +2 -5
  303. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  304. data/spec/extensions/graph_each_spec.rb +5 -5
  305. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  306. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  307. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  308. data/spec/extensions/inflector_spec.rb +1 -1
  309. data/spec/extensions/input_transformer_spec.rb +7 -2
  310. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  311. data/spec/extensions/instance_filters_spec.rb +1 -1
  312. data/spec/extensions/instance_hooks_spec.rb +1 -95
  313. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  314. data/spec/extensions/json_serializer_spec.rb +1 -1
  315. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  316. data/spec/extensions/list_spec.rb +5 -6
  317. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  318. data/spec/extensions/many_through_many_spec.rb +25 -33
  319. data/spec/extensions/migration_spec.rb +12 -2
  320. data/spec/extensions/modification_detection_spec.rb +1 -1
  321. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  322. data/spec/extensions/named_timezones_spec.rb +3 -3
  323. data/spec/extensions/nested_attributes_spec.rb +1 -29
  324. data/spec/extensions/null_dataset_spec.rb +1 -11
  325. data/spec/extensions/optimistic_locking_spec.rb +2 -2
  326. data/spec/extensions/pagination_spec.rb +1 -1
  327. data/spec/extensions/pg_array_associations_spec.rb +22 -26
  328. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_array_spec.rb +3 -48
  330. data/spec/extensions/pg_enum_spec.rb +1 -1
  331. data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
  332. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  333. data/spec/extensions/pg_hstore_spec.rb +22 -31
  334. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_inet_spec.rb +1 -14
  336. data/spec/extensions/pg_interval_spec.rb +3 -13
  337. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  338. data/spec/extensions/pg_json_spec.rb +1 -13
  339. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  340. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  341. data/spec/extensions/pg_range_spec.rb +3 -88
  342. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  343. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  344. data/spec/extensions/pg_row_spec.rb +1 -44
  345. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  346. data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
  347. data/spec/extensions/prepared_statements_spec.rb +13 -48
  348. data/spec/extensions/pretty_table_spec.rb +40 -9
  349. data/spec/extensions/query_spec.rb +1 -12
  350. data/spec/extensions/rcte_tree_spec.rb +23 -34
  351. data/spec/extensions/round_timestamps_spec.rb +1 -5
  352. data/spec/extensions/s_spec.rb +1 -1
  353. data/spec/extensions/schema_caching_spec.rb +1 -1
  354. data/spec/extensions/schema_dumper_spec.rb +43 -32
  355. data/spec/extensions/select_remove_spec.rb +1 -1
  356. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  357. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  358. data/spec/extensions/serialization_spec.rb +5 -17
  359. data/spec/extensions/server_block_spec.rb +1 -1
  360. data/spec/extensions/server_logging_spec.rb +2 -2
  361. data/spec/extensions/sharding_spec.rb +1 -1
  362. data/spec/extensions/shared_caching_spec.rb +1 -28
  363. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  364. data/spec/extensions/singular_table_names_spec.rb +1 -1
  365. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  366. data/spec/extensions/spec_helper.rb +5 -27
  367. data/spec/extensions/split_array_nil_spec.rb +1 -1
  368. data/spec/extensions/split_values_spec.rb +1 -1
  369. data/spec/extensions/sql_comments_spec.rb +1 -1
  370. data/spec/extensions/sql_expr_spec.rb +1 -1
  371. data/spec/extensions/static_cache_spec.rb +1 -1
  372. data/spec/extensions/string_agg_spec.rb +2 -2
  373. data/spec/extensions/string_date_time_spec.rb +1 -1
  374. data/spec/extensions/string_stripper_spec.rb +1 -1
  375. data/spec/extensions/subclasses_spec.rb +1 -1
  376. data/spec/extensions/subset_conditions_spec.rb +1 -1
  377. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  378. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  379. data/spec/extensions/synchronize_sql_spec.rb +124 -0
  380. data/spec/extensions/table_select_spec.rb +4 -4
  381. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  382. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  383. data/spec/extensions/timestamps_spec.rb +5 -7
  384. data/spec/extensions/to_dot_spec.rb +1 -1
  385. data/spec/extensions/touch_spec.rb +1 -1
  386. data/spec/extensions/tree_spec.rb +1 -1
  387. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  388. data/spec/extensions/unlimited_update_spec.rb +1 -1
  389. data/spec/extensions/update_or_create_spec.rb +12 -16
  390. data/spec/extensions/update_primary_key_spec.rb +4 -3
  391. data/spec/extensions/update_refresh_spec.rb +1 -1
  392. data/spec/extensions/uuid_spec.rb +10 -13
  393. data/spec/extensions/validate_associated_spec.rb +1 -1
  394. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  395. data/spec/extensions/validation_contexts_spec.rb +1 -1
  396. data/spec/extensions/validation_helpers_spec.rb +10 -44
  397. data/spec/extensions/whitelist_security_spec.rb +5 -5
  398. data/spec/extensions/xml_serializer_spec.rb +8 -13
  399. data/spec/guards_helper.rb +2 -1
  400. data/spec/integration/associations_test.rb +1 -23
  401. data/spec/integration/database_test.rb +7 -7
  402. data/spec/integration/dataset_test.rb +12 -47
  403. data/spec/integration/eager_loader_test.rb +1 -1
  404. data/spec/integration/migrator_test.rb +1 -1
  405. data/spec/integration/model_test.rb +4 -82
  406. data/spec/integration/plugin_test.rb +7 -23
  407. data/spec/integration/prepared_statement_test.rb +8 -88
  408. data/spec/integration/schema_test.rb +10 -10
  409. data/spec/integration/spec_helper.rb +17 -21
  410. data/spec/integration/timezone_test.rb +5 -5
  411. data/spec/integration/transaction_test.rb +3 -55
  412. data/spec/integration/type_test.rb +9 -9
  413. data/spec/model/association_reflection_spec.rb +24 -9
  414. data/spec/model/associations_spec.rb +124 -303
  415. data/spec/model/base_spec.rb +43 -137
  416. data/spec/model/class_dataset_methods_spec.rb +2 -20
  417. data/spec/model/dataset_methods_spec.rb +1 -20
  418. data/spec/model/eager_loading_spec.rb +48 -17
  419. data/spec/model/hooks_spec.rb +5 -300
  420. data/spec/model/inflector_spec.rb +1 -1
  421. data/spec/model/model_spec.rb +29 -339
  422. data/spec/model/plugins_spec.rb +2 -16
  423. data/spec/model/record_spec.rb +33 -129
  424. data/spec/model/spec_helper.rb +5 -15
  425. data/spec/model/validations_spec.rb +1 -1
  426. data/spec/sequel_warning.rb +1 -12
  427. metadata +19 -65
  428. data/doc/active_record.rdoc +0 -927
  429. data/lib/sequel/adapters/cubrid.rb +0 -160
  430. data/lib/sequel/adapters/do/mysql.rb +0 -69
  431. data/lib/sequel/adapters/do/postgres.rb +0 -46
  432. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  433. data/lib/sequel/adapters/do.rb +0 -166
  434. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  435. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  436. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  437. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  438. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  439. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  440. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  441. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  442. data/lib/sequel/adapters/shared/informix.rb +0 -63
  443. data/lib/sequel/adapters/shared/progress.rb +0 -40
  444. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  445. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  446. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  447. data/lib/sequel/adapters/swift.rb +0 -169
  448. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  449. data/lib/sequel/dataset/mutation.rb +0 -98
  450. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  451. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  452. data/lib/sequel/extensions/filter_having.rb +0 -65
  453. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  454. data/lib/sequel/extensions/meta_def.rb +0 -37
  455. data/lib/sequel/extensions/query_literals.rb +0 -86
  456. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  457. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  458. data/lib/sequel/extensions/set_overrides.rb +0 -82
  459. data/lib/sequel/no_core_ext.rb +0 -4
  460. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  461. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  462. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  463. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  464. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  465. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  466. data/lib/sequel/plugins/schema.rb +0 -84
  467. data/lib/sequel/plugins/scissors.rb +0 -37
  468. data/spec/core/dataset_mutation_spec.rb +0 -253
  469. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  470. data/spec/extensions/before_after_save_spec.rb +0 -40
  471. data/spec/extensions/filter_having_spec.rb +0 -42
  472. data/spec/extensions/from_block_spec.rb +0 -21
  473. data/spec/extensions/hash_aliases_spec.rb +0 -26
  474. data/spec/extensions/identifier_columns_spec.rb +0 -19
  475. data/spec/extensions/meta_def_spec.rb +0 -35
  476. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  477. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  478. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  479. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  480. data/spec/extensions/query_literals_spec.rb +0 -185
  481. data/spec/extensions/schema_spec.rb +0 -123
  482. data/spec/extensions/scissors_spec.rb +0 -27
  483. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  484. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -17,7 +17,7 @@ module Sequel
17
17
 
18
18
  # Returns an INSERT SQL query string. See +insert+.
19
19
  #
20
- # DB[:items].insert_sql(:a=>1)
20
+ # DB[:items].insert_sql(a: 1)
21
21
  # # => "INSERT INTO items (a) VALUES (1)"
22
22
  def insert_sql(*values)
23
23
  return static_sql(@opts[:sql]) if @opts[:sql]
@@ -49,6 +49,9 @@ module Sequel
49
49
 
50
50
  if values.is_a?(Array) && values.empty? && !insert_supports_empty_values?
51
51
  columns, values = insert_empty_columns_values
52
+ elsif values.is_a?(Dataset) && hoist_cte?(values) && supports_cte?(:insert)
53
+ ds, values = hoist_cte(values)
54
+ return ds.clone(:columns=>columns, :values=>values).send(:_insert_sql)
52
55
  end
53
56
  clone(:columns=>columns, :values=>values).send(:_insert_sql)
54
57
  end
@@ -112,9 +115,6 @@ module Sequel
112
115
  # Returns an array of insert statements for inserting multiple records.
113
116
  # This method is used by +multi_insert+ to format insert statements and
114
117
  # expects a keys array and and an array of value arrays.
115
- #
116
- # This method should be overridden by descendants if the support
117
- # inserting multiple records in a single SQL statement.
118
118
  def multi_insert_sql(columns, values)
119
119
  case multi_insert_sql_strategy
120
120
  when :values
@@ -165,7 +165,7 @@ module Sequel
165
165
 
166
166
  # Formats an UPDATE statement using the given values. See +update+.
167
167
  #
168
- # DB[:items].update_sql(:price => 100, :category => 'software')
168
+ # DB[:items].update_sql(price: 100, category: 'software')
169
169
  # # => "UPDATE items SET price = 100, category = 'software'
170
170
  #
171
171
  # Raises an +Error+ if the dataset is grouped or includes more
@@ -179,8 +179,7 @@ module Sequel
179
179
  when LiteralString
180
180
  # nothing
181
181
  when String
182
- Sequel::Deprecation.deprecate("Calling Sequel::Dataset#update/update_sql with a plain string", "Use Sequel.lit(#{values.inspect}) to create a literal string and pass that to update/update_sql, or use the auto_literal_strings extension")
183
- # raise Error, "plain string passed to Dataset#update" # SEQUEL5
182
+ raise Error, "plain string passed to Dataset#update is not supported, use Sequel.lit to use a literal string"
184
183
  end
185
184
 
186
185
  clone(:values=>values).send(:_update_sql)
@@ -246,10 +245,10 @@ module Sequel
246
245
  DEFAULT = LiteralString.new('DEFAULT').freeze
247
246
 
248
247
  EXISTS = ['EXISTS '.freeze].freeze
249
- BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR}#.freeze # SEQUEL5
250
- COUNT_FROM_SELF_OPTS = [:distinct, :group, :sql, :limit, :offset, :compounds]#.freeze # SEQUEL5
248
+ BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR}.freeze
249
+ COUNT_FROM_SELF_OPTS = [:distinct, :group, :sql, :limit, :offset, :compounds].freeze
251
250
  IS_LITERALS = {nil=>'NULL'.freeze, true=>'TRUE'.freeze, false=>'FALSE'.freeze}.freeze
252
- QUALIFY_KEYS = [:select, :where, :having, :order, :group]#.freeze # SEQUEL5
251
+ QUALIFY_KEYS = [:select, :where, :having, :order, :group].freeze
253
252
 
254
253
  IS_OPERATORS = ::Sequel::SQL::ComplexExpression::IS_OPERATORS
255
254
  LIKE_OPERATORS = ::Sequel::SQL::ComplexExpression::LIKE_OPERATORS
@@ -257,196 +256,6 @@ module Sequel
257
256
  TWO_ARITY_OPERATORS = ::Sequel::SQL::ComplexExpression::TWO_ARITY_OPERATORS
258
257
  REGEXP_OPERATORS = ::Sequel::SQL::ComplexExpression::REGEXP_OPERATORS
259
258
 
260
- EMULATED_FUNCTION_MAP = {}
261
- Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
262
-
263
- ALL = ' ALL'.freeze
264
- Sequel::Deprecation.deprecate_constant(self, :ALL)
265
- AND_SEPARATOR = " AND ".freeze
266
- Sequel::Deprecation.deprecate_constant(self, :AND_SEPARATOR)
267
- APOS = "'".freeze
268
- Sequel::Deprecation.deprecate_constant(self, :APOS)
269
- APOS_RE = /'/.freeze
270
- Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
271
- ARRAY_EMPTY = '(NULL)'.freeze
272
- Sequel::Deprecation.deprecate_constant(self, :ARRAY_EMPTY)
273
- AS = ' AS '.freeze
274
- Sequel::Deprecation.deprecate_constant(self, :AS)
275
- ASC = ' ASC'.freeze
276
- Sequel::Deprecation.deprecate_constant(self, :ASC)
277
- BACKSLASH = "\\".freeze
278
- Sequel::Deprecation.deprecate_constant(self, :BACKSLASH)
279
- BITCOMP_CLOSE = ") - 1)".freeze
280
- Sequel::Deprecation.deprecate_constant(self, :BITCOMP_CLOSE)
281
- BITCOMP_OPEN = "((0 - ".freeze
282
- Sequel::Deprecation.deprecate_constant(self, :BITCOMP_OPEN)
283
- BOOL_FALSE = "'f'".freeze
284
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
285
- BOOL_TRUE = "'t'".freeze
286
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
287
- BRACKET_CLOSE = ']'.freeze
288
- Sequel::Deprecation.deprecate_constant(self, :BRACKET_CLOSE)
289
- BRACKET_OPEN = '['.freeze
290
- Sequel::Deprecation.deprecate_constant(self, :BRACKET_OPEN)
291
- CASE_ELSE = " ELSE ".freeze
292
- Sequel::Deprecation.deprecate_constant(self, :CASE_ELSE)
293
- CASE_END = " END)".freeze
294
- Sequel::Deprecation.deprecate_constant(self, :CASE_END)
295
- CASE_OPEN = '(CASE'.freeze
296
- Sequel::Deprecation.deprecate_constant(self, :CASE_OPEN)
297
- CASE_THEN = " THEN ".freeze
298
- Sequel::Deprecation.deprecate_constant(self, :CASE_THEN)
299
- CASE_WHEN = " WHEN ".freeze
300
- Sequel::Deprecation.deprecate_constant(self, :CASE_WHEN)
301
- CAST_OPEN = 'CAST('.freeze
302
- Sequel::Deprecation.deprecate_constant(self, :CAST_OPEN)
303
- COLON = ':'.freeze
304
- Sequel::Deprecation.deprecate_constant(self, :COLON)
305
- COLUMN_REF_RE1 = /\A((?:(?!__).)+)__((?:(?!___).)+)___(.+)\z/.freeze
306
- Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE1)
307
- COLUMN_REF_RE2 = /\A((?:(?!___).)+)___(.+)\z/.freeze
308
- Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE2)
309
- COLUMN_REF_RE3 = /\A((?:(?!__).)+)__(.+)\z/.freeze
310
- Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE3)
311
- COMMA = ', '.freeze
312
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
313
- COMMA_SEPARATOR = ', '.freeze
314
- Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
315
- CONDITION_FALSE = '(1 = 0)'.freeze
316
- Sequel::Deprecation.deprecate_constant(self, :CONDITION_FALSE)
317
- CONDITION_TRUE = '(1 = 1)'.freeze
318
- Sequel::Deprecation.deprecate_constant(self, :CONDITION_TRUE)
319
- DATASET_ALIAS_BASE_NAME = 't'.freeze
320
- Sequel::Deprecation.deprecate_constant(self, :DATASET_ALIAS_BASE_NAME)
321
- DATETIME_SECFRACTION_ARG = RUBY_VERSION >= '1.9.0' ? 1000000 : 86400000000
322
- Sequel::Deprecation.deprecate_constant(self, :DATETIME_SECFRACTION_ARG)
323
- DEFAULT_VALUES = " DEFAULT VALUES".freeze
324
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_VALUES)
325
- DELETE = 'DELETE'.freeze
326
- Sequel::Deprecation.deprecate_constant(self, :DELETE)
327
- DESC = ' DESC'.freeze
328
- Sequel::Deprecation.deprecate_constant(self, :DESC)
329
- DISTINCT = " DISTINCT".freeze
330
- Sequel::Deprecation.deprecate_constant(self, :DISTINCT)
331
- DOT = '.'.freeze
332
- Sequel::Deprecation.deprecate_constant(self, :DOT)
333
- DOUBLE_APOS = "''".freeze
334
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
335
- DOUBLE_QUOTE = '""'.freeze
336
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_QUOTE)
337
- EQUAL = ' = '.freeze
338
- Sequel::Deprecation.deprecate_constant(self, :EQUAL)
339
- EMPTY_PARENS = '()'.freeze
340
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_PARENS)
341
- ESCAPE = " ESCAPE ".freeze
342
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE)
343
- EXTRACT = 'extract('.freeze
344
- Sequel::Deprecation.deprecate_constant(self, :EXTRACT)
345
- FILTER = " FILTER (WHERE ".freeze
346
- Sequel::Deprecation.deprecate_constant(self, :FILTER)
347
- FOR_UPDATE = ' FOR UPDATE'.freeze
348
- Sequel::Deprecation.deprecate_constant(self, :FOR_UPDATE)
349
- FORMAT_DATE = "'%Y-%m-%d'".freeze
350
- Sequel::Deprecation.deprecate_constant(self, :FORMAT_DATE)
351
- FORMAT_DATE_STANDARD = "DATE '%Y-%m-%d'".freeze
352
- Sequel::Deprecation.deprecate_constant(self, :FORMAT_DATE_STANDARD)
353
- FORMAT_OFFSET = "%+03i%02i".freeze
354
- Sequel::Deprecation.deprecate_constant(self, :FORMAT_OFFSET)
355
- FORMAT_TIMESTAMP_RE = /%[Nz]/.freeze
356
- Sequel::Deprecation.deprecate_constant(self, :FORMAT_TIMESTAMP_RE)
357
- FORMAT_USEC = '%N'.freeze
358
- Sequel::Deprecation.deprecate_constant(self, :FORMAT_USEC)
359
- FRAME_ALL = "ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING".freeze
360
- Sequel::Deprecation.deprecate_constant(self, :FRAME_ALL)
361
- FRAME_ROWS = "ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW".freeze
362
- Sequel::Deprecation.deprecate_constant(self, :FRAME_ROWS)
363
- FROM = ' FROM '.freeze
364
- Sequel::Deprecation.deprecate_constant(self, :FROM)
365
- FUNCTION_DISTINCT = "DISTINCT ".freeze
366
- Sequel::Deprecation.deprecate_constant(self, :FUNCTION_DISTINCT)
367
- GROUP_BY = " GROUP BY ".freeze
368
- Sequel::Deprecation.deprecate_constant(self, :GROUP_BY)
369
- HAVING = " HAVING ".freeze
370
- Sequel::Deprecation.deprecate_constant(self, :HAVING)
371
- INSERT = "INSERT".freeze
372
- Sequel::Deprecation.deprecate_constant(self, :INSERT)
373
- INTO = " INTO ".freeze
374
- Sequel::Deprecation.deprecate_constant(self, :INTO)
375
- LATERAL = 'LATERAL '.freeze
376
- Sequel::Deprecation.deprecate_constant(self, :LATERAL)
377
- LIMIT = " LIMIT ".freeze
378
- Sequel::Deprecation.deprecate_constant(self, :LIMIT)
379
- NOT_SPACE = 'NOT '.freeze
380
- Sequel::Deprecation.deprecate_constant(self, :NOT_SPACE)
381
- NULL = "NULL".freeze
382
- Sequel::Deprecation.deprecate_constant(self, :NULL)
383
- NULLS_FIRST = " NULLS FIRST".freeze
384
- Sequel::Deprecation.deprecate_constant(self, :NULLS_FIRST)
385
- NULLS_LAST = " NULLS LAST".freeze
386
- Sequel::Deprecation.deprecate_constant(self, :NULLS_LAST)
387
- OFFSET = " OFFSET ".freeze
388
- Sequel::Deprecation.deprecate_constant(self, :OFFSET)
389
- ON = ' ON '.freeze
390
- Sequel::Deprecation.deprecate_constant(self, :ON)
391
- ON_PAREN = " ON (".freeze
392
- Sequel::Deprecation.deprecate_constant(self, :ON_PAREN)
393
- ORDER_BY = " ORDER BY ".freeze
394
- Sequel::Deprecation.deprecate_constant(self, :ORDER_BY)
395
- ORDER_BY_NS = "ORDER BY ".freeze
396
- Sequel::Deprecation.deprecate_constant(self, :ORDER_BY_NS)
397
- OVER = ' OVER '.freeze
398
- Sequel::Deprecation.deprecate_constant(self, :OVER)
399
- PAREN_CLOSE = ')'.freeze
400
- Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
401
- PAREN_OPEN = '('.freeze
402
- Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
403
- PAREN_SPACE_OPEN = ' ('.freeze
404
- Sequel::Deprecation.deprecate_constant(self, :PAREN_SPACE_OPEN)
405
- PARTITION_BY = "PARTITION BY ".freeze
406
- Sequel::Deprecation.deprecate_constant(self, :PARTITION_BY)
407
- QUESTION_MARK = '?'.freeze
408
- Sequel::Deprecation.deprecate_constant(self, :QUESTION_MARK)
409
- QUESTION_MARK_RE = /\?/.freeze
410
- Sequel::Deprecation.deprecate_constant(self, :QUESTION_MARK_RE)
411
- QUOTE = '"'.freeze
412
- Sequel::Deprecation.deprecate_constant(self, :QUOTE)
413
- QUOTE_RE = /"/.freeze
414
- Sequel::Deprecation.deprecate_constant(self, :QUOTE_RE)
415
- RETURNING = " RETURNING ".freeze
416
- Sequel::Deprecation.deprecate_constant(self, :RETURNING)
417
- SELECT = 'SELECT'.freeze
418
- Sequel::Deprecation.deprecate_constant(self, :SELECT)
419
- SET = ' SET '.freeze
420
- Sequel::Deprecation.deprecate_constant(self, :SET)
421
- SPACE = ' '.freeze
422
- Sequel::Deprecation.deprecate_constant(self, :SPACE)
423
- SQL_WITH = "WITH ".freeze
424
- Sequel::Deprecation.deprecate_constant(self, :SQL_WITH)
425
- SPACE_WITH = " WITH ".freeze
426
- Sequel::Deprecation.deprecate_constant(self, :SPACE_WITH)
427
- TILDE = '~'.freeze
428
- Sequel::Deprecation.deprecate_constant(self, :TILDE)
429
- TIMESTAMP_FORMAT = "'%Y-%m-%d %H:%M:%S%N%z'".freeze
430
- Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_FORMAT)
431
- STANDARD_TIMESTAMP_FORMAT = "TIMESTAMP '%Y-%m-%d %H:%M:%S%N%z'".freeze
432
- Sequel::Deprecation.deprecate_constant(self, :STANDARD_TIMESTAMP_FORMAT)
433
- UNDERSCORE = '_'.freeze
434
- Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE)
435
- UPDATE = 'UPDATE'.freeze
436
- Sequel::Deprecation.deprecate_constant(self, :UPDATE)
437
- USING = ' USING ('.freeze
438
- Sequel::Deprecation.deprecate_constant(self, :USING)
439
- UNION_ALL_SELECT = ' UNION ALL SELECT '.freeze
440
- Sequel::Deprecation.deprecate_constant(self, :UNION_ALL_SELECT)
441
- VALUES = " VALUES ".freeze
442
- Sequel::Deprecation.deprecate_constant(self, :VALUES)
443
- WHERE = " WHERE ".freeze
444
- Sequel::Deprecation.deprecate_constant(self, :WHERE)
445
- WITH_ORDINALITY = " WITH ORDINALITY".freeze
446
- Sequel::Deprecation.deprecate_constant(self, :WITH_ORDINALITY)
447
- WITHIN_GROUP = " WITHIN GROUP (ORDER BY ".freeze
448
- Sequel::Deprecation.deprecate_constant(self, :WITHIN_GROUP)
449
-
450
259
  [:literal, :quote_identifier, :quote_schema_table].each do |meth|
451
260
  class_eval(<<-END, __FILE__, __LINE__ + 1)
452
261
  def #{meth}(*args, &block)
@@ -874,9 +683,9 @@ module Sequel
874
683
  # Splits table_name into an array of strings.
875
684
  #
876
685
  # ds.split_qualifiers(:s) # ['s']
877
- # ds.split_qualifiers(:t__s) # ['t', 's']
878
- # ds.split_qualifiers(Sequel[:d][:t__s]) # ['d', 't', 's']
879
- # ds.split_qualifiers(Sequel[:h__d][:t__s]) # ['h', 'd', 't', 's']
686
+ # ds.split_qualifiers(Sequel[:t][:s]) # ['t', 's']
687
+ # ds.split_qualifiers(Sequel[:d][:t][:s]) # ['d', 't', 's']
688
+ # ds.split_qualifiers(Sequel.qualify(Sequel[:h][:d], Sequel[:t][:s])) # ['h', 'd', 't', 's']
880
689
  def split_qualifiers(table_name, *args)
881
690
  case table_name
882
691
  when SQL::QualifiedIdentifier
@@ -889,9 +698,10 @@ module Sequel
889
698
 
890
699
  # Append literalization of subscripts (SQL array accesses) to SQL string.
891
700
  def subscript_sql_append(sql, s)
892
- literal_append(sql, s.f)
701
+ literal_append(sql, s.expression)
893
702
  sql << '['
894
- if s.sub.length == 1 && (range = s.sub.first).is_a?(Range)
703
+ sub = s.sub
704
+ if sub.length == 1 && (range = sub.first).is_a?(Range)
895
705
  literal_append(sql, range.begin)
896
706
  sql << ':'
897
707
  e = range.end
@@ -1015,25 +825,21 @@ module Sequel
1015
825
  end
1016
826
  end
1017
827
 
1018
- # Only allow caching the select SQL if the dataset is frozen and hasn't
1019
- # specifically been marked as not allowing SQL caching.
828
+ # Don't allow caching SQL if specifically marked not to.
1020
829
  def cache_sql?
1021
- frozen? && !@opts[:no_cache_sql] && !cache_get(:_no_cache_sql)
830
+ !@opts[:no_cache_sql] && !cache_get(:_no_cache_sql)
1022
831
  end
1023
832
 
1024
- # Raise an InvalidOperation exception if deletion is not allowed
1025
- # for this dataset
833
+ # Raise an InvalidOperation exception if deletion is not allowed for this dataset.
1026
834
  def check_modification_allowed!
1027
835
  raise(InvalidOperation, "Grouped datasets cannot be modified") if opts[:group]
1028
836
  raise(InvalidOperation, "Joined datasets cannot be modified") if !supports_modifying_joins? && joined_dataset?
1029
837
  end
1030
838
 
1031
- # Emit deprecation warning if the dataset uses limits or offsets.
839
+ # Raise error if the dataset uses limits or offsets.
1032
840
  def check_not_limited!(type)
1033
841
  return if @opts[:skip_limit_check] && type != :truncate
1034
- # SEQUEL5
1035
- #raise InvalidOperation, "Dataset##{type} not supported on datasets with limits or offsets" if opts[:limit] || opts[:offset]
1036
- Sequel::Deprecation.deprecate("Dataset##{type} on datasets with limits or offsets", "Call unlimited to remove the limit #{'or skip_limit_check to ignore the limit ' unless type == :truncate}before calling #{type}") if @opts[:limit] || @opts[:offset]
842
+ raise InvalidOperation, "Dataset##{type} not supported on datasets with limits or offsets" if opts[:limit] || opts[:offset]
1037
843
  end
1038
844
 
1039
845
  # Alias of check_modification_allowed!
@@ -1042,8 +848,7 @@ module Sequel
1042
848
  end
1043
849
 
1044
850
  # Append column list to SQL string.
1045
- # Converts an array of column names into a comma seperated string of
1046
- # column names. If the array is empty, a wildcard (*) is returned.
851
+ # If the column list is empty, a wildcard (*) is appended.
1047
852
  def column_list_append(sql, columns)
1048
853
  if (columns.nil? || columns.empty?)
1049
854
  sql << '*'
@@ -1138,7 +943,8 @@ module Sequel
1138
943
  false
1139
944
  end
1140
945
 
1141
- # Append literalization of array of expressions to SQL string.
946
+ # Append literalization of array of expressions to SQL string, separating them
947
+ # with commas.
1142
948
  def expression_list_append(sql, columns)
1143
949
  c = false
1144
950
  co = ', '
@@ -1149,7 +955,7 @@ module Sequel
1149
955
  end
1150
956
  end
1151
957
 
1152
- # Append literalization of array of grouping elements to SQL string.
958
+ # Append literalization of array of grouping elements to SQL string, seperating them with commas.
1153
959
  def grouping_element_list_append(sql, columns)
1154
960
  c = false
1155
961
  co = ', '
@@ -1177,7 +983,10 @@ module Sequel
1177
983
  v2 = db.from_application_timestamp(v)
1178
984
  fmt = default_timestamp_format.gsub(/%[Nz]/) do |m|
1179
985
  if m == '%N'
1180
- format_timestamp_usec(v.is_a?(DateTime) ? v.sec_fraction*(RUBY_VERSION >= '1.9.0' ? 1000000 : 86400000000) : v.usec) if supports_timestamp_usecs?
986
+ # Ruby 1.9 supports %N in timestamp formats, but Sequel has supported %N
987
+ # for longer in a different way, where the . is already appended and only 6
988
+ # decimal places are used by default.
989
+ format_timestamp_usec(v.is_a?(DateTime) ? v.sec_fraction*(1000000) : v.usec) if supports_timestamp_usecs?
1181
990
  else
1182
991
  if supports_timestamp_timezones?
1183
992
  # Would like to just use %z format, but it doesn't appear to work on Windows
@@ -1407,7 +1216,7 @@ module Sequel
1407
1216
 
1408
1217
  # Append literalization of string to SQL string.
1409
1218
  def literal_string_append(sql, v)
1410
- sql << "'" << v.gsub(/'/, "''") << "'"
1219
+ sql << "'" << v.gsub("'", "''") << "'"
1411
1220
  end
1412
1221
 
1413
1222
  # Append literalization of symbol to SQL string.
@@ -1471,7 +1280,7 @@ module Sequel
1471
1280
  end
1472
1281
  end
1473
1282
 
1474
- # Qualify the given expression e to the given table.
1283
+ # Qualify the given expression to the given table.
1475
1284
  def qualified_expression(e, table)
1476
1285
  Qualifier.new(table).transform(e)
1477
1286
  end
@@ -1494,7 +1303,7 @@ module Sequel
1494
1303
 
1495
1304
  # Modify the sql to add a dataset to the via an EXCEPT, INTERSECT, or UNION clause.
1496
1305
  # This uses a subselect for the compound datasets used, because using parantheses doesn't
1497
- # work on all databases. I consider this an ugly hack, but can't I think of a better default.
1306
+ # work on all databases.
1498
1307
  def select_compounds_sql(sql)
1499
1308
  return unless c = @opts[:compounds]
1500
1309
  c.each do |type, dataset, all|
@@ -1626,7 +1435,6 @@ module Sequel
1626
1435
  alias insert_with_sql select_with_sql
1627
1436
  alias update_with_sql select_with_sql
1628
1437
 
1629
- # The base keyword to use for the SQL WITH clause
1630
1438
  def select_with_sql_base
1631
1439
  "WITH "
1632
1440
  end
@@ -1649,7 +1457,7 @@ module Sequel
1649
1457
  end
1650
1458
 
1651
1459
  # The string that is appended to to create the SQL query, the empty
1652
- # string by default
1460
+ # string by default.
1653
1461
  def sql_string_origin
1654
1462
  String.new
1655
1463
  end
@@ -1680,7 +1488,7 @@ module Sequel
1680
1488
  end
1681
1489
  end
1682
1490
 
1683
- # Append literalization of the subselect to SQL String.
1491
+ # Append literalization of the subselect to SQL string.
1684
1492
  def subselect_sql_append(sql, ds)
1685
1493
  ds.clone(:append_sql=>sql).sql
1686
1494
  end
@@ -1,24 +1,24 @@
1
1
  # frozen-string-literal: true
2
2
 
3
3
  module Sequel
4
- # A dataset represents an SQL query, or more generally, an abstract
5
- # set of rows in the database. Datasets
6
- # can be used to create, retrieve, update and delete records.
4
+ # A dataset represents an SQL query. Datasets
5
+ # can be used to select, insert, update and delete records.
7
6
  #
8
7
  # Query results are always retrieved on demand, so a dataset can be kept
9
8
  # around and reused indefinitely (datasets never cache results):
10
9
  #
11
- # my_posts = DB[:posts].where(:author => 'david') # no records are retrieved
10
+ # my_posts = DB[:posts].where(author: 'david') # no records are retrieved
12
11
  # my_posts.all # records are retrieved
13
12
  # my_posts.all # records are retrieved again
14
13
  #
15
- # Most dataset methods return modified copies of the dataset (functional style), so you can
16
- # reuse different datasets to access data:
14
+ # Datasets are frozen and use a functional style where modification methods
15
+ # return modified copies of the the dataset. This allows you to reuse
16
+ # datasets:
17
17
  #
18
18
  # posts = DB[:posts]
19
- # davids_posts = posts.where(:author => 'david')
20
- # old_posts = posts.where('stamp < ?', Date.today - 7)
21
- # davids_old_posts = davids_posts.where('stamp < ?', Date.today - 7)
19
+ # davids_posts = posts.where(author: 'david')
20
+ # old_posts = posts.where{stamp < Date.today - 7}
21
+ # davids_old_posts = davids_posts.where{stamp < Date.today - 7}
22
22
  #
23
23
  # Datasets are Enumerable objects, so they can be manipulated using any
24
24
  # of the Enumerable methods, such as map, inject, etc.
@@ -42,5 +42,13 @@ module Sequel
42
42
  include SQL::StringMethods
43
43
  end
44
44
 
45
- require(%w"query actions features graph prepared_statements misc mutation sql placeholder_literalizer dataset_module", 'dataset')
45
+ require_relative "dataset/query"
46
+ require_relative "dataset/actions"
47
+ require_relative "dataset/features"
48
+ require_relative "dataset/graph"
49
+ require_relative "dataset/prepared_statements"
50
+ require_relative "dataset/misc"
51
+ require_relative "dataset/sql"
52
+ require_relative "dataset/placeholder_literalizer"
53
+ require_relative "dataset/dataset_module"
46
54
  end
@@ -20,7 +20,7 @@ module Sequel
20
20
  module Deprecation
21
21
  @backtrace_filter = 10
22
22
  @output = $stderr
23
- @prefix = "SEQUEL DEPRECATION WARNING: "
23
+ @prefix = "SEQUEL DEPRECATION WARNING: ".freeze
24
24
 
25
25
  class << self
26
26
  # How to filter backtraces. +false+ does not include backtraces, +true+ includes
@@ -36,34 +36,25 @@ module Sequel
36
36
  attr_accessor :prefix
37
37
  end
38
38
 
39
- if RUBY_VERSION < '1.9'
40
- # :nocov:
41
- def self.deprecate(_method, _instead=nil)
42
- # Sequel 5 will drop ruby 1.8 support completely, so it doesn't make sense to issue deprecation
43
- # warnings on ruby 1.8.
44
- end
45
- # :nocov:
46
- else
47
- # Print the message and possibly backtrace to the output.
48
- def self.deprecate(method, instead=nil)
49
- return unless output
50
- message = instead ? "#{method} is deprecated and will be removed in Sequel 5. #{instead}." : method
51
- message = "#{prefix}#{message}" if prefix
52
- output.puts(message)
53
- case b = backtrace_filter
54
- when Integer
55
- caller.each do |c|
56
- b -= 1
57
- output.puts(c)
58
- break if b <= 0
59
- end
60
- when true
61
- caller.each{|c| output.puts(c)}
62
- when Proc
63
- caller.each_with_index{|line, line_no| output.puts(line) if b.call(line, line_no)}
39
+ # Print the message and possibly backtrace to the output.
40
+ def self.deprecate(method, instead=nil)
41
+ return unless output
42
+ message = instead ? "#{method} is deprecated and will be removed in Sequel 5.1. #{instead}." : method
43
+ message = "#{prefix}#{message}" if prefix
44
+ output.puts(message)
45
+ case b = backtrace_filter
46
+ when Integer
47
+ caller.each do |c|
48
+ b -= 1
49
+ output.puts(c)
50
+ break if b <= 0
64
51
  end
65
- nil
52
+ when true
53
+ caller.each{|c| output.puts(c)}
54
+ when Proc
55
+ caller.each_with_index{|line, line_no| output.puts(line) if b.call(line, line_no)}
66
56
  end
57
+ nil
67
58
  end
68
59
 
69
60
  # If using ruby 2.3+, use Module#deprecate_constant to deprecate the constant,
@@ -75,7 +75,7 @@ module Sequel
75
75
 
76
76
  (
77
77
  # Error raised on an invalid operation, such as trying to update or delete
78
- # a joined or grouped dataset.
78
+ # a joined or grouped dataset when the database does not support that.
79
79
  InvalidOperation = Class.new(Error)
80
80
  ).name
81
81
 
@@ -113,20 +113,4 @@ module Sequel
113
113
  # and won't reraise it (unless a reraise is requested).
114
114
  Rollback = Class.new(Error)
115
115
  ).name
116
-
117
- # SEQUEL5: Remove
118
- (UnbindDuplicate = Class.new(Error)).name
119
-
120
- Error::AdapterNotFound = AdapterNotFound
121
- Error::InvalidOperation = InvalidOperation
122
- Error::InvalidValue = InvalidValue
123
- Error::PoolTimeoutError = PoolTimeout
124
- Error::Rollback = Rollback
125
-
126
- Sequel::Deprecation.deprecate_constant(self, :UnbindDuplicate)
127
- Sequel::Deprecation.deprecate_constant(Error, :AdapterNotFound)
128
- Sequel::Deprecation.deprecate_constant(Error, :InvalidOperation)
129
- Sequel::Deprecation.deprecate_constant(Error, :InvalidValue)
130
- Sequel::Deprecation.deprecate_constant(Error, :PoolTimeoutError)
131
- Sequel::Deprecation.deprecate_constant(Error, :Rollback)
132
116
  end
@@ -4,13 +4,6 @@ module Sequel
4
4
  module Plugins
5
5
  module PgRow
6
6
  module DatabaseMethods
7
- ESCAPE_RE = /("|\\)/.freeze
8
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
9
- ESCAPE_REPLACEMENT = '\\\\\1'.freeze
10
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACEMENT)
11
- COMMA = ','
12
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
13
-
14
7
  # Handle Sequel::Model instances in bound variables.
15
8
  def bound_variable_arg(arg, conn)
16
9
  case arg
@@ -27,7 +27,7 @@ module Sequel
27
27
 
28
28
  # Return the string that #print will print via puts.
29
29
  def self.string(records, columns = nil) # records is an array of hashes
30
- columns ||= records.first.keys.sort_by(&:to_s)
30
+ columns ||= records.first.keys.sort
31
31
  sizes = column_sizes(records, columns)
32
32
  sep_line = separator_line(columns, sizes)
33
33
 
@@ -37,8 +37,6 @@ module Sequel
37
37
  array.join("\n")
38
38
  end
39
39
 
40
- ### Private Module Methods ###
41
-
42
40
  # Hash of the maximum size of the value for each column
43
41
  def self.column_sizes(records, columns) # :nodoc:
44
42
  sizes = Hash.new {0}
@@ -9,34 +9,34 @@
9
9
  # Then you can pass arbitrary connection options for the server/shard
10
10
  # to use as a hash:
11
11
  #
12
- # DB[:table].server(:host=>'...', :database=>'...').all
12
+ # DB[:table].server(host: '...', database: '...').all
13
13
  #
14
14
  # Because Sequel can never be sure that the connection will be reused,
15
15
  # arbitrary connections are disconnected as soon as the outermost block
16
16
  # that uses them exits. So this example uses the same connection:
17
17
  #
18
- # DB.transaction(:server=>{:host=>'...', :database=>'...'}) do |c|
19
- # DB.transaction(:server=>{:host=>'...', :database=>'...'}) do |c2|
18
+ # DB.transaction(server: {host: '...', database: '...'}) do |c|
19
+ # DB.transaction(server: {host: '...', database: '...'}) do |c2|
20
20
  # # c == c2
21
21
  # end
22
22
  # end
23
23
  #
24
24
  # But this example does not:
25
25
  #
26
- # DB.transaction(:server=>{:host=>'...', :database=>'...'}) do |c|
26
+ # DB.transaction(server: {host: '...', database: '...'}) do |c|
27
27
  # end
28
- # DB.transaction(:server=>{:host=>'...', :database=>'...'}) do |c2|
28
+ # DB.transaction(server: {host: '...', database: '...'}) do |c2|
29
29
  # # c != c2
30
30
  # end
31
31
  #
32
32
  # You can use this extension in conjunction with the server_block
33
33
  # extension:
34
34
  #
35
- # DB.with_server(:host=>'...', :database=>'...') do
35
+ # DB.with_server(host: '...', database: '...') do
36
36
  # DB.synchronize do
37
37
  # # All of these use the host/database given to with_server
38
- # DB[:table].insert(:c=>1)
39
- # DB[:table].update(:c=>2)
38
+ # DB[:table].insert(c: 1)
39
+ # DB[:table].update(c: 2)
40
40
  # DB.tables
41
41
  # DB[:table].all
42
42
  # end
@@ -46,8 +46,8 @@
46
46
  # extension may want to do the following to so that you don't need
47
47
  # to call synchronize separately:
48
48
  #
49
- # def DB.with_server(*)
50
- # super{synchronize{yield}}
49
+ # def DB.with_server(*a)
50
+ # super(*a){synchronize{yield}}
51
51
  # end
52
52
  #
53
53
  # Note that this extension only works with the sharded threaded connection
@@ -40,7 +40,7 @@ module Sequel
40
40
 
41
41
  # Initialize the data structures used by this extension.
42
42
  def self.extended(pool)
43
- pool.instance_eval do
43
+ pool.instance_exec do
44
44
  sync do
45
45
  @connection_expiration_timestamps ||= {}
46
46
  @connection_expiration_timeout ||= 14400
@@ -60,7 +60,7 @@ module Sequel
60
60
 
61
61
  # Initialize the data structures used by this extension.
62
62
  def self.extended(pool)
63
- pool.instance_eval do
63
+ pool.instance_exec do
64
64
  sync do
65
65
  @connection_timestamps ||= {}
66
66
  @connection_validation_timeout ||= 3600