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
@@ -75,7 +75,7 @@ module Sequel
75
75
 
76
76
  (
77
77
  # Error raised on an invalid operation, such as trying to update or delete
78
- # a joined or grouped dataset.
78
+ # a joined or grouped dataset when the database does not support that.
79
79
  InvalidOperation = Class.new(Error)
80
80
  ).name
81
81
 
@@ -113,20 +113,4 @@ module Sequel
113
113
  # and won't reraise it (unless a reraise is requested).
114
114
  Rollback = Class.new(Error)
115
115
  ).name
116
-
117
- # SEQUEL5: Remove
118
- (UnbindDuplicate = Class.new(Error)).name
119
-
120
- Error::AdapterNotFound = AdapterNotFound
121
- Error::InvalidOperation = InvalidOperation
122
- Error::InvalidValue = InvalidValue
123
- Error::PoolTimeoutError = PoolTimeout
124
- Error::Rollback = Rollback
125
-
126
- Sequel::Deprecation.deprecate_constant(self, :UnbindDuplicate)
127
- Sequel::Deprecation.deprecate_constant(Error, :AdapterNotFound)
128
- Sequel::Deprecation.deprecate_constant(Error, :InvalidOperation)
129
- Sequel::Deprecation.deprecate_constant(Error, :InvalidValue)
130
- Sequel::Deprecation.deprecate_constant(Error, :PoolTimeoutError)
131
- Sequel::Deprecation.deprecate_constant(Error, :Rollback)
132
116
  end
@@ -4,13 +4,6 @@ module Sequel
4
4
  module Plugins
5
5
  module PgRow
6
6
  module DatabaseMethods
7
- ESCAPE_RE = /("|\\)/.freeze
8
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
9
- ESCAPE_REPLACEMENT = '\\\\\1'.freeze
10
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACEMENT)
11
- COMMA = ','
12
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
13
-
14
7
  # Handle Sequel::Model instances in bound variables.
15
8
  def bound_variable_arg(arg, conn)
16
9
  case arg
@@ -27,7 +27,7 @@ module Sequel
27
27
 
28
28
  # Return the string that #print will print via puts.
29
29
  def self.string(records, columns = nil) # records is an array of hashes
30
- columns ||= records.first.keys.sort_by(&:to_s)
30
+ columns ||= records.first.keys.sort
31
31
  sizes = column_sizes(records, columns)
32
32
  sep_line = separator_line(columns, sizes)
33
33
 
@@ -37,8 +37,6 @@ module Sequel
37
37
  array.join("\n")
38
38
  end
39
39
 
40
- ### Private Module Methods ###
41
-
42
40
  # Hash of the maximum size of the value for each column
43
41
  def self.column_sizes(records, columns) # :nodoc:
44
42
  sizes = Hash.new {0}
@@ -9,34 +9,34 @@
9
9
  # Then you can pass arbitrary connection options for the server/shard
10
10
  # to use as a hash:
11
11
  #
12
- # DB[:table].server(:host=>'...', :database=>'...').all
12
+ # DB[:table].server(host: '...', database: '...').all
13
13
  #
14
14
  # Because Sequel can never be sure that the connection will be reused,
15
15
  # arbitrary connections are disconnected as soon as the outermost block
16
16
  # that uses them exits. So this example uses the same connection:
17
17
  #
18
- # DB.transaction(:server=>{:host=>'...', :database=>'...'}) do |c|
19
- # DB.transaction(:server=>{:host=>'...', :database=>'...'}) do |c2|
18
+ # DB.transaction(server: {host: '...', database: '...'}) do |c|
19
+ # DB.transaction(server: {host: '...', database: '...'}) do |c2|
20
20
  # # c == c2
21
21
  # end
22
22
  # end
23
23
  #
24
24
  # But this example does not:
25
25
  #
26
- # DB.transaction(:server=>{:host=>'...', :database=>'...'}) do |c|
26
+ # DB.transaction(server: {host: '...', database: '...'}) do |c|
27
27
  # end
28
- # DB.transaction(:server=>{:host=>'...', :database=>'...'}) do |c2|
28
+ # DB.transaction(server: {host: '...', database: '...'}) do |c2|
29
29
  # # c != c2
30
30
  # end
31
31
  #
32
32
  # You can use this extension in conjunction with the server_block
33
33
  # extension:
34
34
  #
35
- # DB.with_server(:host=>'...', :database=>'...') do
35
+ # DB.with_server(host: '...', database: '...') do
36
36
  # DB.synchronize do
37
37
  # # All of these use the host/database given to with_server
38
- # DB[:table].insert(:c=>1)
39
- # DB[:table].update(:c=>2)
38
+ # DB[:table].insert(c: 1)
39
+ # DB[:table].update(c: 2)
40
40
  # DB.tables
41
41
  # DB[:table].all
42
42
  # end
@@ -46,8 +46,8 @@
46
46
  # extension may want to do the following to so that you don't need
47
47
  # to call synchronize separately:
48
48
  #
49
- # def DB.with_server(*)
50
- # super{synchronize{yield}}
49
+ # def DB.with_server(*a)
50
+ # super(*a){synchronize{yield}}
51
51
  # end
52
52
  #
53
53
  # Note that this extension only works with the sharded threaded connection
@@ -40,7 +40,7 @@ module Sequel
40
40
 
41
41
  # Initialize the data structures used by this extension.
42
42
  def self.extended(pool)
43
- pool.instance_eval do
43
+ pool.instance_exec do
44
44
  sync do
45
45
  @connection_expiration_timestamps ||= {}
46
46
  @connection_expiration_timeout ||= 14400
@@ -60,7 +60,7 @@ module Sequel
60
60
 
61
61
  # Initialize the data structures used by this extension.
62
62
  def self.extended(pool)
63
- pool.instance_eval do
63
+ pool.instance_exec do
64
64
  sync do
65
65
  @connection_timestamps ||= {}
66
66
  @connection_validation_timeout ||= 3600
@@ -22,7 +22,7 @@
22
22
  # generally want to create it first, before creating any other application
23
23
  # tables.
24
24
  #
25
- # Because migrations instance_eval the up and down blocks on a database,
25
+ # Because migrations instance_exec the up and down blocks on a database,
26
26
  # using this extension in a migration can be done via:
27
27
  #
28
28
  # Sequel.migration do
@@ -43,7 +43,7 @@
43
43
  # similar to the validation_helpers model plugin API. However,
44
44
  # instead of having separate validates_* methods, it just adds a validate
45
45
  # method that accepts a block to the schema generators. Like the
46
- # create_table and alter_table blocks, this block is instance_evaled and
46
+ # create_table and alter_table blocks, this block is instance_execed and
47
47
  # offers its own DSL. Example:
48
48
  #
49
49
  # DB.create_table(:table) do
@@ -56,8 +56,8 @@
56
56
  # end
57
57
  # end
58
58
  #
59
- # instance_eval is used in this case because create_table and alter_table
60
- # already use instance_eval, so losing access to the surrounding receiver
59
+ # instance_exec is used in this case because create_table and alter_table
60
+ # already use instance_exec, so losing access to the surrounding receiver
61
61
  # is not an issue.
62
62
  #
63
63
  # Here's a breakdown of the constraints created for each constraint validation
@@ -196,9 +196,9 @@ module Sequel
196
196
  @generator.validation({:type=>:drop, :name=>constraint})
197
197
  end
198
198
 
199
- # Alias of instance_eval for a nicer API.
199
+ # Alias of instance_exec for a nicer API.
200
200
  def process(&block)
201
- instance_eval(&block)
201
+ instance_exec(&block)
202
202
  end
203
203
  end
204
204
 
@@ -260,7 +260,7 @@ module Sequel
260
260
  super do
261
261
  extend CreateTableGeneratorMethods
262
262
  @validations = []
263
- instance_eval(&block) if block
263
+ instance_exec(&block) if block
264
264
  end
265
265
  end
266
266
 
@@ -308,7 +308,7 @@ module Sequel
308
308
  super do
309
309
  extend AlterTableGeneratorMethods
310
310
  @validations = []
311
- instance_eval(&block) if block
311
+ instance_exec(&block) if block
312
312
  end
313
313
  end
314
314
 
@@ -374,10 +374,10 @@ module Sequel
374
374
  when :max_length
375
375
  generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| Sequel.char_length(c) <= arg}))
376
376
  when *REVERSE_OPERATOR_MAP.keys
377
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| Sequel.identifier(c).send(REVERSE_OPERATOR_MAP[validation_type], arg)}))
377
+ generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| Sequel.identifier(c).public_send(REVERSE_OPERATOR_MAP[validation_type], arg)}))
378
378
  when :length_range
379
379
  op = arg.exclude_end? ? :< : :<=
380
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| (Sequel.char_length(c) >= arg.begin) & Sequel.char_length(c).send(op, arg.end)}))
380
+ generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| (Sequel.char_length(c) >= arg.begin) & Sequel.char_length(c).public_send(op, arg.end)}))
381
381
  arg = "#{arg.begin}..#{'.' if arg.exclude_end?}#{arg.end}"
382
382
  when :format
383
383
  generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| {c => arg}}))
@@ -407,7 +407,7 @@ module Sequel
407
407
  raise Error, "validates includes only supports arrays and ranges currently, cannot handle: #{arg.inspect}"
408
408
  end
409
409
  when :like, :ilike
410
- generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| Sequel.send(validation_type, c, arg)}))
410
+ generator_add_constraint_from_validation(generator, val, Sequel.&(*columns.map{|c| Sequel.public_send(validation_type, c, arg)}))
411
411
  when :unique
412
412
  generator.unique(columns, :name=>constraint)
413
413
  columns = [columns.join(',')]
@@ -21,8 +21,8 @@ class Array
21
21
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this array, not matching all of the
22
22
  # conditions.
23
23
  #
24
- # ~[[:a, true]] # SQL: a IS NOT TRUE
25
- # ~[[:a, 1], [:b, [2, 3]]] # SQL: a != 1 OR b NOT IN (2, 3)
24
+ # ~[[:a, true]] # SQL: (a IS NOT TRUE)
25
+ # ~[[:a, 1], [:b, [2, 3]]] # SQL: ((a != 1) OR (b NOT IN (2, 3)))
26
26
  def ~
27
27
  Sequel.~(self)
28
28
  end
@@ -30,7 +30,7 @@ class Array
30
30
  # Return a <tt>Sequel::SQL::CaseExpression</tt> with this array as the conditions and the given
31
31
  # default value and expression.
32
32
  #
33
- # [[{:a=>[2,3]}, 1]].case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
33
+ # [[{a: [2,3]}, 1]].case(0) # SQL: CASE WHEN (a IN (2, 3)) THEN 1 ELSE 0 END
34
34
  # [[:a, 1], [:b, 2]].case(:d, :c) # SQL: CASE c WHEN a THEN 1 WHEN b THEN 2 ELSE d END
35
35
  def case(*args)
36
36
  ::Sequel::SQL::CaseExpression.new(self, *args)
@@ -42,16 +42,12 @@ class Array
42
42
  # this array as a value in a filter, but may be necessary if you are using it as a
43
43
  # value with placeholder SQL:
44
44
  #
45
- # DB[:a].where([:a, :b]=>[[1, 2], [3, 4]]) # SQL: (a, b) IN ((1, 2), (3, 4))
46
- # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: (a, b) IN ((1 = 2) AND (3 = 4))
47
- # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]].sql_value_list) # SQL: (a, b) IN ((1, 2), (3, 4))
45
+ # DB[:a].where([:a, :b]=>[[1, 2], [3, 4]]) # SQL: ((a, b) IN ((1, 2), (3, 4)))
46
+ # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: ((a, b) IN ((1 = 2) AND (3 = 4)))
47
+ # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]].sql_value_list) # SQL: ((a, b) IN ((1, 2), (3, 4)))
48
48
  def sql_value_list
49
49
  ::Sequel::SQL::ValueList.new(self)
50
50
  end
51
- def sql_array
52
- Sequel::Deprecation.deprecate("Array#sql_array in the core_extensions extension", "Use Array#sql_value_list instead")
53
- sql_value_list
54
- end
55
51
 
56
52
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this array, matching all of the
57
53
  # conditions. Rarely do you need to call this explicitly, as Sequel generally
@@ -60,8 +56,8 @@ class Array
60
56
  # and want to use the = operator instead of the IN operator (which is used by default for
61
57
  # arrays of two element arrays).
62
58
  #
63
- # [[:a, true]].sql_expr # SQL: a IS TRUE
64
- # [[:a, 1], [:b, [2, 3]]].sql_expr # SQL: a = 1 AND b IN (2, 3)
59
+ # [[:a, true]].sql_expr # SQL: (a IS TRUE)
60
+ # [[:a, 1], [:b, [2, 3]]].sql_expr # SQL: ((a = 1) AND (b IN (2, 3)))
65
61
  def sql_expr
66
62
  Sequel[self]
67
63
  end
@@ -69,8 +65,8 @@ class Array
69
65
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this array, matching none
70
66
  # of the conditions.
71
67
  #
72
- # [[:a, true]].sql_negate # SQL: a IS NOT TRUE
73
- # [[:a, 1], [:b, [2, 3]]].sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
68
+ # [[:a, true]].sql_negate # SQL: (a IS NOT TRUE)
69
+ # [[:a, 1], [:b, [2, 3]]].sql_negate # SQL: ((a != 1) AND (b NOT IN (2, 3)))
74
70
  def sql_negate
75
71
  Sequel.negate(self)
76
72
  end
@@ -78,8 +74,8 @@ class Array
78
74
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this array, matching any of the
79
75
  # conditions.
80
76
  #
81
- # [[:a, true]].sql_or # SQL: a IS TRUE
82
- # [[:a, 1], [:b, [2, 3]]].sql_or # SQL: a = 1 OR b IN (2, 3)
77
+ # [[:a, true]].sql_or # SQL: (a IS TRUE)
78
+ # [[:a, 1], [:b, [2, 3]]].sql_or # SQL: ((a = 1) OR (b IN (2, 3)))
83
79
  def sql_or
84
80
  Sequel.or(self)
85
81
  end
@@ -90,9 +86,9 @@ class Array
90
86
  # concatenation.
91
87
  #
92
88
  # [:a].sql_string_join # SQL: a
93
- # [:a, :b].sql_string_join # SQL: a || b
94
- # [:a, 'b'].sql_string_join # SQL: a || 'b'
95
- # ['a', :b].sql_string_join(' ') # SQL: 'a' || ' ' || b
89
+ # [:a, :b].sql_string_join # SQL: (a || b)
90
+ # [:a, 'b'].sql_string_join # SQL: (a || 'b')
91
+ # ['a', :b].sql_string_join(' ') # SQL: ('a' || ' ' || b)
96
92
  def sql_string_join(joiner=nil)
97
93
  Sequel.join(self, joiner)
98
94
  end
@@ -104,8 +100,8 @@ class Hash
104
100
  # all of the conditions in this hash and the condition specified by
105
101
  # the given argument.
106
102
  #
107
- # {:a=>1} & :b # SQL: a = 1 AND b
108
- # {:a=>true} & ~:b # SQL: a IS TRUE AND NOT b
103
+ # {a: 1} & :b # SQL: ((a = 1) AND b)
104
+ # {a: true} & ~:b # SQL: ((a IS TRUE) AND NOT b)
109
105
  def &(ce)
110
106
  ::Sequel::SQL::BooleanExpression.new(:AND, self, ce)
111
107
  end
@@ -114,8 +110,8 @@ class Hash
114
110
  # all of the conditions in this hash or the condition specified by
115
111
  # the given argument.
116
112
  #
117
- # {:a=>1} | :b # SQL: a = 1 OR b
118
- # {:a=>true} | ~:b # SQL: a IS TRUE OR NOT b
113
+ # {a: 1} | :b # SQL: ((a = 1) OR b)
114
+ # {a: true} | ~:b # SQL: ((a IS TRUE) OR NOT b)
119
115
  def |(ce)
120
116
  ::Sequel::SQL::BooleanExpression.new(:OR, self, ce)
121
117
  end
@@ -123,19 +119,17 @@ class Hash
123
119
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this hash, not matching all of the
124
120
  # conditions.
125
121
  #
126
- # ~{:a=>true} # SQL: a IS NOT TRUE
127
- # ~{:a=>1, :b=>[2, 3]} # SQL: a != 1 OR b NOT IN (2, 3)
122
+ # ~{a: true} # SQL: (a IS NOT TRUE)
123
+ # ~{a: 1, b: [2, 3]} # SQL: ((a != 1) OR (b NOT IN (2, 3)))
128
124
  def ~
129
125
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR, true)
130
126
  end
131
127
 
132
128
  # Return a <tt>Sequel::SQL::CaseExpression</tt> with this hash as the conditions and the given
133
- # default value. Note that the order of the conditions will be arbitrary on ruby 1.8, so all
134
- # conditions should be orthogonal.
129
+ # default value.
135
130
  #
136
- # {{:a=>[2,3]}=>1}.case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
137
- # {:a=>1, :b=>2}.case(:d, :c) # SQL: CASE c WHEN a THEN 1 WHEN b THEN 2 ELSE d END
138
- # # or: CASE c WHEN b THEN 2 WHEN a THEN 1 ELSE d END
131
+ # {{a: [2,3]}=>1}.case(0) # SQL: CASE WHEN (a IN (2, 3)) THEN 1 ELSE 0 END
132
+ # {a: 1, b: 2}.case(:d, :c) # SQL: CASE c WHEN a THEN 1 WHEN b THEN 2 ELSE d END
139
133
  def case(*args)
140
134
  ::Sequel::SQL::CaseExpression.new(to_a, *args)
141
135
  end
@@ -144,8 +138,8 @@ class Hash
144
138
  # conditions. Rarely do you need to call this explicitly, as Sequel generally
145
139
  # assumes that hashes specify this type of condition.
146
140
  #
147
- # {:a=>true}.sql_expr # SQL: a IS TRUE
148
- # {:a=>1, :b=>[2, 3]}.sql_expr # SQL: a = 1 AND b IN (2, 3)
141
+ # {a: true}.sql_expr # SQL: (a IS TRUE)
142
+ # {a: 1, b: [2, 3]}.sql_expr # SQL: ((a = 1) AND (b IN (2, 3)))
149
143
  def sql_expr
150
144
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self)
151
145
  end
@@ -153,8 +147,8 @@ class Hash
153
147
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this hash, matching none
154
148
  # of the conditions.
155
149
  #
156
- # {:a=>true}.sql_negate # SQL: a IS NOT TRUE
157
- # {:a=>1, :b=>[2, 3]}.sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
150
+ # {a: true}.sql_negate # SQL: (a IS NOT TRUE)
151
+ # {a: 1, b: [2, 3]}.sql_negate # SQL: ((a != 1) AND (b NOT IN (2, 3)))
158
152
  def sql_negate
159
153
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :AND, true)
160
154
  end
@@ -162,8 +156,8 @@ class Hash
162
156
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this hash, matching any of the
163
157
  # conditions.
164
158
  #
165
- # {:a=>true}.sql_or # SQL: a IS TRUE
166
- # {:a=>1, :b=>[2, 3]}.sql_or # SQL: a = 1 OR b IN (2, 3)
159
+ # {a: true}.sql_or # SQL: (a IS TRUE)
160
+ # {a: 1, b: [2, 3]}.sql_or # SQL: ((a = 1) OR (b IN (2, 3)))
167
161
  def sql_or
168
162
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR)
169
163
  end
@@ -177,16 +171,16 @@ class String
177
171
  # Converts a string into a <tt>Sequel::LiteralString</tt>, in order to override string
178
172
  # literalization, e.g.:
179
173
  #
180
- # DB[:items].where(:abc => 'def').sql #=>
181
- # "SELECT * FROM items WHERE (abc = 'def')"
174
+ # DB[:items].where(abc: 'def')
175
+ # # "SELECT * FROM items WHERE (abc = 'def')"
182
176
  #
183
- # DB[:items].where(:abc => 'def'.lit).sql #=>
184
- # "SELECT * FROM items WHERE (abc = def)"
177
+ # DB[:items].where(abc: 'def'.lit)
178
+ # # "SELECT * FROM items WHERE (abc = def)"
185
179
  #
186
180
  # You can also provide arguments, to create a <tt>Sequel::SQL::PlaceholderLiteralString</tt>:
187
181
  #
188
- # DB[:items].select{|o| o.count('DISTINCT ?'.lit(:a))}.sql #=>
189
- # "SELECT count(DISTINCT a) FROM items"
182
+ # DB[:items].select{|o| o.count('DISTINCT ?'.lit(:a))}
183
+ # # "SELECT count(DISTINCT a) FROM items"
190
184
  def lit(*args)
191
185
  args.empty? ? Sequel::LiteralString.new(self) : Sequel::SQL::PlaceholderLiteralString.new(self, args)
192
186
  end
@@ -209,19 +203,15 @@ class Symbol
209
203
  include Sequel::SQL::SubscriptMethods
210
204
  include Sequel::SQL::ComplexExpressionMethods
211
205
 
212
- # Returns receiver wrapped in an <tt>Sequel::SQL::Identifier</tt>. Usually used to
213
- # prevent splitting the symbol.
206
+ # Returns receiver wrapped in an <tt>Sequel::SQL::Identifier</tt>.
214
207
  #
215
- # :a__b # SQL: "a"."b"
216
- # :a__b.identifier # SQL: "a__b"
208
+ # :a.identifier # SQL: "a"
217
209
  def identifier
218
210
  Sequel::SQL::Identifier.new(self)
219
211
  end
220
212
 
221
213
  # Returns a <tt>Sequel::SQL::Function</tt> with this as the function name,
222
- # and the given arguments. This is aliased as <tt>Symbol#[]</tt> if the RUBY_VERSION
223
- # is less than 1.9.0. Ruby 1.9 defines <tt>Symbol#[]</tt>, and Sequel
224
- # doesn't override methods defined by ruby itself.
214
+ # and the given arguments.
225
215
  #
226
216
  # :now.sql_function # SQL: now()
227
217
  # :sum.sql_function(:a) # SQL: sum(a)
@@ -17,8 +17,8 @@ module Sequel::CoreRefinements
17
17
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this array, not matching all of the
18
18
  # conditions.
19
19
  #
20
- # ~[[:a, true]] # SQL: a IS NOT TRUE
21
- # ~[[:a, 1], [:b, [2, 3]]] # SQL: a != 1 OR b NOT IN (2, 3)
20
+ # ~[[:a, true]] # SQL: (a IS NOT TRUE)
21
+ # ~[[:a, 1], [:b, [2, 3]]] # SQL: ((a != 1) OR (b NOT IN (2, 3)))
22
22
  def ~
23
23
  Sequel.~(self)
24
24
  end
@@ -26,7 +26,7 @@ module Sequel::CoreRefinements
26
26
  # Return a <tt>Sequel::SQL::CaseExpression</tt> with this array as the conditions and the given
27
27
  # default value and expression.
28
28
  #
29
- # [[{:a=>[2,3]}, 1]].case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
29
+ # [[{a: [2,3]}, 1]].case(0) # SQL: CASE WHEN (a IN (2, 3)) THEN 1 ELSE 0 END
30
30
  # [[:a, 1], [:b, 2]].case(:d, :c) # SQL: CASE c WHEN a THEN 1 WHEN b THEN 2 ELSE d END
31
31
  def case(*args)
32
32
  ::Sequel::SQL::CaseExpression.new(self, *args)
@@ -38,9 +38,9 @@ module Sequel::CoreRefinements
38
38
  # this array as a value in a filter, but may be necessary if you are using it as a
39
39
  # value with placeholder SQL:
40
40
  #
41
- # DB[:a].where([:a, :b]=>[[1, 2], [3, 4]]) # SQL: (a, b) IN ((1, 2), (3, 4))
42
- # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: (a, b) IN ((1 = 2) AND (3 = 4))
43
- # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]].sql_value_list) # SQL: (a, b) IN ((1, 2), (3, 4))
41
+ # DB[:a].where([:a, :b]=>[[1, 2], [3, 4]]) # SQL: ((a, b) IN ((1, 2), (3, 4)))
42
+ # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: ((a, b) IN ((1 = 2) AND (3 = 4)))
43
+ # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]].sql_value_list) # SQL: ((a, b) IN ((1, 2), (3, 4)))
44
44
  def sql_value_list
45
45
  ::Sequel::SQL::ValueList.new(self)
46
46
  end
@@ -52,8 +52,8 @@ module Sequel::CoreRefinements
52
52
  # and want to use the = operator instead of the IN operator (which is used by default for
53
53
  # arrays of two element arrays).
54
54
  #
55
- # [[:a, true]].sql_expr # SQL: a IS TRUE
56
- # [[:a, 1], [:b, [2, 3]]].sql_expr # SQL: a = 1 AND b IN (2, 3)
55
+ # [[:a, true]].sql_expr # SQL: (a IS TRUE)
56
+ # [[:a, 1], [:b, [2, 3]]].sql_expr # SQL: ((a = 1) AND (b IN (2, 3)))
57
57
  def sql_expr
58
58
  Sequel[self]
59
59
  end
@@ -61,8 +61,8 @@ module Sequel::CoreRefinements
61
61
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this array, matching none
62
62
  # of the conditions.
63
63
  #
64
- # [[:a, true]].sql_negate # SQL: a IS NOT TRUE
65
- # [[:a, 1], [:b, [2, 3]]].sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
64
+ # [[:a, true]].sql_negate # SQL: (a IS NOT TRUE)
65
+ # [[:a, 1], [:b, [2, 3]]].sql_negate # SQL: ((a != 1) AND (b NOT IN (2, 3)))
66
66
  def sql_negate
67
67
  Sequel.negate(self)
68
68
  end
@@ -70,8 +70,8 @@ module Sequel::CoreRefinements
70
70
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this array, matching any of the
71
71
  # conditions.
72
72
  #
73
- # [[:a, true]].sql_or # SQL: a IS TRUE
74
- # [[:a, 1], [:b, [2, 3]]].sql_or # SQL: a = 1 OR b IN (2, 3)
73
+ # [[:a, true]].sql_or # SQL: (a IS TRUE)
74
+ # [[:a, 1], [:b, [2, 3]]].sql_or # SQL: ((a = 1) OR (b IN (2, 3)))
75
75
  def sql_or
76
76
  Sequel.or(self)
77
77
  end
@@ -82,9 +82,9 @@ module Sequel::CoreRefinements
82
82
  # concatenation.
83
83
  #
84
84
  # [:a].sql_string_join # SQL: a
85
- # [:a, :b].sql_string_join # SQL: a || b
86
- # [:a, 'b'].sql_string_join # SQL: a || 'b'
87
- # ['a', :b].sql_string_join(' ') # SQL: 'a' || ' ' || b
85
+ # [:a, :b].sql_string_join # SQL: (a || b)
86
+ # [:a, 'b'].sql_string_join # SQL: (a || 'b')
87
+ # ['a', :b].sql_string_join(' ') # SQL: ('a' || ' ' || b)
88
88
  def sql_string_join(joiner=nil)
89
89
  Sequel.join(self, joiner)
90
90
  end
@@ -95,8 +95,8 @@ module Sequel::CoreRefinements
95
95
  # all of the conditions in this hash and the condition specified by
96
96
  # the given argument.
97
97
  #
98
- # {:a=>1} & :b # SQL: a = 1 AND b
99
- # {:a=>true} & ~:b # SQL: a IS TRUE AND NOT b
98
+ # {a: 1} & :b # SQL: ((a = 1) AND b)
99
+ # {a: true} & ~:b # SQL: ((a IS TRUE) AND NOT b)
100
100
  def &(ce)
101
101
  ::Sequel::SQL::BooleanExpression.new(:AND, self, ce)
102
102
  end
@@ -105,8 +105,8 @@ module Sequel::CoreRefinements
105
105
  # all of the conditions in this hash or the condition specified by
106
106
  # the given argument.
107
107
  #
108
- # {:a=>1} | :b # SQL: a = 1 OR b
109
- # {:a=>true} | ~:b # SQL: a IS TRUE OR NOT b
108
+ # {a: 1} | :b # SQL: ((a = 1) OR b)
109
+ # {a: true} | ~:b # SQL: ((a IS TRUE) OR NOT b)
110
110
  def |(ce)
111
111
  ::Sequel::SQL::BooleanExpression.new(:OR, self, ce)
112
112
  end
@@ -114,19 +114,17 @@ module Sequel::CoreRefinements
114
114
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this hash, not matching all of the
115
115
  # conditions.
116
116
  #
117
- # ~{:a=>true} # SQL: a IS NOT TRUE
118
- # ~{:a=>1, :b=>[2, 3]} # SQL: a != 1 OR b NOT IN (2, 3)
117
+ # ~{a: true} # SQL: (a IS NOT TRUE)
118
+ # ~{a: 1, b: [2, 3]} # SQL: ((a != 1) OR (b NOT IN (2, 3)))
119
119
  def ~
120
120
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR, true)
121
121
  end
122
122
 
123
123
  # Return a <tt>Sequel::SQL::CaseExpression</tt> with this hash as the conditions and the given
124
- # default value. Note that the order of the conditions will be arbitrary on ruby 1.8, so all
125
- # conditions should be orthogonal.
124
+ # default value.
126
125
  #
127
- # {{:a=>[2,3]}=>1}.case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
128
- # {:a=>1, :b=>2}.case(:d, :c) # SQL: CASE c WHEN a THEN 1 WHEN b THEN 2 ELSE d END
129
- # # or: CASE c WHEN b THEN 2 WHEN a THEN 1 ELSE d END
126
+ # {{a: [2,3]}=>1}.case(0) # SQL: CASE WHEN (a IN (2, 3)) THEN 1 ELSE 0 END
127
+ # {a: 1, b: 2}.case(:d, :c) # SQL: CASE c WHEN a THEN 1 WHEN b THEN 2 ELSE d END
130
128
  def case(*args)
131
129
  ::Sequel::SQL::CaseExpression.new(to_a, *args)
132
130
  end
@@ -135,8 +133,8 @@ module Sequel::CoreRefinements
135
133
  # conditions. Rarely do you need to call this explicitly, as Sequel generally
136
134
  # assumes that hashes specify this type of condition.
137
135
  #
138
- # {:a=>true}.sql_expr # SQL: a IS TRUE
139
- # {:a=>1, :b=>[2, 3]}.sql_expr # SQL: a = 1 AND b IN (2, 3)
136
+ # {a: true}.sql_expr # SQL: (a IS TRUE)
137
+ # {a: 1, b: [2, 3]}.sql_expr # SQL: ((a = 1) AND (b IN (2, 3)))
140
138
  def sql_expr
141
139
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self)
142
140
  end
@@ -144,8 +142,8 @@ module Sequel::CoreRefinements
144
142
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this hash, matching none
145
143
  # of the conditions.
146
144
  #
147
- # {:a=>true}.sql_negate # SQL: a IS NOT TRUE
148
- # {:a=>1, :b=>[2, 3]}.sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
145
+ # {a: true}.sql_negate # SQL: (a IS NOT TRUE)
146
+ # {a: 1, b: [2, 3]}.sql_negate # SQL: ((a != 1) AND (b NOT IN (2, 3)))
149
147
  def sql_negate
150
148
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :AND, true)
151
149
  end
@@ -153,8 +151,8 @@ module Sequel::CoreRefinements
153
151
  # Return a <tt>Sequel::SQL::BooleanExpression</tt> created from this hash, matching any of the
154
152
  # conditions.
155
153
  #
156
- # {:a=>true}.sql_or # SQL: a IS TRUE
157
- # {:a=>1, :b=>[2, 3]}.sql_or # SQL: a = 1 OR b IN (2, 3)
154
+ # {a: true}.sql_or # SQL: (a IS TRUE)
155
+ # {a: 1, b: [2, 3]}.sql_or # SQL: ((a = 1) OR (b IN (2, 3)))
158
156
  def sql_or
159
157
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR)
160
158
  end
@@ -167,16 +165,16 @@ module Sequel::CoreRefinements
167
165
  # Converts a string into a <tt>Sequel::LiteralString</tt>, in order to override string
168
166
  # literalization, e.g.:
169
167
  #
170
- # DB[:items].where(:abc => 'def').sql #=>
171
- # "SELECT * FROM items WHERE (abc = 'def')"
168
+ # DB[:items].where(abc: 'def')
169
+ # # "SELECT * FROM items WHERE (abc = 'def')"
172
170
  #
173
- # DB[:items].where(:abc => 'def'.lit).sql #=>
174
- # "SELECT * FROM items WHERE (abc = def)"
171
+ # DB[:items].where(abc: 'def'.lit)
172
+ # # "SELECT * FROM items WHERE (abc = def)"
175
173
  #
176
174
  # You can also provide arguments, to create a <tt>Sequel::SQL::PlaceholderLiteralString</tt>:
177
175
  #
178
- # DB[:items].select{|o| o.count('DISTINCT ?'.lit(:a))}.sql #=>
179
- # "SELECT count(DISTINCT a) FROM items"
176
+ # DB[:items].select{|o| o.count('DISTINCT ?'.lit(:a))}
177
+ # # "SELECT count(DISTINCT a) FROM items"
180
178
  def lit(*args)
181
179
  args.empty? ? Sequel::LiteralString.new(self) : Sequel::SQL::PlaceholderLiteralString.new(self, args)
182
180
  end
@@ -199,19 +197,15 @@ module Sequel::CoreRefinements
199
197
  include Sequel::SQL::SubscriptMethods
200
198
  include Sequel::SQL::ComplexExpressionMethods
201
199
 
202
- # Returns receiver wrapped in an <tt>Sequel::SQL::Identifier</tt>. Usually used to
203
- # prevent splitting the symbol.
200
+ # Returns receiver wrapped in an <tt>Sequel::SQL::Identifier</tt>.
204
201
  #
205
- # :a__b # SQL: "a"."b"
206
- # :a__b.identifier # SQL: "a__b"
202
+ # :ab.identifier # SQL: "a"
207
203
  def identifier
208
204
  Sequel::SQL::Identifier.new(self)
209
205
  end
210
206
 
211
207
  # Returns a <tt>Sequel::SQL::Function</tt> with this as the function name,
212
- # and the given arguments. This is aliased as <tt>Symbol#[]</tt> if the RUBY_VERSION
213
- # is less than 1.9.0. Ruby 1.9 defines <tt>Symbol#[]</tt>, and Sequel
214
- # doesn't override methods defined by ruby itself.
208
+ # and the given arguments.
215
209
  #
216
210
  # :now.sql_function # SQL: now()
217
211
  # :sum.sql_function(:a) # SQL: sum(a)