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,5 +1,7 @@
1
- Sequel.require 'adapters/shared/sqlanywhere'
2
- Sequel.require 'adapters/jdbc/transactions'
1
+ # frozen-string-literal: true
2
+
3
+ require_relative '../shared/sqlanywhere'
4
+ require_relative 'transactions'
3
5
 
4
6
  module Sequel
5
7
  module JDBC
@@ -21,57 +23,45 @@ module Sequel
21
23
  Sequel.synchronize do
22
24
  DATABASE_SETUP[:sqlanywhere] = proc do |db|
23
25
  db.extend(Sequel::JDBC::SqlAnywhere::DatabaseMethods)
26
+ db.convert_smallint_to_bool = true
24
27
  db.dataset_class = Sequel::JDBC::SqlAnywhere::Dataset
25
28
  drv
26
29
  end
27
30
  end
28
31
 
29
- class TypeConvertor
30
- def SqlAnywhereBoolean(r, i)
31
- if v = Short(r, i)
32
- v != 0
33
- end
34
- end
35
- end
36
-
37
32
  module SqlAnywhere
38
- # Database instance methods for Sybase databases accessed via JDBC.
39
33
  module DatabaseMethods
40
- extend Sequel::Database::ResetIdentifierMangling
41
34
  include Sequel::SqlAnywhere::DatabaseMethods
42
35
  include Sequel::JDBC::Transactions
43
36
 
44
- LAST_INSERT_ID = 'SELECT @@IDENTITY'.freeze
45
-
46
37
  private
47
38
 
48
- # Get the last inserted id.
39
+ # Use @@IDENTITY to get the last inserted id
49
40
  def last_insert_id(conn, opts=OPTS)
50
41
  statement(conn) do |stmt|
51
- sql = LAST_INSERT_ID
52
- rs = log_yield(sql){stmt.executeQuery(sql)}
42
+ sql = 'SELECT @@IDENTITY'
43
+ rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
53
44
  rs.next
54
45
  rs.getLong(1)
55
46
  end
56
47
  end
57
-
58
- def setup_type_convertor_map
59
- super
60
- @type_convertor_map[:SqlAnywhereBoolean] = TypeConvertor::INSTANCE.method(:SqlAnywhereBoolean)
61
- end
62
48
  end
63
49
 
64
- #Dataset class for Sybase datasets accessed via JDBC.
65
50
  class Dataset < JDBC::Dataset
66
51
  include Sequel::SqlAnywhere::DatasetMethods
67
52
 
68
53
  private
69
54
 
70
55
  SMALLINT_TYPE = Java::JavaSQL::Types::SMALLINT
56
+ BOOLEAN_METHOD = Object.new
57
+ def BOOLEAN_METHOD.call(r, i)
58
+ v = r.getShort(i)
59
+ v != 0 unless r.wasNull
60
+ end
71
61
 
72
62
  def type_convertor(map, meta, type, i)
73
63
  if convert_smallint_to_bool && type == SMALLINT_TYPE
74
- map[:SqlAnywhereBoolean]
64
+ BOOLEAN_METHOD
75
65
  else
76
66
  super
77
67
  end
@@ -1,5 +1,7 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel::JDBC.load_driver('org.sqlite.JDBC', :SQLite3)
2
- Sequel.require 'adapters/shared/sqlite'
4
+ require_relative '../shared/sqlite'
3
5
 
4
6
  module Sequel
5
7
  module JDBC
@@ -12,21 +14,34 @@ module Sequel
12
14
  end
13
15
  end
14
16
 
15
- # Database and Dataset support for SQLite databases accessed via JDBC.
16
17
  module SQLite
17
- # Instance methods for SQLite Database objects accessed via JDBC.
18
+ module ForeignKeyListPragmaConvertorFix
19
+ # For the use of the convertor for String, working around a bug
20
+ # in jdbc-sqlite3 that reports fields are of type
21
+ # java.sql.types.NUMERIC even though they contain non-numeric data.
22
+ def type_convertor(_, _, _, i)
23
+ i > 2 ? TypeConvertor::CONVERTORS[:String] : super
24
+ end
25
+ end
26
+
27
+ module TableInfoPragmaConvertorFix
28
+ # For the use of the convertor for String, working around a bug
29
+ # in jdbc-sqlite3 that reports dflt_value field is of type
30
+ # java.sql.types.NUMERIC even though they contain string data.
31
+ def type_convertor(_, _, _, i)
32
+ i == 5 ? TypeConvertor::CONVERTORS[:String] : super
33
+ end
34
+ end
35
+
18
36
  module DatabaseMethods
19
- extend Sequel::Database::ResetIdentifierMangling
20
37
  include Sequel::SQLite::DatabaseMethods
21
- LAST_INSERT_ROWID = 'SELECT last_insert_rowid()'.freeze
22
- FOREIGN_KEY_ERROR_RE = /query does not return ResultSet/.freeze
23
38
 
24
39
  # Swallow pointless exceptions when the foreign key list pragma
25
40
  # doesn't return any rows.
26
41
  def foreign_key_list(table, opts=OPTS)
27
42
  super
28
43
  rescue Sequel::DatabaseError => e
29
- raise unless e.message =~ FOREIGN_KEY_ERROR_RE
44
+ raise unless foreign_key_error?(e)
30
45
  []
31
46
  end
32
47
 
@@ -35,11 +50,22 @@ module Sequel
35
50
  def indexes(table, opts=OPTS)
36
51
  super
37
52
  rescue Sequel::DatabaseError => e
38
- raise unless e.message =~ FOREIGN_KEY_ERROR_RE
53
+ raise unless foreign_key_error?(e)
39
54
  {}
40
55
  end
41
56
 
42
57
  private
58
+
59
+
60
+ # Add workaround for bug when running foreign_key_list pragma
61
+ def _foreign_key_list_ds(_)
62
+ super.with_extend(ForeignKeyListPragmaConvertorFix)
63
+ end
64
+
65
+ # Add workaround for bug when running table_info pragma
66
+ def _parse_pragma_ds(_, _)
67
+ super.with_extend(TableInfoPragmaConvertorFix)
68
+ end
43
69
 
44
70
  DATABASE_ERROR_REGEXPS = Sequel::SQLite::DatabaseMethods::DATABASE_ERROR_REGEXPS.merge(/Abort due to constraint violation/ => ConstraintViolation).freeze
45
71
  def database_error_regexps
@@ -49,7 +75,7 @@ module Sequel
49
75
  # Use last_insert_rowid() to get the last inserted id.
50
76
  def last_insert_id(conn, opts=OPTS)
51
77
  statement(conn) do |stmt|
52
- rs = stmt.executeQuery(LAST_INSERT_ROWID)
78
+ rs = stmt.executeQuery('SELECT last_insert_rowid()')
53
79
  rs.next
54
80
  rs.getLong(1)
55
81
  end
@@ -65,23 +91,30 @@ module Sequel
65
91
  def setup_connection(conn)
66
92
  conn = super(conn)
67
93
  statement(conn) do |stmt|
68
- connection_pragmas.each{|s| log_yield(s){stmt.execute(s)}}
94
+ connection_pragmas.each{|s| log_connection_yield(s, conn){stmt.execute(s)}}
69
95
  end
70
96
  conn
71
97
  end
72
98
 
99
+ # Whether the given exception is due to a foreign key error.
100
+ def foreign_key_error?(exception)
101
+ exception.message =~ /query does not return ResultSet/
102
+ end
103
+
73
104
  # Use getLong instead of getInt for converting integers on SQLite, since SQLite does not enforce a limit of 2**32.
74
105
  # Work around regressions in jdbc-sqlite 3.8.7 for date and blob types.
75
106
  def setup_type_convertor_map
76
107
  super
77
108
  @type_convertor_map[Java::JavaSQL::Types::INTEGER] = @type_convertor_map[Java::JavaSQL::Types::BIGINT]
78
109
  @basic_type_convertor_map[Java::JavaSQL::Types::INTEGER] = @basic_type_convertor_map[Java::JavaSQL::Types::BIGINT]
79
- @type_convertor_map[Java::JavaSQL::Types::DATE] = lambda do |r, i|
110
+ x = @type_convertor_map[Java::JavaSQL::Types::DATE] = Object.new
111
+ def x.call(r, i)
80
112
  if v = r.getString(i)
81
113
  Sequel.string_to_date(v)
82
114
  end
83
115
  end
84
- @type_convertor_map[Java::JavaSQL::Types::BLOB] = lambda do |r, i|
116
+ x = @type_convertor_map[Java::JavaSQL::Types::BLOB] = Object.new
117
+ def x.call(r, i)
85
118
  if v = r.getBytes(i)
86
119
  Sequel::SQL::Blob.new(String.from_java_bytes(v))
87
120
  elsif !r.wasNull
@@ -89,6 +122,11 @@ module Sequel
89
122
  end
90
123
  end
91
124
  end
125
+
126
+ # The result code for the exception, if the jdbc driver supports result codes for exceptions.
127
+ def sqlite_error_code(exception)
128
+ exception.resultCode.code if exception.respond_to?(:resultCode)
129
+ end
92
130
  end
93
131
  end
94
132
  end
@@ -1,5 +1,7 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel::JDBC.load_driver('com.microsoft.sqlserver.jdbc.SQLServerDriver')
2
- Sequel.require 'adapters/jdbc/mssql'
4
+ require_relative 'mssql'
3
5
 
4
6
  module Sequel
5
7
  module JDBC
@@ -12,14 +14,39 @@ module Sequel
12
14
  end
13
15
  end
14
16
 
15
- # Database and Dataset instance methods for SQLServer specific
16
- # support via JDBC.
17
17
  module SQLServer
18
- # Database instance methods for SQLServer databases accessed via JDBC.
18
+ MSSQL_RUBY_TIME = Object.new
19
+ def MSSQL_RUBY_TIME.call(r, i)
20
+ # MSSQL-Server TIME should be fetched as string to keep the precision intact, see:
21
+ # https://docs.microsoft.com/en-us/sql/t-sql/data-types/time-transact-sql#a-namebackwardcompatibilityfordownlevelclientsa-backward-compatibility-for-down-level-clients
22
+ if v = r.getString(i)
23
+ Sequel.string_to_time("#{v}")
24
+ end
25
+ end
26
+
19
27
  module DatabaseMethods
20
- extend Sequel::Database::ResetIdentifierMangling
21
28
  include Sequel::JDBC::MSSQL::DatabaseMethods
22
29
 
30
+ def setup_type_convertor_map
31
+ super
32
+ map = @type_convertor_map
33
+ map[Java::JavaSQL::Types::TIME] = MSSQL_RUBY_TIME
34
+
35
+ # Work around constant lazy loading in some drivers
36
+ begin
37
+ dto = Java::MicrosoftSql::Types::DATETIMEOFFSET
38
+ rescue NameError
39
+ end
40
+
41
+ if dto
42
+ map[dto] = lambda do |r, i|
43
+ if v = r.getDateTimeOffset(i)
44
+ to_application_timestamp(v.to_s)
45
+ end
46
+ end
47
+ end
48
+ end
49
+
23
50
  # Work around a bug in SQL Server JDBC Driver 3.0, where the metadata
24
51
  # for the getColumns result set specifies an incorrect type for the
25
52
  # IS_AUTOINCREMENT column. The column is a string, but the type is
@@ -46,12 +73,12 @@ module Sequel
46
73
  end
47
74
  end
48
75
 
49
- def metadata_dataset
50
- super.extend(MetadataDatasetMethods)
51
- end
52
-
53
76
  private
54
77
 
78
+ def _metadata_dataset
79
+ super.with_extend(MetadataDatasetMethods)
80
+ end
81
+
55
82
  def disconnect_error?(exception, opts)
56
83
  super || (exception.message =~ /connection is closed/)
57
84
  end
@@ -1,12 +1,12 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module JDBC
3
5
  module Transactions
4
- TRANSACTION_BEGIN = 'Transaction.begin'.freeze
5
- TRANSACTION_COMMIT = 'Transaction.commit'.freeze
6
- TRANSACTION_RELEASE_SP = 'Transaction.release_savepoint'.freeze
7
- TRANSACTION_ROLLBACK = 'Transaction.rollback'.freeze
8
- TRANSACTION_ROLLBACK_SP = 'Transaction.rollback_savepoint'.freeze
9
- TRANSACTION_SAVEPOINT= 'Transaction.savepoint'.freeze
6
+ def freeze
7
+ supports_savepoints?
8
+ super
9
+ end
10
10
 
11
11
  # Check the JDBC DatabaseMetaData for savepoint support
12
12
  def supports_savepoints?
@@ -25,7 +25,7 @@ module Sequel
25
25
  JDBC_TRANSACTION_ISOLATION_LEVELS = {:uncommitted=>JavaSQL::Connection::TRANSACTION_READ_UNCOMMITTED,
26
26
  :committed=>JavaSQL::Connection::TRANSACTION_READ_COMMITTED,
27
27
  :repeatable=>JavaSQL::Connection::TRANSACTION_REPEATABLE_READ,
28
- :serializable=>JavaSQL::Connection::TRANSACTION_SERIALIZABLE}
28
+ :serializable=>JavaSQL::Connection::TRANSACTION_SERIALIZABLE}.freeze
29
29
 
30
30
  # Set the transaction isolation level on the given connection using
31
31
  # the JDBC API.
@@ -34,7 +34,7 @@ module Sequel
34
34
  if (jdbc_level = JDBC_TRANSACTION_ISOLATION_LEVELS[level]) &&
35
35
  conn.getMetaData.supportsTransactionIsolationLevel(jdbc_level)
36
36
  _trans(conn)[:original_jdbc_isolation_level] = conn.getTransactionIsolation
37
- log_yield("Transaction.isolation_level = #{level}"){conn.setTransactionIsolation(jdbc_level)}
37
+ log_connection_yield("Transaction.isolation_level = #{level}", conn){conn.setTransactionIsolation(jdbc_level)}
38
38
  end
39
39
  end
40
40
 
@@ -43,47 +43,38 @@ module Sequel
43
43
  true
44
44
  end
45
45
 
46
+ # JDBC savepoint object for the current savepoint for the connection.
47
+ def savepoint_obj(conn)
48
+ _trans(conn)[:savepoints][-1][:obj]
49
+ end
50
+
46
51
  # Use JDBC connection's setAutoCommit to false to start transactions
47
52
  def begin_transaction(conn, opts=OPTS)
48
- if supports_savepoints?
49
- th = _trans(conn)
50
- if sps = th[:savepoint_objs]
51
- sps << log_yield(TRANSACTION_SAVEPOINT){conn.set_savepoint}
52
- else
53
- log_yield(TRANSACTION_BEGIN){conn.setAutoCommit(false)}
54
- th[:savepoint_objs] = []
55
- set_transaction_isolation(conn, opts)
56
- end
53
+ if in_savepoint?(conn)
54
+ _trans(conn)[:savepoints][-1][:obj] = log_connection_yield('Transaction.savepoint', conn){conn.set_savepoint}
57
55
  else
58
- log_yield(TRANSACTION_BEGIN){conn.setAutoCommit(false)}
56
+ log_connection_yield('Transaction.begin', conn){conn.setAutoCommit(false)}
59
57
  set_transaction_isolation(conn, opts)
60
58
  end
61
59
  end
62
60
 
63
61
  # Use JDBC connection's commit method to commit transactions
64
62
  def commit_transaction(conn, opts=OPTS)
65
- if supports_savepoints?
66
- sps = _trans(conn)[:savepoint_objs]
67
- if sps.empty?
68
- log_yield(TRANSACTION_COMMIT){conn.commit}
69
- elsif supports_releasing_savepoints?
70
- log_yield(TRANSACTION_RELEASE_SP){supports_releasing_savepoints? ? conn.release_savepoint(sps.last) : sps.last}
63
+ if in_savepoint?(conn)
64
+ if supports_releasing_savepoints?
65
+ log_connection_yield('Transaction.release_savepoint', conn){conn.release_savepoint(savepoint_obj(conn))}
71
66
  end
72
67
  else
73
- log_yield(TRANSACTION_COMMIT){conn.commit}
68
+ log_connection_yield('Transaction.commit', conn){conn.commit}
74
69
  end
75
70
  end
76
71
 
77
72
  # Use JDBC connection's setAutoCommit to true to enable non-transactional behavior
78
73
  def remove_transaction(conn, committed)
79
74
  if jdbc_level = _trans(conn)[:original_jdbc_isolation_level]
80
- conn.setTransactionIsolation(jdbc_level)
75
+ log_connection_yield("Transaction.restore_isolation_level", conn){conn.setTransactionIsolation(jdbc_level)}
81
76
  end
82
- if supports_savepoints?
83
- sps = _trans(conn)[:savepoint_objs]
84
- conn.setAutoCommit(true) if sps.empty?
85
- sps.pop
86
- else
77
+ unless in_savepoint?(conn)
87
78
  conn.setAutoCommit(true)
88
79
  end
89
80
  ensure
@@ -92,15 +83,10 @@ module Sequel
92
83
 
93
84
  # Use JDBC connection's rollback method to rollback transactions
94
85
  def rollback_transaction(conn, opts=OPTS)
95
- if supports_savepoints?
96
- sps = _trans(conn)[:savepoint_objs]
97
- if sps.empty?
98
- log_yield(TRANSACTION_ROLLBACK){conn.rollback}
99
- else
100
- log_yield(TRANSACTION_ROLLBACK_SP){conn.rollback(sps.last)}
101
- end
86
+ if in_savepoint?(conn)
87
+ log_connection_yield('Transaction.rollback_savepoint', conn){conn.rollback(savepoint_obj(conn))}
102
88
  else
103
- log_yield(TRANSACTION_ROLLBACK){conn.rollback}
89
+ log_connection_yield('Transaction.rollback', conn){conn.rollback}
104
90
  end
105
91
  end
106
92
  end
@@ -1,6 +1,9 @@
1
+ # frozen-string-literal: true
2
+
3
+ require_relative 'utils/unmodified_identifiers'
4
+
1
5
  module Sequel
2
6
  module Mock
3
- # Connection class for Sequel's mock adapter.
4
7
  class Connection
5
8
  # Sequel::Mock::Database object that created this connection
6
9
  attr_reader :db
@@ -26,66 +29,9 @@ module Sequel
26
29
  end
27
30
  end
28
31
 
29
- # Database class for Sequel's mock adapter.
30
32
  class Database < Sequel::Database
31
33
  set_adapter_scheme :mock
32
34
 
33
- # Map of database type names to module names, used for handling
34
- # mock adapters for specific database types.
35
- SHARED_ADAPTERS = {
36
- 'access'=>'Access',
37
- 'cubrid'=>'Cubrid',
38
- 'db2'=>'DB2',
39
- 'firebird'=>'Firebird',
40
- 'informix'=>'Informix',
41
- 'mssql'=>'MSSQL',
42
- 'mysql'=>'MySQL',
43
- 'oracle'=>'Oracle',
44
- 'postgres'=>'Postgres',
45
- 'sqlanywhere'=>'SqlAnywhere',
46
- 'sqlite'=>'SQLite'
47
- }
48
-
49
- # Procs to run for specific database types to get the mock adapter
50
- # to work with the shared adapter
51
- SHARED_ADAPTER_SETUP = {
52
- 'postgres' => lambda do |db|
53
- db.instance_eval do
54
- @server_version = 90400
55
- initialize_postgres_adapter
56
- end
57
- db.extend(Module.new do
58
- def bound_variable_arg(arg, conn)
59
- arg
60
- end
61
-
62
- def primary_key(table)
63
- :id
64
- end
65
- end)
66
- end,
67
- 'oracle' => lambda do |db|
68
- db.instance_eval do
69
- @primary_key_sequences = {}
70
- end
71
- end,
72
- 'mysql' => lambda do |db|
73
- db.instance_eval do
74
- @server_version = 50617
75
- end
76
- end,
77
- 'mssql' => lambda do |db|
78
- db.instance_eval do
79
- @server_version = 11000000
80
- end
81
- end,
82
- 'sqlite' => lambda do |db|
83
- db.instance_eval do
84
- @sqlite_version = 30804
85
- end
86
- end
87
- }
88
-
89
35
  # Set the autogenerated primary key integer
90
36
  # to be returned when running an insert query.
91
37
  # Argument types supported:
@@ -100,14 +46,22 @@ module Sequel
100
46
  # the value returned
101
47
  # Class :: Should be an Exception subclass, will create a new
102
48
  # instance an raise it wrapped in a DatabaseError.
103
- attr_writer :autoid
49
+ def autoid=(v)
50
+ @autoid = case v
51
+ when Integer
52
+ i = v - 1
53
+ proc{@mutex.synchronize{i+=1}}
54
+ else
55
+ v
56
+ end
57
+ end
104
58
 
105
59
  # Set the columns to set in the dataset when the dataset fetches
106
60
  # rows. Argument types supported:
107
61
  # nil :: Set no columns
108
- # Array of Symbols: Used for all datasets
109
- # Array (otherwise): First retrieval gets the first value in the
110
- # array, second gets the second value, etc.
62
+ # Array of Symbols :: Used for all datasets
63
+ # Array (otherwise) :: First retrieval gets the first value in the
64
+ # array, second gets the second value, etc.
111
65
  # Proc :: Called with the select SQL query, uses the value
112
66
  # returned, which should be an array of symbols
113
67
  attr_writer :columns
@@ -172,9 +126,11 @@ module Sequel
172
126
  # Return all stored SQL queries, and clear the cache
173
127
  # of SQL queries.
174
128
  def sqls
175
- s = @sqls.dup
176
- @sqls.clear
177
- s
129
+ @mutex.synchronize do
130
+ s = @sqls.dup
131
+ @sqls.clear
132
+ s
133
+ end
178
134
  end
179
135
 
180
136
  # Enable use of savepoints.
@@ -184,26 +140,12 @@ module Sequel
184
140
 
185
141
  private
186
142
 
187
- def _autoid(sql, v, ds=nil)
188
- case v
189
- when Integer
190
- if ds
191
- ds.autoid += 1 if ds.autoid.is_a?(Integer)
192
- else
193
- @autoid += 1
194
- end
195
- v
196
- else
197
- _nextres(v, sql, nil)
198
- end
199
- end
200
-
201
143
  def _execute(c, sql, opts=OPTS, &block)
202
144
  sql += " -- args: #{opts[:arguments].inspect}" if opts[:arguments]
203
145
  sql += " -- #{@opts[:append]}" if @opts[:append]
204
146
  sql += " -- #{c.server.is_a?(Symbol) ? c.server : c.server.inspect}" if c.server != :default
205
- log_info(sql) unless opts[:log] == false
206
- @sqls << sql
147
+ log_connection_yield(sql, c){} unless opts[:log] == false
148
+ @mutex.synchronize{@sqls << sql}
207
149
 
208
150
  ds = opts[:dataset]
209
151
  begin
@@ -214,8 +156,15 @@ module Sequel
214
156
  if meth == :numrows
215
157
  _numrows(sql, (ds.numrows if ds) || @numrows)
216
158
  else
217
- v = ds.autoid if ds
218
- _autoid(sql, v || @autoid, (ds if v))
159
+ if ds
160
+ @mutex.synchronize do
161
+ v = ds.autoid
162
+ if v.is_a?(Integer)
163
+ ds.send(:cache_set, :_autoid, v + 1)
164
+ end
165
+ v
166
+ end
167
+ end || _nextres(@autoid, sql, nil)
219
168
  end
220
169
  end
221
170
  rescue => e
@@ -231,7 +180,7 @@ module Sequel
231
180
  if f.all?{|h| h.is_a?(Hash)}
232
181
  f.each{|h| yield h.dup}
233
182
  else
234
- _fetch(sql, f.shift, &block)
183
+ _fetch(sql, @mutex.synchronize{f.shift}, &block)
235
184
  end
236
185
  when Proc
237
186
  h = f.call(sql)
@@ -244,7 +193,7 @@ module Sequel
244
193
  if f < Exception
245
194
  raise f
246
195
  else
247
- raise Error, "Invalid @autoid/@numrows attribute: #{v.inspect}"
196
+ raise Error, "Invalid @fetch attribute: #{v.inspect}"
248
197
  end
249
198
  when nil
250
199
  # nothing
@@ -258,7 +207,7 @@ module Sequel
258
207
  when Integer
259
208
  v
260
209
  when Array
261
- v.empty? ? default : _nextres(v.shift, sql, default)
210
+ v.empty? ? default : _nextres(@mutex.synchronize{v.shift}, sql, default)
262
211
  when Proc
263
212
  v.call(sql)
264
213
  when Class
@@ -288,18 +237,37 @@ module Sequel
288
237
  # :sqls :: The array to store the SQL queries in.
289
238
  def adapter_initialize
290
239
  opts = @opts
240
+ @mutex = Mutex.new
291
241
  @sqls = opts[:sqls] || []
292
- if mod_name = SHARED_ADAPTERS[opts[:host]]
293
- @shared_adapter = true
294
- require "sequel/adapters/shared/#{opts[:host]}"
295
- extend Sequel.const_get(mod_name)::DatabaseMethods
296
- extend_datasets Sequel.const_get(mod_name)::DatasetMethods
297
- if pr = SHARED_ADAPTER_SETUP[opts[:host]]
298
- pr.call(self)
242
+ @shared_adapter = false
243
+
244
+ case db_type = opts[:host]
245
+ when String, Symbol
246
+ db_type = db_type.to_sym
247
+ unless mod = Sequel.synchronize{SHARED_ADAPTER_MAP[db_type]}
248
+ begin
249
+ require "sequel/adapters/shared/#{db_type}"
250
+ rescue LoadError
251
+ else
252
+ mod = Sequel.synchronize{SHARED_ADAPTER_MAP[db_type]}
253
+ end
299
254
  end
300
- else
301
- @shared_adapter = false
255
+
256
+ if mod
257
+ @shared_adapter = true
258
+ extend(mod::DatabaseMethods)
259
+ extend_datasets(mod::DatasetMethods)
260
+ if mod.respond_to?(:mock_adapter_setup)
261
+ mod.mock_adapter_setup(self)
262
+ end
263
+ end
264
+ end
265
+
266
+ unless @shared_adapter
267
+ extend UnmodifiedIdentifiers::DatabaseMethods
268
+ extend_datasets UnmodifiedIdentifiers::DatasetMethods
302
269
  end
270
+
303
271
  self.autoid = opts[:autoid]
304
272
  self.columns = opts[:columns]
305
273
  self.fetch = opts[:fetch]
@@ -315,7 +283,7 @@ module Sequel
315
283
  if cs.all?{|c| c.is_a?(Symbol)}
316
284
  ds.columns(*cs)
317
285
  else
318
- columns(ds, sql, cs.shift)
286
+ columns(ds, sql, @mutex.synchronize{cs.shift})
319
287
  end
320
288
  end
321
289
  when Proc
@@ -327,16 +295,12 @@ module Sequel
327
295
  end
328
296
  end
329
297
 
330
- def quote_identifiers_default
331
- shared_adapter? ? super : false
298
+ def dataset_class_default
299
+ Dataset
332
300
  end
333
301
 
334
- def identifier_input_method_default
335
- shared_adapter? ? super : nil
336
- end
337
-
338
- def identifier_output_method_default
339
- shared_adapter? ? super : nil
302
+ def quote_identifiers_default
303
+ shared_adapter? ? super : false
340
304
  end
341
305
 
342
306
  def shared_adapter?
@@ -345,16 +309,20 @@ module Sequel
345
309
  end
346
310
 
347
311
  class Dataset < Sequel::Dataset
348
- Database::DatasetClass = self
349
-
350
- # Override the databases's autoid setting for this dataset
351
- attr_accessor :autoid
312
+ # The autoid setting for this dataset, if it has been overridden
313
+ def autoid
314
+ cache_get(:_autoid) || @opts[:autoid]
315
+ end
352
316
 
353
- # Override the databases's fetch setting for this dataset
354
- attr_accessor :_fetch
317
+ # The fetch setting for this dataset, if it has been overridden
318
+ def _fetch
319
+ cache_get(:_fetch) || @opts[:fetch]
320
+ end
355
321
 
356
- # Override the databases's numrows setting for this dataset
357
- attr_accessor :numrows
322
+ # The numrows setting for this dataset, if it has been overridden
323
+ def numrows
324
+ cache_get(:_numrows) || @opts[:numrows]
325
+ end
358
326
 
359
327
  # If arguments are provided, use them to set the columns
360
328
  # for this dataset and return self. Otherwise, use the
@@ -363,7 +331,7 @@ module Sequel
363
331
  if cs.empty?
364
332
  super
365
333
  else
366
- @columns = cs
334
+ self.columns = cs
367
335
  self
368
336
  end
369
337
  end
@@ -372,6 +340,25 @@ module Sequel
372
340
  execute(sql, &block)
373
341
  end
374
342
 
343
+ def quote_identifiers?
344
+ @opts.fetch(:quote_identifiers, db.send(:quote_identifiers_default))
345
+ end
346
+
347
+ # Return cloned dataset with the autoid setting modified
348
+ def with_autoid(autoid)
349
+ clone(:autoid=>autoid)
350
+ end
351
+
352
+ # Return cloned dataset with the fetch setting modified
353
+ def with_fetch(fetch)
354
+ clone(:fetch=>fetch)
355
+ end
356
+
357
+ # Return cloned dataset with the numrows setting modified
358
+ def with_numrows(numrows)
359
+ clone(:numrows=>numrows)
360
+ end
361
+
375
362
  private
376
363
 
377
364
  def execute(sql, opts=OPTS, &block)
@@ -385,6 +372,10 @@ module Sequel
385
372
  def execute_insert(sql, opts=OPTS, &block)
386
373
  super(sql, opts.merge(:dataset=>self), &block)
387
374
  end
375
+
376
+ def non_sql_option?(key)
377
+ super || key == :fetch || key == :numrows || key == :autoid
378
+ end
388
379
  end
389
380
  end
390
381
  end