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
@@ -13,19 +13,15 @@ module Sequel
13
13
  # unlike +set_graph_aliases+, which replaces the list (the equivalent
14
14
  # of +select_append+ when graphing). See +set_graph_aliases+.
15
15
  #
16
- # DB[:table].add_graph_aliases(:some_alias=>[:table, :column])
16
+ # DB[:table].add_graph_aliases(some_alias: [:table, :column])
17
17
  # # SELECT ..., table.column AS some_alias
18
18
  def add_graph_aliases(graph_aliases)
19
19
  graph = opts[:graph]
20
- unless (ga = opts[:graph_aliases]) || (graph && (ga = graph[:column_aliases])) # SEQUEL5: Remove graph_aliases support
20
+ unless (graph && (ga = graph[:column_aliases]))
21
21
  raise Error, "cannot call add_graph_aliases on a dataset that has not been called with graph or set_graph_aliases"
22
22
  end
23
23
  columns, graph_aliases = graph_alias_columns(graph_aliases)
24
- if opts[:graph_aliases]
25
- select_append(*columns).clone(:graph_aliases => Hash[ga].merge!(graph_aliases).freeze) # SEQUEL5: Remove
26
- else
27
- select_append(*columns).clone(:graph => Hash[graph].merge!(:column_aliases=>Hash[ga].merge!(graph_aliases).freeze).freeze)
28
- end
24
+ select_append(*columns).clone(:graph => Hash[graph].merge!(:column_aliases=>Hash[ga].merge!(graph_aliases).freeze).freeze)
29
25
  end
30
26
 
31
27
  # Similar to Dataset#join_table, but uses unambiguous aliases for selected
@@ -64,7 +60,7 @@ module Sequel
64
60
  case dataset
65
61
  when Symbol
66
62
  # let alias be the same as the table name (sans any optional schema)
67
- # unless alias explicitly given in the symbol using ___ notation
63
+ # unless alias explicitly given in the symbol using ___ notation and symbol splitting is enabled
68
64
  table_alias ||= split_symbol(table).compact.last
69
65
  when Dataset
70
66
  if dataset.simple_select_all?
@@ -118,8 +114,6 @@ module Sequel
118
114
 
119
115
  # Whether to include the table in the result set
120
116
  add_table = options[:select] == false ? false : true
121
- # Whether to add the columns to the list of column aliases
122
- add_columns = !ds.opts.include?(:graph_aliases) # SEQUEL5: Remove graph_aliases support
123
117
 
124
118
  if graph = opts[:graph]
125
119
  graph = graph.dup
@@ -146,27 +140,25 @@ module Sequel
146
140
  # All columns in the master table are never
147
141
  # aliased, but are not included if set_graph_aliases
148
142
  # has been used.
149
- if add_columns
150
- if (select = @opts[:select]) && !select.empty? && !(select.length == 1 && (select.first.is_a?(SQL::ColumnAll)))
151
- select = select.map do |sel|
152
- raise Error, "can't figure out alias to use for graphing for #{sel.inspect}" unless column = _hash_key_symbol(sel)
153
- column_aliases[column] = [master, column]
154
- if from_selfed
155
- # Initial dataset was wrapped in subselect, selected all
156
- # columns in the subselect, qualified by the subselect alias.
157
- Sequel.qualify(qualifier, Sequel.identifier(column))
158
- else
159
- # Initial dataset not wrapped in subslect, just make
160
- # sure columns are qualified in some way.
161
- qualified_expression(sel, qualifier)
162
- end
163
- end
164
- else
165
- select = columns.map do |column|
166
- column_aliases[column] = [master, column]
167
- SQL::QualifiedIdentifier.new(qualifier, column)
143
+ if (select = @opts[:select]) && !select.empty? && !(select.length == 1 && (select.first.is_a?(SQL::ColumnAll)))
144
+ select = select.map do |sel|
145
+ raise Error, "can't figure out alias to use for graphing for #{sel.inspect}" unless column = _hash_key_symbol(sel)
146
+ column_aliases[column] = [master, column]
147
+ if from_selfed
148
+ # Initial dataset was wrapped in subselect, selected all
149
+ # columns in the subselect, qualified by the subselect alias.
150
+ Sequel.qualify(qualifier, Sequel.identifier(column))
151
+ else
152
+ # Initial dataset not wrapped in subslect, just make
153
+ # sure columns are qualified in some way.
154
+ qualified_expression(sel, qualifier)
168
155
  end
169
156
  end
157
+ else
158
+ select = columns.map do |column|
159
+ column_aliases[column] = [master, column]
160
+ SQL::QualifiedIdentifier.new(qualifier, column)
161
+ end
170
162
  end
171
163
  end
172
164
 
@@ -178,7 +170,7 @@ module Sequel
178
170
  table_aliases[table_alias] = add_table ? dataset : nil
179
171
 
180
172
  # Add the columns to the selection unless we are ignoring them
181
- if add_table && add_columns
173
+ if add_table
182
174
  column_aliases = graph[:column_aliases]
183
175
  ca_num = graph[:column_alias_num]
184
176
  # Which columns to add to the result set
@@ -207,7 +199,7 @@ module Sequel
207
199
  end
208
200
  [:column_aliases, :table_aliases, :column_alias_num].each{|k| graph[k].freeze}
209
201
  ds = ds.clone(:graph=>graph.freeze)
210
- add_columns ? ds.select(*select) : ds
202
+ ds.select(*select)
211
203
  end
212
204
 
213
205
  # This allows you to manually specify the graph aliases to use
@@ -217,42 +209,41 @@ module Sequel
217
209
  # graphed dataset, and must be used instead of +select+ whenever
218
210
  # graphing is used.
219
211
  #
220
- # graph_aliases :: Should be a hash with keys being symbols of
221
- # column aliases, and values being either symbols or arrays with one to three elements.
222
- # If the value is a symbol, it is assumed to be the same as a one element
223
- # array containing that symbol.
224
- # The first element of the array should be the table alias symbol.
225
- # The second should be the actual column name symbol. If the array only
226
- # has a single element the column name symbol will be assumed to be the
227
- # same as the corresponding hash key. If the array
228
- # has a third element, it is used as the value returned, instead of
229
- # table_alias.column_name.
212
+ # graph_aliases should be a hash with keys being symbols of
213
+ # column aliases, and values being either symbols or arrays with one to three elements.
214
+ # If the value is a symbol, it is assumed to be the same as a one element
215
+ # array containing that symbol.
216
+ # The first element of the array should be the table alias symbol.
217
+ # The second should be the actual column name symbol. If the array only
218
+ # has a single element the column name symbol will be assumed to be the
219
+ # same as the corresponding hash key. If the array
220
+ # has a third element, it is used as the value returned, instead of
221
+ # table_alias.column_name.
230
222
  #
231
- # DB[:artists].graph(:albums, :artist_id=>:id).
232
- # set_graph_aliases(:name=>:artists,
233
- # :album_name=>[:albums, :name],
234
- # :forty_two=>[:albums, :fourtwo, 42]).first
223
+ # DB[:artists].graph(:albums, :artist_id: :id).
224
+ # set_graph_aliases(name: :artists,
225
+ # album_name: [:albums, :name],
226
+ # forty_two: [:albums, :fourtwo, 42]).first
235
227
  # # SELECT artists.name, albums.name AS album_name, 42 AS forty_two ...
236
228
  def set_graph_aliases(graph_aliases)
237
229
  columns, graph_aliases = graph_alias_columns(graph_aliases)
238
230
  if graph = opts[:graph]
239
231
  select(*columns).clone(:graph => Hash[graph].merge!(:column_aliases=>graph_aliases.freeze).freeze)
240
232
  else
241
- Sequel::Deprecation.deprecate("Calling Dataset#set_graph_aliases before Dataset#graph", "Call Dataset#set_graph_aliases after Dataset#graph now")
242
- select(*columns).clone(:graph_aliases=>graph_aliases.freeze) # SEQUEL5: Remove
233
+ raise Error, "cannot call #set_graph_aliases on an ungraphed dataset"
243
234
  end
244
235
  end
245
236
 
246
237
  # Remove the splitting of results into subhashes, and all metadata
247
238
  # related to the current graph (if any).
248
239
  def ungraphed
249
- clone(:graph=>nil, :graph_aliases=>nil) # SEQUEL5: Remove :graph_aliases
240
+ clone(:graph=>nil)
250
241
  end
251
242
 
252
243
  private
253
244
 
254
245
  # Wrap the alias symbol in an SQL::Identifier if the identifier on which is based
255
- # is an SQL::Identifier. This works around cases where the alias symbol contains
246
+ # is an SQL::Identifier. This works around cases where symbol splitting is enabled and the alias symbol contains
256
247
  # double embedded underscores which would be considered an implicit qualified identifier
257
248
  # if not wrapped in an SQL::Identifier.
258
249
  def qualifier_from_alias_symbol(aliaz, identifier)
@@ -7,15 +7,6 @@ module Sequel
7
7
  # These methods don't fit cleanly into another section.
8
8
  # ---------------------
9
9
 
10
- NOTIMPL_MSG = "This method must be overridden in Sequel adapters".freeze
11
- Sequel::Deprecation.deprecate_constant(self, :NOTIMPL_MSG)
12
- ARRAY_ACCESS_ERROR_MSG = 'You cannot call Dataset#[] with an integer or with no arguments.'.freeze
13
- Sequel::Deprecation.deprecate_constant(self, :ARRAY_ACCESS_ERROR_MSG)
14
- ARG_BLOCK_ERROR_MSG = 'Must use either an argument or a block, not both'.freeze
15
- Sequel::Deprecation.deprecate_constant(self, :ARG_BLOCK_ERROR_MSG)
16
- IMPORT_ERROR_MSG = 'Using Sequel::Dataset#import an empty column array is not allowed'.freeze
17
- Sequel::Deprecation.deprecate_constant(self, :IMPORT_ERROR_MSG)
18
-
19
10
  # The database related to this dataset. This is the Database instance that
20
11
  # will execute all of this dataset's queries.
21
12
  attr_reader :db
@@ -33,9 +24,9 @@ module Sequel
33
24
  # the Database#dataset method return an instance of that subclass.
34
25
  def initialize(db)
35
26
  @db = db
36
- @opts = {} # OPTS # SEQUEL5
27
+ @opts = OPTS
37
28
  @cache = {}
38
- # freeze # SEQUEL5
29
+ freeze
39
30
  end
40
31
 
41
32
  # Define a hash value such that datasets with the same class, DB, and opts
@@ -55,30 +46,16 @@ module Sequel
55
46
  self == o
56
47
  end
57
48
 
58
- # SEQUEL5: Remove other dup methods
59
- # def dup
60
- # self
61
- # end
62
- if TRUE_FREEZE
63
- # Similar to #clone, but returns an unfrozen clone if the receiver is frozen.
64
- def dup
65
- _clone(:freeze=>false)
66
- end
67
- else
68
- # :nocov:
69
- def dup
70
- c = clone
71
- c.instance_variable_set(:@opts, Hash[c.opts])
72
- c
73
- end
74
- # :nocov:
49
+ # Return self, as datasets are always frozen.
50
+ def dup
51
+ self
75
52
  end
76
53
 
77
54
  # Yield a dataset for each server in the connection pool that is tied to that server.
78
55
  # Intended for use in sharded environments where all servers need to be modified
79
56
  # with the same data:
80
57
  #
81
- # DB[:configs].where(:key=>'setting').each_server{|ds| ds.update(:value=>'new_value')}
58
+ # DB[:configs].where(key: 'setting').each_server{|ds| ds.update(value: 'new_value')}
82
59
  def each_server
83
60
  db.servers.each{|s| yield server(s)}
84
61
  end
@@ -101,12 +78,11 @@ module Sequel
101
78
  else
102
79
  # :nocov:
103
80
  def freeze # :nodoc:
104
- @opts.freeze # SEQUEL5: remove
105
81
  self
106
82
  end
107
83
 
108
84
  def frozen? # :nodoc:
109
- @opts.frozen? # SEQUEL5: true
85
+ true
110
86
  end
111
87
  # :nocov:
112
88
  end
@@ -122,7 +98,7 @@ module Sequel
122
98
  # DB[:table].first_source_alias
123
99
  # # => :table
124
100
  #
125
- # DB[:table___t].first_source_alias
101
+ # DB[Sequel[:table].as(:t)].first_source_alias
126
102
  # # => :t
127
103
  def first_source_alias
128
104
  source = @opts[:from]
@@ -147,7 +123,7 @@ module Sequel
147
123
  # DB[:table].first_source_table
148
124
  # # => :table
149
125
  #
150
- # DB[:table___t].first_source_table
126
+ # DB[Sequel[:table].as(:t)].first_source_table
151
127
  # # => :table
152
128
  def first_source_table
153
129
  source = @opts[:from]
@@ -215,7 +191,7 @@ module Sequel
215
191
  # SQL identifier that represents the unqualified column for the given value.
216
192
  # The given value should be a Symbol, SQL::Identifier, SQL::QualifiedIdentifier,
217
193
  # or SQL::AliasedExpression containing one of those. In other cases, this
218
- # returns nil
194
+ # returns nil.
219
195
  def unqualified_column_for(v)
220
196
  unless v.is_a?(String)
221
197
  _unqualified_column_for(v)
@@ -299,12 +275,11 @@ module Sequel
299
275
  private
300
276
 
301
277
  # Check the cache for the given key, returning the value.
302
- # Otherwise, yield to get the dataset, and if the current dataset
303
- # is frozen, cache the dataset under the given key.
278
+ # Otherwise, yield to get the dataset and cache the dataset under the given key.
304
279
  def cached_dataset(key)
305
280
  unless ds = cache_get(key)
306
281
  ds = yield
307
- cache_set(key, ds) if frozen? # SEQUEL5: Remove if frozen?
282
+ cache_set(key, ds)
308
283
  end
309
284
 
310
285
  ds
@@ -15,7 +15,7 @@ module Sequel
15
15
  # Example:
16
16
  #
17
17
  # loader = Sequel::Dataset::PlaceholderLiteralizer.loader(DB[:items]) do |pl, ds|
18
- # ds.where(:id=>pl.arg).exclude(:name=>pl.arg).limit(1)
18
+ # ds.where(id: pl.arg).exclude(name: pl.arg).limit(1)
19
19
  # end
20
20
  # loader.first(1, "foo")
21
21
  # # SELECT * FROM items WHERE ((id = 1) AND (name != 'foo')) LIMIT 1
@@ -27,7 +27,7 @@ module Sequel
27
27
  # Note that this method does not handle all possible cases. For example:
28
28
  #
29
29
  # loader = Sequel::Dataset::PlaceholderLiteralizer.loader(DB[:items]) do |pl, ds|
30
- # ds.join(pl.arg, :item_id=>:id)
30
+ # ds.join(pl.arg, item_id: :id)
31
31
  # end
32
32
  # loader.all(:cart_items)
33
33
  #
@@ -35,7 +35,7 @@ module Sequel
35
35
  # best to add a table alias when joining:
36
36
  #
37
37
  # loader = Sequel::Dataset::PlaceholderLiteralizer.loader(DB[:items]) do |pl, ds|
38
- # ds.join(Sequel.as(pl.arg, :t), :item_id=>:id)
38
+ # ds.join(Sequel.as(pl.arg, :t), item_id: :id)
39
39
  # end
40
40
  # loader.all(:cart_items)
41
41
  #
@@ -107,7 +107,7 @@ module Sequel
107
107
  end
108
108
 
109
109
  # Record the offset at which the argument is used in the SQL query, and any
110
- # transforming
110
+ # transforming block.
111
111
  def use(sql, arg, transformer)
112
112
  @args << [sql, sql.length, arg, transformer]
113
113
  end
@@ -37,23 +37,10 @@ module Sequel
37
37
  end
38
38
  private_class_method :prepared_statements_module
39
39
 
40
- def self.def_deprecated_opts_setter(mod, *meths)
41
- meths.each do |meth|
42
- mod.send(:define_method, :"#{meth}=") do |v|
43
- # :nocov:
44
- Sequel::Deprecation.deprecate("Dataset##{meth}=", "The API has changed, and this value should now be passed in as an option via Dataset#clone")
45
- @opts[meth] = v
46
- # :nocov:
47
- end
48
- end
49
- end
50
-
51
40
  # Default implementation of the argument mapper to allow
52
41
  # native database support for bind variables and prepared
53
42
  # statements (as opposed to the emulated ones used by default).
54
43
  module ArgumentMapper
55
- Dataset.def_deprecated_opts_setter(self, :prepared_statement_name, :bind_arguments)
56
-
57
44
  # The name of the prepared statement, if any.
58
45
  def prepared_statement_name
59
46
  @opts[:prepared_statement_name]
@@ -89,11 +76,6 @@ module Sequel
89
76
  # into the query, which works on all databases, as it is no different
90
77
  # from using the dataset without bind variables.
91
78
  module PreparedStatementMethods
92
- Dataset.def_deprecated_opts_setter(self, :log_sql, :prepared_type, :prepared_args, :orig_dataset, :prepared_modify_values)
93
-
94
- PLACEHOLDER_RE = /\A\$(.*)\z/
95
- Sequel::Deprecation.deprecate_constant(self, :PLACEHOLDER_RE)
96
-
97
79
  # Whether to log the full SQL query. By default, just the prepared statement
98
80
  # name is generally logged on adapters that support native prepared statements.
99
81
  def log_sql
@@ -141,6 +123,12 @@ module Sequel
141
123
  orig_dataset.columns
142
124
  end
143
125
 
126
+ # Disallow use of delayed evaluations in prepared statements.
127
+ def delayed_evaluation_sql_append(sql, delay)
128
+ raise Error, "delayed evaluations cannot be used in prepared statements" if @opts[:no_delayed_evaluations]
129
+ super
130
+ end
131
+
144
132
  # Returns the SQL for the prepared statement, depending on
145
133
  # the type of the statement and the prepared_modify_values.
146
134
  def prepared_sql
@@ -188,13 +176,10 @@ module Sequel
188
176
 
189
177
  protected
190
178
 
191
- # Run the method based on the type of prepared statement, with
192
- # :select running #all to get all of the rows, and the other
193
- # types running the method with the same name as the type.
179
+ # Run the method based on the type of prepared statement.
194
180
  def run(&block)
195
181
  case prepared_type
196
182
  when :select, :all
197
- # Most common scenario, so listed first
198
183
  all(&block)
199
184
  when :each
200
185
  each(&block)
@@ -208,18 +193,17 @@ module Sequel
208
193
  elsif prepared_type == :delete
209
194
  delete
210
195
  else
211
- send(prepared_type, *prepared_modify_values)
196
+ public_send(prepared_type, *prepared_modify_values)
212
197
  end
213
198
  when :insert_pk
214
199
  fetch_rows(prepared_sql){|r| return r.values.first}
215
200
  when Array
216
201
  case prepared_type[0]
217
202
  when :map, :as_hash, :to_hash, :to_hash_groups
218
- send(*prepared_type, &block)
203
+ public_send(*prepared_type, &block)
219
204
  end
220
205
  else
221
- Sequel::Deprecation.deprecate("Using an unsupported prepared statement type (#{prepared_type.inspect})", 'Switch to using :select as the prepared statement type')
222
- all(&block)
206
+ raise Error, "unsupported prepared statement type used: #{prepared_type.inspect}"
223
207
  end
224
208
  end
225
209
 
@@ -235,8 +219,7 @@ module Sequel
235
219
  @opts[:bind_vars].has_key?(k)
236
220
  end
237
221
 
238
- # The symbol cache should always be skipped, since placeholders
239
- # are symbols.
222
+ # The symbol cache should always be skipped, since placeholders are symbols.
240
223
  def skip_symbol_cache?
241
224
  true
242
225
  end
@@ -286,7 +269,7 @@ module Sequel
286
269
  # already been set for this dataset, they are updated with the contents
287
270
  # of bind_vars.
288
271
  #
289
- # DB[:table].where(:id=>:$id).bind(:id=>1).call(:first)
272
+ # DB[:table].where(id: :$id).bind(id: 1).call(:first)
290
273
  # # SELECT * FROM table WHERE id = ? LIMIT 1 -- (1)
291
274
  # # => {:id=>1}
292
275
  def bind(bind_vars={})
@@ -307,7 +290,7 @@ module Sequel
307
290
  # run the sql with the bind variables specified in the hash. +values+ is a hash passed to
308
291
  # insert or update (if one of those types is used), which may contain placeholders.
309
292
  #
310
- # DB[:table].where(:id=>:$id).call(:first, :id=>1)
293
+ # DB[:table].where(id: :$id).call(:first, id: 1)
311
294
  # # SELECT * FROM table WHERE id = ? LIMIT 1 -- (1)
312
295
  # # => {:id=>1}
313
296
  def call(type, bind_variables={}, *values, &block)
@@ -315,36 +298,25 @@ module Sequel
315
298
  end
316
299
 
317
300
  # Prepare an SQL statement for later execution. Takes a type similar to #call,
318
- # and the +name+ symbol of the prepared statement. While +name+ defaults to +nil+,
319
- # it should always be provided as a symbol for the name of the prepared statement,
320
- # as some databases require that prepared statements have names.
301
+ # and the +name+ symbol of the prepared statement.
321
302
  #
322
303
  # This returns a clone of the dataset extended with PreparedStatementMethods,
323
304
  # which you can +call+ with the hash of bind variables to use.
324
305
  # The prepared statement is also stored in
325
- # the associated database, where it can be called by name.
306
+ # the associated Database, where it can be called by name.
326
307
  # The following usage is identical:
327
308
  #
328
- # ps = DB[:table].where(:name=>:$name).prepare(:first, :select_by_name)
309
+ # ps = DB[:table].where(name: :$name).prepare(:first, :select_by_name)
329
310
  #
330
- # ps.call(:name=>'Blah')
311
+ # ps.call(name: 'Blah')
331
312
  # # SELECT * FROM table WHERE name = ? -- ('Blah')
332
313
  # # => {:id=>1, :name=>'Blah'}
333
314
  #
334
- # DB.call(:select_by_name, :name=>'Blah') # Same thing
335
- def prepare(type, name=nil, *values)
336
- ps = to_prepared_statement(type, values, :name=>name, :extend=>prepared_statement_modules)
337
-
338
- if name
339
- ps.prepared_sql
340
- db.set_prepared_statement(name, ps)
341
- else
342
- # :nocov:
343
- # SEQUEL5: Add coverage
344
- Sequel::Deprecation.deprecate("Dataset#prepare will change to requiring a name argument in Sequel 5, please update your code") unless name
345
- # :nocov:
346
- end
347
-
315
+ # DB.call(:select_by_name, name: 'Blah') # Same thing
316
+ def prepare(type, name, *values)
317
+ ps = to_prepared_statement(type, values, :name=>name, :extend=>prepared_statement_modules, :no_delayed_evaluations=>true)
318
+ ps.prepared_sql
319
+ db.set_prepared_statement(name, ps)
348
320
  ps
349
321
  end
350
322
 
@@ -357,7 +329,7 @@ module Sequel
357
329
  mods += [PreparedStatementMethods]
358
330
 
359
331
  bind.
360
- clone(:prepared_statement_name=>opts[:name], :prepared_type=>type, :prepared_modify_values=>values, :orig_dataset=>self, :no_cache_sql=>true, :prepared_args=>@opts[:prepared_args]||[]).
332
+ clone(:prepared_statement_name=>opts[:name], :prepared_type=>type, :prepared_modify_values=>values, :orig_dataset=>self, :no_cache_sql=>true, :prepared_args=>@opts[:prepared_args]||[], :no_delayed_evaluations=>opts[:no_delayed_evaluations]).
361
333
  with_extend(*mods)
362
334
  end
363
335