sequel 4.49.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,24 +1,24 @@
1
1
  # frozen-string-literal: true
2
2
 
3
3
  module Sequel
4
- # A dataset represents an SQL query, or more generally, an abstract
5
- # set of rows in the database. Datasets
6
- # can be used to create, retrieve, update and delete records.
4
+ # A dataset represents an SQL query. Datasets
5
+ # can be used to select, insert, update and delete records.
7
6
  #
8
7
  # Query results are always retrieved on demand, so a dataset can be kept
9
8
  # around and reused indefinitely (datasets never cache results):
10
9
  #
11
- # my_posts = DB[:posts].where(:author => 'david') # no records are retrieved
10
+ # my_posts = DB[:posts].where(author: 'david') # no records are retrieved
12
11
  # my_posts.all # records are retrieved
13
12
  # my_posts.all # records are retrieved again
14
13
  #
15
- # Most dataset methods return modified copies of the dataset (functional style), so you can
16
- # reuse different datasets to access data:
14
+ # Datasets are frozen and use a functional style where modification methods
15
+ # return modified copies of the the dataset. This allows you to reuse
16
+ # datasets:
17
17
  #
18
18
  # posts = DB[:posts]
19
- # davids_posts = posts.where(:author => 'david')
20
- # old_posts = posts.where('stamp < ?', Date.today - 7)
21
- # davids_old_posts = davids_posts.where('stamp < ?', Date.today - 7)
19
+ # davids_posts = posts.where(author: 'david')
20
+ # old_posts = posts.where{stamp < Date.today - 7}
21
+ # davids_old_posts = davids_posts.where{stamp < Date.today - 7}
22
22
  #
23
23
  # Datasets are Enumerable objects, so they can be manipulated using any
24
24
  # of the Enumerable methods, such as map, inject, etc.
@@ -42,5 +42,13 @@ module Sequel
42
42
  include SQL::StringMethods
43
43
  end
44
44
 
45
- require(%w"query actions features graph prepared_statements misc mutation sql placeholder_literalizer dataset_module", 'dataset')
45
+ require_relative "dataset/query"
46
+ require_relative "dataset/actions"
47
+ require_relative "dataset/features"
48
+ require_relative "dataset/graph"
49
+ require_relative "dataset/prepared_statements"
50
+ require_relative "dataset/misc"
51
+ require_relative "dataset/sql"
52
+ require_relative "dataset/placeholder_literalizer"
53
+ require_relative "dataset/dataset_module"
46
54
  end
@@ -12,12 +12,11 @@ module Sequel
12
12
  # Action methods defined by Sequel that execute code on the database.
13
13
  ACTION_METHODS = (<<-METHS).split.map(&:to_sym).freeze
14
14
  << [] all as_hash avg count columns columns! delete each
15
- empty? fetch_rows first first! get import insert interval last
16
- map max min multi_insert paged_each range select_hash select_hash_groups select_map select_order_map
15
+ empty? fetch_rows first first! get import insert last
16
+ map max min multi_insert paged_each select_hash select_hash_groups select_map select_order_map
17
17
  single_record single_record! single_value single_value! sum to_hash to_hash_groups truncate update
18
18
  where_all where_each where_single_value
19
19
  METHS
20
- # SEQUEL5: Remove interval, range
21
20
 
22
21
  # The clone options to use when retriveing columns for a dataset.
23
22
  COLUMNS_CLONE_OPTIONS = {:distinct => nil, :limit => 1, :offset=>nil, :where=>nil, :having=>nil, :order=>nil, :row_proc=>nil, :graph=>nil, :eager_graph=>nil}.freeze
@@ -25,7 +24,7 @@ module Sequel
25
24
  # Inserts the given argument into the database. Returns self so it
26
25
  # can be used safely when chaining:
27
26
  #
28
- # DB[:items] << {:id=>0, :name=>'Zero'} << DB[:old_items].select(:id, name)
27
+ # DB[:items] << {id: 0, name: 'Zero'} << DB[:old_items].select(:id, name)
29
28
  def <<(arg)
30
29
  insert(arg)
31
30
  self
@@ -33,8 +32,8 @@ module Sequel
33
32
 
34
33
  # Returns the first record matching the conditions. Examples:
35
34
  #
36
- # DB[:table][:id=>1] # SELECT * FROM table WHERE (id = 1) LIMIT 1
37
- # # => {:id=1}
35
+ # DB[:table][id: 1] # SELECT * FROM table WHERE (id = 1) LIMIT 1
36
+ # # => {:id=>1}
38
37
  def [](*conditions)
39
38
  raise(Error, 'You cannot call Dataset#[] with an integer or with no arguments') if (conditions.length == 1 and conditions.first.is_a?(Integer)) or conditions.length == 0
40
39
  first(*conditions)
@@ -92,6 +91,8 @@ module Sequel
92
91
  end
93
92
  end
94
93
 
94
+ COUNT_SELECT = Sequel.function(:count).*.as(:count)
95
+
95
96
  # Returns the number of records in the dataset. If an argument is provided,
96
97
  # it is used as the argument to count. If a block is provided, it is
97
98
  # treated as a virtual row, and the result is used as the argument to
@@ -106,8 +107,7 @@ module Sequel
106
107
  def count(arg=(no_arg=true), &block)
107
108
  if no_arg && !block
108
109
  cached_dataset(:_count_ds) do
109
- aggregate_dataset.select(Sequel.function(:count).*.as(:count)).single_value_ds
110
- #aggregate_dataset.select(COUNT_SELECT).single_value_ds # SEQUEL5
110
+ aggregate_dataset.select(COUNT_SELECT).single_value_ds
111
111
  end.single_value!.to_i
112
112
  else
113
113
  if block
@@ -121,12 +121,8 @@ module Sequel
121
121
  _aggregate(:count, arg)
122
122
  end
123
123
  end
124
- # SEQUEL5
125
- #COUNT_SELECT = Sequel.function(:count).*.as(:count)
126
- #private_constant :COUNT_SELECT
127
124
 
128
- # Deletes the records in the dataset. The returned value should be
129
- # number of records deleted, but that is adapter dependent.
125
+ # Deletes the records in the dataset, returning the number of records deleted.
130
126
  #
131
127
  # DB[:table].delete # DELETE * FROM table
132
128
  # # => 3
@@ -157,24 +153,22 @@ module Sequel
157
153
  self
158
154
  end
159
155
 
156
+ EMPTY_SELECT = Sequel::SQL::AliasedExpression.new(1, :one)
157
+
160
158
  # Returns true if no records exist in the dataset, false otherwise
161
159
  #
162
160
  # DB[:table].empty? # SELECT 1 AS one FROM table LIMIT 1
163
161
  # # => false
164
162
  def empty?
165
163
  cached_dataset(:_empty_ds) do
166
- single_value_ds.unordered.select(Sequel::SQL::AliasedExpression.new(1, :one))
167
- # single_value_ds.unordered.select(EMPTY_SELECT) # SEQUEL5
164
+ single_value_ds.unordered.select(EMPTY_SELECT)
168
165
  end.single_value!.nil?
169
166
  end
170
- # SEQUEL5
171
- #EMPTY_SELECT = Sequel::SQL::AliasedExpression.new(1, :one)
172
- #private_constant :EMPTY_SELECT
173
167
 
168
+ # Returns the first matching record if no arguments are given.
174
169
  # If a integer argument is given, it is interpreted as a limit, and then returns all
175
- # matching records up to that limit. If no argument is passed,
176
- # it returns the first matching record. If any other type of
177
- # argument(s) is passed, it is given to filter and the
170
+ # matching records up to that limit. If any other type of
171
+ # argument(s) is passed, it is treated as a filter and the
178
172
  # first matching record is returned. If a block is given, it is used
179
173
  # to filter the dataset before returning anything.
180
174
  #
@@ -189,19 +183,19 @@ module Sequel
189
183
  # DB[:table].first(2) # SELECT * FROM table LIMIT 2
190
184
  # # => [{:id=>6}, {:id=>4}]
191
185
  #
192
- # DB[:table].first(:id=>2) # SELECT * FROM table WHERE (id = 2) LIMIT 1
186
+ # DB[:table].first(id: 2) # SELECT * FROM table WHERE (id = 2) LIMIT 1
193
187
  # # => {:id=>2}
194
188
  #
195
- # DB[:table].first("id = 3") # SELECT * FROM table WHERE (id = 3) LIMIT 1
189
+ # DB[:table].first(Sequel.lit("id = 3")) # SELECT * FROM table WHERE (id = 3) LIMIT 1
196
190
  # # => {:id=>3}
197
191
  #
198
- # DB[:table].first("id = ?", 4) # SELECT * FROM table WHERE (id = 4) LIMIT 1
192
+ # DB[:table].first(Sequel.lit("id = ?", 4)) # SELECT * FROM table WHERE (id = 4) LIMIT 1
199
193
  # # => {:id=>4}
200
194
  #
201
195
  # DB[:table].first{id > 2} # SELECT * FROM table WHERE (id > 2) LIMIT 1
202
196
  # # => {:id=>5}
203
197
  #
204
- # DB[:table].first("id > ?", 4){id < 6} # SELECT * FROM table WHERE ((id > 4) AND (id < 6)) LIMIT 1
198
+ # DB[:table].first(Sequel.lit("id > ?", 4)){id < 6} # SELECT * FROM table WHERE ((id > 4) AND (id < 6)) LIMIT 1
205
199
  # # => {:id=>5}
206
200
  #
207
201
  # DB[:table].first(2){id < 2} # SELECT * FROM table WHERE (id < 2) LIMIT 2
@@ -361,7 +355,8 @@ module Sequel
361
355
  end
362
356
 
363
357
  # Inserts values into the associated table. The returned value is generally
364
- # the value of the primary key for the inserted row, but that is adapter dependent.
358
+ # the value of the autoincremented primary key for the inserted row, assuming that
359
+ # the a single row is inserted and the table has an autoincrementing primary key.
365
360
  #
366
361
  # +insert+ handles a number of different argument formats:
367
362
  # no arguments or single empty hash :: Uses DEFAULT VALUES
@@ -387,7 +382,7 @@ module Sequel
387
382
  # DB[:items].insert([:a, :b], [1,2])
388
383
  # # INSERT INTO items (a, b) VALUES (1, 2)
389
384
  #
390
- # DB[:items].insert(:a => 1, :b => 2)
385
+ # DB[:items].insert(a: 1, b: 2)
391
386
  # # INSERT INTO items (a, b) VALUES (1, 2)
392
387
  #
393
388
  # DB[:items].insert(DB[:old_items])
@@ -404,26 +399,6 @@ module Sequel
404
399
  end
405
400
  end
406
401
 
407
- # Returns the interval between minimum and maximum values for the given
408
- # column/expression. Uses a virtual row block if no argument is given.
409
- #
410
- # DB[:table].interval(:id) # SELECT (max(id) - min(id)) FROM table LIMIT 1
411
- # # => 6
412
- # DB[:table].interval{function(column)} # SELECT (max(function(column)) - min(function(column))) FROM table LIMIT 1
413
- # # => 7
414
- def interval(column=Sequel.virtual_row(&Proc.new))
415
- Sequel::Deprecation.deprecate("Sequel::Dataset#interval", "Use #max - #min, or use the sequel_4_dataset_methods extension")
416
- if loader = cached_placeholder_literalizer(:_interval_loader) do |pl|
417
- arg = pl.arg
418
- aggregate_dataset.limit(1).select((SQL::Function.new(:max, arg) - SQL::Function.new(:min, arg)).as(:interval))
419
- end
420
-
421
- loader.get(column)
422
- else
423
- aggregate_dataset.get{(max(column) - min(column)).as(:interval)}
424
- end
425
- end
426
-
427
402
  # Reverses the order and then runs #first with the given arguments and block. Note that this
428
403
  # will not necessarily give you the last record in the dataset,
429
404
  # unless you have an unambiguous order. If there is not
@@ -439,8 +414,8 @@ module Sequel
439
414
  reverse.first(*args, &block)
440
415
  end
441
416
 
442
- # Maps column values for each record in the dataset (if a column name is
443
- # given), or performs the stock mapping functionality of +Enumerable+ otherwise.
417
+ # Maps column values for each record in the dataset (if an argument is given)
418
+ # or performs the stock mapping functionality of +Enumerable+ otherwise.
444
419
  # Raises an +Error+ if both an argument and block are given.
445
420
  #
446
421
  # DB[:table].map(:id) # SELECT * FROM table
@@ -492,7 +467,7 @@ module Sequel
492
467
  # This is a front end for import that allows you to submit an array of
493
468
  # hashes instead of arrays of columns and values:
494
469
  #
495
- # DB[:table].multi_insert([{:x => 1}, {:x => 2}])
470
+ # DB[:table].multi_insert([{x: 1}, {x: 2}])
496
471
  # # INSERT INTO table (x) VALUES (1)
497
472
  # # INSERT INTO table (x) VALUES (2)
498
473
  #
@@ -528,7 +503,7 @@ module Sequel
528
503
  # selecting the columns you are ordering by, and none of the columns can contain
529
504
  # NULLs. Note that some Sequel adapters have optimized implementations that will
530
505
  # use cursors or streaming regardless of the :strategy option used.
531
- # :filter_values :: If the :strategy=>:filter option is used, this option should be a proc
506
+ # :filter_values :: If the strategy: :filter option is used, this option should be a proc
532
507
  # that accepts the last retreived row for the previous page and an array of
533
508
  # ORDER BY expressions, and returns an array of values relating to those
534
509
  # expressions for the last retrieved row. You will need to use this option
@@ -548,13 +523,13 @@ module Sequel
548
523
  # # SELECT * FROM table ORDER BY id LIMIT 100 OFFSET 100
549
524
  # # ...
550
525
  #
551
- # DB[:table].order(:id).paged_each(:strategy=>:filter){|row| }
526
+ # DB[:table].order(:id).paged_each(strategy: :filter){|row| }
552
527
  # # SELECT * FROM table ORDER BY id LIMIT 1000
553
528
  # # SELECT * FROM table WHERE id > 1001 ORDER BY id LIMIT 1000
554
529
  # # ...
555
530
  #
556
- # DB[:table].order(:table__id).paged_each(:strategy=>:filter,
557
- # :filter_values=>proc{|row, exprs| [row[:id]]}){|row| }
531
+ # DB[:table].order(:id).paged_each(strategy: :filter,
532
+ # filter_values: lambda{|row, exprs| [row[:id]]}){|row| }
558
533
  # # SELECT * FROM table ORDER BY id LIMIT 1000
559
534
  # # SELECT * FROM table WHERE id > 1001 ORDER BY id LIMIT 1000
560
535
  # # ...
@@ -618,30 +593,6 @@ module Sequel
618
593
  self
619
594
  end
620
595
 
621
- # Returns a +Range+ instance made from the minimum and maximum values for the
622
- # given column/expression. Uses a virtual row block if no argument is given.
623
- #
624
- # DB[:table].range(:id) # SELECT max(id) AS v1, min(id) AS v2 FROM table LIMIT 1
625
- # # => 1..10
626
- # DB[:table].interval{function(column)} # SELECT max(function(column)) AS v1, min(function(column)) AS v2 FROM table LIMIT 1
627
- # # => 0..7
628
- def range(column=Sequel.virtual_row(&Proc.new))
629
- Sequel::Deprecation.deprecate("Sequel::Dataset#range", "Use #min..#max, or use the sequel_4_dataset_methods extension")
630
- r = if loader = cached_placeholder_literalizer(:_range_loader) do |pl|
631
- arg = pl.arg
632
- aggregate_dataset.limit(1).select(SQL::Function.new(:min, arg).as(:v1), SQL::Function.new(:max, arg).as(:v2))
633
- end
634
-
635
- loader.first(column)
636
- else
637
- aggregate_dataset.select{[min(column).as(v1), max(column).as(v2)]}.first
638
- end
639
-
640
- if r
641
- (r[:v1]..r[:v2])
642
- end
643
- end
644
-
645
596
  # Returns a hash with key_column values as keys and value_column values as
646
597
  # values. Similar to as_hash, but only selects the columns given. Like
647
598
  # as_hash, it accepts an optional :hash parameter, into which entries will
@@ -657,8 +608,7 @@ module Sequel
657
608
  # # {[1, 3]=>['a', 'c'], [2, 4]=>['b', 'd'], ...}
658
609
  #
659
610
  # When using this method, you must be sure that each expression has an alias
660
- # that Sequel can determine. Usually you can do this by calling the #as method
661
- # on the expression and providing an alias.
611
+ # that Sequel can determine.
662
612
  def select_hash(key_column, value_column, opts = OPTS)
663
613
  _select_hash(:as_hash, key_column, value_column, opts)
664
614
  end
@@ -677,8 +627,7 @@ module Sequel
677
627
  # # {['a', 'b']=>[['c', 1], ['d', 2], ...], ...}
678
628
  #
679
629
  # When using this method, you must be sure that each expression has an alias
680
- # that Sequel can determine. Usually you can do this by calling the #as method
681
- # on the expression and providing an alias.
630
+ # that Sequel can determine.
682
631
  def select_hash_groups(key_column, value_column, opts = OPTS)
683
632
  _select_hash(:to_hash_groups, key_column, value_column, opts)
684
633
  end
@@ -701,8 +650,7 @@ module Sequel
701
650
  # # => [[1, 'A'], [2, 'B'], [3, 'C'], ...]
702
651
  #
703
652
  # If you provide an array of expressions, you must be sure that each entry
704
- # in the array has an alias that Sequel can determine. Usually you can do this
705
- # by calling the #as method on the expression and providing an alias.
653
+ # in the array has an alias that Sequel can determine.
706
654
  def select_map(column=nil, &block)
707
655
  _select_map(column, false, &block)
708
656
  end
@@ -721,8 +669,7 @@ module Sequel
721
669
  # # => [[1, 'A'], [2, 'B'], [3, 'C'], ...]
722
670
  #
723
671
  # If you provide an array of expressions, you must be sure that each entry
724
- # in the array has an alias that Sequel can determine. Usually you can do this
725
- # by calling the #as method on the expression and providing an alias.
672
+ # in the array has an alias that Sequel can determine.
726
673
  def select_order_map(column=nil, &block)
727
674
  _select_map(column, true, &block)
728
675
  end
@@ -817,21 +764,21 @@ module Sequel
817
764
  return naked.as_hash(key_column, value_column, opts) if row_proc
818
765
  if value_column.is_a?(Array)
819
766
  if key_column.is_a?(Array)
820
- send(meth){|r| h[r.values_at(*key_column)] = r.values_at(*value_column)}
767
+ public_send(meth){|r| h[r.values_at(*key_column)] = r.values_at(*value_column)}
821
768
  else
822
- send(meth){|r| h[r[key_column]] = r.values_at(*value_column)}
769
+ public_send(meth){|r| h[r[key_column]] = r.values_at(*value_column)}
823
770
  end
824
771
  else
825
772
  if key_column.is_a?(Array)
826
- send(meth){|r| h[r.values_at(*key_column)] = r[value_column]}
773
+ public_send(meth){|r| h[r.values_at(*key_column)] = r[value_column]}
827
774
  else
828
- send(meth){|r| h[r[key_column]] = r[value_column]}
775
+ public_send(meth){|r| h[r[key_column]] = r[value_column]}
829
776
  end
830
777
  end
831
778
  elsif key_column.is_a?(Array)
832
- send(meth){|r| h[key_column.map{|k| r[k]}] = r}
779
+ public_send(meth){|r| h[key_column.map{|k| r[k]}] = r}
833
780
  else
834
- send(meth){|r| h[r[key_column]] = r}
781
+ public_send(meth){|r| h[r[key_column]] = r}
835
782
  end
836
783
  h
837
784
  end
@@ -872,21 +819,21 @@ module Sequel
872
819
  return naked.to_hash_groups(key_column, value_column, opts) if row_proc
873
820
  if value_column.is_a?(Array)
874
821
  if key_column.is_a?(Array)
875
- send(meth){|r| (h[r.values_at(*key_column)] ||= []) << r.values_at(*value_column)}
822
+ public_send(meth){|r| (h[r.values_at(*key_column)] ||= []) << r.values_at(*value_column)}
876
823
  else
877
- send(meth){|r| (h[r[key_column]] ||= []) << r.values_at(*value_column)}
824
+ public_send(meth){|r| (h[r[key_column]] ||= []) << r.values_at(*value_column)}
878
825
  end
879
826
  else
880
827
  if key_column.is_a?(Array)
881
- send(meth){|r| (h[r.values_at(*key_column)] ||= []) << r[value_column]}
828
+ public_send(meth){|r| (h[r.values_at(*key_column)] ||= []) << r[value_column]}
882
829
  else
883
- send(meth){|r| (h[r[key_column]] ||= []) << r[value_column]}
830
+ public_send(meth){|r| (h[r[key_column]] ||= []) << r[value_column]}
884
831
  end
885
832
  end
886
833
  elsif key_column.is_a?(Array)
887
- send(meth){|r| (h[key_column.map{|k| r[k]}] ||= []) << r}
834
+ public_send(meth){|r| (h[key_column.map{|k| r[k]}] ||= []) << r}
888
835
  else
889
- send(meth){|r| (h[r[key_column]] ||= []) << r}
836
+ public_send(meth){|r| (h[r[key_column]] ||= []) << r}
890
837
  end
891
838
  h
892
839
  end
@@ -899,15 +846,14 @@ module Sequel
899
846
  execute_ddl(truncate_sql)
900
847
  end
901
848
 
902
- # Updates values for the dataset. The returned value is generally the
903
- # number of rows updated, but that is adapter dependent. +values+ should
904
- # a hash where the keys are columns to set and values are the values to
849
+ # Updates values for the dataset. The returned value is the number of rows updated.
850
+ # +values+ should be a hash where the keys are columns to set and values are the values to
905
851
  # which to set the columns.
906
852
  #
907
- # DB[:table].update(:x=>nil) # UPDATE table SET x = NULL
853
+ # DB[:table].update(x: nil) # UPDATE table SET x = NULL
908
854
  # # => 10
909
855
  #
910
- # DB[:table].update(:x=>Sequel[:x]+1, :y=>0) # UPDATE table SET x = (x + 1), y = 0
856
+ # DB[:table].update(x: Sequel[:x]+1, y: 0) # UPDATE table SET x = (x + 1), y = 0
911
857
  # # => 10
912
858
  def update(values=OPTS, &block)
913
859
  sql = update_sql(values)
@@ -922,7 +868,7 @@ module Sequel
922
868
  # yielding each row to the given block. Basically the same as where(cond).all(&block),
923
869
  # except it can be optimized to not create an intermediate dataset.
924
870
  #
925
- # DB[:table].where_all(:id=>[1,2,3])
871
+ # DB[:table].where_all(id: [1,2,3])
926
872
  # # SELECT * FROM table WHERE (id IN (1, 2, 3))
927
873
  def where_all(cond, &block)
928
874
  if loader = _where_loader
@@ -936,7 +882,7 @@ module Sequel
936
882
  # yielding each row to the given block. Basically the same as where(cond).each(&block),
937
883
  # except it can be optimized to not create an intermediate dataset.
938
884
  #
939
- # DB[:table].where_each(:id=>[1,2,3]){|row| p row}
885
+ # DB[:table].where_each(id: [1,2,3]){|row| p row}
940
886
  # # SELECT * FROM table WHERE (id IN (1, 2, 3))
941
887
  def where_each(cond, &block)
942
888
  if loader = _where_loader
@@ -951,7 +897,7 @@ module Sequel
951
897
  # a single column. Basically the same as where(cond).single_value,
952
898
  # except it can be optimized to not create an intermediate dataset.
953
899
  #
954
- # DB[:table].select(:name).where_single_value(:id=>1)
900
+ # DB[:table].select(:name).where_single_value(id: 1)
955
901
  # # SELECT name FROM table WHERE (id = 1) LIMIT 1
956
902
  def where_single_value(cond)
957
903
  if loader = cached_placeholder_literalizer(:_where_single_value_loader) do |pl|
@@ -1069,7 +1015,7 @@ module Sequel
1069
1015
  # Internals of +select_hash+ and +select_hash_groups+
1070
1016
  def _select_hash(meth, key_column, value_column, opts=OPTS)
1071
1017
  select(*(key_column.is_a?(Array) ? key_column : [key_column]) + (value_column.is_a?(Array) ? value_column : [value_column])).
1072
- send(meth, hash_key_symbols(key_column), hash_key_symbols(value_column), opts)
1018
+ public_send(meth, hash_key_symbols(key_column), hash_key_symbols(value_column), opts)
1073
1019
  end
1074
1020
 
1075
1021
  # Internals of +select_map+ and +select_order_map+
@@ -17,20 +17,8 @@ module Sequel
17
17
  # DB[:table].active.with_id_and_name.by_id
18
18
  # # SELECT id, name FROM table WHERE active ORDER BY id
19
19
  class DatasetModule < ::Module
20
- %w'where exclude exclude_having having'.map(&:to_sym).each do |meth|
21
- define_method(meth) do |name, *args, &block|
22
- if block || args.flatten.any?{|arg| arg.is_a?(Proc)}
23
- define_method(name){send(meth, *args, &block)}
24
- else
25
- key = :"_#{meth}_#{name}_ds"
26
- define_method(name) do
27
- cached_dataset(key){send(meth, *args)}
28
- end
29
- end
30
- end
31
- end
32
-
33
20
  meths = (<<-METHS).split.map(&:to_sym)
21
+ where exclude exclude_having having
34
22
  distinct grep group group_and_count group_append
35
23
  limit offset order order_append order_prepend
36
24
  select select_all select_append select_group server
@@ -40,11 +28,11 @@ module Sequel
40
28
  def self.def_dataset_caching_method(mod, meth)
41
29
  mod.send(:define_method, meth) do |name, *args, &block|
42
30
  if block
43
- define_method(name){send(meth, *args, &block)}
31
+ define_method(name){public_send(meth, *args, &block)}
44
32
  else
45
33
  key = :"_#{meth}_#{name}_ds"
46
34
  define_method(name) do
47
- cached_dataset(key){send(meth, *args)}
35
+ cached_dataset(key){public_send(meth, *args)}
48
36
  end
49
37
  end
50
38
  end