sequel 4.26.0 → 5.37.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 (692) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +405 -5656
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +232 -157
  5. data/bin/sequel +32 -9
  6. data/doc/advanced_associations.rdoc +252 -188
  7. data/doc/association_basics.rdoc +231 -273
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +75 -48
  10. data/doc/code_order.rdoc +28 -10
  11. data/doc/core_extensions.rdoc +104 -63
  12. data/doc/dataset_basics.rdoc +12 -21
  13. data/doc/dataset_filtering.rdoc +99 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +74 -31
  16. data/doc/migration.rdoc +72 -46
  17. data/doc/model_dataset_method_design.rdoc +129 -0
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +12 -12
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +59 -69
  22. data/doc/opening_databases.rdoc +84 -94
  23. data/doc/postgresql.rdoc +268 -38
  24. data/doc/prepared_statements.rdoc +29 -24
  25. data/doc/querying.rdoc +184 -164
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.10.0.txt +84 -0
  30. data/doc/release_notes/5.11.0.txt +83 -0
  31. data/doc/release_notes/5.12.0.txt +141 -0
  32. data/doc/release_notes/5.13.0.txt +27 -0
  33. data/doc/release_notes/5.14.0.txt +63 -0
  34. data/doc/release_notes/5.15.0.txt +39 -0
  35. data/doc/release_notes/5.16.0.txt +110 -0
  36. data/doc/release_notes/5.17.0.txt +31 -0
  37. data/doc/release_notes/5.18.0.txt +69 -0
  38. data/doc/release_notes/5.19.0.txt +28 -0
  39. data/doc/release_notes/5.2.0.txt +33 -0
  40. data/doc/release_notes/5.20.0.txt +89 -0
  41. data/doc/release_notes/5.21.0.txt +87 -0
  42. data/doc/release_notes/5.22.0.txt +48 -0
  43. data/doc/release_notes/5.23.0.txt +56 -0
  44. data/doc/release_notes/5.24.0.txt +56 -0
  45. data/doc/release_notes/5.25.0.txt +32 -0
  46. data/doc/release_notes/5.26.0.txt +35 -0
  47. data/doc/release_notes/5.27.0.txt +21 -0
  48. data/doc/release_notes/5.28.0.txt +16 -0
  49. data/doc/release_notes/5.29.0.txt +22 -0
  50. data/doc/release_notes/5.3.0.txt +121 -0
  51. data/doc/release_notes/5.30.0.txt +20 -0
  52. data/doc/release_notes/5.31.0.txt +148 -0
  53. data/doc/release_notes/5.32.0.txt +46 -0
  54. data/doc/release_notes/5.33.0.txt +24 -0
  55. data/doc/release_notes/5.34.0.txt +40 -0
  56. data/doc/release_notes/5.35.0.txt +56 -0
  57. data/doc/release_notes/5.36.0.txt +60 -0
  58. data/doc/release_notes/5.37.0.txt +30 -0
  59. data/doc/release_notes/5.4.0.txt +80 -0
  60. data/doc/release_notes/5.5.0.txt +61 -0
  61. data/doc/release_notes/5.6.0.txt +31 -0
  62. data/doc/release_notes/5.7.0.txt +108 -0
  63. data/doc/release_notes/5.8.0.txt +170 -0
  64. data/doc/release_notes/5.9.0.txt +99 -0
  65. data/doc/schema_modification.rdoc +102 -77
  66. data/doc/security.rdoc +160 -87
  67. data/doc/sharding.rdoc +74 -47
  68. data/doc/sql.rdoc +135 -122
  69. data/doc/testing.rdoc +34 -18
  70. data/doc/thread_safety.rdoc +2 -4
  71. data/doc/transactions.rdoc +101 -19
  72. data/doc/validations.rdoc +64 -51
  73. data/doc/virtual_rows.rdoc +90 -109
  74. data/lib/sequel.rb +3 -1
  75. data/lib/sequel/adapters/ado.rb +154 -22
  76. data/lib/sequel/adapters/ado/access.rb +21 -21
  77. data/lib/sequel/adapters/ado/mssql.rb +8 -15
  78. data/lib/sequel/adapters/amalgalite.rb +17 -25
  79. data/lib/sequel/adapters/ibmdb.rb +52 -58
  80. data/lib/sequel/adapters/jdbc.rb +149 -127
  81. data/lib/sequel/adapters/jdbc/db2.rb +32 -40
  82. data/lib/sequel/adapters/jdbc/derby.rb +56 -58
  83. data/lib/sequel/adapters/jdbc/h2.rb +40 -30
  84. data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
  85. data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
  86. data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
  87. data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
  88. data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
  89. data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
  90. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
  91. data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
  92. data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
  93. data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
  94. data/lib/sequel/adapters/mock.rb +104 -113
  95. data/lib/sequel/adapters/mysql.rb +42 -61
  96. data/lib/sequel/adapters/mysql2.rb +126 -35
  97. data/lib/sequel/adapters/odbc.rb +21 -28
  98. data/lib/sequel/adapters/odbc/db2.rb +3 -1
  99. data/lib/sequel/adapters/odbc/mssql.rb +11 -15
  100. data/lib/sequel/adapters/odbc/oracle.rb +11 -0
  101. data/lib/sequel/adapters/oracle.rb +62 -68
  102. data/lib/sequel/adapters/postgres.rb +257 -311
  103. data/lib/sequel/adapters/postgresql.rb +3 -1
  104. data/lib/sequel/adapters/shared/access.rb +75 -79
  105. data/lib/sequel/adapters/shared/db2.rb +96 -74
  106. data/lib/sequel/adapters/shared/mssql.rb +258 -213
  107. data/lib/sequel/adapters/shared/mysql.rb +284 -216
  108. data/lib/sequel/adapters/shared/oracle.rb +175 -60
  109. data/lib/sequel/adapters/shared/postgres.rb +829 -383
  110. data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
  111. data/lib/sequel/adapters/shared/sqlite.rb +382 -159
  112. data/lib/sequel/adapters/sqlanywhere.rb +53 -38
  113. data/lib/sequel/adapters/sqlite.rb +111 -105
  114. data/lib/sequel/adapters/tinytds.rb +38 -46
  115. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
  116. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
  117. data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
  118. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
  119. data/lib/sequel/adapters/utils/replace.rb +3 -4
  120. data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
  121. data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
  122. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
  123. data/lib/sequel/ast_transformer.rb +13 -89
  124. data/lib/sequel/connection_pool.rb +54 -26
  125. data/lib/sequel/connection_pool/sharded_single.rb +19 -12
  126. data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
  127. data/lib/sequel/connection_pool/single.rb +21 -12
  128. data/lib/sequel/connection_pool/threaded.rb +137 -119
  129. data/lib/sequel/core.rb +352 -320
  130. data/lib/sequel/database.rb +19 -2
  131. data/lib/sequel/database/connecting.rb +70 -55
  132. data/lib/sequel/database/dataset.rb +15 -5
  133. data/lib/sequel/database/dataset_defaults.rb +20 -102
  134. data/lib/sequel/database/features.rb +20 -4
  135. data/lib/sequel/database/logging.rb +25 -7
  136. data/lib/sequel/database/misc.rb +132 -118
  137. data/lib/sequel/database/query.rb +51 -28
  138. data/lib/sequel/database/schema_generator.rb +188 -75
  139. data/lib/sequel/database/schema_methods.rb +161 -92
  140. data/lib/sequel/database/transactions.rb +260 -58
  141. data/lib/sequel/dataset.rb +28 -12
  142. data/lib/sequel/dataset/actions.rb +354 -170
  143. data/lib/sequel/dataset/dataset_module.rb +46 -0
  144. data/lib/sequel/dataset/features.rb +81 -34
  145. data/lib/sequel/dataset/graph.rb +82 -58
  146. data/lib/sequel/dataset/misc.rb +139 -47
  147. data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
  148. data/lib/sequel/dataset/prepared_statements.rb +188 -85
  149. data/lib/sequel/dataset/query.rb +428 -214
  150. data/lib/sequel/dataset/sql.rb +446 -339
  151. data/lib/sequel/deprecated.rb +14 -2
  152. data/lib/sequel/exceptions.rb +48 -16
  153. data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
  154. data/lib/sequel/extensions/_model_pg_row.rb +43 -0
  155. data/lib/sequel/extensions/_pretty_table.rb +10 -9
  156. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  157. data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
  158. data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
  159. data/lib/sequel/extensions/blank.rb +2 -0
  160. data/lib/sequel/extensions/caller_logging.rb +79 -0
  161. data/lib/sequel/extensions/columns_introspection.rb +9 -4
  162. data/lib/sequel/extensions/connection_expiration.rb +99 -0
  163. data/lib/sequel/extensions/connection_validator.rb +26 -13
  164. data/lib/sequel/extensions/constant_sql_override.rb +65 -0
  165. data/lib/sequel/extensions/constraint_validations.rb +93 -38
  166. data/lib/sequel/extensions/core_extensions.rb +45 -53
  167. data/lib/sequel/extensions/core_refinements.rb +44 -46
  168. data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
  169. data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
  170. data/lib/sequel/extensions/date_arithmetic.rb +42 -16
  171. data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
  172. data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
  173. data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
  174. data/lib/sequel/extensions/error_sql.rb +7 -3
  175. data/lib/sequel/extensions/escaped_like.rb +100 -0
  176. data/lib/sequel/extensions/eval_inspect.rb +14 -15
  177. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  178. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  179. data/lib/sequel/extensions/freeze_datasets.rb +3 -0
  180. data/lib/sequel/extensions/from_block.rb +2 -31
  181. data/lib/sequel/extensions/graph_each.rb +19 -6
  182. data/lib/sequel/extensions/identifier_mangling.rb +180 -0
  183. data/lib/sequel/extensions/implicit_subquery.rb +48 -0
  184. data/lib/sequel/extensions/index_caching.rb +109 -0
  185. data/lib/sequel/extensions/inflector.rb +8 -4
  186. data/lib/sequel/extensions/integer64.rb +32 -0
  187. data/lib/sequel/extensions/looser_typecasting.rb +19 -9
  188. data/lib/sequel/extensions/migration.rb +132 -80
  189. data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
  190. data/lib/sequel/extensions/named_timezones.rb +88 -23
  191. data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
  192. data/lib/sequel/extensions/null_dataset.rb +12 -8
  193. data/lib/sequel/extensions/pagination.rb +35 -28
  194. data/lib/sequel/extensions/pg_array.rb +227 -316
  195. data/lib/sequel/extensions/pg_array_ops.rb +19 -7
  196. data/lib/sequel/extensions/pg_enum.rb +69 -24
  197. data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
  198. data/lib/sequel/extensions/pg_hstore.rb +50 -59
  199. data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
  200. data/lib/sequel/extensions/pg_inet.rb +34 -15
  201. data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
  202. data/lib/sequel/extensions/pg_interval.rb +26 -26
  203. data/lib/sequel/extensions/pg_json.rb +422 -141
  204. data/lib/sequel/extensions/pg_json_ops.rb +248 -9
  205. data/lib/sequel/extensions/pg_loose_count.rb +5 -1
  206. data/lib/sequel/extensions/pg_range.rb +162 -146
  207. data/lib/sequel/extensions/pg_range_ops.rb +10 -5
  208. data/lib/sequel/extensions/pg_row.rb +53 -87
  209. data/lib/sequel/extensions/pg_row_ops.rb +36 -13
  210. data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
  211. data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
  212. data/lib/sequel/extensions/pretty_table.rb +4 -0
  213. data/lib/sequel/extensions/query.rb +12 -7
  214. data/lib/sequel/extensions/round_timestamps.rb +6 -9
  215. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  216. data/lib/sequel/extensions/s.rb +59 -0
  217. data/lib/sequel/extensions/schema_caching.rb +14 -1
  218. data/lib/sequel/extensions/schema_dumper.rb +83 -55
  219. data/lib/sequel/extensions/select_remove.rb +8 -4
  220. data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
  221. data/lib/sequel/extensions/server_block.rb +50 -17
  222. data/lib/sequel/extensions/server_logging.rb +61 -0
  223. data/lib/sequel/extensions/split_array_nil.rb +8 -4
  224. data/lib/sequel/extensions/sql_comments.rb +96 -0
  225. data/lib/sequel/extensions/sql_expr.rb +4 -1
  226. data/lib/sequel/extensions/string_agg.rb +181 -0
  227. data/lib/sequel/extensions/string_date_time.rb +2 -0
  228. data/lib/sequel/extensions/symbol_aref.rb +53 -0
  229. data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
  230. data/lib/sequel/extensions/symbol_as.rb +23 -0
  231. data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
  232. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  233. data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
  234. data/lib/sequel/extensions/to_dot.rb +15 -5
  235. data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
  236. data/lib/sequel/model.rb +36 -126
  237. data/lib/sequel/model/associations.rb +850 -257
  238. data/lib/sequel/model/base.rb +652 -764
  239. data/lib/sequel/model/dataset_module.rb +13 -10
  240. data/lib/sequel/model/default_inflections.rb +3 -1
  241. data/lib/sequel/model/errors.rb +3 -3
  242. data/lib/sequel/model/exceptions.rb +12 -12
  243. data/lib/sequel/model/inflections.rb +8 -19
  244. data/lib/sequel/model/plugins.rb +111 -0
  245. data/lib/sequel/plugins/accessed_columns.rb +2 -0
  246. data/lib/sequel/plugins/active_model.rb +32 -7
  247. data/lib/sequel/plugins/after_initialize.rb +3 -1
  248. data/lib/sequel/plugins/association_dependencies.rb +27 -18
  249. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  250. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  251. data/lib/sequel/plugins/association_pks.rb +181 -83
  252. data/lib/sequel/plugins/association_proxies.rb +33 -9
  253. data/lib/sequel/plugins/auto_validations.rb +58 -23
  254. data/lib/sequel/plugins/before_after_save.rb +8 -0
  255. data/lib/sequel/plugins/blacklist_security.rb +23 -12
  256. data/lib/sequel/plugins/boolean_readers.rb +9 -6
  257. data/lib/sequel/plugins/boolean_subsets.rb +64 -0
  258. data/lib/sequel/plugins/caching.rb +27 -16
  259. data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
  260. data/lib/sequel/plugins/column_conflicts.rb +18 -3
  261. data/lib/sequel/plugins/column_select.rb +9 -5
  262. data/lib/sequel/plugins/columns_updated.rb +42 -0
  263. data/lib/sequel/plugins/composition.rb +36 -24
  264. data/lib/sequel/plugins/constraint_validations.rb +37 -16
  265. data/lib/sequel/plugins/csv_serializer.rb +58 -35
  266. data/lib/sequel/plugins/dataset_associations.rb +60 -18
  267. data/lib/sequel/plugins/def_dataset_method.rb +90 -0
  268. data/lib/sequel/plugins/defaults_setter.rb +74 -13
  269. data/lib/sequel/plugins/delay_add_association.rb +4 -1
  270. data/lib/sequel/plugins/dirty.rb +65 -24
  271. data/lib/sequel/plugins/eager_each.rb +27 -3
  272. data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
  273. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  274. data/lib/sequel/plugins/error_splitter.rb +19 -12
  275. data/lib/sequel/plugins/finder.rb +246 -0
  276. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  277. data/lib/sequel/plugins/force_encoding.rb +9 -12
  278. data/lib/sequel/plugins/hook_class_methods.rb +39 -54
  279. data/lib/sequel/plugins/input_transformer.rb +20 -10
  280. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  281. data/lib/sequel/plugins/insert_returning_select.rb +4 -2
  282. data/lib/sequel/plugins/instance_filters.rb +12 -8
  283. data/lib/sequel/plugins/instance_hooks.rb +36 -17
  284. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  285. data/lib/sequel/plugins/inverted_subsets.rb +24 -13
  286. data/lib/sequel/plugins/json_serializer.rb +123 -47
  287. data/lib/sequel/plugins/lazy_attributes.rb +20 -14
  288. data/lib/sequel/plugins/list.rb +40 -26
  289. data/lib/sequel/plugins/many_through_many.rb +28 -12
  290. data/lib/sequel/plugins/modification_detection.rb +17 -5
  291. data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
  292. data/lib/sequel/plugins/nested_attributes.rb +55 -28
  293. data/lib/sequel/plugins/optimistic_locking.rb +5 -3
  294. data/lib/sequel/plugins/pg_array_associations.rb +52 -18
  295. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
  296. data/lib/sequel/plugins/pg_row.rb +7 -51
  297. data/lib/sequel/plugins/prepared_statements.rb +53 -72
  298. data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
  299. data/lib/sequel/plugins/rcte_tree.rb +43 -63
  300. data/lib/sequel/plugins/serialization.rb +37 -44
  301. data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
  302. data/lib/sequel/plugins/sharding.rb +17 -10
  303. data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
  304. data/lib/sequel/plugins/singular_table_names.rb +2 -0
  305. data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
  306. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  307. data/lib/sequel/plugins/split_values.rb +13 -6
  308. data/lib/sequel/plugins/static_cache.rb +79 -53
  309. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  310. data/lib/sequel/plugins/string_stripper.rb +5 -3
  311. data/lib/sequel/plugins/subclasses.rb +20 -2
  312. data/lib/sequel/plugins/subset_conditions.rb +48 -0
  313. data/lib/sequel/plugins/table_select.rb +4 -2
  314. data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
  315. data/lib/sequel/plugins/throw_failures.rb +110 -0
  316. data/lib/sequel/plugins/timestamps.rb +22 -8
  317. data/lib/sequel/plugins/touch.rb +21 -8
  318. data/lib/sequel/plugins/tree.rb +57 -30
  319. data/lib/sequel/plugins/typecast_on_load.rb +14 -4
  320. data/lib/sequel/plugins/unlimited_update.rb +3 -7
  321. data/lib/sequel/plugins/update_or_create.rb +6 -4
  322. data/lib/sequel/plugins/update_primary_key.rb +3 -1
  323. data/lib/sequel/plugins/update_refresh.rb +28 -15
  324. data/lib/sequel/plugins/uuid.rb +70 -0
  325. data/lib/sequel/plugins/validate_associated.rb +20 -0
  326. data/lib/sequel/plugins/validation_class_methods.rb +40 -19
  327. data/lib/sequel/plugins/validation_contexts.rb +49 -0
  328. data/lib/sequel/plugins/validation_helpers.rb +49 -31
  329. data/lib/sequel/plugins/whitelist_security.rb +122 -0
  330. data/lib/sequel/plugins/xml_serializer.rb +31 -30
  331. data/lib/sequel/sql.rb +479 -329
  332. data/lib/sequel/timezones.rb +62 -32
  333. data/lib/sequel/version.rb +10 -3
  334. metadata +177 -477
  335. data/Rakefile +0 -165
  336. data/doc/active_record.rdoc +0 -912
  337. data/doc/release_notes/1.0.txt +0 -38
  338. data/doc/release_notes/1.1.txt +0 -143
  339. data/doc/release_notes/1.3.txt +0 -101
  340. data/doc/release_notes/1.4.0.txt +0 -53
  341. data/doc/release_notes/1.5.0.txt +0 -155
  342. data/doc/release_notes/2.0.0.txt +0 -298
  343. data/doc/release_notes/2.1.0.txt +0 -271
  344. data/doc/release_notes/2.10.0.txt +0 -328
  345. data/doc/release_notes/2.11.0.txt +0 -215
  346. data/doc/release_notes/2.12.0.txt +0 -534
  347. data/doc/release_notes/2.2.0.txt +0 -253
  348. data/doc/release_notes/2.3.0.txt +0 -88
  349. data/doc/release_notes/2.4.0.txt +0 -106
  350. data/doc/release_notes/2.5.0.txt +0 -137
  351. data/doc/release_notes/2.6.0.txt +0 -157
  352. data/doc/release_notes/2.7.0.txt +0 -166
  353. data/doc/release_notes/2.8.0.txt +0 -171
  354. data/doc/release_notes/2.9.0.txt +0 -97
  355. data/doc/release_notes/3.0.0.txt +0 -221
  356. data/doc/release_notes/3.1.0.txt +0 -406
  357. data/doc/release_notes/3.10.0.txt +0 -286
  358. data/doc/release_notes/3.11.0.txt +0 -254
  359. data/doc/release_notes/3.12.0.txt +0 -304
  360. data/doc/release_notes/3.13.0.txt +0 -210
  361. data/doc/release_notes/3.14.0.txt +0 -118
  362. data/doc/release_notes/3.15.0.txt +0 -78
  363. data/doc/release_notes/3.16.0.txt +0 -45
  364. data/doc/release_notes/3.17.0.txt +0 -58
  365. data/doc/release_notes/3.18.0.txt +0 -120
  366. data/doc/release_notes/3.19.0.txt +0 -67
  367. data/doc/release_notes/3.2.0.txt +0 -268
  368. data/doc/release_notes/3.20.0.txt +0 -41
  369. data/doc/release_notes/3.21.0.txt +0 -87
  370. data/doc/release_notes/3.22.0.txt +0 -39
  371. data/doc/release_notes/3.23.0.txt +0 -172
  372. data/doc/release_notes/3.24.0.txt +0 -420
  373. data/doc/release_notes/3.25.0.txt +0 -88
  374. data/doc/release_notes/3.26.0.txt +0 -88
  375. data/doc/release_notes/3.27.0.txt +0 -82
  376. data/doc/release_notes/3.28.0.txt +0 -304
  377. data/doc/release_notes/3.29.0.txt +0 -459
  378. data/doc/release_notes/3.3.0.txt +0 -192
  379. data/doc/release_notes/3.30.0.txt +0 -135
  380. data/doc/release_notes/3.31.0.txt +0 -146
  381. data/doc/release_notes/3.32.0.txt +0 -202
  382. data/doc/release_notes/3.33.0.txt +0 -157
  383. data/doc/release_notes/3.34.0.txt +0 -671
  384. data/doc/release_notes/3.35.0.txt +0 -144
  385. data/doc/release_notes/3.36.0.txt +0 -245
  386. data/doc/release_notes/3.37.0.txt +0 -338
  387. data/doc/release_notes/3.38.0.txt +0 -234
  388. data/doc/release_notes/3.39.0.txt +0 -237
  389. data/doc/release_notes/3.4.0.txt +0 -325
  390. data/doc/release_notes/3.40.0.txt +0 -73
  391. data/doc/release_notes/3.41.0.txt +0 -155
  392. data/doc/release_notes/3.42.0.txt +0 -74
  393. data/doc/release_notes/3.43.0.txt +0 -105
  394. data/doc/release_notes/3.44.0.txt +0 -152
  395. data/doc/release_notes/3.45.0.txt +0 -179
  396. data/doc/release_notes/3.46.0.txt +0 -122
  397. data/doc/release_notes/3.47.0.txt +0 -270
  398. data/doc/release_notes/3.48.0.txt +0 -477
  399. data/doc/release_notes/3.5.0.txt +0 -510
  400. data/doc/release_notes/3.6.0.txt +0 -366
  401. data/doc/release_notes/3.7.0.txt +0 -179
  402. data/doc/release_notes/3.8.0.txt +0 -151
  403. data/doc/release_notes/3.9.0.txt +0 -233
  404. data/doc/release_notes/4.0.0.txt +0 -262
  405. data/doc/release_notes/4.1.0.txt +0 -85
  406. data/doc/release_notes/4.10.0.txt +0 -226
  407. data/doc/release_notes/4.11.0.txt +0 -147
  408. data/doc/release_notes/4.12.0.txt +0 -105
  409. data/doc/release_notes/4.13.0.txt +0 -169
  410. data/doc/release_notes/4.14.0.txt +0 -68
  411. data/doc/release_notes/4.15.0.txt +0 -56
  412. data/doc/release_notes/4.16.0.txt +0 -36
  413. data/doc/release_notes/4.17.0.txt +0 -38
  414. data/doc/release_notes/4.18.0.txt +0 -36
  415. data/doc/release_notes/4.19.0.txt +0 -45
  416. data/doc/release_notes/4.2.0.txt +0 -129
  417. data/doc/release_notes/4.20.0.txt +0 -79
  418. data/doc/release_notes/4.21.0.txt +0 -94
  419. data/doc/release_notes/4.22.0.txt +0 -72
  420. data/doc/release_notes/4.23.0.txt +0 -65
  421. data/doc/release_notes/4.24.0.txt +0 -99
  422. data/doc/release_notes/4.25.0.txt +0 -181
  423. data/doc/release_notes/4.26.0.txt +0 -44
  424. data/doc/release_notes/4.3.0.txt +0 -40
  425. data/doc/release_notes/4.4.0.txt +0 -92
  426. data/doc/release_notes/4.5.0.txt +0 -34
  427. data/doc/release_notes/4.6.0.txt +0 -30
  428. data/doc/release_notes/4.7.0.txt +0 -103
  429. data/doc/release_notes/4.8.0.txt +0 -175
  430. data/doc/release_notes/4.9.0.txt +0 -190
  431. data/lib/sequel/adapters/cubrid.rb +0 -142
  432. data/lib/sequel/adapters/do.rb +0 -156
  433. data/lib/sequel/adapters/do/mysql.rb +0 -64
  434. data/lib/sequel/adapters/do/postgres.rb +0 -42
  435. data/lib/sequel/adapters/do/sqlite3.rb +0 -40
  436. data/lib/sequel/adapters/jdbc/as400.rb +0 -82
  437. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
  438. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
  439. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
  440. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
  441. data/lib/sequel/adapters/odbc/progress.rb +0 -8
  442. data/lib/sequel/adapters/shared/cubrid.rb +0 -243
  443. data/lib/sequel/adapters/shared/firebird.rb +0 -245
  444. data/lib/sequel/adapters/shared/informix.rb +0 -52
  445. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
  446. data/lib/sequel/adapters/shared/progress.rb +0 -38
  447. data/lib/sequel/adapters/swift.rb +0 -158
  448. data/lib/sequel/adapters/swift/mysql.rb +0 -47
  449. data/lib/sequel/adapters/swift/postgres.rb +0 -45
  450. data/lib/sequel/adapters/swift/sqlite.rb +0 -47
  451. data/lib/sequel/adapters/utils/pg_types.rb +0 -68
  452. data/lib/sequel/dataset/mutation.rb +0 -109
  453. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
  454. data/lib/sequel/extensions/filter_having.rb +0 -59
  455. data/lib/sequel/extensions/hash_aliases.rb +0 -45
  456. data/lib/sequel/extensions/meta_def.rb +0 -31
  457. data/lib/sequel/extensions/query_literals.rb +0 -80
  458. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
  459. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
  460. data/lib/sequel/extensions/set_overrides.rb +0 -72
  461. data/lib/sequel/no_core_ext.rb +0 -1
  462. data/lib/sequel/plugins/association_autoreloading.rb +0 -7
  463. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
  464. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
  465. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
  466. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
  467. data/lib/sequel/plugins/schema.rb +0 -80
  468. data/lib/sequel/plugins/scissors.rb +0 -33
  469. data/spec/adapters/db2_spec.rb +0 -160
  470. data/spec/adapters/firebird_spec.rb +0 -411
  471. data/spec/adapters/informix_spec.rb +0 -100
  472. data/spec/adapters/mssql_spec.rb +0 -706
  473. data/spec/adapters/mysql_spec.rb +0 -1287
  474. data/spec/adapters/oracle_spec.rb +0 -313
  475. data/spec/adapters/postgres_spec.rb +0 -3725
  476. data/spec/adapters/spec_helper.rb +0 -43
  477. data/spec/adapters/sqlanywhere_spec.rb +0 -170
  478. data/spec/adapters/sqlite_spec.rb +0 -653
  479. data/spec/bin_spec.rb +0 -254
  480. data/spec/core/connection_pool_spec.rb +0 -1016
  481. data/spec/core/database_spec.rb +0 -2531
  482. data/spec/core/dataset_spec.rb +0 -5098
  483. data/spec/core/deprecated_spec.rb +0 -70
  484. data/spec/core/expression_filters_spec.rb +0 -1243
  485. data/spec/core/mock_adapter_spec.rb +0 -462
  486. data/spec/core/object_graph_spec.rb +0 -303
  487. data/spec/core/placeholder_literalizer_spec.rb +0 -163
  488. data/spec/core/schema_generator_spec.rb +0 -179
  489. data/spec/core/schema_spec.rb +0 -1659
  490. data/spec/core/spec_helper.rb +0 -34
  491. data/spec/core/version_spec.rb +0 -7
  492. data/spec/core_extensions_spec.rb +0 -699
  493. data/spec/extensions/accessed_columns_spec.rb +0 -51
  494. data/spec/extensions/active_model_spec.rb +0 -123
  495. data/spec/extensions/after_initialize_spec.rb +0 -24
  496. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  497. data/spec/extensions/association_dependencies_spec.rb +0 -117
  498. data/spec/extensions/association_pks_spec.rb +0 -365
  499. data/spec/extensions/association_proxies_spec.rb +0 -86
  500. data/spec/extensions/auto_validations_spec.rb +0 -192
  501. data/spec/extensions/blacklist_security_spec.rb +0 -88
  502. data/spec/extensions/blank_spec.rb +0 -69
  503. data/spec/extensions/boolean_readers_spec.rb +0 -93
  504. data/spec/extensions/caching_spec.rb +0 -270
  505. data/spec/extensions/class_table_inheritance_spec.rb +0 -420
  506. data/spec/extensions/column_conflicts_spec.rb +0 -60
  507. data/spec/extensions/column_select_spec.rb +0 -108
  508. data/spec/extensions/columns_introspection_spec.rb +0 -91
  509. data/spec/extensions/composition_spec.rb +0 -242
  510. data/spec/extensions/connection_validator_spec.rb +0 -120
  511. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
  512. data/spec/extensions/constraint_validations_spec.rb +0 -325
  513. data/spec/extensions/core_refinements_spec.rb +0 -519
  514. data/spec/extensions/csv_serializer_spec.rb +0 -173
  515. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  516. data/spec/extensions/dataset_associations_spec.rb +0 -311
  517. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  518. data/spec/extensions/date_arithmetic_spec.rb +0 -150
  519. data/spec/extensions/defaults_setter_spec.rb +0 -101
  520. data/spec/extensions/delay_add_association_spec.rb +0 -52
  521. data/spec/extensions/dirty_spec.rb +0 -180
  522. data/spec/extensions/eager_each_spec.rb +0 -42
  523. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  524. data/spec/extensions/error_splitter_spec.rb +0 -18
  525. data/spec/extensions/error_sql_spec.rb +0 -20
  526. data/spec/extensions/eval_inspect_spec.rb +0 -73
  527. data/spec/extensions/filter_having_spec.rb +0 -40
  528. data/spec/extensions/force_encoding_spec.rb +0 -114
  529. data/spec/extensions/from_block_spec.rb +0 -21
  530. data/spec/extensions/graph_each_spec.rb +0 -109
  531. data/spec/extensions/hash_aliases_spec.rb +0 -24
  532. data/spec/extensions/hook_class_methods_spec.rb +0 -429
  533. data/spec/extensions/inflector_spec.rb +0 -183
  534. data/spec/extensions/input_transformer_spec.rb +0 -54
  535. data/spec/extensions/insert_returning_select_spec.rb +0 -46
  536. data/spec/extensions/instance_filters_spec.rb +0 -79
  537. data/spec/extensions/instance_hooks_spec.rb +0 -276
  538. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  539. data/spec/extensions/json_serializer_spec.rb +0 -291
  540. data/spec/extensions/lazy_attributes_spec.rb +0 -170
  541. data/spec/extensions/list_spec.rb +0 -267
  542. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  543. data/spec/extensions/many_through_many_spec.rb +0 -2172
  544. data/spec/extensions/meta_def_spec.rb +0 -21
  545. data/spec/extensions/migration_spec.rb +0 -712
  546. data/spec/extensions/modification_detection_spec.rb +0 -80
  547. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
  548. data/spec/extensions/named_timezones_spec.rb +0 -108
  549. data/spec/extensions/nested_attributes_spec.rb +0 -697
  550. data/spec/extensions/null_dataset_spec.rb +0 -85
  551. data/spec/extensions/optimistic_locking_spec.rb +0 -128
  552. data/spec/extensions/pagination_spec.rb +0 -118
  553. data/spec/extensions/pg_array_associations_spec.rb +0 -736
  554. data/spec/extensions/pg_array_ops_spec.rb +0 -143
  555. data/spec/extensions/pg_array_spec.rb +0 -395
  556. data/spec/extensions/pg_enum_spec.rb +0 -92
  557. data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
  558. data/spec/extensions/pg_hstore_spec.rb +0 -206
  559. data/spec/extensions/pg_inet_ops_spec.rb +0 -101
  560. data/spec/extensions/pg_inet_spec.rb +0 -52
  561. data/spec/extensions/pg_interval_spec.rb +0 -76
  562. data/spec/extensions/pg_json_ops_spec.rb +0 -229
  563. data/spec/extensions/pg_json_spec.rb +0 -218
  564. data/spec/extensions/pg_loose_count_spec.rb +0 -17
  565. data/spec/extensions/pg_range_ops_spec.rb +0 -58
  566. data/spec/extensions/pg_range_spec.rb +0 -404
  567. data/spec/extensions/pg_row_ops_spec.rb +0 -60
  568. data/spec/extensions/pg_row_plugin_spec.rb +0 -62
  569. data/spec/extensions/pg_row_spec.rb +0 -360
  570. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
  571. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
  572. data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
  573. data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
  574. data/spec/extensions/prepared_statements_spec.rb +0 -103
  575. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
  576. data/spec/extensions/pretty_table_spec.rb +0 -92
  577. data/spec/extensions/query_literals_spec.rb +0 -183
  578. data/spec/extensions/query_spec.rb +0 -102
  579. data/spec/extensions/rcte_tree_spec.rb +0 -392
  580. data/spec/extensions/round_timestamps_spec.rb +0 -43
  581. data/spec/extensions/schema_caching_spec.rb +0 -41
  582. data/spec/extensions/schema_dumper_spec.rb +0 -789
  583. data/spec/extensions/schema_spec.rb +0 -117
  584. data/spec/extensions/scissors_spec.rb +0 -26
  585. data/spec/extensions/select_remove_spec.rb +0 -38
  586. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
  587. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  588. data/spec/extensions/serialization_spec.rb +0 -362
  589. data/spec/extensions/server_block_spec.rb +0 -90
  590. data/spec/extensions/set_overrides_spec.rb +0 -61
  591. data/spec/extensions/sharding_spec.rb +0 -198
  592. data/spec/extensions/shared_caching_spec.rb +0 -175
  593. data/spec/extensions/single_table_inheritance_spec.rb +0 -297
  594. data/spec/extensions/singular_table_names_spec.rb +0 -22
  595. data/spec/extensions/skip_create_refresh_spec.rb +0 -17
  596. data/spec/extensions/spec_helper.rb +0 -71
  597. data/spec/extensions/split_array_nil_spec.rb +0 -24
  598. data/spec/extensions/split_values_spec.rb +0 -22
  599. data/spec/extensions/sql_expr_spec.rb +0 -60
  600. data/spec/extensions/static_cache_spec.rb +0 -361
  601. data/spec/extensions/string_date_time_spec.rb +0 -95
  602. data/spec/extensions/string_stripper_spec.rb +0 -68
  603. data/spec/extensions/subclasses_spec.rb +0 -66
  604. data/spec/extensions/table_select_spec.rb +0 -71
  605. data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
  606. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  607. data/spec/extensions/timestamps_spec.rb +0 -175
  608. data/spec/extensions/to_dot_spec.rb +0 -154
  609. data/spec/extensions/touch_spec.rb +0 -203
  610. data/spec/extensions/tree_spec.rb +0 -274
  611. data/spec/extensions/typecast_on_load_spec.rb +0 -80
  612. data/spec/extensions/unlimited_update_spec.rb +0 -20
  613. data/spec/extensions/update_or_create_spec.rb +0 -87
  614. data/spec/extensions/update_primary_key_spec.rb +0 -100
  615. data/spec/extensions/update_refresh_spec.rb +0 -53
  616. data/spec/extensions/validate_associated_spec.rb +0 -52
  617. data/spec/extensions/validation_class_methods_spec.rb +0 -1027
  618. data/spec/extensions/validation_helpers_spec.rb +0 -541
  619. data/spec/extensions/xml_serializer_spec.rb +0 -207
  620. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  621. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  622. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  623. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  624. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  625. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  626. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  627. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  628. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  629. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  630. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  631. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  632. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  633. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  634. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  635. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  636. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  637. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  638. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  639. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  640. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  641. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  642. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  643. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  644. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  645. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  646. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  647. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  648. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  649. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  650. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  651. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  652. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  653. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  654. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  655. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  656. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  657. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  658. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  659. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  660. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  661. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  662. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  663. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  664. data/spec/guards_helper.rb +0 -55
  665. data/spec/integration/associations_test.rb +0 -2454
  666. data/spec/integration/database_test.rb +0 -113
  667. data/spec/integration/dataset_test.rb +0 -1808
  668. data/spec/integration/eager_loader_test.rb +0 -687
  669. data/spec/integration/migrator_test.rb +0 -240
  670. data/spec/integration/model_test.rb +0 -226
  671. data/spec/integration/plugin_test.rb +0 -2240
  672. data/spec/integration/prepared_statement_test.rb +0 -467
  673. data/spec/integration/schema_test.rb +0 -817
  674. data/spec/integration/spec_helper.rb +0 -48
  675. data/spec/integration/timezone_test.rb +0 -86
  676. data/spec/integration/transaction_test.rb +0 -374
  677. data/spec/integration/type_test.rb +0 -133
  678. data/spec/model/association_reflection_spec.rb +0 -525
  679. data/spec/model/associations_spec.rb +0 -4426
  680. data/spec/model/base_spec.rb +0 -759
  681. data/spec/model/class_dataset_methods_spec.rb +0 -146
  682. data/spec/model/dataset_methods_spec.rb +0 -149
  683. data/spec/model/eager_loading_spec.rb +0 -2137
  684. data/spec/model/hooks_spec.rb +0 -604
  685. data/spec/model/inflector_spec.rb +0 -26
  686. data/spec/model/model_spec.rb +0 -982
  687. data/spec/model/plugins_spec.rb +0 -299
  688. data/spec/model/record_spec.rb +0 -2147
  689. data/spec/model/spec_helper.rb +0 -46
  690. data/spec/model/validations_spec.rb +0 -193
  691. data/spec/sequel_coverage.rb +0 -15
  692. data/spec/spec_config.rb +0 -10
@@ -10,9 +10,7 @@ This is very useful for quick testing of ideas, and does not affect the environm
10
10
 
11
11
  If you've installed the sequel gem, then just running "sequel" should load the program, since rubygems should place the sequel binary in your load path. However, if you want to run bin/sequel from the root of a repository checkout, you should probably do:
12
12
 
13
- ruby -I lib bin/sequel
14
-
15
- The -I lib makes sure that you are using the repository checkout's code.
13
+ ruby bin/sequel
16
14
 
17
15
  == Choosing the Database to Connect to
18
16
 
@@ -91,6 +89,8 @@ To save this information to a file, use a standard shell redirection:
91
89
 
92
90
  The -d option dumps the migration in database-independent format, the -D option dumps it in database-specific format.
93
91
 
92
+ Note that the support for dumping schema is fairly limited. It doesn't handle database views, functions, triggers, schemas, partial indexes, functional indexes, and many other things. You should probably use the database specific tools to handle those.
93
+
94
94
  The -S option dumps the schema cache for all tables in the database, which can speed up the usage of Sequel with models when using the schema_caching extension. You should provide this option with the path to which to dump the schema:
95
95
 
96
96
  sequel -S /path/to/schema_cache.db postgres://host/database
@@ -103,6 +103,8 @@ Using the -C option, Sequel can copy the contents of one database to another, ev
103
103
 
104
104
  This copies the table structure, table data, indexes, and foreign keys from the MySQL database to the PostgreSQL database.
105
105
 
106
+ Note that the support for copying is fairly limited. It doesn't handle database views, functions, triggers, schemas, partial indexes, functional indexes, and many other things. Also, the data type conversion may not be exactly what you want. It is best designed for quick conversions and testing. For serious production use, use the database's tools to copy databases for the same database type, and for different database types, use the Sequel API.
107
+
106
108
  == Other Options
107
109
 
108
110
  Other options not mentioned above are explained briefly here.
@@ -6,7 +6,7 @@
6
6
 
7
7
  DB = Sequel.sqlite('my_blog.db')
8
8
  DB = Sequel.connect('postgres://user:password@localhost/my_db')
9
- DB = Sequel.postgres('my_db', :user => 'user', :password => 'password', :host => 'localhost')
9
+ DB = Sequel.postgres('my_db', user: 'user', password: 'password', host: 'localhost')
10
10
  DB = Sequel.ado('mydb')
11
11
 
12
12
  == Open an SQLite memory database
@@ -18,7 +18,7 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
18
18
  == Logging SQL statements
19
19
 
20
20
  require 'logger'
21
- DB = Sequel.sqlite '', :loggers => [Logger.new($stdout)]
21
+ DB = Sequel.sqlite(loggers: [Logger.new($stdout)])
22
22
  # or
23
23
  DB.loggers << Logger.new($stdout)
24
24
 
@@ -38,22 +38,24 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
38
38
 
39
39
  == Most dataset methods are chainable
40
40
 
41
- dataset = DB[:managers].where(:salary => 5000..10000).order(:name, :department)
41
+ dataset = DB[:managers].where(salary: 5000..10000).order(:name, :department)
42
42
 
43
43
  == Insert rows
44
44
 
45
- dataset.insert(:name => 'Sharon', :grade => 50)
45
+ dataset.insert(name: 'Sharon', grade: 50)
46
46
 
47
47
  == Retrieve rows
48
48
 
49
49
  dataset.each{|r| p r}
50
50
  dataset.all # => [{...}, {...}, ...]
51
51
  dataset.first # => {...}
52
+ dataset.last # => {...}
52
53
 
53
54
  == Update/Delete rows
54
55
 
55
56
  dataset.exclude(:active).delete
56
- dataset.where('price < ?', 100).update(:active => true)
57
+ dataset.where{price < 100}.update(:active => true)
58
+ dataset.where(:active).update(:price => Sequel[:price] * 0.90)
57
59
 
58
60
  == Datasets are Enumerable
59
61
 
@@ -67,8 +69,7 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
67
69
 
68
70
  === Equality
69
71
 
70
- dataset.where(:name => 'abc')
71
- dataset.where('name = ?', 'abc')
72
+ dataset.where(name: 'abc')
72
73
 
73
74
  === Inequality
74
75
 
@@ -77,30 +78,27 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
77
78
 
78
79
  === Inclusion
79
80
 
80
- dataset.where(:value => 50..100)
81
+ dataset.where(value: 50..100)
81
82
  dataset.where{(value >= 50) & (value <= 100)}
82
83
 
83
- dataset.where('value IN ?', [50,75,100])
84
- dataset.where(:value=>[50,75,100])
85
-
86
- dataset.where(:id=>other_dataset.select(:other_id))
84
+ dataset.where(value: [50,75,100])
85
+ dataset.where(id: other_dataset.select(:other_id))
87
86
 
88
87
  === Subselects as scalar values
89
88
 
90
- dataset.where('price > (SELECT avg(price) + 100 FROM table)')
91
89
  dataset.where{price > dataset.select(avg(price) + 100)}
92
90
 
93
91
  === LIKE/Regexp
94
92
 
95
93
  DB[:items].where(Sequel.like(:name, 'AL%'))
96
- DB[:items].where(:name => /^AL/)
94
+ DB[:items].where(name: /^AL/)
97
95
 
98
96
  === AND/OR/NOT
99
97
 
100
98
  DB[:items].where{(x > 5) & (y > 10)}.sql
101
99
  # SELECT * FROM items WHERE ((x > 5) AND (y > 10))
102
100
 
103
- DB[:items].where(Sequel.or(:x => 1, :y => 2) & Sequel.~(:z => 3)).sql
101
+ DB[:items].where(Sequel.or(x: 1, y: 2) & Sequel.~(z: 3)).sql
104
102
  # SELECT * FROM items WHERE (((x = 1) OR (y = 2)) AND (z != 3))
105
103
 
106
104
  === Mathematical operators
@@ -111,11 +109,18 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
111
109
  DB[:items].where{price - 100 < avg(price)}.sql
112
110
  # SELECT * FROM items WHERE ((price - 100) < avg(price))
113
111
 
112
+ === Raw SQL Fragments
113
+
114
+ dataset.where(Sequel.lit('id= 1'))
115
+ dataset.where(Sequel.lit('name = ?', 'abc'))
116
+ dataset.where(Sequel.lit('value IN ?', [50,75,100]))
117
+ dataset.where(Sequel.lit('price > (SELECT avg(price) + 100 FROM table)'))
118
+
114
119
  == Ordering
115
120
 
116
- dataset.order(:kind)
117
- dataset.reverse_order(:kind)
118
- dataset.order(Sequel.desc(:kind), :name)
121
+ dataset.order(:kind) # kind
122
+ dataset.reverse(:kind) # kind DESC
123
+ dataset.order(Sequel.desc(:kind), :name) # kind DESC, name
119
124
 
120
125
  == Limit/Offset
121
126
 
@@ -125,11 +130,12 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
125
130
 
126
131
  == Joins
127
132
 
128
- DB[:items].left_outer_join(:categories, :id => :category_id).sql
133
+ DB[:items].left_outer_join(:categories, id: :category_id).sql
129
134
  # SELECT * FROM items
130
135
  # LEFT OUTER JOIN categories ON categories.id = items.category_id
131
136
 
132
- DB[:items].join(:categories, :id => :category_id).join(:groups, :id => :items__group_id)
137
+ DB[:items].join(:categories, id: :category_id).
138
+ join(:groups, id: Sequel[:items][:group_id])
133
139
  # SELECT * FROM items
134
140
  # INNER JOIN categories ON categories.id = items.category_id
135
141
  # INNER JOIN groups ON groups.id = items.group_id
@@ -142,79 +148,100 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
142
148
  dataset.avg(:price)
143
149
  dataset.sum(:stock)
144
150
 
145
- dataset.group_and_count(:category)
151
+ dataset.group_and_count(:category).all
146
152
  dataset.select_group(:category).select_append{avg(:price)}
147
153
 
148
154
  == SQL Functions / Literals
149
155
 
150
- dataset.update(:updated_at => Sequel.function(:NOW))
151
- dataset.update(:updated_at => Sequel.lit('NOW()'))
156
+ dataset.update(updated_at: Sequel.function(:NOW))
157
+ dataset.update(updated_at: Sequel.lit('NOW()'))
152
158
 
153
- dataset.update(:updated_at => Sequel.lit("DateValue('1/1/2001')"))
154
- dataset.update(:updated_at => Sequel.function(:DateValue, '1/1/2001'))
159
+ dataset.update(updated_at: Sequel.lit("DateValue('1/1/2001')"))
160
+ dataset.update(updated_at: Sequel.function(:DateValue, '1/1/2001'))
155
161
 
156
162
  == Schema Manipulation
157
163
 
158
164
  DB.create_table :items do
159
165
  primary_key :id
160
- String :name, :unique => true, :null => false
161
- TrueClass :active, :default => true
166
+ String :name, unique: true, null: false
167
+ TrueClass :active, default: true
162
168
  foreign_key :category_id, :categories
163
- DateTime :created_at
169
+ DateTime :created_at, default: Sequel::CURRENT_TIMESTAMP, :index=>true
164
170
 
165
- index :created_at
171
+ index [:category_id, :active]
166
172
  end
167
173
 
168
174
  DB.drop_table :items
169
175
 
170
176
  == Aliasing
171
177
 
178
+ DB[:items].select(Sequel[:name].as(:item_name))
172
179
  DB[:items].select(Sequel.as(:name, :item_name))
173
- DB[:items].select(:name___item_name)
174
- DB[:items___items_table].select(:items_table__name___item_name)
180
+ DB[:items].select{name.as(:item_name)}
181
+ # SELECT name AS item_name FROM items
182
+
183
+ DB[Sequel[:items].as(:items_table)].select{items_table[:name].as(:item_name)}
175
184
  # SELECT items_table.name AS item_name FROM items AS items_table
176
185
 
177
186
  == Transactions
178
187
 
179
188
  DB.transaction do
180
- dataset.insert(:first_name => 'Inigo', :last_name => 'Montoya')
181
- dataset.insert(:first_name => 'Farm', :last_name => 'Boy')
182
- end # Either both are inserted or neither are inserted
189
+ # BEGIN
190
+ dataset.insert(first_name: 'Inigo', last_name: 'Montoya')
191
+ dataset.insert(first_name: 'Farm', last_name: 'Boy')
192
+ end
193
+ # COMMIT
194
+
183
195
 
184
- Database#transaction is re-entrant:
196
+ Transactions are reentrant:
185
197
 
186
- DB.transaction do # BEGIN issued only here
198
+ DB.transaction do
199
+ # BEGIN
187
200
  DB.transaction do
188
- dataset << {:first_name => 'Inigo', :last_name => 'Montoya'}
201
+ dataset.insert(first_name: 'Inigo', last_name: 'Montoya')
189
202
  end
190
- end # COMMIT issued only here
203
+ end
204
+ # COMMIT
191
205
 
192
206
  Transactions are aborted if an error is raised:
193
207
 
194
208
  DB.transaction do
209
+ # BEGIN
195
210
  raise "some error occurred"
196
- end # ROLLBACK issued and the error is re-raised
211
+ end
212
+ # ROLLBACK issued and the error is re-raised
197
213
 
198
214
  Transactions can also be aborted by raising Sequel::Rollback:
199
215
 
200
216
  DB.transaction do
201
- raise(Sequel::Rollback) if something_bad_happened
202
- end # ROLLBACK issued and no error raised
217
+ # BEGIN
218
+ raise(Sequel::Rollback)
219
+ end
220
+ # ROLLBACK issued and no error raised
203
221
 
204
222
  Savepoints can be used if the database supports it:
205
223
 
206
224
  DB.transaction do
207
- dataset << {:first_name => 'Farm', :last_name => 'Boy'} # Inserted
208
- DB.transaction(:savepoint=>true) do # This savepoint is rolled back
209
- dataset << {:first_name => 'Inigo', :last_name => 'Montoya'} # Not inserted
210
- raise(Sequel::Rollback) if something_bad_happened
225
+ dataset.insert(first_name: 'Farm', last_name: 'Boy') # Inserted
226
+ DB.transaction(savepoint: true) do # This savepoint is rolled back
227
+ dataset.insert(first_name: 'Inigo', last_name: 'Montoya') # Not inserted
228
+ raise(Sequel::Rollback)
211
229
  end
212
- dataset << {:first_name => 'Prince', :last_name => 'Humperdink'} # Inserted
230
+ dataset.insert(first_name: 'Prince', last_name: 'Humperdink') # Inserted
213
231
  end
214
232
 
215
- == Miscellaneous:
233
+ == Retrieving SQL
216
234
 
217
235
  dataset.sql # "SELECT * FROM items"
236
+ dataset.insert_sql(a: 1) # "INSERT INTO items (a) VALUES (1)"
237
+ dataset.update_sql(a: 1) # "UPDATE items SET a = 1"
218
238
  dataset.delete_sql # "DELETE FROM items"
219
- dataset.columns # => array of columns in the result set, does a SELECT
239
+
240
+ == Basic introspection
241
+
242
+ dataset.columns # => [:id, :name, ...]
243
+ DB.tables # => [:items, ...]
244
+ DB.views # => [:new_items, ...]
220
245
  DB.schema(:items) # => [[:id, {:type=>:integer, ...}], [:name, {:type=>:string, ...}], ...]
246
+ DB.indexes(:items) # => {:index_name => {:columns=>[:a], :unique=>false}, ...}
247
+ DB.foreign_key_list(:items) # => [{:name=>:items_a_fk, :columns=>[:a], :key=>[:id], :table=>:other_table}, ...]
@@ -1,13 +1,13 @@
1
1
  = Code Order
2
2
 
3
- In Sequel, the order in which code is executed is important. This
3
+ In Sequel, the order in which code is executed during initialization is important. This
4
4
  guide provides the recommended way to order your Sequel code. Some
5
5
  of these guidelines are not strictly necessary, but others are, and
6
6
  this guide will be specific about which are strictly necessary.
7
7
 
8
8
  == Require Sequel
9
9
 
10
- This is sort of a no brainer, but you need to require the library
10
+ This is sort of a no-brainer, but you need to require the library
11
11
  first. This is a strict requirement, none of the other code can
12
12
  be executed unless the library has been required first. Example:
13
13
 
@@ -18,13 +18,6 @@ be executed unless the library has been required first. Example:
18
18
  Global extensions are loaded with Sequel.extension, and affect
19
19
  other parts of Sequel or the general ruby environment. It's not
20
20
  necessary to load them first, but it is a recommended practice.
21
-
22
- The exception to this is global extensions that integrate with
23
- Database-specific extensions, where the Database-specific
24
- extension should be loaded first (such as some of the pg_*
25
- extensions). In those cases, the global extensions should be
26
- loaded after the Database-specific extensions.
27
-
28
21
  Example:
29
22
 
30
23
  Sequel.extension :blank
@@ -77,12 +70,37 @@ copied into the subclass when model subclasses are created. Example:
77
70
  == Load Model Classes
78
71
 
79
72
  After you have established a database connection, and configured your
80
- global model configration and global plugins, you can load your model
73
+ global model configuration and global plugins, you can load your model
81
74
  classes. It's recommended to have a separate file for each model class,
82
75
  unless the model classes are very simple. Example:
83
76
 
84
77
  Dir['./models/*.rb'].each{|f| require f}
85
78
 
79
+ == Finalize Associations and Freeze Model Classes and Database
80
+
81
+ After all the models have been setup, you can finalize the associations.
82
+ This can speed up association reflection methods by doing a lookup in
83
+ advance to find the associated class, and cache related association
84
+ information in the association itself.
85
+
86
+ Additionally, in production and testing, you should freeze the
87
+ model classes and Database instance, so that you can detect
88
+ unsafe runtime modification of the configuration:
89
+
90
+ model_classes.each(&:finalize_associations)
91
+ model_classes.each(&:freeze)
92
+ DB.freeze
93
+
94
+ The `subclasses` plugin can be used to keep track of all model classes
95
+ that have been setup in your application. Finalizing their associations
96
+ and freezing them can easily be achieved through the plugin:
97
+
98
+ # Register the plugin before setting up the models
99
+ Sequel::Model.plugin :subclasses
100
+ # ... setup models
101
+ # Now finalize associations & freeze models by calling the plugin:
102
+ Sequel::Model.freeze_descendents
103
+
86
104
  == Disconnect If Using Forking Webserver with Code Preloading
87
105
 
88
106
  If you are using a forking webserver such as unicorn or passenger, with
@@ -10,12 +10,18 @@ Historically, Sequel added methods to many of the core classes, and usage of tho
10
10
 
11
11
  While Sequel never overrode any methods defined by ruby, it is possible that other libraries could define the same methods that Sequel defines, which could cause problems. Also, some rubyists do not like using libraries that add methods to the core classes.
12
12
 
13
- Alternatives for the core extension methods where added to Sequel, so the query above could be written as:
13
+ Alternatives for the core extension methods were added to Sequel, so the query above could be written as:
14
14
 
15
15
  DB[:table].select(Sequel.cast(:column, Integer)).
16
16
  where(Sequel.like(:column, 'A%')).
17
17
  order(Sequel.case({1=>2}, 0, :a))
18
18
 
19
+ or with virtual rows:
20
+
21
+ DB[:table].select{column.as(Integer)}.
22
+ where{column.like('A%')}.
23
+ order(Sequel.case({1=>2}, 0, :a))
24
+
19
25
  Almost all of the core extension methods have a replacement on the Sequel module. So it is now up to the user which style to use. Using the methods on the Sequel module results in slightly more verbose code, but allows the code to work without modifications to the core classes.
20
26
 
21
27
  == Issues
@@ -40,6 +46,16 @@ All of Sequel's extensions to the core classes are stored in Sequel's core_exten
40
46
 
41
47
  Sequel has no internal dependency on the core extensions. This includes Sequel's core, Sequel::Model, and all plugins and extensions that ship with Sequel. However, it is possible that external plugins and extensions will depend on the core extensions. Such plugins and extensions should be updated so that they no longer depend on the core extensions.
42
48
 
49
+ == Refinements
50
+
51
+ Most of the these extensions can be added on a per-file basis using refinements (if you are using Ruby 2.0+). To use refinements, first load them:
52
+
53
+ Sequel.extension :core_refinements
54
+
55
+ Then for each file where you want to use the refinements:
56
+
57
+ using Sequel::CoreRefinements
58
+
43
59
  == Core Extension Methods
44
60
 
45
61
  This section will briefly describe all of the methods added to the core classes, and what the alternative method is that doesn't require the core extensions.
@@ -53,8 +69,9 @@ Symbol#as and String#as return Sequel aliased expressions using the provided ali
53
69
  :a.as(:b) # SQL: a AS b
54
70
  'a'.as(:b) # SQL: 'a' AS b
55
71
 
56
- Alternative: Sequel.as:
72
+ Alternatives:
57
73
 
74
+ Sequel[:a].as(:b)
58
75
  Sequel.as(:a, :b)
59
76
 
60
77
  ==== cast
@@ -64,8 +81,9 @@ Symbol#cast and String#cast return Sequel cast expressions for typecasting in th
64
81
  :a.cast(Integer) # SQL: CAST(a AS integer)
65
82
  'a'.cast(Integer) # SQL: CAST('a' AS integer)
66
83
 
67
- Alternative: Sequel.cast:
84
+ Alternatives:
68
85
 
86
+ Sequel[:a].cast(Integer)
69
87
  Sequel.cast(:a, Integer)
70
88
 
71
89
  ==== cast_numeric
@@ -75,8 +93,9 @@ Symbol#cast_numeric and String#cast_numeric return Sequel cast expressions for t
75
93
  :a.cast_numeric # SQL: CAST(a AS integer)
76
94
  'a'.cast_numeric(Float) # SQL: CAST('a' AS double precision)
77
95
 
78
- Alternative: Sequel.cast_numeric:
96
+ Alternative:
79
97
 
98
+ Sequel[:a].cast_numeric
80
99
  Sequel.cast_numeric(:a)
81
100
 
82
101
  ==== cast_string
@@ -86,21 +105,23 @@ Symbol#cast_string and String#cast_string return Sequel cast expressions for typ
86
105
  :a.cast_string # SQL: CAST(a AS varchar(255))
87
106
  'a'.cast_string(:text) # SQL: CAST('a' AS text)
88
107
 
89
- Alternative: Sequel.cast_string:
108
+ Alternatives:
90
109
 
110
+ Sequel[:a].cast_string
91
111
  Sequel.cast_string(:a)
92
112
 
93
113
  === Symbol
94
114
 
95
115
  ==== identifier
96
116
 
97
- Symbol#identifier wraps the symbol in a single identifier that will not be split. By default, Sequel will split symbols with double or triple underscores to do qualifying and aliasing.
117
+ Symbol#identifier wraps the symbol in an Sequel identifier object. If symbol splitting is enabled (no longer the default), it also makes sure the symbol will not be split. If symbol splitting is disabled (the default), there is little reason to use this).
98
118
 
99
- :table__column.identifier # SQL: table__column
119
+ :column.identifier # SQL: column
100
120
 
101
- Alternative: Sequel.identifier:
121
+ Alternatives:
102
122
 
103
- Sequel.identifier(:table__column)
123
+ Sequel[:column]
124
+ Sequel.identifier(:column)
104
125
 
105
126
  ==== asc
106
127
 
@@ -108,8 +129,9 @@ Symbol#asc is used to define an ascending order on a column. It exists mostly f
108
129
 
109
130
  :a.asc # SQL: a ASC
110
131
 
111
- Alternative: Sequel.asc:
132
+ Alternatives:
112
133
 
134
+ Sequel[:a].asc
113
135
  Sequel.asc(:a)
114
136
 
115
137
  ==== desc
@@ -118,8 +140,9 @@ Symbol#desc is used to defined a descending order on a column. The returned val
118
140
 
119
141
  :a.desc # SQL: a DESC
120
142
 
121
- Alternative: Sequel.desc:
143
+ Alternatives:
122
144
 
145
+ Sequel[:a].desc
123
146
  Sequel.desc(:a)
124
147
 
125
148
  ==== +, -, *, /
@@ -130,13 +153,25 @@ The standard mathematical operators are defined on Symbol, and return a Sequel n
130
153
  :a - :b # SQL: a - b
131
154
  :a * :b # SQL: a * b
132
155
  :a / :b # SQL: a / b
156
+ :a ** :b # SQL: power(a, b)
157
+
158
+ Sequel also supports ruby's coercion protocols on symbols (note that this does not work when using refinements):
159
+
160
+ 1 + :b # SQL: 1 + b
133
161
 
134
162
  Alternatives:
135
163
 
164
+ Sequel[:a] + :b
165
+ Sequel[:a] - :b
166
+ Sequel[:a] * :b
167
+ Sequel[:a] / :b
168
+ Sequel[:a] ** :b
169
+
136
170
  Sequel.+(:a, :b)
137
171
  Sequel.-(:a, :b)
138
172
  Sequel.*(:a, :b)
139
173
  Sequel./(:a, :b)
174
+ Sequel.**(:a, :b)
140
175
 
141
176
  ==== *
142
177
 
@@ -144,9 +179,9 @@ The * operator is overloaded on Symbol such that if it is called with no argumen
144
179
 
145
180
  :a.* # SQL: a.*
146
181
 
147
- Alternative: Sequel.expr.*:
182
+ Alternative:
148
183
 
149
- Sequel.expr(:a).*
184
+ Sequel[:a].*
150
185
 
151
186
  ==== qualify
152
187
 
@@ -154,11 +189,11 @@ Symbol#qualify qualifies the identifier (e.g. a column) with a another identifie
154
189
 
155
190
  :column.qualify(:table) # SQL: table.column
156
191
 
157
- Alternative: Sequel.qualify:
192
+ Alternative:
158
193
 
159
- Sequel.qualify(:table, :column)
194
+ Sequel[:table][:column]
160
195
 
161
- Note the reversed order of the arguments. For the Symbol#qualify method, the argument is the qualifier, while for Sequel.qualify, the qualifier is the first argument.
196
+ Note the reversed order of the arguments. For the Symbol#qualify method, the argument is the qualifier, while for Sequel[][], the first [] is the qualifier, and the second [] is the identifier.
162
197
 
163
198
  ==== like
164
199
 
@@ -166,8 +201,9 @@ Symbol#like returns a case sensitive LIKE expression between the identifier and
166
201
 
167
202
  :a.like('b%') # SQL: a LIKE 'b%' ESCAPE '\'
168
203
 
169
- Alternative: Sequel.like:
204
+ Alternatives:
170
205
 
206
+ Sequel[:a].like('b%')
171
207
  Sequel.like(:a, 'b%')
172
208
 
173
209
  ==== ilike
@@ -176,8 +212,9 @@ Symbol#ilike returns a case insensitive LIKE expression between the identifier a
176
212
 
177
213
  :a.ilike('b%') # SQL: a ILIKE 'b%' ESCAPE '\'
178
214
 
179
- Alternative: Sequel.ilike:
215
+ Alternatives:
180
216
 
217
+ Sequel[:a].ilike('b%')
181
218
  Sequel.ilike(:a, 'b%')
182
219
 
183
220
  ==== sql_subscript
@@ -186,8 +223,9 @@ Symbol#sql_subscript returns a Sequel expression representing an SQL array acces
186
223
 
187
224
  :a.sql_subscript(1) # SQL: a[1]
188
225
 
189
- Alternative: Sequel.subscript:
226
+ Alternatives:
190
227
 
228
+ Sequel[:a].sql_subscript(1)
191
229
  Sequel.subscript(:a, 1)
192
230
 
193
231
  ==== extract
@@ -196,12 +234,11 @@ Symbol#extract does a datetime part extraction from the receiver:
196
234
 
197
235
  :a.extract(:year) # SQL: extract(year FROM a)
198
236
 
199
- Alternative: Sequel.extract:
237
+ Alternatives:
200
238
 
239
+ Sequel[:a].extract(:year)
201
240
  Sequel.extract(:year, :a)
202
241
 
203
- Note the reversed order of the arguments. In Symbol#extract, the datetime part is the argument, while in Sequel.extract, the datetime part is the first argument.
204
-
205
242
  ==== sql_boolean, sql_number, sql_string
206
243
 
207
244
  These Symbol methods are used to force the treating of the object as a specific SQL type, instead of as a general SQL type. For example:
@@ -210,11 +247,11 @@ These Symbol methods are used to force the treating of the object as a specific
210
247
  :a.sql_number << 1 # SQL: a << 1
211
248
  :a.sql_string + 'a' # SQL: a || 'a'
212
249
 
213
- Alternative: Sequel.expr:
250
+ Alternatives:
214
251
 
215
- Sequel.expr(:a).sql_boolean
216
- Sequel.expr(:a).sql_number
217
- Sequel.expr(:a).sql_string
252
+ Sequel[:a].sql_boolean
253
+ Sequel[:a].sql_number
254
+ Sequel[:a].sql_string
218
255
 
219
256
  ==== sql_function
220
257
 
@@ -224,8 +261,9 @@ Symbol#sql_function returns an SQL function call expression object:
224
261
  :sum.sql_function(:a) # SQL: sum(a)
225
262
  :concat.sql_function(:a, :b) # SQL: concat(a, b)
226
263
 
227
- Alternative: Sequel.function:
264
+ Alternatives:
228
265
 
266
+ Sequel[:sum].function(:a)
229
267
  Sequel.function(:sum, :a)
230
268
 
231
269
  === String
@@ -237,9 +275,10 @@ String#lit creates a literal string, using placeholders if any arguments are giv
237
275
  'a'.lit # SQL: a
238
276
  '"a" = ?'.lit(1) # SQL: "a" = 1
239
277
 
240
- Alternative: Sequel.lit:
278
+ Alternatives:
241
279
 
242
280
  Sequel.lit('a')
281
+ Sequel.lit('a = ?', 1)
243
282
 
244
283
  ==== to_sequel_blob
245
284
 
@@ -247,7 +286,7 @@ String#to_sequel_blob returns the string wrapper in Sequel blob object. Often b
247
286
 
248
287
  "a\0".to_sequel_blob # SQL: X'6100'
249
288
 
250
- Alternative: Sequel.blob:
289
+ Alternative:
251
290
 
252
291
  Sequel.blob("a\0")
253
292
 
@@ -257,12 +296,13 @@ Alternative: Sequel.blob:
257
296
 
258
297
  Array#~, Hash#~, and Symbol#~ treat the receiver as a conditions specifier, not matching all of the conditions:
259
298
 
260
- ~{:a=>1, :b=>[2, 3]} # SQL: a != 1 OR b NOT IN (2, 3)
299
+ ~{a: 1, b: [2, 3]} # SQL: a != 1 OR b NOT IN (2, 3)
261
300
  ~[[:a, 1], [:b, [1, 2]]] # SQL: a != 1 OR b NOT IN (1, 2)
262
301
 
263
- Alternative: Sequel.~:
302
+ Alternatives:
264
303
 
265
- Sequel.~(:a=>1, :b=>[2, 3])
304
+ ~Sequel[a: 1, b: [2, 3]]
305
+ Sequel.~(a: 1, b: [2, 3])
266
306
 
267
307
  === Hash & Array
268
308
 
@@ -270,45 +310,45 @@ Alternative: Sequel.~:
270
310
 
271
311
  Array#case and Hash#case return an SQL CASE expression, where the keys are conditions and the values are results:
272
312
 
273
- {{:a=>[2,3]}=>1}.case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
274
- [[{:a=>[2,3]}, 1]].case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
313
+ {{a: [2,3]} => 1}.case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
314
+ [[{a: [2,3]}, 1]].case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
275
315
 
276
- Alternative: Sequel.case:
316
+ Alternative:
277
317
 
278
- Sequel.case({{:a=>[2,3]}=>1}, 0)
318
+ Sequel.case({{a: [2,3]}=>1}, 0)
279
319
 
280
320
  ==== sql_expr
281
321
 
282
322
  Array#sql_expr and Hash#sql_expr treat the receiver as a conditions specifier, matching all of the conditions in the array.
283
323
 
284
- {:a=>1, :b=>[2, 3]}.sql_expr # SQL: a = 1 AND b IN (2, 3)
324
+ {a: 1, b: [2, 3]}.sql_expr # SQL: a = 1 AND b IN (2, 3)
285
325
  [[:a, 1], [:b, [2, 3]]].sql_expr # SQL: a = 1 AND b IN (2, 3)
286
326
 
287
- Alternative: Sequel.expr:
327
+ Alternative:
288
328
 
289
- Sequel.expr(:a=>1, :b=>[2, 3])
329
+ Sequel[a: 1, b: [2, 3]]
290
330
 
291
331
  ==== sql_negate
292
332
 
293
333
  Array#sql_negate and Hash#sql_negate treat the receiver as a conditions specifier, matching none of the conditions in the array:
294
334
 
295
- {:a=>1, :b=>[2, 3]}.sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
335
+ {a: 1, b: [2, 3]}.sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
296
336
  [[:a, 1], [:b, [2, 3]]].sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
297
337
 
298
- Alternative: Sequel.negate:
338
+ Alternative:
299
339
 
300
- Sequel.negate(:a=>1, :b=>[2, 3])
340
+ Sequel.negate(a: 1, b: [2, 3])
301
341
 
302
342
  ==== sql_or
303
343
 
304
344
  Array#sql_or nd Hash#sql_or treat the receiver as a conditions specifier, matching any of the conditions in the array:
305
345
 
306
- {:a=>1, :b=>[2, 3]}.sql_or # SQL: a = 1 OR b IN (2, 3)
346
+ {a: 1, b: [2, 3]}.sql_or # SQL: a = 1 OR b IN (2, 3)
307
347
  [[:a, 1], [:b, [2, 3]]].sql_or # SQL: a = 1 OR b IN (2, 3)
308
348
 
309
- Alternative: Sequel.or:
349
+ Alternative:
310
350
 
311
- Sequel.or(:a=>1, :b=>[2, 3])
351
+ Sequel.or(a: 1, b: [2, 3])
312
352
 
313
353
  === Array
314
354
 
@@ -316,10 +356,10 @@ Alternative: Sequel.or:
316
356
 
317
357
  Array#sql_value_list wraps the array in an array subclass, which Sequel will always treat as a value list and not a conditions specifier. By default, Sequel treats arrays of two element arrays as a conditions specifier.
318
358
 
319
- DB[:a].filter('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: (a, b) IN ((1 = 2) AND (3 = 4))
320
- DB[:a].filter('(a, b) IN ?', [[1, 2], [3, 4]].sql_value_list) # SQL: (a, b) IN ((1, 2), (3, 4))
359
+ DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: (a, b) IN ((1 = 2) AND (3 = 4))
360
+ DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]].sql_value_list) # SQL: (a, b) IN ((1, 2), (3, 4))
321
361
 
322
- Alternative: Sequel.value_list:
362
+ Alternative:
323
363
 
324
364
  Sequel.value_list([[1, 2], [3, 4]])
325
365
 
@@ -327,12 +367,12 @@ Alternative: Sequel.value_list:
327
367
 
328
368
  Array#sql_string_join joins all of the elements in the array in an SQL string concatentation expression:
329
369
 
330
- [:a].sql_string_join # SQL: a
331
- [:a, :b].sql_string_join # SQL: a || b
332
- [:a, 'b'].sql_string_join # SQL: a || 'b'
370
+ [:a].sql_string_join # SQL: a
371
+ [:a, :b].sql_string_join # SQL: a || b
372
+ [:a, 'b'].sql_string_join # SQL: a || 'b'
333
373
  ['a', :b].sql_string_join(' ') # SQL: 'a' || ' ' || b
334
374
 
335
- Alternative: Sequel.join:
375
+ Alternative:
336
376
 
337
377
  Sequel.join(['a', :b], ' ')
338
378
 
@@ -342,23 +382,24 @@ Alternative: Sequel.join:
342
382
 
343
383
  Hash#& and Symbol#& return a Sequel boolean expression, matching the condition specified by the receiver and the condition specified by the given argument:
344
384
 
345
- :a & :b # SQL: a AND b
346
- {:a=>1} & :b # SQL: a = 1 AND b
347
- {:a=>true} & :b # SQL: a IS TRUE AND b
385
+ :a & :b # SQL: a AND b
386
+ {a: 1} & :b # SQL: a = 1 AND b
387
+ {a: true} & :b # SQL: a IS TRUE AND b
348
388
 
349
- Alternative: Sequel.&:
389
+ Alternatives:
350
390
 
351
- Sequel.&({:a=>1}, :b)
391
+ Sequel[a: 1] & :b
392
+ Sequel.&({a: 1}, :b)
352
393
 
353
394
  ==== |
354
395
 
355
396
  Hash#| returns a Sequel boolean expression, matching the condition specified by the receiver or the condition specified by the given argument:
356
397
 
357
- :a | :b # SQL: a OR b
358
- {:a=>1} | :b # SQL: a = 1 OR b
359
- {:a=>true} | :b # SQL: a IS TRUE OR b
360
-
361
- Alternative: Sequel.|:
398
+ :a | :b # SQL: a OR b
399
+ {a: 1} | :b # SQL: a = 1 OR b
400
+ {a: true} | :b # SQL: a IS TRUE OR b
362
401
 
363
- Sequel.|({:a=>1}, :b)
402
+ Alternative:
364
403
 
404
+ Sequel[a: 1] | :b
405
+ Sequel.|({a: 1}, :b)