sequel 4.49.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -46,18 +46,18 @@ module Sequel
46
46
  # Artist.many_through_many :artists, [[:albums_artists, :artist_id, :album_id], [:albums_artists, :album_id, :artist_id]]
47
47
  #
48
48
  # # All albums by artists that are associated to any album that this artist is associated to
49
- # Artist.many_through_many :artist_albums, [[:albums_artists, :artist_id, :album_id], \
50
- # [:albums_artists, :album_id, :artist_id], [:albums_artists, :artist_id, :album_id]], \
51
- # :class=>:Album
49
+ # Artist.many_through_many :artist_albums, [[:albums_artists, :artist_id, :album_id],
50
+ # [:albums_artists, :album_id, :artist_id], [:albums_artists, :artist_id, :album_id]],
51
+ # class: :Album
52
52
  #
53
53
  # # All tracks on albums by this artist (also could be a many_to_many)
54
- # Artist.many_through_many :tracks, [[:albums_artists, :artist_id, :album_id]], \
55
- # :right_primary_key=>:album_id
54
+ # Artist.many_through_many :tracks, [[:albums_artists, :artist_id, :album_id]],
55
+ # right_primary_key: :album_id
56
56
  #
57
57
  # Often you don't want the current object to appear in the array of associated objects. This is easiest to handle via an :after_load hook:
58
58
  #
59
59
  # Artist.many_through_many :artists, [[:albums_artists, :artist_id, :album_id], [:albums_artists, :album_id, :artist_id]],
60
- # :after_load=>proc{|artist, associated_artists| associated_artists.delete(artist)}
60
+ # after_load: lambda{|artist, associated_artists| associated_artists.delete(artist)}
61
61
  #
62
62
  # You can also handle it by adding a dataset block that excludes the current record (so it won't be retrieved at all), but
63
63
  # that won't work when eagerly loading, which is why the :after_load proc is recommended instead.
@@ -65,7 +65,7 @@ module Sequel
65
65
  # It's also common to not want duplicate records, in which case the :distinct option can be used:
66
66
  #
67
67
  # Artist.many_through_many :artists, [[:albums_artists, :artist_id, :album_id], [:albums, :id, :id], [:albums_artists, :album_id, :artist_id]],
68
- # :distinct=>true
68
+ # distinct: true
69
69
  #
70
70
  # In addition to many_through_many, this plugin also adds one_through_many, for an association to a single object through multiple join tables.
71
71
  # This is useful if there are unique constraints on the foreign keys in the join tables that reference back to the current table, or if you want
@@ -228,7 +228,10 @@ module Sequel
228
228
  def def_many_through_many(opts)
229
229
  one_through_many = opts[:type] == :one_through_many
230
230
  opts[:read_only] = true
231
- opts[:after_load].unshift(:array_uniq!) if opts[:uniq]
231
+ if opts[:uniq]
232
+ opts[:after_load] ||= []
233
+ opts[:after_load].unshift(:array_uniq!)
234
+ end
232
235
  opts[:cartesian_product_number] ||= one_through_many ? 0 : 2
233
236
  opts[:through] = opts[:through].map do |e|
234
237
  case e
@@ -12,15 +12,15 @@ module Sequel
12
12
  # end
13
13
  # p1 = Person[1]
14
14
  # p2 = Person[1]
15
- # p1.update(:name=>'Jim') # works
16
- # p2.update(:name=>'Bob') # raises Sequel::NoExistingObject
15
+ # p1.update(name: 'Jim') # works
16
+ # p2.update(name: 'Bob') # raises Sequel::NoExistingObject
17
17
  #
18
18
  # In order for this plugin to work, you need to make sure that the database
19
19
  # table has a column of timestamp or rowversion. The plugin uses a default
20
20
  # name of timestamp for this columns, but you can override that using the
21
21
  # :lock_column option:
22
22
  #
23
- # plugin :mssql_optimistic_locking, :lock_column=>:column_name
23
+ # plugin :mssql_optimistic_locking, lock_column: :column_name
24
24
  #
25
25
  # This plugin relies on the instance_filters plugin.
26
26
  module MssqlOptimisticLocking
@@ -13,11 +13,11 @@ module Sequel
13
13
  # The nested_attributes call defines a single method, <tt><i>association</i>_attributes=</tt>,
14
14
  # (e.g. <tt>albums_attributes=</tt>). So if you have an Artist instance:
15
15
  #
16
- # a = Artist.new(:name=>'YJM')
16
+ # a = Artist.new(name: 'YJM')
17
17
  #
18
18
  # You can create new album instances related to this artist:
19
19
  #
20
- # a.albums_attributes = [{:name=>'RF'}, {:name=>'MO'}]
20
+ # a.albums_attributes = [{name: 'RF'}, {name: 'MO'}]
21
21
  #
22
22
  # Note that this doesn't send any queries to the database yet. That doesn't happen till
23
23
  # you save the object:
@@ -33,7 +33,7 @@ module Sequel
33
33
  # objects. You just need to make sure that the primary key field is filled in for the
34
34
  # associated object:
35
35
  #
36
- # a.update(:albums_attributes => [{:id=>1, :name=>'T'}])
36
+ # a.update(:albums_attributes => [{id: 1, name: 'T'}])
37
37
  #
38
38
  # Since the primary key field is filled in, the plugin will update the album with id 1 instead
39
39
  # of creating a new album.
@@ -41,15 +41,15 @@ module Sequel
41
41
  # If you would like to delete the associated object instead of updating it, you add a _delete
42
42
  # entry to the hash, and also pass the :destroy option when calling +nested_attributes+:
43
43
  #
44
- # Artist.nested_attributes :albums, :destroy=>true
45
- # a.update(:albums_attributes => [{:id=>1, :_delete=>true}])
44
+ # Artist.nested_attributes :albums, destroy: true
45
+ # a.update(:albums_attributes => [{id: 1, _delete: true}])
46
46
  #
47
47
  # This will delete the related associated object from the database. If you want to leave the
48
48
  # associated object in the database, but just remove it from the association, add a _remove
49
49
  # entry in the hash, and also pass the :remove option when calling +nested_attributes+:
50
50
  #
51
- # Artist.nested_attributes :albums, :remove=>true
52
- # a.update(:albums_attributes => [{:id=>1, :_remove=>true}])
51
+ # Artist.nested_attributes :albums, remove: true
52
+ # a.update(:albums_attributes => [{id: 1, _remove: true}])
53
53
  #
54
54
  # The above example was for a one_to_many association, but the plugin also works similarly
55
55
  # for other association types. For one_to_one and many_to_one associations, you need to
@@ -66,11 +66,11 @@ module Sequel
66
66
  #
67
67
  # Your web stack will probably parse that into a nested hash similar to:
68
68
  #
69
- # {:artist=>{:name=>'Y', :albums_attributes=>{0=>{:name=>'X'}, 1=>{:id=>'2', :name=>'Z'}}}}
69
+ # {'artist'=>{'name'=>'Y', 'albums_attributes'=>{'0'=>{'name'=>'X'}, '1'=>{'id'=>'2', 'name'=>'Z'}}}}
70
70
  #
71
71
  # Then you can do:
72
72
  #
73
- # artist.update_fields(params[:artist], [:name, :albums_artists])
73
+ # artist.update_fields(params['artist'], %w'name albums_artists')
74
74
  #
75
75
  # To save changes to the artist, create the first album and associate it to the artist,
76
76
  # and update the other existing associated album.
@@ -81,15 +81,6 @@ module Sequel
81
81
  end
82
82
 
83
83
  module ClassMethods
84
- def nested_attributes_module
85
- Sequel::Deprecation.deprecate('Sequel::Model.nested_attributes_module', 'There is no replacement')
86
- @nested_attributes_module
87
- end
88
- def nested_attributes_module=(v)
89
- Sequel::Deprecation.deprecate('Sequel::Model.nested_attributes_module=', 'There is no replacement')
90
- @nested_attributes_module = v
91
- end
92
-
93
84
  # Freeze nested_attributes_module when freezing model class.
94
85
  def freeze
95
86
  @nested_attributes_module.freeze if @nested_attributes_module
@@ -127,11 +118,7 @@ module Sequel
127
118
  reflections = associations.map{|a| association_reflection(a) || raise(Error, "no association named #{a} for #{self}")}
128
119
  reflections.each do |r|
129
120
  r[:nested_attributes] = opts
130
- r[:nested_attributes][:unmatched_pk] ||= (
131
- if opts.has_key?(:strict)
132
- Sequel::Deprecation.deprecate("The nested_attributes :strict option", "Use the :unmatched_pk option instead")
133
- end
134
- opts.delete(:strict) == false ? :ignore : :raise)
121
+ r[:nested_attributes][:unmatched_pk] ||= :raise
135
122
  r[:nested_attributes][:reject_if] ||= block
136
123
  def_nested_attribute_method(r)
137
124
  end
@@ -188,8 +175,8 @@ module Sequel
188
175
  nested_attributes_set_attributes(meta, obj, attributes)
189
176
  delay_validate_associated_object(reflection, obj)
190
177
  if reflection.returns_array?
191
- send(reflection[:name]) << obj
192
- after_save_hook{send(reflection.add_method, obj)}
178
+ public_send(reflection[:name]) << obj
179
+ after_save_hook{public_send(reflection[:add_method], obj)}
193
180
  else
194
181
  associations[reflection[:name]] = obj
195
182
 
@@ -201,9 +188,9 @@ module Sequel
201
188
  # Don't need to validate the object twice if :validate association option is not false
202
189
  # and don't want to validate it at all if it is false.
203
190
  if reflection[:type] == :many_to_one
204
- before_save_hook{send(reflection.setter_method, obj.save(:validate=>false))}
191
+ before_save_hook{public_send(reflection[:setter_method], obj.save(:validate=>false))}
205
192
  else
206
- after_save_hook{send(reflection.setter_method, obj)}
193
+ after_save_hook{public_send(reflection[:setter_method], obj)}
207
194
  end
208
195
  end
209
196
  add_reciprocal_object(reflection, obj)
@@ -215,7 +202,7 @@ module Sequel
215
202
  # If there is a limit on the nested attributes for this association,
216
203
  # make sure the length of the attributes_list is not greater than the limit.
217
204
  def nested_attributes_list_setter(meta, attributes_list)
218
- attributes_list = attributes_list.sort_by(&:to_s).map{|k,v| v} if attributes_list.is_a?(Hash)
205
+ attributes_list = attributes_list.sort.map{|k,v| v} if attributes_list.is_a?(Hash)
219
206
  if (limit = meta[:limit]) && attributes_list.length > limit
220
207
  raise(Error, "number of nested attributes (#{attributes_list.length}) exceeds the limit (#{limit})")
221
208
  end
@@ -231,9 +218,9 @@ module Sequel
231
218
  if !opts[:destroy] || reflection.remove_before_destroy?
232
219
  before_save_hook do
233
220
  if reflection.returns_array?
234
- send(reflection.remove_method, obj)
221
+ public_send(reflection[:remove_method], obj)
235
222
  else
236
- send(reflection.setter_method, nil)
223
+ public_send(reflection[:setter_method], nil)
237
224
  end
238
225
  end
239
226
  end
@@ -277,7 +264,7 @@ module Sequel
277
264
  str_keys = sym_keys.map(&:to_s)
278
265
  if (pk = attributes.values_at(*sym_keys)).all? || (pk = attributes.values_at(*str_keys)).all?
279
266
  pk = pk.map(&:to_s)
280
- obj = Array(send(reflection[:name])).find{|x| Array(x.pk).map(&:to_s) == pk}
267
+ obj = Array(public_send(reflection[:name])).find{|x| Array(x.pk).map(&:to_s) == pk}
281
268
  end
282
269
  if obj
283
270
  attributes = attributes.dup.delete_if{|k,v| str_keys.include? k.to_s}
@@ -11,11 +11,11 @@ module Sequel
11
11
  # end
12
12
  # p1 = Person[1]
13
13
  # p2 = Person[1]
14
- # p1.update(:name=>'Jim') # works
15
- # p2.update(:name=>'Bob') # raises Sequel::Plugins::OptimisticLocking::Error
14
+ # p1.update(name: 'Jim') # works
15
+ # p2.update(name: 'Bob') # raises Sequel::Plugins::OptimisticLocking::Error
16
16
  #
17
17
  # In order for this plugin to work, you need to make sure that the database
18
- # table has a lock_version column (or other column you name via the lock_column
18
+ # table has a +lock_version+ column (or other column you name via the lock_column
19
19
  # class level accessor) that defaults to 0.
20
20
  #
21
21
  # This plugin relies on the instance_filters plugin.
@@ -328,7 +328,10 @@ module Sequel
328
328
  opts[:key] = opts.default_key unless opts.has_key?(:key)
329
329
  key = opts[:key]
330
330
  key_column = opts[:key_column] ||= opts[:key]
331
- opts[:after_load].unshift(:array_uniq!) if opts[:uniq]
331
+ if opts[:uniq]
332
+ opts[:after_load] ||= []
333
+ opts[:after_load].unshift(:array_uniq!)
334
+ end
332
335
  opts[:dataset] ||= lambda do
333
336
  opts.associated_dataset.where(Sequel.pg_array_op(opts.predicate_key).contains(Sequel.pg_array([get_column_value(pk)], opts.array_type)))
334
337
  end
@@ -408,7 +411,10 @@ module Sequel
408
411
  key = opts[:key]
409
412
  key_column = opts[:key_column] ||= key
410
413
  opts[:eager_loader_key] = nil
411
- opts[:after_load].unshift(:array_uniq!) if opts[:uniq]
414
+ if opts[:uniq]
415
+ opts[:after_load] ||= []
416
+ opts[:after_load].unshift(:array_uniq!)
417
+ end
412
418
  opts[:dataset] ||= lambda do
413
419
  opts.associated_dataset.where(opts.predicate_key=>get_column_value(key).to_a)
414
420
  end
@@ -41,22 +41,13 @@ module Sequel
41
41
  #
42
42
  # Address.register_row_type
43
43
  #
44
- # Note that automatic conversion only works with the native postgres adapter.
45
- # For other adapters that connect to PostgreSQL, you need to call the conversion
46
- # proc manually.
47
- #
48
44
  # In addition to returning row-valued/composite types as instances of Sequel::Model,
49
45
  # this also lets you use model instances in datasets when inserting, updating, and
50
46
  # filtering:
51
47
  #
52
- # DB[:company].insert(:name=>'MS', :address=>
53
- # Address.load(:street=>'123 Foo St', :city=>'Bar Town', :zip=>'12345'))
48
+ # DB[:company].insert(name: 'MS', address:
49
+ # Address.load(street: '123 Foo St', city: 'Bar Town', zip: '12345'))
54
50
  module PgRow
55
- ROW = 'ROW'.freeze
56
- Sequel::Deprecation.deprecate_constant(self, :ROW)
57
- CAST = '::'.freeze
58
- Sequel::Deprecation.deprecate_constant(self, :CAST)
59
-
60
51
  # When loading the extension, make sure the database has the pg_row extension
61
52
  # loaded, load the custom database extensions, and automatically register the
62
53
  # row type if the model has a dataset.
@@ -3,13 +3,11 @@
3
3
  module Sequel
4
4
  module Plugins
5
5
  # The prepared_statements plugin modifies the model to use prepared statements for
6
- # instance level saves (inserts and updates). It also will use prepared statements for
7
- # deletes, refreshes, and class level lookups by primary key, if it thinks that using
8
- # a prepared statement will be faster in such cases.
6
+ # instance level inserts and updates.
9
7
  #
10
8
  # Note that this plugin is unsafe in some circumstances, as it can allow up to
11
9
  # 2^N prepared statements to be created for each type of insert and update query, where
12
- # N is the number of colums in the table. It is recommended that you use the
10
+ # N is the number of columns in the table. It is recommended that you use the
13
11
  # +prepared_statements_safe+ plugin in addition to this plugin to reduce the number
14
12
  # of prepared statements that can be created, unless you tightly control how your
15
13
  # model instances are saved.
@@ -32,12 +30,11 @@ module Sequel
32
30
 
33
31
  # Setup the datastructure used to hold the prepared statements in the model.
34
32
  def self.apply(model)
35
- # SEQUEL5: Drop Support for :fixed/:lookup_sql SQL
36
- model.instance_variable_set(:@prepared_statements, {:insert=>{}, :insert_select=>{}, :update=>{}, :lookup_sql=>{}, :fixed=>{}}.freeze)
33
+ model.instance_variable_set(:@prepared_statements, {:insert=>{}, :insert_select=>{}, :update=>{}}.freeze)
37
34
  end
38
35
 
39
36
  module ClassMethods
40
- Plugins.inherited_instance_variables(self, :@prepared_statements=>lambda{|v| {:insert=>{}, :insert_select=>{}, :update=>{}, :lookup_sql=>{}, :fixed=>{}}.freeze})
37
+ Plugins.inherited_instance_variables(self, :@prepared_statements=>lambda{|v| {:insert=>{}, :insert_select=>{}, :update=>{}}.freeze})
41
38
 
42
39
  private
43
40
 
@@ -48,7 +45,7 @@ module Sequel
48
45
  meth = type == :insert_select ? :returning : :select
49
46
  s = ds.opts[meth]
50
47
  if f && f.length == 1 && !ds.opts[:join] && (!s || s.empty?)
51
- ds = ds.send(meth, *columns.map{|c| Sequel.identifier(c)})
48
+ ds = ds.public_send(meth, *columns.map{|c| Sequel.identifier(c)})
52
49
  end
53
50
 
54
51
  prepare_statement(ds, type, vals)
@@ -62,13 +59,7 @@ module Sequel
62
59
 
63
60
  # Return a sorted array of columns for use as a hash key.
64
61
  def prepared_columns(cols)
65
- RUBY_VERSION >= '1.9' ? cols.sort : cols.sort_by(&:to_s)
66
- end
67
-
68
- # Return a prepared statement that can be used to delete a row from this model's dataset.
69
- def prepared_delete
70
- # SEQUEL5: Remove
71
- cached_prepared_statement(:fixed, :delete){prepare_statement(filter(prepared_statement_key_array(primary_key)), :delete)}
62
+ cols.sort
72
63
  end
73
64
 
74
65
  # Return a prepared statement that can be used to insert a row using the given columns.
@@ -84,18 +75,6 @@ module Sequel
84
75
  end
85
76
  end
86
77
 
87
- # Return a prepared statement that can be used to lookup a row solely based on the primary key.
88
- def prepared_lookup
89
- # SEQUEL5: Remove
90
- cached_prepared_statement(:fixed, :lookup){prepare_explicit_statement(filter(prepared_statement_key_array(primary_key)), :first)}
91
- end
92
-
93
- # Return a prepared statement that can be used to refresh a row to get new column values after insertion.
94
- def prepared_refresh
95
- # SEQUEL5: Remove
96
- cached_prepared_statement(:fixed, :refresh){prepare_explicit_statement(naked.clone(:server=>dataset.opts.fetch(:server, :default)).where(prepared_statement_key_array(primary_key)), :first)}
97
- end
98
-
99
78
  # Return an array of two element arrays with the column symbol as the first entry and the
100
79
  # placeholder symbol as the second entry.
101
80
  def prepared_statement_key_array(keys)
@@ -120,14 +99,7 @@ module Sequel
120
99
 
121
100
  # Return a prepared statement that can be used to update row using the given columns.
122
101
  def prepared_update(cols)
123
- cached_prepared_statement(:update, prepared_columns(cols)){prepare_statement(filter(prepared_statement_key_array(primary_key)), :update, prepared_statement_key_hash(cols))}
124
- end
125
-
126
- # Use a prepared statement to query the database for the row matching the given primary key.
127
- def primary_key_lookup(pk)
128
- return super unless use_prepared_statements_for_pk_lookup?
129
- # SEQUEL5: Remove
130
- prepared_lookup.call(primary_key_hash(pk))
102
+ cached_prepared_statement(:update, prepared_columns(cols)){prepare_statement(where(prepared_statement_key_array(primary_key)), :update, prepared_statement_key_hash(cols))}
131
103
  end
132
104
 
133
105
  # If a prepared statement has already been cached for the given type and subtype,
@@ -153,16 +125,6 @@ module Sequel
153
125
  module InstanceMethods
154
126
  private
155
127
 
156
- # Use a prepared statement to delete the row.
157
- def _delete_without_checking
158
- # SEQUEL5: Remove
159
- if use_prepared_statements_for?(:delete)
160
- _set_prepared_statement_server(model.send(:prepared_delete)).call(pk_hash)
161
- else
162
- super
163
- end
164
- end
165
-
166
128
  # Use a prepared statement to insert the values into the model's dataset.
167
129
  def _insert_raw(ds)
168
130
  if use_prepared_statements_for?(:insert)
@@ -184,16 +146,6 @@ module Sequel
184
146
  end
185
147
  end
186
148
 
187
- # Use a prepared statement to refresh this model's column values.
188
- def _refresh_get(ds)
189
- # SEQUEL5: Remove
190
- if use_prepared_statements_for?(:refresh)
191
- _set_prepared_statement_server(model.send(:prepared_refresh)).call(pk_hash)
192
- else
193
- super
194
- end
195
- end
196
-
197
149
  # Use a prepared statement to update this model's columns in the database.
198
150
  def _update_without_checking(columns)
199
151
  if use_prepared_statements_for?(:update)
@@ -213,7 +165,7 @@ module Sequel
213
165
  end
214
166
 
215
167
  # Whether prepared statements should be used for the given type of query
216
- # (:insert, :insert_select, :refresh, :update, or :delete). True by default,
168
+ # (:insert, :insert_select, :update). True by default,
217
169
  # can be overridden in other plugins to disallow prepared statements for
218
170
  # specific types of queries.
219
171
  def use_prepared_statements_for?(type)
@@ -225,16 +177,11 @@ module Sequel
225
177
  case type
226
178
  when :insert, :insert_select, :update
227
179
  true
228
- # SEQUEL5: Remove :delete/:refresh
229
- when :delete
230
- return true unless model.fast_instance_delete_sql
231
-
232
- # Using deletes for prepared statements appears faster on Oracle and DB2,
233
- # but not for most other database types if optimized SQL is used.
234
- db_type = model.db.database_type
235
- db_type == :oracle || db_type == :db2
236
- when :refresh
237
- !model.fast_pk_lookup_sql
180
+ # :nocov:
181
+ when :delete, :refresh
182
+ Sequel::Deprecation.deprecate("The :delete and :refresh prepared statement types", "There should be no need to check if these types are supported")
183
+ false
184
+ # :nocov:
238
185
  else
239
186
  raise Error, "unsupported type used: #{type.inspect}"
240
187
  end
@@ -28,7 +28,7 @@ module Sequel
28
28
  end
29
29
 
30
30
  module ClassMethods
31
- # A hash with column symbol keys and default values. Instance's
31
+ # A hash with column symbol keys and default values. Instance
32
32
  # values are merged into this hash before creating to reduce the
33
33
  # number of free columns (columns that may or may not be present
34
34
  # in the INSERT statement), as the number of prepared statements
@@ -36,12 +36,12 @@ module Sequel
36
36
  #
37
37
  # # Eager loading - also populates the :parent and children associations
38
38
  # # for all ancestors and descendants
39
- # Model.where(:id=>[1, 2]).eager(:ancestors, :descendants).all
39
+ # Model.where(id: [1, 2]).eager(:ancestors, :descendants).all
40
40
  #
41
- # # Eager loading children and grand children
42
- # Model.where(:id=>[1, 2]).eager(:descendants=>2).all
43
- # # Eager loading children, grand children, and great grand children
44
- # Model.where(:id=>[1, 2]).eager(:descendants=>3).all
41
+ # # Eager loading children and grandchildren
42
+ # Model.where(id: [1, 2]).eager(descendants: 2).all
43
+ # # Eager loading children, grandchildren, and great grandchildren
44
+ # Model.where(id: [1, 2]).eager(descendants: 3).all
45
45
  #
46
46
  # = Options
47
47
  #
@@ -56,8 +56,8 @@ module Sequel
56
56
  # Note that you can change the name of the above associations by specifying
57
57
  # a :name key in the appropriate hash of options above. For example:
58
58
  #
59
- # Model.plugin :rcte_tree, :parent=>{:name=>:mother},
60
- # :children=>{:name=>:daughters}, :descendants=>{:name=>:offspring}
59
+ # Model.plugin :rcte_tree, parent: {name: :mother},
60
+ # children: {name: :daughters}, descendants: {name: :offspring}
61
61
  #
62
62
  # Any other keys in the main options hash are treated as options shared by
63
63
  # all of the associations. Here's a few options that affect the plugin: