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
+ # frozen-string-literal: true
2
+
1
3
  Sequel::JDBC.load_driver('org.hsqldb.jdbcDriver', :HSQLDB)
2
- Sequel.require 'adapters/jdbc/transactions'
4
+ require_relative 'transactions'
3
5
 
4
6
  module Sequel
5
7
  module JDBC
@@ -11,20 +13,19 @@ module Sequel
11
13
  end
12
14
  end
13
15
 
14
- # Database and Dataset support for HSQLDB databases accessed via JDBC.
15
16
  module HSQLDB
16
- # Instance methods for HSQLDB Database objects accessed via JDBC.
17
17
  module DatabaseMethods
18
- extend Sequel::Database::ResetIdentifierMangling
19
- PRIMARY_KEY_INDEX_RE = /\Asys_idx_sys_pk_/i.freeze
20
-
21
18
  include ::Sequel::JDBC::Transactions
22
19
 
23
- # HSQLDB uses the :hsqldb database type.
24
20
  def database_type
25
21
  :hsqldb
26
22
  end
27
23
 
24
+ def freeze
25
+ db_version
26
+ super
27
+ end
28
+
28
29
  # HSQLDB uses an IDENTITY sequence as the default value for primary
29
30
  # key columns.
30
31
  def serial_primary_key_options
@@ -33,11 +34,10 @@ module Sequel
33
34
 
34
35
  # The version of the database, as an integer (e.g 2.2.5 -> 20205)
35
36
  def db_version
36
- @db_version ||= begin
37
- v = get{DATABASE_VERSION(){}}
38
- if v =~ /(\d+)\.(\d+)\.(\d+)/
39
- $1.to_i * 10000 + $2.to_i * 100 + $3.to_i
40
- end
37
+ return @db_version if defined?(@db_version)
38
+ v = get(Sequel.function(:DATABASE_VERSION))
39
+ @db_version = if v =~ /(\d+)\.(\d+)\.(\d+)/
40
+ $1.to_i * 10000 + $2.to_i * 100 + $3.to_i
41
41
  end
42
42
  end
43
43
 
@@ -48,13 +48,12 @@ module Sequel
48
48
 
49
49
  private
50
50
 
51
- # HSQLDB specific SQL for renaming columns, and changing column types and/or nullity.
52
51
  def alter_table_sql(table, op)
53
52
  case op[:op]
54
53
  when :add_column
55
54
  if op[:table]
56
55
  [super(table, op.merge(:table=>nil)),
57
- alter_table_sql(table, op.merge(:op=>:add_constraint, :type=>:foreign_key, :name=>op[:foreign_key_name], :columns=>[op[:name]], :table=>op[:table]))]
56
+ alter_table_sql(table, op.merge(:op=>:add_constraint, :type=>:foreign_key, :name=>op[:foreign_key_constraint_name], :columns=>[op[:name]], :table=>op[:table]))]
58
57
  else
59
58
  super
60
59
  end
@@ -99,7 +98,7 @@ module Sequel
99
98
  def last_insert_id(conn, opts=OPTS)
100
99
  statement(conn) do |stmt|
101
100
  sql = 'CALL IDENTITY()'
102
- rs = log_yield(sql){stmt.executeQuery(sql)}
101
+ rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
103
102
  rs.next
104
103
  rs.getLong(1)
105
104
  end
@@ -107,7 +106,7 @@ module Sequel
107
106
 
108
107
  # Primary key indexes appear to start with sys_idx_sys_pk_ on HSQLDB
109
108
  def primary_key_index_re
110
- PRIMARY_KEY_INDEX_RE
109
+ /\Asys_idx_sys_pk_/i
111
110
  end
112
111
 
113
112
  # If an :identity option is present in the column, add the necessary IDENTITY SQL.
@@ -117,7 +116,7 @@ module Sequel
117
116
  if column[:identity]
118
117
  sql = "#{super} GENERATED BY DEFAULT AS IDENTITY"
119
118
  if sw = column[:start_with]
120
- sql << " (START WITH #{sw.to_i}"
119
+ sql += " (START WITH #{sw.to_i}"
121
120
  sql << " INCREMENT BY #{column[:increment_by].to_i}" if column[:increment_by]
122
121
  sql << ")"
123
122
  end
@@ -138,17 +137,7 @@ module Sequel
138
137
  end
139
138
  end
140
139
 
141
- # Dataset class for HSQLDB datasets accessed via JDBC.
142
140
  class Dataset < JDBC::Dataset
143
- BOOL_TRUE = 'TRUE'.freeze
144
- BOOL_FALSE = 'FALSE'.freeze
145
- SQL_WITH_RECURSIVE = "WITH RECURSIVE ".freeze
146
- APOS = Dataset::APOS
147
- HSTAR = "H*".freeze
148
- BLOB_OPEN = "X'".freeze
149
- DEFAULT_FROM = " FROM (VALUES (0))".freeze
150
- TIME_FORMAT = "'%H:%M:%S'".freeze
151
-
152
141
  # Handle HSQLDB specific case insensitive LIKE and bitwise operator support.
153
142
  def complex_expression_sql_append(sql, op, args)
154
143
  case op
@@ -193,27 +182,27 @@ module Sequel
193
182
  private
194
183
 
195
184
  def empty_from_sql
196
- DEFAULT_FROM
185
+ " FROM (VALUES (0))"
197
186
  end
198
187
 
199
188
  # Use string in hex format for blob data.
200
189
  def literal_blob_append(sql, v)
201
- sql << BLOB_OPEN << v.unpack(HSTAR).first << APOS
190
+ sql << "X'" << v.unpack("H*").first << "'"
202
191
  end
203
192
 
204
193
  # HSQLDB uses FALSE for false values.
205
194
  def literal_false
206
- BOOL_FALSE
195
+ 'FALSE'
207
196
  end
208
197
 
209
198
  # HSQLDB handles fractional seconds in timestamps, but not in times
210
199
  def literal_sqltime(v)
211
- v.strftime(TIME_FORMAT)
200
+ v.strftime("'%H:%M:%S'")
212
201
  end
213
202
 
214
203
  # HSQLDB uses TRUE for true values.
215
204
  def literal_true
216
- BOOL_TRUE
205
+ 'TRUE'
217
206
  end
218
207
 
219
208
  # HSQLDB supports multiple rows in INSERT.
@@ -223,7 +212,7 @@ module Sequel
223
212
 
224
213
  # Use WITH RECURSIVE instead of WITH if any of the CTEs is recursive
225
214
  def select_with_sql_base
226
- opts[:with].any?{|w| w[:recursive]} ? SQL_WITH_RECURSIVE : super
215
+ opts[:with].any?{|w| w[:recursive]} ? "WITH RECURSIVE " : super
227
216
  end
228
217
  end
229
218
  end
@@ -1,22 +1,21 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel::JDBC.load_driver('Java::net.sourceforge.jtds.jdbc.Driver', :JTDS)
2
- Sequel.require 'adapters/jdbc/mssql'
4
+ require_relative 'mssql'
3
5
 
4
6
  module Sequel
5
7
  module JDBC
6
8
  Sequel.synchronize do
7
9
  DATABASE_SETUP[:jtds] = proc do |db|
8
10
  db.extend(Sequel::JDBC::JTDS::DatabaseMethods)
9
- db.dataset_class = Sequel::JDBC::JTDS::Dataset
11
+ db.extend_datasets Sequel::MSSQL::DatasetMethods
10
12
  db.send(:set_mssql_unicode_strings)
11
13
  Java::net.sourceforge.jtds.jdbc.Driver
12
14
  end
13
15
  end
14
16
 
15
- # Database and Dataset instance methods for JTDS specific
16
- # support via JDBC.
17
17
  module JTDS
18
18
  module DatabaseMethods
19
- extend Sequel::Database::ResetIdentifierMangling
20
19
  include Sequel::JDBC::MSSQL::DatabaseMethods
21
20
 
22
21
  private
@@ -35,11 +34,6 @@ module Sequel
35
34
  cps.setNull(i, cps.getParameterMetaData.getParameterType(i))
36
35
  end
37
36
  end
38
-
39
- # Dataset class for JTDS datasets accessed via JDBC.
40
- class Dataset < JDBC::Dataset
41
- include Sequel::MSSQL::DatasetMethods
42
- end
43
37
  end
44
38
  end
45
39
  end
@@ -1,17 +1,11 @@
1
- Sequel.require 'adapters/shared/mssql'
1
+ # frozen-string-literal: true
2
+
3
+ require_relative '../shared/mssql'
2
4
 
3
5
  module Sequel
4
6
  module JDBC
5
- # Database and Dataset instance methods for MSSQL specific
6
- # support via JDBC.
7
7
  module MSSQL
8
- # Database instance methods for MSSQL databases accessed via JDBC.
9
8
  module DatabaseMethods
10
- extend Sequel::Database::ResetIdentifierMangling
11
- PRIMARY_KEY_INDEX_RE = /\Apk__/i.freeze
12
- ATAT_IDENTITY = 'SELECT @@IDENTITY'.freeze
13
- SCOPE_IDENTITY = 'SELECT SCOPE_IDENTITY()'.freeze
14
-
15
9
  include Sequel::MSSQL::DatabaseMethods
16
10
 
17
11
  private
@@ -19,8 +13,8 @@ module Sequel
19
13
  # Get the last inserted id using SCOPE_IDENTITY().
20
14
  def last_insert_id(conn, opts=OPTS)
21
15
  statement(conn) do |stmt|
22
- sql = opts[:prepared] ? ATAT_IDENTITY : SCOPE_IDENTITY
23
- rs = log_yield(sql){stmt.executeQuery(sql)}
16
+ sql = opts[:prepared] ? 'SELECT @@IDENTITY' : 'SELECT SCOPE_IDENTITY()'
17
+ rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
24
18
  rs.next
25
19
  rs.getLong(1)
26
20
  end
@@ -28,7 +22,7 @@ module Sequel
28
22
 
29
23
  # Primary key indexes appear to start with pk__ on MSSQL
30
24
  def primary_key_index_re
31
- PRIMARY_KEY_INDEX_RE
25
+ /\Apk__/i
32
26
  end
33
27
  end
34
28
  end
@@ -1,5 +1,7 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel::JDBC.load_driver('com.mysql.jdbc.Driver', :MySQL)
2
- Sequel.require 'adapters/shared/mysql'
4
+ require_relative '../shared/mysql'
3
5
 
4
6
  module Sequel
5
7
  module JDBC
@@ -11,25 +13,12 @@ module Sequel
11
13
  end
12
14
  end
13
15
 
14
- # Database and Dataset instance methods for MySQL specific
15
- # support via JDBC.
16
16
  module MySQL
17
- # Database instance methods for MySQL databases accessed via JDBC.
18
17
  module DatabaseMethods
19
- extend Sequel::Database::ResetIdentifierMangling
20
18
  include Sequel::MySQL::DatabaseMethods
21
- LAST_INSERT_ID = 'SELECT LAST_INSERT_ID()'.freeze
22
19
 
23
20
  private
24
21
 
25
- # The database name for the given database. Need to parse it out
26
- # of the connection string, since the JDBC does no parsing on the
27
- # given connection string by default.
28
- def database_name
29
- u = URI.parse(uri.sub(/\Ajdbc:/, ''))
30
- (m = /\/(.*)/.match(u.path)) && m[1]
31
- end
32
-
33
22
  # MySQL exception handling with SQLState is less accurate than with regexps.
34
23
  def database_exception_use_sqlstates?
35
24
  false
@@ -55,7 +44,7 @@ module Sequel
55
44
  end
56
45
  else
57
46
  statement(conn) do |st|
58
- rs = st.executeQuery(LAST_INSERT_ID)
47
+ rs = st.executeQuery('SELECT LAST_INSERT_ID()')
59
48
  rs.next
60
49
  rs.getLong(1)
61
50
  end
@@ -65,12 +54,12 @@ module Sequel
65
54
  # MySQL 5.1.12 JDBC adapter requires generated keys
66
55
  # and previous versions don't mind.
67
56
  def execute_statement_insert(stmt, sql)
68
- stmt.executeUpdate(sql, JavaSQL::Statement.RETURN_GENERATED_KEYS)
57
+ stmt.executeUpdate(sql, JavaSQL::Statement::RETURN_GENERATED_KEYS)
69
58
  end
70
59
 
71
60
  # Return generated keys for insert statements.
72
61
  def prepare_jdbc_statement(conn, sql, opts)
73
- opts[:type] == :insert ? conn.prepareStatement(sql, JavaSQL::Statement.RETURN_GENERATED_KEYS) : super
62
+ opts[:type] == :insert ? conn.prepareStatement(sql, JavaSQL::Statement::RETURN_GENERATED_KEYS) : super
74
63
  end
75
64
 
76
65
  # Convert tinyint(1) type to boolean
@@ -81,8 +70,18 @@ module Sequel
81
70
  # Run the default connection setting SQL statements.
82
71
  # Apply the connectiong setting SQLs for every new connection.
83
72
  def setup_connection(conn)
84
- mysql_connection_setting_sqls.each{|sql| statement(conn){|s| log_yield(sql){s.execute(sql)}}}
73
+ mysql_connection_setting_sqls.each{|sql| statement(conn){|s| log_connection_yield(sql, conn){s.execute(sql)}}}
74
+ super
75
+ end
76
+
77
+ # Handle unsigned integer values
78
+ def setup_type_convertor_map
85
79
  super
80
+ TypeConvertor::BASIC_MAP.dup
81
+ @type_convertor_map[Java::JavaSQL::Types::SMALLINT] = @type_convertor_map[Java::JavaSQL::Types::INTEGER]
82
+ @type_convertor_map[Java::JavaSQL::Types::INTEGER] = @type_convertor_map[Java::JavaSQL::Types::BIGINT]
83
+ @basic_type_convertor_map[Java::JavaSQL::Types::SMALLINT] = @basic_type_convertor_map[Java::JavaSQL::Types::INTEGER]
84
+ @basic_type_convertor_map[Java::JavaSQL::Types::INTEGER] = @basic_type_convertor_map[Java::JavaSQL::Types::BIGINT]
86
85
  end
87
86
  end
88
87
  end
@@ -1,6 +1,8 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel::JDBC.load_driver('Java::oracle.jdbc.driver.OracleDriver')
2
- Sequel.require 'adapters/shared/oracle'
3
- Sequel.require 'adapters/jdbc/transactions'
4
+ require_relative '../shared/oracle'
5
+ require_relative 'transactions'
4
6
 
5
7
  module Sequel
6
8
  module JDBC
@@ -12,33 +14,34 @@ module Sequel
12
14
  end
13
15
  end
14
16
 
15
- class TypeConvertor
17
+ module Oracle
16
18
  JAVA_BIG_DECIMAL_CONSTRUCTOR = java.math.BigDecimal.java_class.constructor(Java::long).method(:new_instance)
17
-
18
- def OracleDecimal(r, i)
19
+ ORACLE_DECIMAL = Object.new
20
+ def ORACLE_DECIMAL.call(r, i)
19
21
  if v = r.getBigDecimal(i)
20
22
  i = v.long_value
21
23
  if v == JAVA_BIG_DECIMAL_CONSTRUCTOR.call(i)
22
24
  i
23
25
  else
24
- BigDecimal.new(v.to_string)
26
+ ::Kernel::BigDecimal(v.to_string)
25
27
  end
26
28
  end
27
29
  end
28
- end
29
30
 
30
- # Database and Dataset support for Oracle databases accessed via JDBC.
31
- module Oracle
32
- # Instance methods for Oracle Database objects accessed via JDBC.
33
- module DatabaseMethods
34
- extend Sequel::Database::ResetIdentifierMangling
35
- PRIMARY_KEY_INDEX_RE = /\Asys_/i.freeze
31
+ ORACLE_CLOB = Object.new
32
+ def ORACLE_CLOB.call(r, i)
33
+ return unless clob = r.getClob(i)
34
+ str = clob.getSubString(1, clob.length)
35
+ clob.freeTemporary if clob.isTemporary
36
+ str
37
+ end
36
38
 
39
+ module DatabaseMethods
37
40
  include Sequel::Oracle::DatabaseMethods
38
41
  include Sequel::JDBC::Transactions
39
42
 
40
43
  def self.extended(db)
41
- db.instance_eval do
44
+ db.instance_exec do
42
45
  @autosequence = opts[:autosequence]
43
46
  @primary_key_sequences = {}
44
47
  end
@@ -70,7 +73,7 @@ module Sequel
70
73
  sql = "SELECT #{literal(sequence)}.currval FROM dual"
71
74
  statement(conn) do |stmt|
72
75
  begin
73
- rs = log_yield(sql){stmt.executeQuery(sql)}
76
+ rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
74
77
  rs.next
75
78
  rs.getLong(1)
76
79
  rescue java.sql.SQLException
@@ -82,7 +85,7 @@ module Sequel
82
85
 
83
86
  # Primary key indexes appear to start with sys_ on Oracle
84
87
  def primary_key_index_re
85
- PRIMARY_KEY_INDEX_RE
88
+ /\Asys_/i
86
89
  end
87
90
 
88
91
  def schema_parse_table(*)
@@ -108,17 +111,18 @@ module Sequel
108
111
 
109
112
  def setup_type_convertor_map
110
113
  super
111
- @type_convertor_map[:OracleDecimal] = TypeConvertor::INSTANCE.method(:OracleDecimal)
114
+ @type_convertor_map[:OracleDecimal] = ORACLE_DECIMAL
115
+ @type_convertor_map[:OracleClob] = ORACLE_CLOB
112
116
  end
113
117
  end
114
118
 
115
- # Dataset class for Oracle datasets accessed via JDBC.
116
119
  class Dataset < JDBC::Dataset
117
120
  include Sequel::Oracle::DatasetMethods
118
121
 
119
122
  NUMERIC_TYPE = Java::JavaSQL::Types::NUMERIC
120
123
  TIMESTAMP_TYPE = Java::JavaSQL::Types::TIMESTAMP
121
- TIMESTAMPTZ_TYPES = [Java::oracle.jdbc.OracleTypes::TIMESTAMPTZ, Java::oracle.jdbc.OracleTypes::TIMESTAMPLTZ]
124
+ CLOB_TYPE = Java::JavaSQL::Types::CLOB
125
+ TIMESTAMPTZ_TYPES = [Java::oracle.jdbc.OracleTypes::TIMESTAMPTZ, Java::oracle.jdbc.OracleTypes::TIMESTAMPLTZ].freeze
122
126
 
123
127
  def type_convertor(map, meta, type, i)
124
128
  case type
@@ -130,6 +134,8 @@ module Sequel
130
134
  end
131
135
  when *TIMESTAMPTZ_TYPES
132
136
  map[TIMESTAMP_TYPE]
137
+ when CLOB_TYPE
138
+ map[:OracleClob]
133
139
  else
134
140
  super
135
141
  end
@@ -1,45 +1,20 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel::JDBC.load_driver('org.postgresql.Driver', :Postgres)
2
- Sequel.require 'adapters/shared/postgres'
4
+ require_relative '../shared/postgres'
3
5
 
4
6
  module Sequel
5
- Postgres::CONVERTED_EXCEPTIONS << NativeException
6
-
7
7
  module JDBC
8
8
  Sequel.synchronize do
9
9
  DATABASE_SETUP[:postgresql] = proc do |db|
10
- db.extend(Sequel::JDBC::Postgres::DatabaseMethods)
11
10
  db.dataset_class = Sequel::JDBC::Postgres::Dataset
11
+ db.extend(Sequel::JDBC::Postgres::DatabaseMethods)
12
12
  org.postgresql.Driver
13
13
  end
14
14
  end
15
15
 
16
- class TypeConvertor
17
- # Return PostgreSQL array types as ruby Arrays instead of
18
- # JDBC PostgreSQL driver-specific array type. Only used if the
19
- # database does not have a conversion proc for the type.
20
- def RubyPGArray(r, i)
21
- if v = r.getArray(i)
22
- v.array.to_ary
23
- end
24
- end
25
-
26
- # Return PostgreSQL hstore types as ruby Hashes instead of
27
- # Java HashMaps. Only used if the database does not have a
28
- # conversion proc for the type.
29
- def RubyPGHstore(r, i)
30
- if v = r.getObject(i)
31
- v.to_hash
32
- end
33
- end
34
- end
35
-
36
- # Adapter, Database, and Dataset support for accessing a PostgreSQL
37
- # database via JDBC.
38
16
  module Postgres
39
- # Methods to add to Database instances that access PostgreSQL via
40
- # JDBC.
41
17
  module DatabaseMethods
42
- extend Sequel::Database::ResetIdentifierMangling
43
18
  include Sequel::Postgres::DatabaseMethods
44
19
 
45
20
  # Add the primary_keys and primary_key_sequences instance variables,
@@ -49,6 +24,12 @@ module Sequel
49
24
  db.send(:initialize_postgres_adapter)
50
25
  end
51
26
 
27
+ # Remove any current entry for the oid in the oid_convertor_map.
28
+ def add_conversion_proc(oid, *)
29
+ super
30
+ Sequel.synchronize{@oid_convertor_map.delete(oid)}
31
+ end
32
+
52
33
  # See Sequel::Postgres::Adapter#copy_into
53
34
  def copy_into(table, opts=OPTS)
54
35
  data = opts[:data]
@@ -60,19 +41,23 @@ module Sequel
60
41
  raise Error, "Must provide either a :data option or a block to copy_into"
61
42
  end
62
43
 
63
- synchronize(opts) do |conn|
44
+ synchronize(opts[:server]) do |conn|
64
45
  begin
65
46
  copy_manager = org.postgresql.copy.CopyManager.new(conn)
66
47
  copier = copy_manager.copy_in(copy_into_sql(table, opts))
67
48
  if block_given?
68
49
  while buf = yield
69
- copier.writeToCopy(buf.to_java_bytes, 0, buf.length)
50
+ java_bytes = buf.to_java_bytes
51
+ copier.writeToCopy(java_bytes, 0, java_bytes.length)
70
52
  end
71
53
  else
72
- data.each { |d| copier.writeToCopy(d.to_java_bytes, 0, d.length) }
54
+ data.each do |d|
55
+ java_bytes = d.to_java_bytes
56
+ copier.writeToCopy(java_bytes, 0, java_bytes.length)
57
+ end
73
58
  end
74
59
  rescue Exception => e
75
- copier.cancelCopy
60
+ copier.cancelCopy if copier
76
61
  raise
77
62
  ensure
78
63
  unless e
@@ -98,14 +83,18 @@ module Sequel
98
83
  end
99
84
  nil
100
85
  else
101
- b = ''
86
+ b = String.new
102
87
  while buf = copier.readFromCopy
103
88
  b << String.from_java_bytes(buf)
104
89
  end
105
90
  b
106
91
  end
92
+ rescue => e
93
+ raise_error(e, :disconnect=>true)
107
94
  ensure
108
- raise DatabaseDisconnectError, "disconnecting as a partial COPY may leave the connection in an unusable state" if buf
95
+ if buf && !e
96
+ raise DatabaseDisconnectError, "disconnecting as a partial COPY may leave the connection in an unusable state"
97
+ end
109
98
  end
110
99
  end
111
100
  end
@@ -121,21 +110,51 @@ module Sequel
121
110
  else
122
111
  false
123
112
  end
124
- Sequel.synchronize{@oid_convertor_map[oid] = conv}
113
+ Sequel.synchronize{@oid_convertor_map[oid] = conv}
125
114
  end
126
115
  conv
127
116
  end
128
117
 
129
118
  private
130
119
 
131
- # Clear oid convertor map cache when conversion procs are updated.
132
- def conversion_procs_updated
133
- super
134
- Sequel.synchronize{@oid_convertor_map = {}}
120
+ def disconnect_error?(exception, opts)
121
+ super || exception.message =~ /\A(This connection has been closed\.|FATAL: terminating connection due to administrator command|An I\/O error occurred while sending to the backend\.)\z/
135
122
  end
136
123
 
137
- def disconnect_error?(exception, opts)
138
- super || exception.message =~ /\AThis connection has been closed\.\z|\AFATAL: terminating connection due to administrator command\z/
124
+ # For PostgreSQL-specific types, return the string that should be used
125
+ # as the PGObject value. Returns nil by default, loading pg_* extensions
126
+ # will override this to add support for specific types.
127
+ def bound_variable_arg(arg, conn)
128
+ nil
129
+ end
130
+
131
+ # Work around issue when using Sequel's bound variable support where the
132
+ # same SQL is used in different bound variable calls, but the schema has
133
+ # changed between the calls. This is necessary as jdbc-postgres versions
134
+ # after 9.4.1200 violate the JDBC API. These versions cache separate
135
+ # PreparedStatement instances, which are eventually prepared server side after the
136
+ # prepareThreshold is met. The JDBC API violation is that PreparedStatement#close
137
+ # does not release the server side prepared statement.
138
+ def prepare_jdbc_statement(conn, sql, opts)
139
+ ps = super
140
+ unless opts[:name]
141
+ ps.prepare_threshold = 0
142
+ end
143
+ ps
144
+ end
145
+
146
+ # If the given argument is a recognized PostgreSQL-specific type, create
147
+ # a PGObject instance with unknown type and the bound argument string value,
148
+ # and set that as the prepared statement argument.
149
+ def set_ps_arg(cps, arg, i)
150
+ if v = bound_variable_arg(arg, nil)
151
+ obj = org.postgresql.util.PGobject.new
152
+ obj.setType("unknown")
153
+ obj.setValue(v)
154
+ cps.setObject(i, obj)
155
+ else
156
+ super
157
+ end
139
158
  end
140
159
 
141
160
  # Use setNull for nil arguments as the default behavior of setString
@@ -145,10 +164,10 @@ module Sequel
145
164
  end
146
165
 
147
166
  # Execute the connection configuration SQL queries on the connection.
148
- def setup_connection(conn)
149
- conn = super(conn)
167
+ def setup_connection_with_opts(conn, opts)
168
+ conn = super
150
169
  statement(conn) do |stmt|
151
- connection_configuration_sqls.each{|sql| log_yield(sql){stmt.execute(sql)}}
170
+ connection_configuration_sqls(opts).each{|sql| log_connection_yield(sql, conn){stmt.execute(sql)}}
152
171
  end
153
172
  conn
154
173
  end
@@ -156,52 +175,54 @@ module Sequel
156
175
  def setup_type_convertor_map
157
176
  super
158
177
  @oid_convertor_map = {}
159
- @type_convertor_map[:RubyPGArray] = TypeConvertor::INSTANCE.method(:RubyPGArray)
160
- @type_convertor_map[:RubyPGHstore] = TypeConvertor::INSTANCE.method(:RubyPGHstore)
161
178
  end
162
179
  end
163
180
 
164
- # Dataset subclass used for datasets that connect to PostgreSQL via JDBC.
165
181
  class Dataset < JDBC::Dataset
166
182
  include Sequel::Postgres::DatasetMethods
167
- APOS = Dataset::APOS
168
-
169
- # Add the shared PostgreSQL prepared statement methods
170
- def prepare(type, name=nil, *values)
171
- ps = to_prepared_statement(type, values)
172
- ps.extend(JDBC::Dataset::PreparedStatementMethods)
173
- ps.extend(::Sequel::Postgres::DatasetMethods::PreparedStatementMethods)
174
- if name
175
- ps.prepared_statement_name = name
176
- db.set_prepared_statement(name, ps)
177
- end
178
- ps
179
- end
180
183
 
184
+ # Warn when calling as the fetch size is ignored by the JDBC adapter currently.
185
+ def with_fetch_size(size)
186
+ warn("Sequel::JDBC::Postgres::Dataset#with_fetch_size does not currently have an effect.", :uplevel=>1)
187
+ super
188
+ end
189
+
181
190
  private
182
191
 
183
192
  # Literalize strings similar to the native postgres adapter
184
193
  def literal_string_append(sql, v)
185
- sql << APOS << db.synchronize(@opts[:server]){|c| c.escape_string(v)} << APOS
194
+ sql << "'" << db.synchronize(@opts[:server]){|c| c.escape_string(v)} << "'"
195
+ end
196
+
197
+ # SQL fragment for Sequel::SQLTime, containing just the time part
198
+ def literal_sqltime(v)
199
+ v.strftime("'%H:%M:%S#{sprintf(".%03d", (v.usec/1000.0).round)}'")
186
200
  end
187
201
 
188
202
  STRING_TYPE = Java::JavaSQL::Types::VARCHAR
189
203
  ARRAY_TYPE = Java::JavaSQL::Types::ARRAY
190
- PG_SPECIFIC_TYPES = [ARRAY_TYPE, Java::JavaSQL::Types::OTHER, Java::JavaSQL::Types::STRUCT]
191
- HSTORE_TYPE = 'hstore'.freeze
204
+ PG_SPECIFIC_TYPES = [Java::JavaSQL::Types::ARRAY, Java::JavaSQL::Types::OTHER, Java::JavaSQL::Types::STRUCT, Java::JavaSQL::Types::TIME_WITH_TIMEZONE, Java::JavaSQL::Types::TIME].freeze
205
+
206
+ # Return PostgreSQL hstore types as ruby Hashes instead of
207
+ # Java HashMaps. Only used if the database does not have a
208
+ # conversion proc for the type.
209
+ HSTORE_METHOD = Object.new
210
+ def HSTORE_METHOD.call(r, i)
211
+ if v = r.getObject(i)
212
+ v.to_hash
213
+ end
214
+ end
192
215
 
193
216
  def type_convertor(map, meta, type, i)
194
217
  case type
195
218
  when *PG_SPECIFIC_TYPES
196
- oid = meta.field(i).oid
219
+ oid = meta.getField(i).getOID
197
220
  if pr = db.oid_convertor_proc(oid)
198
221
  pr
199
- elsif type == ARRAY_TYPE
200
- map[:RubyPGArray]
201
222
  elsif oid == 2950 # UUID
202
223
  map[STRING_TYPE]
203
- elsif meta.getPGType(i) == HSTORE_TYPE
204
- map[:RubyPGHstore]
224
+ elsif meta.getPGType(i) == 'hstore'
225
+ HSTORE_METHOD
205
226
  else
206
227
  super
207
228
  end