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,36 +1,35 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'java'
2
- Sequel.require 'adapters/utils/stored_procedures'
4
+ require_relative 'utils/stored_procedures'
3
5
 
4
6
  module Sequel
5
- # Houses Sequel's JDBC support when running on JRuby.
6
7
  module JDBC
7
- # Make it accesing the java.lang hierarchy more ruby friendly.
8
- module JavaLang
9
- include_package 'java.lang'
10
- end
11
-
12
8
  # Make it accesing the java.sql hierarchy more ruby friendly.
13
9
  module JavaSQL
14
10
  include_package 'java.sql'
15
11
  end
16
12
 
17
- # Make it accesing the javax.naming hierarchy more ruby friendly.
18
- module JavaxNaming
19
- include_package 'javax.naming'
20
- end
21
-
22
13
  # Used to identify a jndi connection and to extract the jndi
23
14
  # resource name.
24
15
  JNDI_URI_REGEXP = /\Ajdbc:jndi:(.+)/
25
16
 
26
- # The types to check for 0 scale to transform :decimal types
27
- # to :integer.
28
- DECIMAL_TYPE_RE = /number|numeric|decimal/io
29
-
30
17
  # Contains procs keyed on subadapter type that extend the
31
18
  # given database object so it supports the correct database type.
32
19
  DATABASE_SETUP = {}
20
+
21
+ # Create custom NativeException alias for nicer access, and also so that
22
+ # JRuby 9.2+ so it doesn't use the deprecated ::NativeException
23
+ NativeException = java.lang.Exception
33
24
 
25
+ # Default database error classes
26
+ DATABASE_ERROR_CLASSES = [NativeException]
27
+ if JRUBY_VERSION < '9.2'
28
+ # On JRuby <9.2, still include ::NativeException, as it is still needed in some cases
29
+ DATABASE_ERROR_CLASSES << ::NativeException
30
+ end
31
+ DATABASE_ERROR_CLASSES.freeze
32
+
34
33
  # Allow loading the necessary JDBC support via a gem.
35
34
  def self.load_gem(name)
36
35
  begin
@@ -58,50 +57,62 @@ module Sequel
58
57
  end
59
58
 
60
59
  class TypeConvertor
60
+ CONVERTORS = convertors = {}
61
61
  %w'Boolean Float Double Int Long Short'.each do |meth|
62
- class_eval("def #{meth}(r, i) v = r.get#{meth}(i); v unless r.wasNull end", __FILE__, __LINE__)
62
+ x = convertors[meth.to_sym] = Object.new
63
+ class_eval("def x.call(r, i) v = r.get#{meth}(i); v unless r.wasNull end", __FILE__, __LINE__)
63
64
  end
64
65
  %w'Object Array String Time Date Timestamp BigDecimal Blob Bytes Clob'.each do |meth|
65
- class_eval("def #{meth}(r, i) r.get#{meth}(i) end", __FILE__, __LINE__)
66
+ x = convertors[meth.to_sym] = Object.new
67
+ class_eval("def x.call(r, i) r.get#{meth}(i) end", __FILE__, __LINE__)
66
68
  end
67
- def RubyTime(r, i)
69
+ x = convertors[:RubyTime] = Object.new
70
+ def x.call(r, i)
68
71
  if v = r.getTime(i)
69
72
  Sequel.string_to_time("#{v.to_string}.#{sprintf('%03i', v.getTime.divmod(1000).last)}")
70
73
  end
71
74
  end
72
- def RubyDate(r, i)
75
+ x = convertors[:RubyDate] = Object.new
76
+ def x.call(r, i)
73
77
  if v = r.getDate(i)
74
78
  Date.civil(v.getYear + 1900, v.getMonth + 1, v.getDate)
75
79
  end
76
80
  end
77
- def RubyTimestamp(r, i)
81
+ x = convertors[:RubyTimestamp] = Object.new
82
+ def x.call(r, i)
78
83
  if v = r.getTimestamp(i)
79
84
  Sequel.database_to_application_timestamp([v.getYear + 1900, v.getMonth + 1, v.getDate, v.getHours, v.getMinutes, v.getSeconds, v.getNanos])
80
85
  end
81
86
  end
82
- def RubyBigDecimal(r, i)
87
+ x = convertors[:RubyBigDecimal] = Object.new
88
+ def x.call(r, i)
83
89
  if v = r.getBigDecimal(i)
84
- BigDecimal.new(v.to_string)
90
+ ::Kernel::BigDecimal(v.to_string)
85
91
  end
86
92
  end
87
- def RubyBlob(r, i)
93
+ x = convertors[:RubyBlob] = Object.new
94
+ def x.call(r, i)
88
95
  if v = r.getBytes(i)
89
96
  Sequel::SQL::Blob.new(String.from_java_bytes(v))
90
97
  end
91
98
  end
92
- def RubyClob(r, i)
99
+ x = convertors[:RubyClob] = Object.new
100
+ def x.call(r, i)
93
101
  if v = r.getClob(i)
94
102
  v.getSubString(1, v.length)
95
103
  end
96
104
  end
105
+ x = convertors[:RubyArray] = Object.new
106
+ def x.call(r, i)
107
+ if v = r.getArray(i)
108
+ v.array.to_ary
109
+ end
110
+ end
97
111
 
98
- INSTANCE = new
99
- o = INSTANCE
100
- MAP = Hash.new(o.method(:Object))
112
+ MAP = Hash.new(convertors[:Object])
101
113
  types = Java::JavaSQL::Types
102
114
 
103
115
  {
104
- :ARRAY => :Array,
105
116
  :BOOLEAN => :Boolean,
106
117
  :CHAR => :String,
107
118
  :DOUBLE => :Double,
@@ -115,11 +126,12 @@ module Sequel
115
126
  :TINYINT => :Short,
116
127
  :VARCHAR => :String,
117
128
  }.each do |type, meth|
118
- MAP[types.const_get(type)] = o.method(meth)
129
+ MAP[types.const_get(type)] = convertors[meth]
119
130
  end
120
131
  BASIC_MAP = MAP.dup
121
132
 
122
133
  {
134
+ :ARRAY => :Array,
123
135
  :BINARY => :Blob,
124
136
  :BLOB => :Blob,
125
137
  :CLOB => :Clob,
@@ -132,19 +144,16 @@ module Sequel
132
144
  :TIMESTAMP => :Timestamp,
133
145
  :VARBINARY => :Blob,
134
146
  }.each do |type, meth|
135
- BASIC_MAP[types.const_get(type)] = o.method(meth)
136
- MAP[types.const_get(type)] = o.method(:"Ruby#{meth}")
147
+ BASIC_MAP[types.const_get(type)] = convertors[meth]
148
+ MAP[types.const_get(type)] = convertors[:"Ruby#{meth}"]
137
149
  end
150
+ MAP.freeze
151
+ BASIC_MAP.freeze
138
152
  end
139
153
 
140
- # JDBC Databases offer a fairly uniform interface that does not change
141
- # much based on the sub adapter.
142
154
  class Database < Sequel::Database
143
155
  set_adapter_scheme :jdbc
144
156
 
145
- # The type of database we are connecting to
146
- attr_reader :database_type
147
-
148
157
  # The Java database driver we are using (should be a Java class)
149
158
  attr_reader :driver
150
159
 
@@ -176,17 +185,14 @@ module Sequel
176
185
 
177
186
  begin
178
187
  if block_given?
179
- yield log_yield(sql){cps.executeQuery}
188
+ yield log_connection_yield(sql, conn){cps.executeQuery}
180
189
  else
181
- case opts[:type]
182
- when :insert
183
- log_yield(sql){cps.executeUpdate}
190
+ log_connection_yield(sql, conn){cps.executeUpdate}
191
+ if opts[:type] == :insert
184
192
  last_insert_id(conn, opts)
185
- else
186
- log_yield(sql){cps.executeUpdate}
187
193
  end
188
194
  end
189
- rescue NativeException, JavaSQL::SQLException => e
195
+ rescue *DATABASE_ERROR_CLASSES => e
190
196
  raise_error(e)
191
197
  ensure
192
198
  cps.close
@@ -194,7 +200,8 @@ module Sequel
194
200
  end
195
201
  end
196
202
 
197
- # Connect to the database using JavaSQL::DriverManager.getConnection.
203
+ # Connect to the database using JavaSQL::DriverManager.getConnection, and falling back
204
+ # to driver.new.connect if the driver is known.
198
205
  def connect(server)
199
206
  opts = server_opts(server)
200
207
  conn = if jndi?
@@ -206,7 +213,7 @@ module Sequel
206
213
  JavaSQL::DriverManager.setLoginTimeout(opts[:login_timeout]) if opts[:login_timeout]
207
214
  raise StandardError, "skipping regular connection" if opts[:jdbc_properties]
208
215
  JavaSQL::DriverManager.getConnection(*args)
209
- rescue JavaSQL::SQLException, NativeException, StandardError => e
216
+ rescue StandardError, *DATABASE_ERROR_CLASSES => e
210
217
  raise e unless driver
211
218
  # If the DriverManager can't get the connection - use the connect
212
219
  # method of the driver. (This happens under Tomcat for instance)
@@ -220,15 +227,15 @@ module Sequel
220
227
  c = driver.new.connect(args[0], props)
221
228
  raise(Sequel::DatabaseError, 'driver.new.connect returned nil: probably bad JDBC connection string') unless c
222
229
  c
223
- rescue JavaSQL::SQLException, NativeException, StandardError => e2
224
- unless e2.message == e.message
225
- e2.message << "\n#{e.class.name}: #{e.message}"
230
+ rescue StandardError, *DATABASE_ERROR_CLASSES => e2
231
+ if e2.respond_to?(:message=) && e2.message != e.message
232
+ e2.message = "#{e2.message}\n#{e.class.name}: #{e.message}"
226
233
  end
227
234
  raise e2
228
235
  end
229
236
  end
230
237
  end
231
- setup_connection(conn)
238
+ setup_connection_with_opts(conn, opts)
232
239
  end
233
240
 
234
241
  # Close given adapter connections, and delete any related prepared statements.
@@ -237,8 +244,6 @@ module Sequel
237
244
  c.close
238
245
  end
239
246
 
240
- # Execute the given SQL. If a block is given, if should be a SELECT
241
- # statement or something else that returns rows.
242
247
  def execute(sql, opts=OPTS, &block)
243
248
  return call_sproc(sql, opts, &block) if opts[:sproc]
244
249
  return execute_prepared_statement(sql, opts, &block) if [Symbol, Dataset].any?{|c| sql.is_a?(c)}
@@ -248,16 +253,18 @@ module Sequel
248
253
  if size = fetch_size
249
254
  stmt.setFetchSize(size)
250
255
  end
251
- yield log_yield(sql){stmt.executeQuery(sql)}
256
+ yield log_connection_yield(sql, conn){stmt.executeQuery(sql)}
252
257
  else
253
258
  case opts[:type]
254
259
  when :ddl
255
- log_yield(sql){stmt.execute(sql)}
260
+ log_connection_yield(sql, conn){stmt.execute(sql)}
256
261
  when :insert
257
- log_yield(sql){execute_statement_insert(stmt, sql)}
258
- last_insert_id(conn, Hash[opts].merge!(:stmt=>stmt))
262
+ log_connection_yield(sql, conn){execute_statement_insert(stmt, sql)}
263
+ opts = Hash[opts]
264
+ opts[:stmt] = stmt
265
+ last_insert_id(conn, opts)
259
266
  else
260
- log_yield(sql){stmt.executeUpdate(sql)}
267
+ log_connection_yield(sql, conn){stmt.executeUpdate(sql)}
261
268
  end
262
269
  end
263
270
  end
@@ -265,22 +272,24 @@ module Sequel
265
272
  end
266
273
  alias execute_dui execute
267
274
 
268
- # Execute the given DDL SQL, which should not return any
269
- # values or rows.
270
275
  def execute_ddl(sql, opts=OPTS)
271
276
  opts = Hash[opts]
272
277
  opts[:type] = :ddl
273
278
  execute(sql, opts)
274
279
  end
275
280
 
276
- # Execute the given INSERT SQL, returning the last inserted
277
- # row id.
278
281
  def execute_insert(sql, opts=OPTS)
279
282
  opts = Hash[opts]
280
283
  opts[:type] = :insert
281
284
  execute(sql, opts)
282
285
  end
283
286
 
287
+ def freeze
288
+ @type_convertor_map.freeze
289
+ @basic_type_convertor_map.freeze
290
+ super
291
+ end
292
+
284
293
  # Use the JDBC metadata to get a list of foreign keys for the table.
285
294
  def foreign_key_list(table, opts=OPTS)
286
295
  m = output_identifier_meth
@@ -372,7 +381,7 @@ module Sequel
372
381
  end
373
382
 
374
383
  def database_error_classes
375
- [NativeException]
384
+ DATABASE_ERROR_CLASSES
376
385
  end
377
386
 
378
387
  def database_exception_sqlstate(exception, opts)
@@ -390,6 +399,10 @@ module Sequel
390
399
  true
391
400
  end
392
401
 
402
+ def dataset_class_default
403
+ Dataset
404
+ end
405
+
393
406
  # Raise a disconnect error if the SQL state of the cause of the exception indicates so.
394
407
  def disconnect_error?(exception, opts)
395
408
  cause = exception.respond_to?(:cause) ? exception.cause : exception
@@ -416,8 +429,12 @@ module Sequel
416
429
  if name and cps = cps_sync(conn){|cpsh| cpsh[name]} and cps[0] == sql
417
430
  cps = cps[1]
418
431
  else
419
- log_yield("CLOSE #{name}"){cps[1].close} if cps
420
- cps = log_yield("PREPARE#{" #{name}:" if name} #{sql}"){prepare_jdbc_statement(conn, sql, opts)}
432
+ log_connection_yield("CLOSE #{name}", conn){cps[1].close} if cps
433
+ if name
434
+ opts = Hash[opts]
435
+ opts[:name] = name
436
+ end
437
+ cps = log_connection_yield("PREPARE#{" #{name}:" if name} #{sql}", conn){prepare_jdbc_statement(conn, sql, opts)}
421
438
  if size = fetch_size
422
439
  cps.setFetchSize(size)
423
440
  end
@@ -427,25 +444,28 @@ module Sequel
427
444
  args.each{|arg| set_ps_arg(cps, arg, i+=1)}
428
445
  msg = "EXECUTE#{" #{name}" if name}"
429
446
  if ps.log_sql
430
- msg << " ("
447
+ msg += " ("
431
448
  msg << sql
432
449
  msg << ")"
433
450
  end
434
451
  begin
435
452
  if block_given?
436
- yield log_yield(msg, args){cps.executeQuery}
453
+ yield log_connection_yield(msg, conn, args){cps.executeQuery}
437
454
  else
438
455
  case opts[:type]
439
456
  when :ddl
440
- log_yield(msg, args){cps.execute}
457
+ log_connection_yield(msg, conn, args){cps.execute}
441
458
  when :insert
442
- log_yield(msg, args){execute_prepared_statement_insert(cps)}
443
- last_insert_id(conn, Hash[opts].merge!(:prepared=>true, :stmt=>cps))
459
+ log_connection_yield(msg, conn, args){execute_prepared_statement_insert(cps)}
460
+ opts = Hash[opts]
461
+ opts[:prepared] = true
462
+ opts[:stmt] = cps
463
+ last_insert_id(conn, opts)
444
464
  else
445
- log_yield(msg, args){cps.executeUpdate}
465
+ log_connection_yield(msg, conn, args){cps.executeUpdate}
446
466
  end
447
467
  end
448
- rescue NativeException, JavaSQL::SQLException => e
468
+ rescue *DATABASE_ERROR_CLASSES => e
449
469
  raise_error(e)
450
470
  ensure
451
471
  cps.close unless name
@@ -472,7 +492,7 @@ module Sequel
472
492
  # Gets the connection from JNDI.
473
493
  def get_connection_from_jndi
474
494
  jndi_name = JNDI_URI_REGEXP.match(uri)[1]
475
- JavaxNaming::InitialContext.new.lookup(jndi_name).connection
495
+ javax.naming.InitialContext.new.lookup(jndi_name).connection
476
496
  end
477
497
 
478
498
  # Gets the JDBC connection uri from the JNDI resource.
@@ -502,27 +522,24 @@ module Sequel
502
522
  # Support DateTime objects used in bound variables
503
523
  def java_sql_datetime(datetime)
504
524
  ts = java.sql.Timestamp.new(Time.local(datetime.year, datetime.month, datetime.day, datetime.hour, datetime.min, datetime.sec).to_i * 1000)
505
- ts.setNanos((datetime.sec_fraction * (RUBY_VERSION >= '1.9.0' ? 1000000000 : 86400000000000)).to_i)
525
+ ts.setNanos((datetime.sec_fraction * 1000000000).to_i)
506
526
  ts
507
527
  end
508
528
 
509
529
  # Support fractional seconds for Time objects used in bound variables
510
530
  def java_sql_timestamp(time)
511
531
  ts = java.sql.Timestamp.new(time.to_i * 1000)
512
- # Work around jruby 1.6 ruby 1.9 mode bug
513
- ts.setNanos((RUBY_VERSION >= '1.9.0' && time.nsec != 0) ? time.nsec : time.usec * 1000)
532
+ ts.setNanos(time.nsec)
514
533
  ts
515
534
  end
516
535
 
517
- # Log the given SQL and then execute it on the connection, used by
518
- # the transaction code.
519
536
  def log_connection_execute(conn, sql)
520
- statement(conn){|s| log_yield(sql){s.execute(sql)}}
537
+ statement(conn){|s| log_connection_yield(sql, conn){s.execute(sql)}}
521
538
  end
522
539
 
523
540
  # By default, there is no support for determining the last inserted
524
541
  # id, so return nil. This method should be overridden in
525
- # sub adapters.
542
+ # subadapters.
526
543
  def last_insert_id(conn, opts)
527
544
  nil
528
545
  end
@@ -530,7 +547,7 @@ module Sequel
530
547
  # Yield the metadata for this database
531
548
  def metadata(*args, &block)
532
549
  synchronize do |c|
533
- result = c.getMetaData.send(*args)
550
+ result = c.getMetaData.public_send(*args)
534
551
  begin
535
552
  metadata_dataset.send(:process_result_set, result, &block)
536
553
  ensure
@@ -592,13 +609,29 @@ module Sequel
592
609
  cps.setString(i, nil)
593
610
  end
594
611
 
595
- # Return the connection. Used to do configuration on the
596
- # connection object before adding it to the connection pool.
612
+ # Return the connection. Can be overridden in subadapters for database specific setup.
597
613
  def setup_connection(conn)
598
614
  conn
599
615
  end
616
+
617
+ # Setup the connection using the given connection options. Return the connection. Can be overridden in subadapters for database specific setup.
618
+ def setup_connection_with_opts(conn, opts)
619
+ setup_connection(conn)
620
+ end
621
+
622
+ def schema_column_set_db_type(schema)
623
+ case schema[:type]
624
+ when :string
625
+ if schema[:db_type] =~ /\A(character( varying)?|n?(var)?char2?)\z/io && schema[:column_size] > 0
626
+ schema[:db_type] += "(#{schema[:column_size]})"
627
+ end
628
+ when :decimal
629
+ if schema[:db_type] =~ /\A(decimal|numeric)\z/io && schema[:column_size] > 0 && schema[:scale] >= 0
630
+ schema[:db_type] += "(#{schema[:column_size]}, #{schema[:scale]})"
631
+ end
632
+ end
633
+ end
600
634
 
601
- # Parse the table schema for the given table.
602
635
  def schema_parse_table(table, opts=OPTS)
603
636
  m = output_identifier_meth(opts[:dataset])
604
637
  schema, table = metadata_schema_and_table(table, opts)
@@ -617,15 +650,17 @@ module Sequel
617
650
  :allow_null=>(h[:nullable] != 0),
618
651
  :primary_key=>pks.include?(h[:column_name]),
619
652
  :column_size=>h[:column_size],
620
- :scale=>h[:decimal_digits]
653
+ :scale=>h[:decimal_digits],
654
+ :remarks=>h[:remarks]
621
655
  }
622
656
  if s[:primary_key]
623
657
  s[:auto_increment] = h[:is_autoincrement] == "YES"
624
658
  end
625
659
  s[:max_length] = s[:column_size] if s[:type] == :string
626
- if s[:db_type] =~ DECIMAL_TYPE_RE && s[:scale] == 0
660
+ if s[:db_type] =~ /number|numeric|decimal/i && s[:scale] == 0
627
661
  s[:type] = :integer
628
662
  end
663
+ schema_column_set_db_type(s)
629
664
  schemas << h[:table_schem] unless schemas.include?(h[:table_schem])
630
665
  ts << [m.call(h[:column_name]), s]
631
666
  end
@@ -635,8 +670,7 @@ module Sequel
635
670
  ts
636
671
  end
637
672
 
638
- # Whether schema_parse_table should skip the given row when
639
- # parsing the schema.
673
+ # Skip tables in the INFORMATION_SCHEMA when parsing columns.
640
674
  def schema_parse_table_skip?(h, schema)
641
675
  h[:table_schem] == 'INFORMATION_SCHEMA'
642
676
  end
@@ -646,29 +680,27 @@ module Sequel
646
680
  end
647
681
 
648
682
  # Called before loading subadapter-specific code, necessary so that subadapter initialization code
649
- # that runs queries works correctly. This cannot be overriding in subadapters,
683
+ # that runs queries works correctly. This cannot be overridden in subadapters.
650
684
  def setup_type_convertor_map_early
651
- @type_convertor_map = TypeConvertor::MAP.merge(Java::JavaSQL::Types::TIMESTAMP=>timestamp_convertor)
652
- @basic_type_convertor_map = TypeConvertor::BASIC_MAP
685
+ @type_convertor_map = TypeConvertor::MAP.merge(Java::JavaSQL::Types::TIMESTAMP=>method(:timestamp_convert))
686
+ @basic_type_convertor_map = TypeConvertor::BASIC_MAP.dup
653
687
  end
654
688
 
655
689
  # Yield a new statement object, and ensure that it is closed before returning.
656
690
  def statement(conn)
657
691
  stmt = conn.createStatement
658
692
  yield stmt
659
- rescue NativeException, JavaSQL::SQLException => e
693
+ rescue *DATABASE_ERROR_CLASSES => e
660
694
  raise_error(e)
661
695
  ensure
662
696
  stmt.close if stmt
663
697
  end
664
698
 
665
- # A conversion proc for timestamp columns. This is used to make sure timestamps are converted using the
699
+ # A conversion method for timestamp columns. This is used to make sure timestamps are converted using the
666
700
  # correct timezone.
667
- def timestamp_convertor
668
- lambda do |r, i|
669
- if v = r.getTimestamp(i)
670
- to_application_timestamp([v.getYear + 1900, v.getMonth + 1, v.getDate, v.getHours, v.getMinutes, v.getSeconds, v.getNanos])
671
- end
701
+ def timestamp_convert(r, i)
702
+ if v = r.getTimestamp(i)
703
+ to_application_timestamp([v.getYear + 1900, v.getMonth + 1, v.getDate, v.getHours, v.getMinutes, v.getSeconds, v.getNanos])
672
704
  end
673
705
  end
674
706
  end
@@ -676,15 +708,12 @@ module Sequel
676
708
  class Dataset < Sequel::Dataset
677
709
  include StoredProcedures
678
710
 
679
- Database::DatasetClass = self
680
-
681
711
  PreparedStatementMethods = prepared_statements_module(
682
712
  "sql = self; opts = Hash[opts]; opts[:arguments] = bind_arguments",
683
713
  Sequel::Dataset::UnnumberedArgumentMapper,
684
714
  %w"execute execute_dui") do
685
715
  private
686
716
 
687
- # Same as execute, explicit due to intricacies of alias and super.
688
717
  def execute_insert(sql, opts=OPTS)
689
718
  sql = self
690
719
  opts = Hash[opts]
@@ -695,61 +724,47 @@ module Sequel
695
724
  end
696
725
 
697
726
  StoredProcedureMethods = prepared_statements_module(
698
- "sql = @sproc_name; opts = Hash[opts]; opts[:args] = @sproc_args; opts[:sproc] = true",
727
+ "sql = @opts[:sproc_name]; opts = Hash[opts]; opts[:args] = @opts[:sproc_args]; opts[:sproc] = true",
699
728
  Sequel::Dataset::StoredProcedureMethods,
700
729
  %w"execute execute_dui") do
701
730
  private
702
731
 
703
- # Same as execute, explicit due to intricacies of alias and super.
704
732
  def execute_insert(sql, opts=OPTS)
705
- sql = @sproc_name
733
+ sql = @opts[:sproc_name]
706
734
  opts = Hash[opts]
707
- opts[:args] = @sproc_args
735
+ opts[:args] = @opts[:sproc_args]
708
736
  opts[:sproc] = true
709
737
  opts[:type] = :insert
710
738
  super
711
739
  end
712
740
  end
713
741
 
714
- # Whether to convert some Java types to ruby types when retrieving rows.
715
- # Uses the database's setting by default, can be set to false to roughly
716
- # double performance when fetching rows.
717
- attr_accessor :convert_types
718
-
719
- # Correctly return rows from the database and return them as hashes.
720
742
  def fetch_rows(sql, &block)
721
743
  execute(sql){|result| process_result_set(result, &block)}
722
744
  self
723
745
  end
724
746
 
725
- # Create a named prepared statement that is stored in the
726
- # database (and connection) for reuse.
727
- def prepare(type, name=nil, *values)
728
- ps = to_prepared_statement(type, values)
729
- ps.extend(PreparedStatementMethods)
730
- if name
731
- ps.prepared_statement_name = name
732
- db.set_prepared_statement(name, ps)
733
- end
734
- ps
735
- end
736
-
737
- # Set the fetch size on JDBC ResultSets created from this dataset.
747
+ # Set the fetch size on JDBC ResultSets created from the returned dataset.
738
748
  def with_fetch_size(size)
739
749
  clone(:fetch_size=>size)
740
750
  end
751
+
752
+ # Set whether to convert Java types to ruby types in the returned dataset.
753
+ def with_convert_types(v)
754
+ clone(:convert_types=>v)
755
+ end
741
756
 
742
757
  private
743
758
 
744
759
  # Whether we should convert Java types to ruby types for this dataset.
745
760
  def convert_types?
746
- ct = @convert_types
761
+ ct = @opts[:convert_types]
747
762
  ct.nil? ? db.convert_types : ct
748
763
  end
749
764
 
750
765
  # Extend the dataset with the JDBC stored procedure methods.
751
766
  def prepare_extend_sproc(ds)
752
- ds.extend(StoredProcedureMethods)
767
+ ds.with_extend(StoredProcedureMethods)
753
768
  end
754
769
 
755
770
  # The type conversion proc to use for the given column number i,
@@ -767,6 +782,10 @@ module Sequel
767
782
  map[type]
768
783
  end
769
784
 
785
+ def prepared_statement_modules
786
+ [PreparedStatementMethods]
787
+ end
788
+
770
789
  # Split out from fetch rows to allow processing of JDBC result sets
771
790
  # that don't come from issuing an SQL string.
772
791
  def process_result_set(result)
@@ -783,11 +802,14 @@ module Sequel
783
802
  i += 1
784
803
  cols << [output_identifier(meta.getColumnLabel(i)), i, convert ? type_convertor(map, meta, meta.getColumnType(i), i) : basic_type_convertor(map, meta, meta.getColumnType(i), i)]
785
804
  end
786
- @columns = cols.map{|c| c.at(0)}
805
+ max = i
806
+ self.columns = cols.map{|c| c[0]}
787
807
 
788
808
  while result.next
789
809
  row = {}
790
- cols.each do |n, j, pr|
810
+ i = -1
811
+ while (i += 1) < max
812
+ n, j, pr = cols[i]
791
813
  row[n] = pr.call(result, j)
792
814
  end
793
815
  yield row