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
@@ -1,298 +0,0 @@
1
- Blockless Filter Expressions
2
- ----------------------------
3
-
4
- Before 2.0.0, in order to specify complex SQL expressions, you
5
- either had to resort to writing the SQL yourself in a string or
6
- using an expression inside a block that was parsed by ParseTree.
7
- Because ParseTree was required, only ruby 1.8.* was supported, and
8
- supporting other ruby versions (ruby 1.9, JRuby, Rubinius) would
9
- never be possible.
10
-
11
- With 2.0.0, you no longer need to use a block to write complex SQL
12
- expressions. The basics of the blockless filters are the usual
13
- arithmetic, inequality, and binary operators:
14
-
15
- + = addition
16
- - = subtraction
17
- * = multiplication
18
- / = division
19
- > = greater than
20
- < = less than
21
- >= = greater than or equal to
22
- <= = less than or equal to
23
- ~ = negation
24
- & = AND
25
- | = OR
26
-
27
- You can use these operators on Symbols, LiteralStrings, and other
28
- Sequel::SQL::Expressions. Note that there is no equal operator or
29
- not equal operator, to specify those, you use a Hash.
30
-
31
- Here are some examples:
32
-
33
- # Ruby code => SQL WHERE clause
34
- :active => active
35
- ~:active => NOT active
36
- ~~:active => active
37
- ~~~:active => NOT active
38
- :is_true[] => is_true()
39
- ~:is_true[] => NOT is_true()
40
- :x > 100 => (x > 100)
41
- :x < 100.01 => (x < 100.01)
42
- :x <= 0 => (x <= 0)
43
- :x >= 1 => (x >= 1)
44
- ~(:x > 100) => (x <= 100)
45
- {:x => 100} => (x = 100)
46
- {:x => 'a'} => (x = 'a')
47
- {:x => nil} => (x IS NULL)
48
- ~{:x => 100} => (x != 100)
49
- ~{:x => 'a'} => (x != 'a')
50
- ~{:x => nil} => (x IS NOT NULL)
51
- {:x => /a/} => (x ~ 'blah') # Default, MySQL different
52
- ~{:x => /a/} => (x !~ 'blah') # Default, MySQL different
53
- :x.like('a') => (x LIKE 'a')
54
- ~:x.like('a') => (x NOT LIKE 'a')
55
- :x.like(/a/) => (x ~ 'a') # Default, MySQL different
56
- ~:x.like('a', /b/) => ((x NOT LIKE 'a') AND (x !~ 'b')) # Default
57
- ~{:x => 1..5} => ((x < 1) OR (x > 5))
58
- ~{:x => DB[:items].select(:i)} => (x NOT IN (SELECT i FROM items))
59
- ~{:x => [1,2,3]} => (x NOT IN (1, 2, 3))
60
- :x + 1 > 100 => ((x + 1) > 100)
61
- (:x * :y) < 100.01 => ((x * y) < 100.01)
62
- (:x - :y/2) >= 100 => ((x - (y / 2)) >= 100)
63
- (((:x - :y)/(:x + :y))*:z) <= 100 => ((((x - y) / (x + y)) * z) <=
64
- 100)
65
- ~((((:x - :y)/(:x + :y))*:z) <= 100) => ((((x - y) / (x + y)) * z) >
66
- 100)
67
- :x & :y => (x AND y)
68
- :x & :y & :z => ((x AND y) AND z)
69
- :x & {:y => :z} => (x AND (y = z))
70
- {:y => :z} & :x => ((y = z) AND x)
71
- {:x => :a} & {:y => :z} => ((x = a) AND (y = z))
72
- (:x > 200) & (:y < 200) => ((x > 200) AND (y < 200))
73
- :x | :y => (x OR y)
74
- :x | :y | :z => ((x OR y) OR z)
75
- :x | {:y => :z} => (x OR (y = z))
76
- {:y => :z} | :x => ((y = z) OR x)
77
- {:x => :a} | {:y => :z} => ((x = a) OR (y = z))
78
- (:x > 200) | (:y < 200) => ((x > 200) OR (y < 200))
79
- (:x | :y) & :z => ((x OR y) AND z)
80
- :x | (:y & :z) => (x OR (y AND z))
81
- (:x & :w) | (:y & :z) => ((x AND w) OR (y AND z))
82
- ~((:x | :y) & :z) => ((NOT x AND NOT y) OR NOT z)
83
- ~((:x & :w) | (:y & :z)) => ((NOT x OR NOT w) AND (NOT y OR NOT z))
84
- ~((:x > 200) | (:y & :z)) => ((x <= 200) AND (NOT y OR NOT z))
85
- ~('x'.lit + 1 > 100) => ((x + 1) <= 100)
86
- 'x'.lit.like(/a/) => (x ~ 'a') # (x ~ \'a\')
87
-
88
- None of these require blocks, you can use any directly in a call to
89
- filter:
90
-
91
- DB[:items].filter((:price * :tax) - :discount > 100)
92
- # => SELECT * FROM items WHERE (((price * tax) - discount) > 100)
93
- DB[:items].filter(:active & ~:archived)
94
- # => SELECT * FROM items WHERE (active AND NOT archived)
95
-
96
- SQL String Concatenation
97
- ------------------------
98
-
99
- Sequel now has support for expressing SQL string concatenation in an
100
- easy way:
101
-
102
- [:name, :title].sql_string_join(" - ")
103
- # SQL: name || ' - ' || title
104
-
105
- You can use this in selecting columns, creating filters, ordering
106
- datasets, and possibly elsewhere.
107
-
108
- Schema Reflection Support/Typecasting on Assignment
109
- ---------------------------------------------------
110
-
111
- When used with PostgreSQL, MySQL, or SQLite, Sequel now has the
112
- ability to get information from the database's schema in regards
113
- to column types:
114
-
115
- DB.schema(:artist)
116
- => [[:id, {:type=>:integer, :db_type=>"integer", :max_chars=>0
117
- :numeric_precision=>32, :allow_null=>false,
118
- :default=>"nextval('artist_id_seq'::regclass)"}], [:name,
119
- {:type=>:string, :default=>nil, :db_type=>"text",
120
- :numeric_precision=>0, :allow_null=>true, :max_chars=>0}]]
121
-
122
- Models now use this information to typecast values on attribute
123
- assignment. For example, if you have an integer column named number
124
- and a text (e.g. varchar) column named title:
125
-
126
- 1.5.1:
127
- model.number = '1'
128
- model.number # => '1'
129
- model.title = 1
130
- model.title # => 1
131
- 2.0.0:
132
- model.number = '1'
133
- model.number # => 1
134
- model.title = 1
135
- model.title # => '1'
136
-
137
- Typecasting can be turned off on a global, per class, and per object
138
- basis:
139
-
140
- Sequel::Model.typecast_on_assignment = false # Global
141
- Album.typecast_on_assignment = false # Per Class
142
- Album.new.typecast_on_assignment = false # Per Object
143
-
144
- Typecasting is somewhat strict, it does not allow obviously bogus
145
- data to be used:
146
-
147
- model.number = 'a' # Raises error
148
-
149
- This is in contrast to how some other ORMs handle the situation:
150
-
151
- model.number = 'a'
152
- model.number # => 0
153
-
154
- If Sequel is being used with a web framework and you want to display
155
- friendly error messages to the user, you should probably turn
156
- typecasting off and set up the necessary validations in your models.
157
-
158
- Model Association Improvements
159
- ------------------------------
160
-
161
- Associations can now be eagerly loaded even if they have a block,
162
- though the block should not rely on being evaluated in the context
163
- of an instance. This allows you filter on associations when eagerly
164
- loading:
165
-
166
- Artist.one_to_many :albums_with_10_tracks, :class=>:Album do |ds|
167
- ds.filter(:num_tracks => 10)
168
- end
169
- Artist.filter(:name.like('A%)).eager(:albums_with_10_tracks).all
170
- # SELECT * FROM artists WHERE (name LIKE 'A%')
171
- # SELECT albums.* FROM albums WHERE ((artist_id IN (...)) AND
172
- # (num_tracks = 10))
173
-
174
- Associations now have a remove_all_ method for removing all
175
- associated objects in a single query:
176
-
177
- Artist.many_to_many :albums
178
- Artist[1].remove_all_albums
179
- # DELETE FROM albums_artists WHERE artist_id = 1
180
-
181
- Artist.one_to_many :albums
182
- Artist[1].remove_all_albums
183
- # UPDATE albums SET artist_id = NULL WHERE artist_id = 1
184
-
185
- All associations can specify a :select option to change which columns
186
- are selected. Previously only many to many associations suppported
187
- this.
188
-
189
- The SQL used when eagerly loading through eager_graph can be
190
- modified via the :graph_join_type, :graph_conditions, and
191
- :graph_join_conditions options.
192
-
193
- :graph_join_type changes the join type from the default of
194
- :left_outer. This can be useful if you do not want any
195
- albums that don't have an artist in the result set:
196
-
197
- Album.many_to_one :artist, :graph_join_type=>:inner
198
- Album.eager_graph(:artist).sql
199
- # SELECT ... FROM albums INNER JOIN artists ...
200
-
201
- :graph_conditions adds conditions on the join to the table you are
202
- joining, the eager_graph equivalent of an association block argument
203
- in eager. It takes either a hash or an array where all elements
204
- are arrays of length two, similar to join_table, where key symbols
205
- specify columns in the joined table and value symbols specify
206
- columns in the last joined or primary table:
207
-
208
- Album.many_to_one :artist, :graph_conditions=>{:active=>true}
209
- Album.eager_graph(:artist).sql
210
- # SELECT ... FROM albums LEFT OUTER JOIN artists ON ((artists.id =
211
- # albums.artist_id) AND (artists.active = 't'))
212
-
213
- :graph_join_table_conditions exists for many to many associations only,
214
- and operates the same as :graph_conditions, except it specifies a
215
- condition on the many to many join table instead of the associated
216
- model's table. This is necessary if the join table is also model
217
- table with other columns on which you may want to filter:
218
-
219
- Album.many_to_many :genres, :join_table=>:ag, \
220
- :graph_join_table_conditions=>{:active=>true}
221
- Album.eager_graph(:genres).sql
222
- # SELECT ... FROM albums LEFT OUTER JOIN ag ON ((ag.album_id =
223
- albums.id) AND (ag.active = 't')) LEFT OUTER JOIN genres ON
224
- (genres.id = ag.genre_id)
225
-
226
- Other Small Improvements
227
- ------------------------
228
-
229
- * Dataset#invert returns a dataset that matches all records not
230
- matching the current filter.
231
- * Dataset#unfiltered returns a dataset that has any filters removed.
232
- * Dataset#last_page? and Dataset#first_page? for paginated datasets.
233
- * The sequel command line tool now support an -E or --echo argument
234
- that logs all SQL to the standard output. It also can take a path
235
- to a yaml file with database connection options, in addition to a
236
- database URL.
237
- * Databases can now have multiple SQL loggers, so you can log to the
238
- standard output as well as a file.
239
- * SQL identifiers (columns and tables) are now quoted by default (you
240
- can turn this off via Sequel.quote_identifiers = false if need be).
241
- * Sequel.connect now takes an optional block that will disconnect the
242
- database when the block finishes.
243
- * AlterTableGenerator now has add_primary_key and add_foreign_key
244
- methods.
245
- * Running the specs without ParseTree installed skips the specs that
246
- require ParseTree.
247
- * You can use an array of arrays instead of a hash when specifying
248
- conditions, which may be necessary in certain situations where
249
- you would be using the same hash key more than once.
250
- * Almost all documentation for Sequel was updated for 2.0.0, so if you
251
- found Sequel documentation lacking before, check out the new RDoc
252
- pages.
253
- * There have been many minor refactoring improvements, the code
254
- should now be easier to read and follow.
255
- * Sequel now has no external dependencies.
256
- * Sequel::Models now have before_validation and after_validation
257
- hooks.
258
- * Sequel::Model hooks that return false cause the methods that call
259
- them (such as save) to return false.
260
- * Sequel::Models can now load their schema on first instantiation,
261
- instead of when they are created, via
262
- Sequel::Model.lazy_load_schema=. This is helpful for certain
263
- web frameworks that reload all models on every request.
264
- * Hook methods that use blocks can now include an optional tag,
265
- which allows them to work well with web frameworks that load source
266
- files every time they are modified.
267
-
268
- The PostgreSQL adapter has been rewritten and now supports ruby-pg.
269
- There have also been improvements in the following adapters: DBI,
270
- MySQL, SQLite, Oracle, and MSSQL.
271
-
272
- All of the methods that have been deprecated in 1.5.0 have now been
273
- removed. If you are want to upgrade to Sequel 2.0.0 from version 1.4.0
274
- or previous, upgrade to 1.5.1 first, fix all of the deprecation
275
- warnings that show up, and then upgrade to 2.0.0.
276
-
277
- There were some backwards incompatible changes made in 2.0.0 beyond the
278
- removal of deprecated methods. These are:
279
-
280
- * Inflector is no longer used, the inflection methods were moved
281
- directly into String (where they belong because inflections only
282
- make sense for strings). So to override singularization
283
- or pluralization rules, use String.inflections instead of
284
- Inflector.inflections.
285
- * MySQL tinyints are now returned as boolean values instead of
286
- integers. MySQL doesn't have a boolean type, and usually it
287
- is recommended to use tinyint for a boolean column.
288
- * You can no longer pass an array to Dataset#order or Dataset#select,
289
- you need to pass each argument separately (the * operator is your
290
- friend).
291
- * You must use '?' instead of '(?)' when interpolating an array
292
- argument into a string (e.g. filter('x IN ?', [1,2,3]))
293
- * You must pass an explicit table alias argument to join_table and
294
- related methods, you can no longer include the table alias
295
- inside the table argument.
296
- * sqlite:// URLs now operate the same as file:// URLs (2 slashes
297
- for a relative path, 3 for an absolute path).
298
-
@@ -1,271 +0,0 @@
1
- Model Improvements
2
- ------------------
3
-
4
- * one_to_many/many_to_many associations now support a :limit option,
5
- adding a limit/offset to the records returned. This was possible
6
- before using a block, so it is just added for convenience.
7
-
8
- * Associations now support a :read_only option, which doesn't create
9
- methods that modify the database.
10
-
11
- * Associations now support a :graph_select option, which allows
12
- specifying the columns of associated models to include when using
13
- eager_graph.
14
-
15
- * one_to_many associations now have a :one_to_one option. When used
16
- it creates a getter and setter method similar to many_to_one. This
17
- fills the same role as ActiveRecord's has_one, but it is
18
- implemented as a couple of convenience methods over one_to_many, so
19
- it still requires that you specify the association name as a
20
- plural.
21
-
22
- * Model datasets now have to_hash augmented so that it can be called
23
- without any arguments, in which case it yields an identity map (a
24
- hash with keys being primary key values and values being model
25
- instances).
26
-
27
- * The Model.set_sti_key method was added, for easily setting up
28
- single table inheritance. It should be called only in the parent
29
- class.
30
-
31
- * Calls to def_dataset_method with a block are now cached and
32
- reapplied to the new dataset if set_dataset is called afterward,
33
- or in a subclass.
34
-
35
- * All validation methods can now be made conditional via an :if
36
- option, which takes either a symbol (which specifies an instance
37
- method) or a proc (which is instance_evaled).
38
-
39
- * Model#set and Model#update have been added back, they are now
40
- aliases of #set_with_params and #update_with_params.
41
-
42
- * Models now have set_only/set_except/update_only/update_except
43
- instance methods that take a hash (like you would provide to
44
- set or update) and additional arguments specifying which columns
45
- to allow or disallow.
46
-
47
- * Models now have a set_allowed_columns and set_restricted_columns
48
- methods, which operate similarly to ActiveRecord's attr_accessible
49
- and attr_protected. It is recommend that you use the set_only or
50
- update_only instead of these methods, though. You can ignore the
51
- allowed or restricted columns by using #set_all or #update_all.
52
-
53
- * The primary key column(s) is restricted by default. To allow it to
54
- be set via new/set/update, use:
55
-
56
- Sequel::Model.unrestrict_primary_key # Global
57
- Artist.unrestrict_primary_key # Per Class
58
-
59
- * It is now easy to override the one_to_many/many_to_many association
60
- methods that modify the database (add_/remove_/remove_all_), as
61
- they have been broken into two methods, one that handles the
62
- caching features and a private one (prepended with an _) that
63
- handles the database changes (and which you can easily override
64
- without worrying about the caching).
65
-
66
- Table Joining
67
- -------------
68
-
69
- Dataset#join_table got a nice overhaul. You can now use any join
70
- type your database allows:
71
-
72
- DB[:artist].join_table(:natural, :albums)
73
- DB[:numbers].join_table(:cross, :numbers)
74
-
75
- You can now specify the conditions as
76
-
77
- * String: "a.b = c.d" # ON a.b = c.d
78
- * Expression :x < :y # ON x < y
79
- * Array of Symbols: [:x, :y, :z] # USING (x, y, z)
80
- * nil # no conditions, used for NATURAL or CROSS joins
81
-
82
- Dataset#join_table also takes a block that yields three arguments:
83
-
84
- * join_table_alias - The alias/name of the table currently being
85
- joined
86
- * last_join_table_alias - The alias name of the last table joined
87
- (if there was one) or the first FROM table (if not).
88
- * joins - An array of JoinClause objects for all previous joins in
89
- the query.
90
-
91
- Using the block you can specify conditions for complex joins without
92
- needing to know in advance what table aliases will be used.
93
-
94
- Expanded SQL Syntax Support
95
- ---------------------------
96
-
97
- SQL Case statements are now supported directly using hashes or
98
- arrays:
99
-
100
- {:x > 1 => 1}.case(0)
101
- # CASE WHEN x > 1 THEN 1 ELSE 0 END
102
- [[{:x=>1}, 0], [:x < 1, 1], [:x > 1, 2]].case(-1)
103
- # CASE WHEN x = 1 THEN 0 WHEN x < 1 THEN 1 WHEN x > 1 THEN 2
104
- ELSE -1 END
105
-
106
- You should use an array instead of a hash for multiple conditions
107
- unless all conditions are orthogonal.
108
-
109
- The SQL extract function has special syntax:
110
-
111
- EXTRACT(day FROM date)
112
-
113
- This syntax is now supported via the following ruby code:
114
-
115
- :date.extract(:day)
116
-
117
- Other Notable Changes
118
- ---------------------
119
-
120
- * The sequel command line tool can now run migrations. The -m
121
- option specifies the directory holding the migration files,
122
- and the -M options specifies the version to which to migrate.
123
-
124
- * The PostgreSQL adapter supports nested transactions/savepoints.
125
-
126
- * The schema parser now understands decimal fields, and will
127
- typecast to BigDecimal.
128
-
129
- * PostgreSQL's numeric type is now recognized and returned as
130
- BigDecimal.
131
-
132
- * HAVING now comes before ORDER BY, which most databases seem to
133
- prefer. If your database wants HAVING after ORDER BY, please
134
- let us know.
135
-
136
- * Symbol#qualify now exists, to specify the table name for a given
137
- symbol, similar to the use of #as to specify an alias. This is
138
- mainly helpful in conjuction with the #join_table block, as that
139
- provides the table aliases to use to qualify the columns inside
140
- the block.
141
-
142
- * BitwiseMethods (&, |, ^, ~, <<, >>) have been added to the
143
- NumericExpression class, so you can do the following:
144
-
145
- (x + 1) ^ 10 # SQL: (x + 1) ^ 10
146
- ~(x + 1) # SQL: ~(x + 1)
147
-
148
- Usually, &, |, and ~ operate in a logical manner, but for
149
- NumericExpressions, they take on their usual bitwise meaning,
150
- since logical operations only make sense for booleans.
151
-
152
- * #cast_numeric and #cast_string exist for Symbols, Strings, and
153
- other Sequel Expressions, which return the results casted and
154
- wrapped in either NumericExpression or StringExpression, so you
155
- can use the BitwiseMethods (&, |, ^, ~, <<, >>) or
156
- StringConcatenationMethods (+) directly.
157
-
158
- # Dataset#to_hash can take only one argument, in which case it uses
159
- that argument to specify the key, and uses the entire hash for the
160
- value.
161
-
162
- # Dataset#graph can now take an array of columns to select from the
163
- joined table via the :select option.
164
-
165
- # Dataset#filter and similar methods now combine the block and
166
- regular argument conditions if both are given, instead of ignoring
167
- the regular argument conditions.
168
-
169
- # Dataset#filter(false) can now be used to make sure that no records
170
- are returned. Dataset#filter(true) also works, but it's a no-op.
171
- Before, these raised errors.
172
-
173
- # Dataset#count does a subquery for a dataset using DISTINCT, since
174
- the otherwise it would yield a count for the query without
175
- DISTINCT.
176
-
177
- ParseTree Support Officially Deprecated
178
- ---------------------------------------
179
-
180
- The support for ParseTree-based block filters has officially been
181
- deprecated and will be removed in Sequel 2.2. To use the
182
- expression filters (which don't require ParseTree) inside blocks,
183
- use:
184
-
185
- SEQUEL_NO_PARSE_TREE = true
186
- require 'sequel'
187
- # OR
188
- require 'sequel'
189
- Sequel.use_parse_tree = false
190
-
191
- This is the default if ParseTree cannot be loaded. If ParseTree
192
- can be loaded, it remains the default, in order not to immediately
193
- break existing code.
194
-
195
- With this set, you can use the expression filters inside of blocks:
196
-
197
- dataset.filter{((:x + 1) & 10 < :y) & :z}
198
-
199
- That doesn't gain you all that much, but there are some methods
200
- that feed block arguments into filter, such as the following:
201
-
202
- dataset.first(5){((:x + 1) & 10 < :y) & :z}
203
-
204
- Which will get you the first 5 records matching the condition.
205
-
206
- Backwards Incompatible Changes
207
- ------------------------------
208
-
209
- * To change the datetime classe used from Time to DateTime, you
210
- now use:
211
-
212
- Sequel.datetime_class = DateTime # instead of Sequel.time_class
213
-
214
- * Models now raise errors if you try to access a missing or
215
- restricted method via new/set/update, instead of just silently
216
- skipping that parameter. To get the old behavior:
217
-
218
- Sequel::Model.strict_param_setting = false
219
-
220
- * The association_dataset method now takes into account the :eager
221
- option and the block argument, where it didn't before. It also
222
- takes into account the new :limit option.
223
-
224
- * Association methods now raise errors in most cases if the model
225
- doesn't have a valid primary key.
226
-
227
- * Dataset#join_table used to allow a symbol as a conditions argument
228
- as a shortcut for a hash:
229
-
230
- DB[:artist].join(:albums, :artist_id)
231
- # ON albums.artist_id = artists.id
232
-
233
- With the changes to #join_table, this no longer works. It would
234
- now be interpreted as a boolean column:
235
-
236
- DB[:artist].join(:albums, :artist_id)
237
- # ON artists.id
238
-
239
- Use the following slightly longer version for the old behavior:
240
-
241
- DB[:artist].join(:albums, :artist_id=>:id)
242
- # ON albums.artist_id = artists.id
243
-
244
- * MySQL users need to be careful when upgrading, the following code
245
- will once again cause an error:
246
-
247
- DB[:artists].each{|artist| DB[:albums].each{|album| ...}}
248
-
249
- To fix it, change the code to:
250
-
251
- DB[:artists].all{|artist| DB[:albums].each{|album| ...}}
252
-
253
- The issue is the MySQL adapter doesn't release the database
254
- connection while running each, and the second call to each gets the
255
- same database connection (while the other query is still running),
256
- because it is in the same thread. Using #all for the outside query
257
- ensures that the database connection is released before the block is
258
- called.
259
-
260
- The reason for this change was that the workaround provided for
261
- MySQL could potentially cause issues with transactions for all
262
- adapters.
263
-
264
- * String#asc and String#desc are no longer defined, as ordering on a
265
- plain string column should be a no-op. They are still defined
266
- on LiteralStrings.
267
-
268
- * You can no longer abuse the SQL::Function syntax to use a table
269
- alias with specified columns (e.g. :table[:col1, :col2, :col3])
270
- or to cast to types (e.g. :x.cast_as(:varchar[20])). Use a
271
- LiteralString in both cases.