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
@@ -33,7 +33,7 @@ Doing this, only Node and future subclasses of Node will have the tree plugin lo
33
33
  Some plugins require arguments and/or support options. For example, the single_table_inheritance plugin requires an argument containing the column that specifies the class to use, and options:
34
34
 
35
35
  class Employee < Sequel::Model
36
- plugin :single_table_inheritance, :type_id, :model_map=>{1=>:Staff, 2=>:Manager}
36
+ plugin :single_table_inheritance, :type_id, model_map: {1=>:Staff, 2=>:Manager}
37
37
  end
38
38
 
39
39
  You should read the documentation for the plugin to determine if it requires arguments and what if any options are supported.
@@ -120,7 +120,7 @@ This allows a plugin user to do:
120
120
 
121
121
  == Calling super to get Previous Behavior
122
122
 
123
- No matter if you are dealing with class, instance, or dataset methods, you can call super inside the method to get the previous behavior. This makes it easy to hook into the method, add your own behavior, but still (optionally?) get the previous behavior:
123
+ No matter if you are dealing with class, instance, or dataset methods, you can call super inside the method to get the previous behavior. This makes it easy to hook into the method, add your own behavior, but still get the previous behavior:
124
124
 
125
125
  module Sequel::Plugins::Foo
126
126
  module InstanceMethods
@@ -135,14 +135,14 @@ No matter if you are dealing with class, instance, or dataset methods, you can c
135
135
  private
136
136
 
137
137
  def allow_saving?
138
- `pom` =~ /Waxing/
138
+ moon =~ /Waxing/
139
139
  end
140
140
  end
141
141
  end
142
142
 
143
143
  == Running Code When the Plugin is Loaded
144
144
 
145
- Some plugins require more than just adding methods. Any plugin that requires state is going to have to initialize that state and store it somewhere. If you want to run code when a plugin is loaded (usually to initialize state, but possibly for other reasons), there are two methods you can define to do so. The first method is apply, and it is called only the first time the plugin is loaded into the class, before it is loaded into the class. This is generally only used if a plugin depends on another plugin or for initializing state. You define this method as a singleton method of the plugin module:
145
+ Some plugins require more than just adding methods. Any plugin that requires state is going to have to initialize that state and store it somewhere (generally in the model class itself). If you want to run code when a plugin is loaded (usually to initialize state, but possibly for other reasons), there are two methods you can define to do so. The first method is apply, and it is called only the first time the plugin is loaded into the class, before it is loaded into the class. This is generally only used if a plugin depends on another plugin or for initializing state. You define this method as a singleton method of the plugin module:
146
146
 
147
147
  module Sequel::Plugins::Foo
148
148
  def self.apply(model)
@@ -158,7 +158,7 @@ The other method is called configure, and it is called everytime the plugin is l
158
158
  module Sequel::Plugins::Foo
159
159
  def self.configure(model)
160
160
  model.instance_eval do
161
- @foo_state[:initial] = :baz
161
+ @foo_states[:initial] ||= :baz
162
162
  end
163
163
  end
164
164
  end
@@ -177,7 +177,7 @@ If you want your plugin to take arguments and/or support options, you handle tha
177
177
 
178
178
  def self.configure(model, opts={})
179
179
  model.instance_eval do
180
- @foo_state[:initial] = opts[:initial_state] || :baz
180
+ @foo_states[:initial] = opts[:initial_state] || @foo_states[:initial] || :baz
181
181
  end
182
182
  end
183
183
  end
@@ -185,7 +185,7 @@ If you want your plugin to take arguments and/or support options, you handle tha
185
185
  This allows a user of the plugin to do either of the following
186
186
 
187
187
  Bar.plugin :foo
188
- Bar.plugin :foo, :initial_state=>:quux
188
+ Bar.plugin :foo, initial_state: :quux
189
189
 
190
190
  If you want to require the initial state to be provided as an argument:
191
191
 
@@ -199,7 +199,7 @@ If you want to require the initial state to be provided as an argument:
199
199
 
200
200
  def self.configure(model, initial_state)
201
201
  model.instance_eval do
202
- @foo_state[:initial] = initial_state
202
+ @foo_states[:initial] = initial_state
203
203
  end
204
204
  end
205
205
  end
@@ -212,11 +212,11 @@ In general you should only require plugin arguments if you absolutely must have
212
212
 
213
213
  == Handling Subclasses
214
214
 
215
- Sequel::Model uses a copy-on-subclassing approach to model state. So instead of model subclasses asking their parent class for a value if they don't have it defined, the value is automatically copied from the parent class to the subclass when the subclass is created. While you can do this by overriding the inherited class method, there is a available shortcut that handles most cases:
215
+ Sequel::Model uses a copy-on-subclassing approach to model state. So instead of having a model subclass ask its superclass for a value if the subclass don't have the value defined, the value should be copied from the parent class to the subclass when the subclass is created. While this can be implemented by overriding the +inherited+ class method, there is an available shortcut that handles most cases:
216
216
 
217
217
  module Sequel::Plugins::Foo
218
218
  module ClassMethods
219
- Sequel::Plugins.inherited_instance_variables(self, :@foo_state=>:dup)
219
+ Sequel::Plugins.inherited_instance_variables(self, :@foo_states => :dup)
220
220
  end
221
221
  end
222
222
 
@@ -238,12 +238,12 @@ In many plugins, if the model class changes the dataset, you need to change the
238
238
  private
239
239
 
240
240
  def set_foo_table
241
- @foo_state[:table] = table_name
241
+ @foo_states[:table] = table_name
242
242
  end
243
243
  end
244
244
  end
245
245
 
246
- With this code, any time the model's dataset changes, the state of the plugin will be updated to set the correct table name.
246
+ With this code, any time the model's dataset changes, the state of the plugin will be updated to set the correct table name. This is also called when creating a new model class with a dataset.
247
247
 
248
248
  == Making Dataset Methods Callable as Class Methods
249
249
 
@@ -17,7 +17,7 @@ The following stored procedure is used as an example:
17
17
 
18
18
  Execute it as follows:
19
19
 
20
- DB.call_mssql_sproc(:SequelTest, {:args => ['Input String', :output]})
20
+ DB.call_mssql_sproc(:SequelTest, {args: ['Input String', :output]})
21
21
 
22
22
  Use the +:output+ symbol to denote an output variable. The result will contain a
23
23
  hash of the output variables, as well as the result code and number of affected rows:
@@ -27,7 +27,7 @@ hash of the output variables, as well as the result code and number of affected
27
27
  Output variables will be strings by default. To specify their type, include the
28
28
  SQL type:
29
29
 
30
- DB.call_mssql_sproc(:SequelTest, {:args => ['Input String', [:output, 'int']]})
30
+ DB.call_mssql_sproc(:SequelTest, {args: ['Input String', [:output, 'int']]})
31
31
 
32
32
  Result:
33
33
 
@@ -36,7 +36,7 @@ Result:
36
36
  Output variables will be named +var#{n}+ where n is their zero indexed position
37
37
  in the parameter list. To name the output variable, include their name:
38
38
 
39
- DB.call_mssql_sproc(:SequelTest, {:args => ['Input String', [:output, nil, 'Output']]})
39
+ DB.call_mssql_sproc(:SequelTest, {args: ['Input String', [:output, nil, 'Output']]})
40
40
 
41
41
  Result:
42
42
 
@@ -6,13 +6,12 @@ Sequel objects by calling #new on the object's class (other than Sequel::Model
6
6
  instances). However, just as almost everything in ruby is an object, all
7
7
  the methods you call in Sequel deal with objects behind the scenes.
8
8
 
9
- There are five main types of Sequel-specific objects that you deal with in
10
- Sequel:
9
+ In addition to the standard ruby types, there are four main types of
10
+ Sequel-specific objects that you deal when programming with Sequel:
11
11
 
12
12
  * Sequel::Database
13
13
  * Sequel::Dataset
14
14
  * Sequel::Model
15
- * Standard Ruby Types
16
15
  * Sequel::SQL::Expression (and subclasses)
17
16
 
18
17
  == Sequel::Database
@@ -47,27 +46,27 @@ and literalize the object to an SQL string fragment:
47
46
 
48
47
  == Sequel::Dataset
49
48
 
50
- Sequel::Dataset objects represent SQL queries, or more generally, they represent
51
- abstract collections of rows in the database. They are usually created from
49
+ Sequel::Dataset objects represent SQL queries. They are created from
52
50
  a Sequel::Database object:
53
51
 
54
52
  dataset = DB[:table] # SELECT * FROM "table"
55
53
  dataset = DB.from(table) # SELECT * FROM "table"
56
54
  dataset = DB.select(:column) # SELECT "column"
57
55
 
58
- Most Sequel::Dataset methods return modified copies of the receiver, and the
59
- general way to build queries in Sequel is via a method chain:
56
+ Most Sequel::Dataset methods that do not execute queries return modified
57
+ copies of the receiver, and the general way to build queries in Sequel is
58
+ via a method chain:
60
59
 
61
60
  dataset = DB[:test].
62
61
  select(:column1, :column2).
63
- where(:column3 => 4).
62
+ where(column3: 4).
64
63
  order(:column5)
65
64
 
66
65
  Such a method chain is a more direct way of doing:
67
66
 
68
67
  dataset = DB[:test]
69
68
  dataset = dataset.select(:column1, :column2)
70
- dataset = dataset.where(:column3 => 4)
69
+ dataset = dataset.where(column3: 4)
71
70
  dataset = dataset.order(:column5)
72
71
 
73
72
  When you are ready to execute your query, you call one of the Sequel::Dataset
@@ -79,8 +78,8 @@ action methods. For returning rows, you can do:
79
78
 
80
79
  For inserting, updating, or deleting rows, you can do:
81
80
 
82
- dataset.insert(:column=>value)
83
- dataset.update(:column=>value)
81
+ dataset.insert(column: value)
82
+ dataset.update(column: value)
84
83
  dataset.delete
85
84
 
86
85
  All datasets are related to their database object, which you can access via
@@ -90,7 +89,7 @@ the Sequel::Dataset#db method:
90
89
 
91
90
  == Sequel::Model
92
91
 
93
- Sequel::Model objects are wrappers around a particular Sequel::Dataset object that
92
+ Sequel::Model classes are wrappers around a particular Sequel::Dataset object that
94
93
  add custom behavior, both custom behavior for the entire set of rows in the dataset
95
94
  (the model's class methods), custom behavior for a subset of rows in the dataset
96
95
  (the model's dataset methods), and custom behavior for single rows in the dataset
@@ -103,6 +102,13 @@ generally created by the user using standard ruby syntax:
103
102
  end
104
103
  album = Album.new
105
104
 
105
+ Model classes that use a non-default Database instance or table name generally
106
+ use the Sequel::Model method to create the superclass:
107
+
108
+ class Album < Sequel::Model(DB[:music_albums])
109
+ end
110
+ album = Album.new
111
+
106
112
  All model classes are related to their Sequel::Dataset object, which you
107
113
  can access via the Sequel::Model.dataset method:
108
114
 
@@ -121,26 +127,12 @@ if you pass the left side to Sequel::Database#literal.
121
127
 
122
128
  === Symbol
123
129
 
124
- For example, ruby symbols represent SQL identifiers (tables, columns, schemas):
130
+ Ruby symbols represent SQL identifiers (tables, columns, schemas):
125
131
 
132
+ :schema # "schema"
126
133
  :table # "table"
127
134
  :column # "column"
128
135
 
129
- However, they can also represent qualified identifiers by including a double
130
- underscore inside a symbol:
131
-
132
- :table__column # "table"."column"
133
-
134
- They can also represent an aliased identifier by including a triple underscore
135
- inside a symbol:
136
-
137
- :column___alias # "column" AS "alias"
138
-
139
- You can combine both qualification and aliasing by using a double underscore
140
- and a triple underscore:
141
-
142
- :table__column___alias # "table"."column" AS "alias"
143
-
144
136
  === Integer, Float, BigDecimal, String, Date, Time, DateTime
145
137
 
146
138
  Ruby's Integer, Float, BigDecimal, String, Date, Time, and DateTime classes
@@ -158,31 +150,31 @@ represent similar types in SQL:
158
150
 
159
151
  Sequel generally uses hash objects to represent equality:
160
152
 
161
- {:column => 1} # ("column" = 1)
153
+ {column: 1} # ("column" = 1)
162
154
 
163
- However, if you use in array as the hash value, it will usually be used to represent inclusion:
155
+ However, if you use an array as the hash value, it represents inclusion in the value list:
164
156
 
165
- {:column => [1, 2, 3]} # ("column" IN (1, 2, 3))
157
+ {column: [1, 2, 3]} # ("column" IN (1, 2, 3))
166
158
 
167
159
  You can also use a Sequel::Dataset instance as the hash value, which will be used to
168
160
  represent inclusion in the subselect:
169
161
 
170
- {:column => DB[:table].select(:column)} # ("column" IN (SELECT "column" FROM "table"))
162
+ {column: DB[:table].select(:column)} # ("column" IN (SELECT "column" FROM "table"))
171
163
 
172
- If you pass true, false, or nil as the hash value, it will be used to represent identity:
164
+ If you pass true, false, or nil as the hash value, it represents identity:
173
165
 
174
- {:column => nil} # ("column" IS NULL)
166
+ {column: nil} # ("column" IS NULL)
175
167
 
176
168
  If you pass a Range object, it will be used as the bounds for a greater than and less than
177
169
  operation:
178
170
 
179
- {:column => 1..2} # (("column" >= 1) AND ("column" <= 2))
180
- {:column => 1...3} # (("column" >= 1) AND ("column" < 3))
171
+ {column: 1..2} # (("column" >= 1) AND ("column" <= 2))
172
+ {column: 1...3} # (("column" >= 1) AND ("column" < 3))
181
173
 
182
174
  If you pass a Regexp object as the value, it will be used as a regular expression
183
- operation (only supported on PostgreSQL and MySQL currently):
175
+ operation if the database supports it:
184
176
 
185
- {:column => /a.*b/} # ("column" ~ 'a.*b')
177
+ {column: /a.*b/} # ("column" ~ 'a.*b')
186
178
 
187
179
  === Array
188
180
 
@@ -251,9 +243,8 @@ no additional behavior, so it can be instantiated like a normal array:
251
243
 
252
244
  Sequel::SQL::ValueList.new([[1, 2], [3, 4]]) # ((1, 2), (3, 4))
253
245
 
254
- In old versions of Sequel, these objects often needed to be created manually,
255
- but in newer versions of Sequel, they are created automatically in most cases
256
- where they are required.
246
+ In general, you don't need to create Sequel::SQL::ValueList instances manually,
247
+ they will be created automatically where they are required in most cases.
257
248
 
258
249
  The following shortcuts exist for creating Sequel::SQL::ValueList objects:
259
250
 
@@ -263,16 +254,16 @@ The following shortcuts exist for creating Sequel::SQL::ValueList objects:
263
254
  === Sequel::SQL::Identifier
264
255
 
265
256
  Sequel::SQL::Identifier objects represent single identifiers. The main reason for
266
- their existance is that they are not checked for double or triple underscores, so no
267
- automatic qualification or aliasing happens for them:
257
+ their existence is they support many additional Sequel specific methods that are
258
+ not supported on plain symbols:
268
259
 
269
- Sequel::SQL::Identifier.new(:col__umn) # "col__umn"
260
+ Sequel::SQL::Identifier.new(:colum) # "col"
270
261
 
271
262
  The following shortcuts exist for creating Sequel::SQL::Identifier objects:
272
263
 
273
- Sequel.expr(:column)
274
- Sequel.identifier(:col__umn)
275
- :col__umn.identifier # core_extensions extension
264
+ Sequel[:column]
265
+ Sequel.identifier(:column)
266
+ :column.identifier # core_extensions extension
276
267
 
277
268
  === Sequel::SQL::QualifiedIdentifier
278
269
 
@@ -282,7 +273,7 @@ Sequel::SQL::QualifiedIdentifier objects represent qualified identifiers:
282
273
 
283
274
  The following shortcuts exist for creating Sequel::SQL::QualifiedIdentifier objects:
284
275
 
285
- Sequel.expr(:table__column)
276
+ Sequel[:table][:column]
286
277
  Sequel.qualify(:table, :column)
287
278
  :column.qualify(:table) # core_extensions extension
288
279
 
@@ -294,15 +285,17 @@ is treated as an identifier, but the expression can be an arbitrary Sequel expre
294
285
  Sequel::SQL::AliasedExpression.new(:column, :alias)
295
286
  # "column" AS "alias"
296
287
 
288
+ Derived column lists are also supported:
289
+
297
290
  Sequel::SQL::AliasedExpression.new(:table, :alias, [:column_alias1, :column_alias2])
298
291
  # "table" AS "alias"("column_alias1", "column_alias2")
299
292
 
300
293
  The following shortcuts exist for creating Sequel::SQL::AliasedExpression objects:
301
294
 
302
- Sequel.expr(:column___alias)
295
+ Sequel[:column].as(:alias)
303
296
  Sequel.as(:column, :alias)
304
297
  Sequel.as(:column, :alias, [:column_alias1, :column_alias2])
305
- :column.as(:alias) # core_extensions extension
298
+ :column.as(:alias) # core_extensions or symbol_as extension
306
299
 
307
300
  === Sequel::SQL::ComplexExpression
308
301
 
@@ -338,7 +331,7 @@ against:
338
331
 
339
332
  Or they can treat each condition separately:
340
333
 
341
- Sequel::SQL::CaseExpression.new({{:a=>2}=>1}, 0) # CASE WHEN ("a" = 2) THEN 1 ELSE 0 END
334
+ Sequel::SQL::CaseExpression.new({{a: 2}=>1}, 0) # CASE WHEN ("a" = 2) THEN 1 ELSE 0 END
342
335
 
343
336
  In addition to providing a hash, you can also provide an array of two-element arrays:
344
337
 
@@ -347,10 +340,10 @@ In addition to providing a hash, you can also provide an array of two-element ar
347
340
  The following shortcuts exist for creating Sequel::SQL::CaseExpression objects:
348
341
 
349
342
  Sequel.case({2=>1}, 0, :a)
350
- Sequel.case({{:a=>2}=>1}, 0)
343
+ Sequel.case({{a: 2}=>1}, 0)
351
344
 
352
345
  {2=>1}.case(0, :a) # core_extensions extension
353
- {{:a=>2}=>1}.case(0) # core_extensions extension
346
+ {{a: 2}=>1}.case(0) # core_extensions extension
354
347
 
355
348
  === Sequel::SQL::Cast
356
349
 
@@ -375,21 +368,19 @@ The following shortcuts exist for creating Sequel::SQL::Cast objects:
375
368
 
376
369
  === Sequel::SQL::ColumnAll
377
370
 
378
- Sequel::SQL::ColumnAll objects represent the selection of all columns from a
379
- table. They are pretty much only used as arguments to one of the Dataset select
380
- methods, and are not used much anymore since Dataset#select_all was expanded to
381
- take arguments. Still, it's possible they are still useful in some code:
371
+ Sequel::SQL::ColumnAll objects represent the selection of all columns from a table:
382
372
 
383
373
  Sequel::SQL::ColumnAll.new(:table) # "table".*
384
374
 
385
375
  The following shortcut exists for creating Sequel::SQL::ColumnAll objects:
386
376
 
387
- Sequel.expr(:table).*
377
+ Sequel[:table].*
378
+ Sequel[:schema][:table].*
388
379
  :table.* # core_extensions extension
389
380
 
390
381
  === Sequel::SQL::Constant
391
382
 
392
- Sequel::SQL::Constant objects represent constants or psuedo-constants in SQL,
383
+ Sequel::SQL::Constant objects represent constants or pseudo-constants in SQL,
393
384
  such as TRUE, NULL, and CURRENT_TIMESTAMP. These are not designed to be created
394
385
  or used by the end user, but some existing values are predefined under the
395
386
  Sequel namespace:
@@ -398,7 +389,7 @@ Sequel namespace:
398
389
 
399
390
  These objects are usually used as values in queries:
400
391
 
401
- DB[:table].insert(:time=>Sequel::CURRENT_TIMESTAMP)
392
+ DB[:table].insert(time: Sequel::CURRENT_TIMESTAMP)
402
393
 
403
394
  === Sequel::SQL::DelayedEvaluation
404
395
 
@@ -457,7 +448,7 @@ The first type uses question marks with multiple placeholder value objects:
457
448
  The second uses named placeholders with colons and a hash of placeholder
458
449
  value objects:
459
450
 
460
- Sequel::SQL::PlaceholderLiteralString.new(':b = :v', [{:b=>:a, :v=>1}]) # "a" = 1
451
+ Sequel::SQL::PlaceholderLiteralString.new(':b = :v', [{b: :a, v: 1}]) # "a" = 1
461
452
 
462
453
  The third uses an array instead of a string, with multiple placeholder
463
454
  objects, each one going in between the members of the array:
@@ -473,7 +464,7 @@ The following shortcuts exist for creating Sequel::SQL::PlaceholderLiteralString
473
464
  objects:
474
465
 
475
466
  Sequel.lit('? = ?', :a, 1)
476
- Sequel.lit(':b = :v', :b=>:a, :v=>1)
467
+ Sequel.lit(':b = :v', b: :a, v: 1)
477
468
  Sequel.lit(['', ' = '], :a, 1)
478
469
 
479
470
  '? = ?'.lit(:a, 1) # core_extensions extension
@@ -543,10 +534,10 @@ Sequel::SQL::Window objects represent the windows used by Sequel::SQL::Function.
543
534
  They use a hash-based API, supporting the :frame, :order, :partition, and :window
544
535
  options:
545
536
 
546
- Sequel::SQL::Window.new(:order=>:a) # (ORDER BY "a")
547
- Sequel::SQL::Window.new(:parition=>:a) # (PARTITION BY "a")
537
+ Sequel::SQL::Window.new(order: :a) # (ORDER BY "a")
538
+ Sequel::SQL::Window.new(partition: :a) # (PARTITION BY "a")
548
539
 
549
- Sequel::SQL::Window.new(:parition=>:a, :frame=>:all)
540
+ Sequel::SQL::Window.new(partition: :a, frame: :all)
550
541
  # (PARTITION BY "a" ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
551
542
 
552
543
  === Sequel::SQL::Wrapper
@@ -555,7 +546,7 @@ Sequel::SQL::Wrapper objects wrap arbitrary objects so that they can be used
555
546
  in Sequel expressions:
556
547
 
557
548
  o = Object.new
558
- def o.sql_literal(ds) "foo" end
549
+ def o.sql_literal_append(ds, sql) sql << "foo" end
559
550
  Sequel::SQL::Wrapper.new(o) # foo
560
551
 
561
552
  The advantage of wrapping the object is that you can the call Sequel methods
@@ -563,11 +554,10 @@ on the wrapper that would not be defined on the object itself:
563
554
 
564
555
  Sequel::SQL::Wrapper.new(o) + 1 # (foo + 1)
565
556
 
566
- You can use the Sequel.expr method to wrap any object:
557
+ You can use the Sequel.[] method to wrap any object:
567
558
 
568
- Sequel.expr(o)
559
+ Sequel[o]
569
560
 
570
561
  However, note that that does not necessarily return a Sequel::SQL::Wrapper
571
562
  object, it may return a different class of object, such as a
572
563
  Sequel::SQL::ComplexExpression subclass object.
573
-
@@ -28,12 +28,12 @@ You can use URI query parameters to specify options:
28
28
 
29
29
  You can also pass an additional option hash with the connection string:
30
30
 
31
- DB = Sequel.connect('postgres://localhost/blog', :user=>'user', :password=>'password')
31
+ DB = Sequel.connect('postgres://localhost/blog', user: 'user', password: 'password')
32
32
 
33
33
  You can also just use an options hash without a connection string. If you do this, you must
34
34
  provide the adapter to use:
35
35
 
36
- DB = Sequel.connect(:adapter=>'postgres', :host=>'localhost', :database=>'blog', :user=>'user', :password=>'password')
36
+ DB = Sequel.connect(adapter: 'postgres', host: 'localhost', database: 'blog', user: 'user', password: 'password')
37
37
 
38
38
  All of the above statements are equivalent.
39
39
 
@@ -43,12 +43,12 @@ The specialized adapter method is similar to Sequel.connect with an options hash
43
43
  automatically populates the :adapter option and assumes the first argument is the :database option,
44
44
  unless the first argument is a hash. So the following statements are equivalent to the previous statements.
45
45
 
46
- DB = Sequel.postgres('blog', :host=>'localhost', :user=>'user', :password=>'password')
47
- DB = Sequel.postgres(:host=>'localhost', :user=>'user', :password=>'password', :database=>'blog')
46
+ DB = Sequel.postgres('blog', host: 'localhost', user: 'user', password: 'password')
47
+ DB = Sequel.postgres(host: 'localhost', user: 'user', password: 'password', database: 'blog')
48
48
 
49
49
  Note that using an adapter method forces the use of the specified adapter, not a database type, even
50
50
  though some adapters have the same name as the database type. So if you
51
- want to connect to SQLite, for example, you can do so using the sqlite, do, jdbc, and swift adapters.
51
+ want to connect to SQLite, for example, you can do so using the sqlite, amalgalite, and jdbc adapters.
52
52
  If you want to connect to SQLite on JRuby using the jdbc adapter, you should not use <tt>Sequel.sqlite</tt>
53
53
  for example, as that uses the C-based sqlite3 gem. Instead, the <tt>Sequel.jdbc</tt> would be appropriate (though
54
54
  as mentioned below, using <tt>Sequel.connect</tt> is recommended instead of <tt>Sequel.jdbc</tt>).
@@ -62,28 +62,49 @@ For example:
62
62
 
63
63
  Sequel.connect('sqlite://blog.db'){|db| puts db[:users].count}
64
64
 
65
+ Note that if you do not pass a block to Sequel.connect, Sequel will automatically retain a
66
+ reference to the object in the <tt>Sequel::DATABASES</tt> array. So calling +Sequel.connect+
67
+ multiple times (say once per request), can result in a memory leak. For any application where
68
+ database access is needed for a long period of time, it's best to store the result of
69
+ Sequel.connection in a constant, as recommended above.
70
+
71
+ == Using the Sequel.connect method
65
72
  == General connection options
66
73
 
67
74
  These options are shared by all adapters unless otherwise noted.
68
75
 
69
76
  :adapter :: The adapter to use
70
77
  :database :: The name of the database to which to connect
78
+ :extensions :: Extensions to load into this Database instance. Can be a symbol, array of symbols,
79
+ or string with extensions separated by columns. These extensions are loaded after
80
+ connections are made by the :preconnect option.
81
+ :cache_schema :: Whether schema should be cached for this database (true by default)
82
+ :default_string_column_size :: The default size for string columns (255 by default)
71
83
  :host :: The hostname of the database server to which to connect
84
+ :keep_reference :: Whether to keep a reference to the database in Sequel::DATABASES (true by default)
85
+ :logger :: A specific SQL logger to log to
72
86
  :loggers :: An array of SQL loggers to log to
87
+ :log_connection_info :: Whether to include connection information in log messages (false by default)
88
+ :log_warn_duration :: The amount of seconds after which the queries are logged at :warn level
73
89
  :password :: The password for the user account
74
- :servers :: A hash with symbol keys and hash or proc values, used with master/slave/partitioned database configurations
75
- :single_threaded :: Whether to use a single-threaded (non-thread safe) connection pool
76
- :test :: Whether to test that a valid database connection can be made (false by default)
90
+ :preconnect :: Whether to automatically make the maximum number of connections when setting up the pool.
91
+ Can be set to "concurrently" to connect in parallel.
92
+ :preconnect_extensions :: Similar to the :extensions option, but loads the extensions before the
93
+ connections are made by the :preconnect option.
94
+ :quote_identifiers :: Whether to quote identifiers.
95
+ :servers :: A hash with symbol keys and hash or proc values, used with primary/replica and sharded database configurations
96
+ :sql_log_level :: The level at which to issue queries to the loggers (:info by default)
97
+ :test :: Whether to test that a valid database connection can be made (true by default)
77
98
  :user :: The user account name to use logging in
78
99
 
79
100
  The following options can be specified and are passed to the database's internal connection pool.
80
101
 
81
102
  :after_connect :: A callable object called after each new connection is made, with the
82
103
  connection object (and server argument if the callable accepts 2 arguments),
83
- useful for customizations that you want to apply to all connections (default: nil).
84
- :max_connections :: The maximum size of the connection pool (default: 4 connections on most databases)
85
- :pool_sleep_time :: The number of seconds to sleep before trying to acquire a connection again (default: 0.001 seconds)
86
- :pool_timeout :: The number of seconds to wait if a connection cannot be acquired before raising an error (default: 5 seconds)
104
+ useful for customizations that you want to apply to all connections (nil by default).
105
+ :max_connections :: The maximum size of the connection pool (4 connections by default on most databases)
106
+ :pool_timeout :: The number of seconds to wait if a connection cannot be acquired before raising an error (5 seconds by default)
107
+ :single_threaded :: Whether to use a single-threaded (non-thread safe) connection pool
87
108
 
88
109
  == Adapter specific connection options
89
110
 
@@ -105,7 +126,6 @@ The following options are supported:
105
126
  :command_timeout :: Sets the time in seconds to wait while attempting
106
127
  to execute a command before cancelling the attempt and generating
107
128
  an error. Specifically, it sets the ADO CommandTimeout property.
108
- If this property is not set, the default of 30 seconds is used.
109
129
  :driver :: The driver to use in the ADO connection string. If not provided, a default
110
130
  of "SQL Server" is used.
111
131
  :conn_string :: The full ADO connection string. If this is provided,
@@ -116,9 +136,9 @@ The following options are supported:
116
136
  for every query, which breaks things such as transactions and temporary tables.
117
137
 
118
138
  Pay special attention to the :provider option, as without specifying a provider,
119
- many things will be broken. The SQLNCLI10 provider appears to work well if you
120
- are connecting to Microsoft SQL Server, but it is not the default as that would
121
- break backwards compatability.
139
+ many things will be broken. The SQLNCLI10 and SQLNCLI11 providers work well if you
140
+ are connecting to Microsoft SQL Server, but it is not the default as it depends on
141
+ those providers being installed.
122
142
 
123
143
  Example connections:
124
144
 
@@ -126,11 +146,11 @@ Example connections:
126
146
  Sequel.connect('ado:///sequel_test?host=server%5cdb_instance')
127
147
  Sequel.connect('ado://user:password@server/database?host=server%5cdb_instance&provider=SQLNCLI10')
128
148
  # Access 2007
129
- Sequel.ado(:conn_string=>'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=drive:\\path\\filename.accdb')
149
+ Sequel.ado(conn_string: 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=drive:\\path\\filename.accdb')
130
150
  # Access 2000
131
- Sequel.ado(:conn_string=>'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.mdb')
151
+ Sequel.ado(conn_string: 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.mdb')
132
152
  # Excel 2000 (for table names, use a dollar after the sheet name, e.g. Sheet1$)
133
- Sequel.ado(:conn_string=>'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.xls;Extended Properties=Excel 8.0;')
153
+ Sequel.ado(conn_string: 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.xls;Extended Properties=Excel 8.0;')
134
154
 
135
155
  === amalgalite
136
156
 
@@ -148,31 +168,6 @@ Without a database argument, assumes a memory database, so you can do:
148
168
  Handles paths in the connection string similar to the SQLite adapter, so see
149
169
  the sqlite section below for details.
150
170
 
151
- === cubrid
152
-
153
- cubrid is a ruby extension for accessing a CUBRID database. Currently,
154
- the ruby cubrid gem is in fairly rough state, with broken transaction
155
- support and some other issues, but most things work.
156
-
157
- === do
158
-
159
- Requires: data_objects
160
-
161
- The DataObjects adapter supports PostgreSQL, MySQL, and SQLite. One possible
162
- advantage of using DataObjects is that it does the typecasting in C, which may
163
- be faster than the other adapters.
164
-
165
- Similar to the JDBC adapter, the DO adapter only cares about connection strings,
166
- which can either be the String argument given to Sequel.connect directly or contained
167
- in a :uri or :url option. The DO adapter passes through the connection string
168
- directly to DataObjects, it does no processing of it (other than removing the do: prefix).
169
-
170
- Connection string examples:
171
-
172
- do:sqlite3::memory:
173
- do:postgres://user:password@host/database
174
- do:mysql://user:password@host/database
175
-
176
171
  === ibmdb
177
172
 
178
173
  requires 'ibm_db'
@@ -186,20 +181,14 @@ Requires: java
186
181
 
187
182
  Houses Sequel's JDBC support when running on JRuby.
188
183
  Support for individual database types is done using subadapters.
189
- There are currently subadapters for PostgreSQL, MySQL, SQLite, H2, HSQLDB, Derby,
190
- Oracle, MSSQL, JTDS, AS400, Progress, Firebird, Informix, and DB2.
191
- For PostgreSQL, MySQL, SQLite, H2, HSQLDB, Derby, and JTDS,
192
- this can use the jdbc-* gem, for the others you need to have the .jar in your CLASSPATH
184
+ There are currently subadapters for DB2, Derby, H2, HSQLDB, JTDS,
185
+ MySQL, Oracle, PostgreSQL, SQLAnywhere, SQLite, and SQL Server.
186
+ For Derby, H2, HSQLDB, JTDS, MySQL, Postgres, SQLite3
187
+ the adapters can use the `jdbc-*` gem, for the others you need to have the `.jar` in your CLASSPATH
193
188
  or load the Java class manually before calling Sequel.connect.
194
189
 
195
- You just use the JDBC connection string directly, which can be specified
196
- via the string given to Sequel.connect or via the :uri, :url, or :database options.
197
- Sequel does no preprocessing of the string, it passes it directly to JDBC.
198
- So if you have problems getting a connection string to work, look up the JDBC
199
- documentation.
200
-
201
190
  Note that when using a JDBC adapter, the best way to use Sequel
202
- is via Sequel.connect, NOT Sequel.jdbc. Use the JDBC connection
191
+ is via Sequel.connect using a connection string, NOT Sequel.jdbc. Use the JDBC connection
203
192
  string when connecting, which will be in a different format than
204
193
  the native connection string. The connection string should start
205
194
  with 'jdbc:'. For PostgreSQL, use 'jdbc:postgresql:', and for
@@ -207,6 +196,14 @@ SQLite you do not need 2 preceding slashes for the database name
207
196
  (use no preceding slashes for a relative path, and one preceding
208
197
  slash for an absolute path).
209
198
 
199
+ Sequel does no preprocessing of JDBC connection strings, it passes them directly to JDBC.
200
+ So if you have problems getting a connection string to work, look up the
201
+ documentation for the JDBC driver.
202
+
203
+ The jdbc adapter does not handle common options such as +:host+,
204
+ +:user+, and +:port+. If you must use a hash of options when connecting,
205
+ provide the full JDBC connection string as the :uri option.
206
+
210
207
  Example connection strings:
211
208
 
212
209
  jdbc:sqlite::memory:
@@ -219,9 +216,6 @@ Example connection strings:
219
216
  jdbc:jtds:sqlserver://localhost/sequel_test;user=sequel_test;password=sequel_test
220
217
  jdbc:oracle:thin:user/password@localhost:1521:database
221
218
  jdbc:db2://localhost:3700/database:user=user;password=password;
222
- jdbc:firebirdsql:localhost/3050:/path/to/database.fdb
223
- jdbc:jdbcprogress:T:hostname:port:database
224
- jdbc:cubrid:hostname:port:database:::
225
219
  jdbc:sqlanywhere://localhost?DBN=Test;UID=user;PWD=password
226
220
 
227
221
  You can also use JNDI connection strings:
@@ -239,20 +233,26 @@ The following additional options are supported:
239
233
  and only helps cases where <tt>java.sql.DriverManager.getConnection</tt> does not
240
234
  return a connection.
241
235
  :login_timeout :: Set the login timeout on the JDBC connection (in seconds).
236
+ :jdbc_properties :: A hash for properties to set, skips the normal connection process of using
237
+ java.sql.drivermanager.getconnection and tries the backup process of using
238
+ driver.new.connect for the appropriate driver.
239
+
240
+ There are a few issues with specific jdbc driver gems:
241
+
242
+ jdbc-h2 :: jdbc-h2 versions greater than 1.3.175 have issues with ORDER BY not working correctly in some cases.
242
243
 
243
244
  === mysql
244
245
 
245
- Requires: mysqlplus (or mysql if mysqlplus is not available)
246
+ Requires: mysql
246
247
 
247
- The MySQL adapter does not support the pure-ruby MySQL adapter that used to ship with
248
- ActiveRecord, it requires the native adapter.
248
+ The MySQL adapter does not support the pure-ruby mysql.rb driver, it requires the C-extension driver.
249
249
 
250
250
  The following additional options are supported:
251
251
 
252
252
  :auto_is_null :: If set to true, makes "WHERE primary_key IS NULL" select the last inserted id.
253
253
  :charset :: Same as :encoding, :encoding takes precedence.
254
254
  :compress :: Whether to compress data sent/received via the socket connection.
255
- :config_default_group :: The default group to read from the in the MySQL config file.
255
+ :config_default_group :: The default group to read from the in the MySQL config file, defaults to "client")
256
256
  :config_local_infile :: If provided, sets the Mysql::OPT_LOCAL_INFILE option on the connection with the given value.
257
257
  :encoding :: Specify the encoding/character set to use for the connection.
258
258
  :fractional_seconds :: On MySQL 5.6.5+, this option is recognized and will include fractional seconds in
@@ -264,17 +264,17 @@ The following additional options are supported:
264
264
  or an array of symbols or strings (e.g. <tt>:sql_mode=>[:no_zero_date, :pipes_as_concat]</tt>).
265
265
  :timeout :: Sets the wait_timeout for the connection, defaults to 1 month.
266
266
  :read_timeout :: Set the timeout in seconds for reading back results to a query.
267
- :connect_timeout :: Set the timeout in seconds before a connection attempt is abandoned.
267
+ :connect_timeout :: Set the timeout in seconds before a connection attempt is abandoned
268
+ (may not be supported when using MariaDB 10.2+ client libraries).
269
+
270
+ The :sslkey, :sslcert, :sslca, :sslcapath, and :sslca options (in that order) are passed to Mysql#ssl_set method
271
+ if either the :sslca or :sslkey option is given.
268
272
 
269
273
  === mysql2
270
274
 
271
275
  This is a newer MySQL adapter that does typecasting in C, so it is often faster than the
272
- mysql adapter. Supports the same additional options as the mysql adapter, except for :compress, and uses
273
- :timeout instead of :read_timeout and :connect_timeout.
274
-
275
- The following additional options are supported:
276
-
277
- :flags :: Override the flags to use for the connection (e.g. ::Mysql2::Client::MULTI_STATEMENTS)
276
+ mysql adapter. The options given are passed to Mysql2::Client.new, see the mysql2 documentation
277
+ for details on what options are supported.
278
278
 
279
279
  === odbc
280
280
 
@@ -303,13 +303,15 @@ The following additional options are supported:
303
303
 
304
304
  === postgres
305
305
 
306
- Requires: pg (or postgres if pg is not available)
306
+ Requires: pg (or postgres-pr/postgres-compat if pg is not available)
307
307
 
308
- The Sequel postgres adapter works with the pg, postgres, and postgres-pr ruby libraries.
308
+ The Sequel postgres adapter works with the pg and postgres-pr ruby libraries.
309
309
  The pg library is the best supported, as it supports real bound variables and prepared statements.
310
310
  If the pg library is being used, Sequel will also attempt to load the sequel_pg library, which is
311
311
  a C extension that optimizes performance when Sequel is used with pg. All users of Sequel who
312
- use pg are encouraged to install sequel_pg.
312
+ use pg are encouraged to install sequel_pg. For users who want to use postgres-pr to avoid issues
313
+ with C extensions, it is recommended to use jeremyevans-postgres-pr, which fixes many issues in
314
+ the upstream postgres-pr gem, and is regularly tested with Sequel.
313
315
 
314
316
  The following additional options are supported:
315
317
 
@@ -318,14 +320,20 @@ The following additional options are supported:
318
320
  conversion is done, so an error is raised if you attempt to retrieve an infinite
319
321
  timestamp/date. You can set this to :nil to convert to nil, :string to leave
320
322
  as a string, or :float to convert to an infinite float.
323
+ :conn_str :: Use connection string (in form of `host=x port=y ...`). Ignores all other options, only supported with pg
324
+ library. See https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING and
325
+ https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS for format and list of supported
326
+ options.
321
327
  :connect_timeout :: Set the number of seconds to wait for a connection (default 20, only respected
322
328
  if using the pg library).
329
+ :driver_options :: A hash of options to pass to the underlying driver (only respected if using the pg library)
323
330
  :encoding :: Set the client_encoding to the given string
324
331
  :notice_receiver :: A proc that be called with the PGresult objects that have notice or warning messages.
325
332
  The default notice receiver just prints the messages to stderr, but this can be used
326
333
  to handle notice/warning messages differently. Only respected if using the pg library).
327
- :sslmode :: Set to 'disable', 'allow', 'prefer', 'require' to choose how to treat SSL (only
334
+ :sslmode :: Set to 'disable', 'allow', 'prefer', 'require', 'verify-ca', or 'verify-full' to choose how to treat SSL (only
328
335
  respected if using the pg library)
336
+ :sslrootcert :: Specify the path to the root SSL certificate to use.
329
337
  :search_path :: Set to the schema search_path. This can either be a single string containing the schemas
330
338
  separated by commas (for use via a URL: <tt>postgres:///?search_path=schema1,schema2</tt>), or it
331
339
  can be an array of strings (for use via an option:
@@ -380,24 +388,6 @@ database is used. Attempts to force the use of more than 1 connection
380
388
  can result in weird behavior, since the connections will be to separate
381
389
  memory databases.
382
390
 
383
- === swift
384
-
385
- swift is a ruby 1.9+ library, so you'll need to be running ruby 1.9+. It
386
- can connect to SQLite, MySQL, and PostgreSQL, and you must specify which
387
- database using the db_type option.
388
-
389
- You need to install one of the swift db adapters
390
-
391
- * swift-db-sqlite3
392
- * swift-db-mysql
393
- * swift-db-postgres
394
-
395
- Examples:
396
-
397
- swift:///?database=:memory:&db_type=sqlite
398
- swift://root:root@localhost/test?db_type=mysql
399
- swift://root:root@localhost/test?db_type=postgres
400
-
401
391
  === tinytds
402
392
 
403
393
  Requires: tiny_tds
@@ -411,6 +401,9 @@ options that you may want to set are :login_timeout, :timeout, :tds_version, :az
411
401
 
412
402
  Other Sequel specific options:
413
403
 
404
+ :ansi :: Set to true to enable the ANSI compatibility settings when connecting
405
+ (ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ANSI_NULL_DFLT_ON, QUOTED_IDENTIFIER,
406
+ CONCAT_NULL_YIELDS_NULL).
414
407
  :server_version :: Override the server version to use (9000000 = SQL Server 2005).
415
408
  This also works on any other adapter that connects to Microsoft
416
409
  SQL Server.
@@ -419,6 +412,3 @@ Other Sequel specific options:
419
412
  This should be specified as an integer. If you plan on setting large
420
413
  text or blob values via tinytds, you should use this option or modify
421
414
  your freetds.conf file.
422
-
423
- The Sequel tinytds adapter requires tiny_tds >= 0.4.5, and if you are using FreeTDS
424
- 0.91, you must at least be using 0.91rc2 (0.91rc1 does not work).