sequel 4.26.0 → 5.37.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -7,28 +7,16 @@ many Sequel::Dataset methods that take virtual row blocks.
7
7
 
8
8
  == Why Virtual Rows
9
9
 
10
- Virtual Rows were created to work around the issue that some parts of
11
- Sequel's standard DSL could not be used on ruby 1.9. For example, the
12
- following Sequel code historically worked on ruby 1.8, but not ruby 1.9:
10
+ Virtual rows offer a less verbose way to express many queries. For example,
11
+ by default if you want to express an inequality filter in Sequel, you can do:
13
12
 
14
- dataset.where(:a > :b[:c])
15
- # WHERE a > b(c)
16
-
17
- This code does not work on ruby 1.9 for two reasons. First, Symbol#>
18
- (like other inequality methods) is already defined in ruby 1.9, so Sequel
19
- does not override it to return an SQL inequality expression. Second, Symbol#[]
20
- is already defined on ruby 1.9, so Sequel does not override it to return an
21
- SQL function expression.
22
-
23
- It's possible to use Sequel's DSL to represent such expressions, but it is a
24
- little verbose:
25
-
26
- dataset.where(Sequel.expr(:a) > Sequel.function(:b, :c))
27
- # WHERE a > b(c)
13
+ dataset.where(Sequel[:a] > Sequel.function(:b, :c))
14
+ # WHERE (a > b(c))
28
15
 
29
- The virtual row DSL makes such code more concise:
16
+ With virtual rows, you can use the less verbose:
30
17
 
31
18
  dataset.where{a > b(c)}
19
+ # WHERE (a > b(c))
32
20
 
33
21
  == Regular Procs vs Instance Evaled Procs
34
22
 
@@ -38,96 +26,110 @@ of Sequel::SQL::VirtualRow. If it does not accept an argument, it is
38
26
  evaluated in the context of an instance of Sequel::SQL::VirtualRow.
39
27
 
40
28
  ds = DB[:items]
41
- # Regular proc
29
+ # Regular block
42
30
  ds.where{|o| o.column > 1}
43
- # WHERE column > 1
31
+ # WHERE (column > 1)
44
32
 
45
- # Instance-evaled proc
33
+ # Instance-evaled block
46
34
  ds.where{column > 1}
47
- # WHERE column > 1
35
+ # WHERE (column > 1)
48
36
 
49
37
  If you aren't familiar with the difference between regular blocks and instance
50
- evaled blocks, you should probably consult a general ruby reference, but briefly,
51
- with regular procs, methods called without an explicit receiver inside the
52
- proc call the method on the receiver in the surrounding scope, while instance
53
- evaled procs call the method on the receiver of the instance_eval call. However,
38
+ evaled blocks, inside regular blocks methods called without an explicit receiver call
39
+ the method on the receiver in the surrounding scope, while instance
40
+ evaled blocks call the method on the receiver of the instance_eval call (the
41
+ Sequel::SQL::VirtualRow instance in this case).
42
+
54
43
  in both cases, local variables available in the surrounding scope will be available
55
- inside the proc. If that doesn't make sense, maybe this example will help:
44
+ inside the block. However, instance variables in the surrounding scope will not
45
+ be available inside the block if using an instance evaled block, and methods called
46
+ without an explicit receiver inside an instance evaled block will not call
47
+ methods in the surrounding scope. For example:
56
48
 
57
49
  def self.a
58
50
  42
59
51
  end
60
52
  b = 32
53
+ @d = 100
61
54
 
62
- # Regular proc
63
- ds.where{|o| o.c > a - b}
64
- # WHERE c > 10
55
+ # Regular block
56
+ ds.where{|o| o.c > a - b + @d}
57
+ # WHERE (c > 100)
65
58
 
66
- # Instance-evaled proc
67
- ds.where{c > a - b}
68
- # WHERE c > (a - 32)
59
+ # Instance-evaled block
60
+ ds.where{c > a - b + @d}
61
+ # WHERE (c > ((a - 32) + NULL))
69
62
 
70
- There are two related differences here. First is the usage of <tt>o.c</tt> vs +c+,
71
- and second is the difference between the use of +a+. In the regular proc,
72
- you couldn't call +c+ without an explicit receiver in the proc, unless the self of the
73
- surrounding scope responded to it. For +a+, note how ruby calls the method on
74
- the receiver of the surrounding scope in the regular proc, which returns an integer,
63
+ There are three related differences here:
64
+
65
+ * Regular blocks use +o.c+ instead of just +c+
66
+ * +a+ results in 42 in the regular block, but creates an expression object in the instance evaled block
67
+ * @d results in 100 in the regular block, but nil in the instance evaled block
68
+
69
+ In the regular block, you need to call +c+ with an explicit receiver (the virtual
70
+ row block argument), while in the instance evaled block +c+ can be called directly,
71
+ as the default receiver has changed inside the block.
72
+
73
+ For +a+, note how ruby calls the method on
74
+ the receiver of the surrounding scope in the regular block, which returns an integer,
75
75
  and does the subtraction before Sequel gets access to it. In the instance evaled
76
- proc, calling +a+ without a receiver calls the a method on the VirtualRow instance.
76
+ block, calling +a+ without a receiver calls the a method on the VirtualRow instance.
77
+ For @d, note that in a regular block, the value hasn't changed, but in the instance evaled
78
+ block, instance variable access returns nil.
77
79
  For +b+, note that it operates the same in both cases, as it is a local variable.
78
80
 
79
- Basically, the choice for whether to use a regular proc or an instance evaled proc is
80
- completely up to you. The same things can be accomplished with both.
81
- Instance evaled procs tend to produce shorter code, but by modifying the scope
82
- can be more difficult for a new user to understand. That being said, I usually
83
- use instance evaled procs unless I need to call methods on the receiver of the
84
- surrounding scope inside the proc.
81
+ The choice for whether to use a regular block or an instance evaled block is
82
+ up to you. The same things can be accomplished with both.
83
+ Instance evaled block tend to produce shorter code, but by modifying the scope
84
+ can be more difficult to understand.
85
+
86
+ If you are not sure which to use, use instance evaled blocks unless you need to
87
+ call methods or access instance variables of the surrounding scope inside the block.
85
88
 
86
89
  == Local Variables vs Method Calls
87
90
 
88
91
  If you have a method that accepts 0 arguments and has the same name as a local
89
92
  variable, you can call it with () to differentiate the method call from the
90
- local variable access. This is mostly useful in instance_evaled procs:
93
+ local variable access. This is mostly useful in instance evaled blocks:
91
94
 
92
95
  b = 32
93
96
  ds.where{b() > b}
94
97
  # WHERE b > 32
95
98
 
99
+ It's also possible to use an explicit self receiver in instance evaled blocks:
100
+
101
+ b = 32
102
+ ds.where{self.b > b}
103
+ # WHERE b > 32
104
+
105
+
96
106
  == VirtualRow Methods
97
107
 
98
- VirtualRow is a class that returns SQL::Identifiers, SQL::QualifiedIdentifiers, or
99
- SQL::Functions depending on how it is called.
108
+ VirtualRow is a class that returns SQL::Identifiers or SQL::Functions depending
109
+ on how it is called.
100
110
 
101
111
  == SQL::Identifiers - Regular columns
102
112
 
103
113
  SQL::Identifiers can be thought of as regular column references in SQL,
104
114
  not qualified by any table. You get an SQL::Identifier if the method is called
105
- without a block or arguments, and doesn't have a double underscore in the method
106
- name:
115
+ without arguments:
107
116
 
108
117
  ds.where{|o| o.column > 1}
109
118
  ds.where{column > 1}
110
- # WHERE column > 1
119
+ # WHERE (column > 1)
111
120
 
112
121
  == SQL::QualifiedIdentifiers - Qualified columns
113
122
 
114
- SQL::QualifiedIdentifiers can be thought of as column references in SQL that
115
- are qualified to a specific table. You get an SQL::QualifiedIdentifier if
116
- the method is called without a block or arguments, and has a double underscore
117
- in the method name:
123
+ You can qualified identifiers by calling #[] on an identifier:
118
124
 
119
- ds.where{|o| o.table__column > 1}
120
- ds.where{table__column > 1}
125
+ ds.where{|o| o.table[:column] > 1}
126
+ ds.where{table[:column] > 1}
121
127
  # WHERE table.column > 1
122
128
 
123
- Using the double underscore for SQL::QualifiedIdentifiers was done to make
124
- usage very similar to using symbols, which also translate the double underscore
125
- into a qualified column.
126
-
127
129
  == SQL::Functions - SQL function calls
128
130
 
129
131
  SQL::Functions can be thought of as function calls in SQL. You get a simple
130
- function call if you call a method with arguments and without a block:
132
+ function call if you call a method with arguments:
131
133
 
132
134
  ds.where{|o| o.function(1) > 1}
133
135
  ds.where{function(1) > 1}
@@ -167,8 +169,7 @@ distinct method on the returned Function:
167
169
 
168
170
  == SQL::Functions with windows - SQL window function calls
169
171
 
170
- Not all databases support window functions, but they are very helpful for certain types of
171
- queries. To use them, you should just call the over method on the Function
172
+ To create a window function call, just call the over method on the Function
172
173
  object returned, with the options for the window:
173
174
 
174
175
  ds.select{|o| o.rank.function.over}
@@ -179,19 +180,18 @@ object returned, with the options for the window:
179
180
  ds.select{count.function.*.over}
180
181
  # SELECT count(*) OVER ()
181
182
 
182
- ds.select{|o| o.sum(o.col1).over(:partition=>o.col2, :order=>o.col3)}
183
- ds.select{sum(col1).over(:partition=>col2, :order=>col3)}
183
+ ds.select{|o| o.sum(o.col1).over(partition: o.col2, order: o.col3)}
184
+ ds.select{sum(col1).over(partition: col2, order: col3)}
184
185
  # SELECT sum(col1) OVER (PARTITION BY col2 ORDER BY col3)
185
186
 
186
187
  == Operators
187
188
 
188
189
  VirtualRows use method_missing to handle almost all method calls. Since the
189
- objects given by method_missing are SQL::Identifiers, SQL::QualifiedIdentifiers
190
- or SQL::Functions, you can use all operators that they provide (see
190
+ objects given by method_missing are SQL::Identifiers or SQL::Functions, you can use all operators that they provide (see
191
191
  DatasetFiltering[http://sequel.jeremyevans.net/rdoc/files/doc/dataset_filtering_rdoc.html#label-Filtering+using+expressions]):
192
192
 
193
193
  ds.select{|o| o.price - 100}
194
- ds.select{o.price - 100}
194
+ ds.select{price - 100}
195
195
  # SELECT (price - 100)
196
196
 
197
197
  ds.where{|o| (o.price < 200) & (o.tax * 100 >= 23)}
@@ -213,14 +213,14 @@ The standard +, -, *, and / mathematical operators are defined:
213
213
 
214
214
  The & and | methods are defined to use AND and OR:
215
215
 
216
- ds.where{|o| o.&({:a=>:b}, :c)}
217
- ds.where{self.&({:a=>:b}, :c)}
216
+ ds.where{|o| o.&({a: :b}, :c)}
217
+ ds.where{self.&({a: :b}, :c)}
218
218
  # WHERE ((a = b) AND c)
219
219
 
220
220
  The ~ method is defined to do inversion:
221
221
 
222
- ds.where{|o| o.~({:a=>1, :b=>2})}
223
- ds.where{self.~({:a=>1, :b=>2})}
222
+ ds.where{|o| o.~({a: 1, b: 2})}
223
+ ds.where{self.~({a: 1, b: 2})}
224
224
  # WHERE ((a != 1) OR (b != 2))
225
225
 
226
226
  === Inequality Operators
@@ -231,19 +231,6 @@ The standard >, <, >=, and <= inequality operators are defined:
231
231
  ds.where{self.>(1, :c)}
232
232
  # WHERE (1 > c)
233
233
 
234
- == Literal Strings
235
-
236
- The backtick operator can be used inside an instance-evaled
237
- virtual row block to create a literal string:
238
-
239
- ds.where{a > `some SQL`}
240
- # WHERE (a > some SQL)
241
-
242
- You can use this on a regular virtual row block too, but it
243
- doesn't look as nice:
244
-
245
- ds.where{|o| o.>(:a, o.`('some SQL'))}
246
-
247
234
  == Returning multiple values
248
235
 
249
236
  It's common when using select and order virtual row blocks to want to
@@ -259,26 +246,20 @@ Note that if you forget the array brackets, you'll end up with a syntax error:
259
246
  # Invalid ruby syntax
260
247
  ds.select{|o| o.column1, o.sum(o.column2).as(o.sum)}
261
248
  ds.select{column1, sum(column2).as(sum)}
262
-
263
- == Alternative Description of the VirtualRow method call rules
264
-
265
- * If a block is given:
266
- * The block is currently not called. This may change in a future version.
267
- * If there are no arguments, an SQL::Function with the name of
268
- method used, and no arguments.
269
- * If the first argument is :*, an SQL::Function is created with a single
270
- wildcard argument (*).
271
- * If the first argument is :distinct, an SQL::Function is created with
272
- the keyword DISTINCT prefacing all remaining arguments.
273
- * If the first argument is :over, the second argument if provided should
274
- be a hash of options to pass to SQL::Window. The options hash can also
275
- contain :*=>true to use a wildcard argument as the function argument, or
276
- :args=>... to specify an array of arguments to use as the function arguments.
277
- * If a block is not given:
278
- * If there are arguments, an SQL::Function is returned with the
279
- name of the method used and the arguments given.
280
- * If there are no arguments and the method contains a double
281
- underscore, split on the double underscore and return an
282
- SQL::QualifiedIdentifier with the table and column.
283
- * Otherwise, create an SQL::Identifier with the name of the
284
- method.
249
+
250
+ == Split symbols
251
+
252
+ Note that if you turn on symbol splitting for backwards compatibility,
253
+ Sequel will split virtual row methods with double underscores and
254
+ return them as qualified identifiers:
255
+
256
+ Sequel.split_symbols = true
257
+ ds.where{|o| o.table__column}
258
+ ds.where{table__column}
259
+ WHERE table.column
260
+
261
+ It's not recommended that you rely on this, it's better to convert the calls
262
+ to the recommended form:
263
+
264
+ ds.where{|o| o.table[:column]}
265
+ ds.where{table[:column]}
@@ -1 +1,3 @@
1
- require 'sequel/model'
1
+ # frozen-string-literal: true
2
+
3
+ require_relative 'sequel/model'
@@ -1,20 +1,101 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'win32ole'
2
4
 
3
5
  module Sequel
4
6
  # The ADO adapter provides connectivity to ADO databases in Windows.
5
7
  module ADO
6
- class Database < Sequel::Database
7
- DISCONNECT_ERROR_RE = /Communication link failure/
8
+ # ADO constants (DataTypeEnum)
9
+ # Source: https://msdn.microsoft.com/en-us/library/ms675318(v=vs.85).aspx
10
+ AdBigInt = 20
11
+ AdBinary = 128
12
+ #AdBoolean = 11
13
+ #AdBSTR = 8
14
+ #AdChapter = 136
15
+ #AdChar = 129
16
+ #AdCurrency = 6
17
+ #AdDate = 7
18
+ AdDBDate = 133
19
+ #AdDBTime = 134
20
+ AdDBTimeStamp = 135
21
+ #AdDecimal = 14
22
+ #AdDouble = 5
23
+ #AdEmpty = 0
24
+ #AdError = 10
25
+ #AdFileTime = 64
26
+ #AdGUID = 72
27
+ #AdIDispatch = 9
28
+ #AdInteger = 3
29
+ #AdIUnknown = 13
30
+ AdLongVarBinary = 205
31
+ #AdLongVarChar = 201
32
+ #AdLongVarWChar = 203
33
+ AdNumeric = 131
34
+ #AdPropVariant = 138
35
+ #AdSingle = 4
36
+ #AdSmallInt = 2
37
+ #AdTinyInt = 16
38
+ #AdUnsignedBigInt = 21
39
+ #AdUnsignedInt = 19
40
+ #AdUnsignedSmallInt = 18
41
+ #AdUnsignedTinyInt = 17
42
+ #AdUserDefined = 132
43
+ AdVarBinary = 204
44
+ #AdVarChar = 200
45
+ #AdVariant = 12
46
+ AdVarNumeric = 139
47
+ #AdVarWChar = 202
48
+ #AdWChar = 130
49
+
50
+ bigint = Object.new
51
+ def bigint.call(v)
52
+ v.to_i
53
+ end
8
54
 
55
+ numeric = Object.new
56
+ def numeric.call(v)
57
+ if v.include?(',')
58
+ BigDecimal(v.tr(',', '.'))
59
+ else
60
+ BigDecimal(v)
61
+ end
62
+ end
63
+
64
+ binary = Object.new
65
+ def binary.call(v)
66
+ Sequel.blob(v.pack('c*'))
67
+ end
68
+
69
+ date = Object.new
70
+ def date.call(v)
71
+ Date.new(v.year, v.month, v.day)
72
+ end
73
+
74
+ CONVERSION_PROCS = {}
75
+ [
76
+ [bigint, AdBigInt],
77
+ [numeric, AdNumeric, AdVarNumeric],
78
+ [date, AdDBDate],
79
+ [binary, AdBinary, AdVarBinary, AdLongVarBinary]
80
+ ].each do |callable, *types|
81
+ callable.freeze
82
+ types.each do |i|
83
+ CONVERSION_PROCS[i] = callable
84
+ end
85
+ end
86
+ CONVERSION_PROCS.freeze
87
+
88
+ class Database < Sequel::Database
9
89
  set_adapter_scheme :ado
10
90
 
91
+ attr_reader :conversion_procs
92
+
11
93
  # In addition to the usual database options,
12
94
  # the following options have an effect:
13
95
  #
14
96
  # :command_timeout :: Sets the time in seconds to wait while attempting
15
97
  # to execute a command before cancelling the attempt and generating
16
98
  # an error. Specifically, it sets the ADO CommandTimeout property.
17
- # If this property is not set, the default of 30 seconds is used.
18
99
  # :driver :: The driver to use in the ADO connection string. If not provided, a default
19
100
  # of "SQL Server" is used.
20
101
  # :conn_string :: The full ADO connection string. If this is provided,
@@ -26,8 +107,8 @@ module Sequel
26
107
  #
27
108
  # Pay special attention to the :provider option, as without specifying a provider,
28
109
  # many things will be broken. The SQLNCLI10 provider appears to work well if you
29
- # are connecting to Microsoft SQL Server, but it is not the default as that would
30
- # break backwards compatability.
110
+ # are connecting to Microsoft SQL Server, but it is not the default as that is not
111
+ # always available and would break backwards compatability.
31
112
  def connect(server)
32
113
  opts = server_opts(server)
33
114
  s = opts[:conn_string] || "driver=#{opts[:driver]};server=#{opts[:host]};database=#{opts[:database]}#{";uid=#{opts[:user]};pwd=#{opts[:password]}" if opts[:user]}"
@@ -44,6 +125,11 @@ module Sequel
44
125
  nil
45
126
  end
46
127
 
128
+ def freeze
129
+ @conversion_procs.freeze
130
+ super
131
+ end
132
+
47
133
  # Just execute so it doesn't attempt to return the number of rows modified.
48
134
  def execute_ddl(sql, opts=OPTS)
49
135
  execute(sql, opts)
@@ -62,7 +148,7 @@ module Sequel
62
148
  return super if opts[:provider]
63
149
  synchronize(opts[:server]) do |conn|
64
150
  begin
65
- log_yield(sql){conn.Execute(sql, 1)}
151
+ log_connection_yield(sql, conn){conn.Execute(sql, 1)}
66
152
  WIN32OLE::ARGV[1]
67
153
  rescue ::WIN32OLERuntimeError => e
68
154
  raise_error(e)
@@ -73,8 +159,15 @@ module Sequel
73
159
  def execute(sql, opts=OPTS)
74
160
  synchronize(opts[:server]) do |conn|
75
161
  begin
76
- r = log_yield(sql){conn.Execute(sql)}
77
- yield(r) if block_given?
162
+ r = log_connection_yield(sql, conn){conn.Execute(sql)}
163
+ begin
164
+ yield r if block_given?
165
+ ensure
166
+ begin
167
+ r.close
168
+ rescue ::WIN32OLERuntimeError
169
+ end
170
+ end
78
171
  rescue ::WIN32OLERuntimeError => e
79
172
  raise_error(e)
80
173
  end
@@ -87,22 +180,29 @@ module Sequel
87
180
  def adapter_initialize
88
181
  case @opts[:conn_string]
89
182
  when /Microsoft\.(Jet|ACE)\.OLEDB/io
90
- Sequel.require 'adapters/ado/access'
183
+ require_relative 'ado/access'
91
184
  extend Sequel::ADO::Access::DatabaseMethods
92
185
  self.dataset_class = ADO::Access::Dataset
93
186
  else
94
187
  @opts[:driver] ||= 'SQL Server'
95
188
  case @opts[:driver]
96
189
  when 'SQL Server'
97
- Sequel.require 'adapters/ado/mssql'
190
+ require_relative 'ado/mssql'
98
191
  extend Sequel::ADO::MSSQL::DatabaseMethods
99
192
  self.dataset_class = ADO::MSSQL::Dataset
100
193
  set_mssql_unicode_strings
101
194
  end
102
195
  end
196
+
197
+ @conversion_procs = CONVERSION_PROCS.dup
198
+
103
199
  super
104
200
  end
105
201
 
202
+ def dataset_class_default
203
+ Dataset
204
+ end
205
+
106
206
  # The ADO adapter's default provider doesn't support transactions, since it
107
207
  # creates a new native connection for each query. So Sequel only attempts
108
208
  # to use transactions if an explicit :provider is given.
@@ -119,7 +219,7 @@ module Sequel
119
219
  end
120
220
 
121
221
  def disconnect_error?(e, opts)
122
- super || (e.is_a?(::WIN32OLERuntimeError) && e.message =~ DISCONNECT_ERROR_RE)
222
+ super || (e.is_a?(::WIN32OLERuntimeError) && e.message =~ /Communication link failure/)
123
223
  end
124
224
 
125
225
  def rollback_transaction(conn, opts=OPTS)
@@ -128,21 +228,53 @@ module Sequel
128
228
  end
129
229
 
130
230
  class Dataset < Sequel::Dataset
131
- Database::DatasetClass = self
132
-
133
231
  def fetch_rows(sql)
134
- execute(sql) do |s|
135
- columns = cols = s.Fields.extend(Enumerable).map{|column| output_identifier(column.Name)}
136
- @columns = columns
137
- s.getRows.transpose.each do |r|
138
- row = {}
139
- cols.each{|c| row[c] = r.shift}
140
- yield row
141
- end unless s.eof
232
+ execute(sql) do |recordset|
233
+ cols = []
234
+ conversion_procs = db.conversion_procs
235
+
236
+ ts_cp = nil
237
+ recordset.Fields.each do |field|
238
+ type = field.Type
239
+ cp = if type == AdDBTimeStamp
240
+ ts_cp ||= begin
241
+ nsec_div = 1000000000.0/(10**(timestamp_precision))
242
+ nsec_mul = 10**(timestamp_precision+3)
243
+ meth = db.method(:to_application_timestamp)
244
+ lambda do |v|
245
+ # Fractional second handling is not correct on ruby <2.2
246
+ meth.call([v.year, v.month, v.day, v.hour, v.min, v.sec, (v.nsec/nsec_div).round * nsec_mul])
247
+ end
248
+ end
249
+ else
250
+ conversion_procs[type]
251
+ end
252
+ cols << [output_identifier(field.Name), cp]
253
+ end
254
+
255
+ self.columns = cols.map(&:first)
256
+ return if recordset.EOF
257
+ max = cols.length
258
+
259
+ recordset.GetRows.transpose.each do |field_values|
260
+ h = {}
261
+
262
+ i = -1
263
+ while (i += 1) < max
264
+ name, cp = cols[i]
265
+ h[name] = if (v = field_values[i]) && cp
266
+ cp.call(v)
267
+ else
268
+ v
269
+ end
270
+ end
271
+
272
+ yield h
273
+ end
142
274
  end
143
275
  end
144
276
 
145
- # ADO returns nil for all for delete and update statements.
277
+ # ADO can return for for delete and update statements, depending on the provider.
146
278
  def provides_accurate_rows_matched?
147
279
  false
148
280
  end