sequel 4.49.0 → 5.3.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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +130 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +6 -9
  6. data/doc/advanced_associations.rdoc +91 -168
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  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.2.0.txt +33 -0
  30. data/doc/release_notes/5.3.0.txt +121 -0
  31. data/doc/schema_modification.rdoc +78 -64
  32. data/doc/security.rdoc +97 -88
  33. data/doc/sharding.rdoc +43 -30
  34. data/doc/sql.rdoc +53 -65
  35. data/doc/testing.rdoc +4 -5
  36. data/doc/thread_safety.rdoc +2 -4
  37. data/doc/transactions.rdoc +18 -17
  38. data/doc/validations.rdoc +48 -45
  39. data/doc/virtual_rows.rdoc +87 -115
  40. data/lib/sequel/adapters/ado/access.rb +7 -13
  41. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  42. data/lib/sequel/adapters/ado.rb +9 -25
  43. data/lib/sequel/adapters/amalgalite.rb +3 -18
  44. data/lib/sequel/adapters/ibmdb.rb +9 -45
  45. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  46. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  47. data/lib/sequel/adapters/jdbc/h2.rb +6 -26
  48. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
  49. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  50. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  51. data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
  52. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  53. data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
  54. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  55. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  56. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  57. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  58. data/lib/sequel/adapters/jdbc.rb +18 -74
  59. data/lib/sequel/adapters/mock.rb +4 -30
  60. data/lib/sequel/adapters/mysql.rb +7 -44
  61. data/lib/sequel/adapters/mysql2.rb +5 -23
  62. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  63. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  64. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  65. data/lib/sequel/adapters/odbc.rb +0 -19
  66. data/lib/sequel/adapters/oracle.rb +8 -13
  67. data/lib/sequel/adapters/postgres.rb +28 -150
  68. data/lib/sequel/adapters/postgresql.rb +1 -1
  69. data/lib/sequel/adapters/shared/access.rb +11 -51
  70. data/lib/sequel/adapters/shared/db2.rb +3 -61
  71. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  72. data/lib/sequel/adapters/shared/mysql.rb +61 -227
  73. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  74. data/lib/sequel/adapters/shared/postgres.rb +58 -264
  75. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  76. data/lib/sequel/adapters/shared/sqlite.rb +22 -101
  77. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  78. data/lib/sequel/adapters/sqlite.rb +2 -19
  79. data/lib/sequel/adapters/tinytds.rb +5 -15
  80. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  81. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
  82. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  83. data/lib/sequel/adapters/utils/replace.rb +0 -5
  84. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  85. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  86. data/lib/sequel/ast_transformer.rb +3 -94
  87. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  88. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  89. data/lib/sequel/connection_pool/single.rb +0 -2
  90. data/lib/sequel/connection_pool/threaded.rb +94 -110
  91. data/lib/sequel/connection_pool.rb +38 -28
  92. data/lib/sequel/core.rb +42 -101
  93. data/lib/sequel/database/connecting.rb +23 -60
  94. data/lib/sequel/database/dataset.rb +6 -9
  95. data/lib/sequel/database/dataset_defaults.rb +4 -48
  96. data/lib/sequel/database/features.rb +5 -4
  97. data/lib/sequel/database/logging.rb +2 -9
  98. data/lib/sequel/database/misc.rb +36 -55
  99. data/lib/sequel/database/query.rb +8 -13
  100. data/lib/sequel/database/schema_generator.rb +93 -64
  101. data/lib/sequel/database/schema_methods.rb +61 -79
  102. data/lib/sequel/database/transactions.rb +4 -24
  103. data/lib/sequel/database.rb +12 -2
  104. data/lib/sequel/dataset/actions.rb +57 -107
  105. data/lib/sequel/dataset/dataset_module.rb +4 -16
  106. data/lib/sequel/dataset/features.rb +35 -30
  107. data/lib/sequel/dataset/graph.rb +40 -49
  108. data/lib/sequel/dataset/misc.rb +12 -37
  109. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  110. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  111. data/lib/sequel/dataset/query.rb +91 -161
  112. data/lib/sequel/dataset/sql.rb +33 -225
  113. data/lib/sequel/dataset.rb +18 -10
  114. data/lib/sequel/deprecated.rb +18 -27
  115. data/lib/sequel/exceptions.rb +1 -17
  116. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  117. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  118. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  119. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  120. data/lib/sequel/extensions/connection_validator.rb +1 -1
  121. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  122. data/lib/sequel/extensions/core_extensions.rb +39 -49
  123. data/lib/sequel/extensions/core_refinements.rb +39 -45
  124. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  125. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  126. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  127. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  128. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  129. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  130. data/lib/sequel/extensions/from_block.rb +1 -35
  131. data/lib/sequel/extensions/graph_each.rb +2 -2
  132. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  133. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  134. data/lib/sequel/extensions/inflector.rb +4 -4
  135. data/lib/sequel/extensions/migration.rb +27 -43
  136. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  137. data/lib/sequel/extensions/null_dataset.rb +2 -8
  138. data/lib/sequel/extensions/pagination.rb +1 -17
  139. data/lib/sequel/extensions/pg_array.rb +20 -189
  140. data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
  141. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  142. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  143. data/lib/sequel/extensions/pg_inet.rb +3 -16
  144. data/lib/sequel/extensions/pg_interval.rb +1 -20
  145. data/lib/sequel/extensions/pg_json.rb +7 -27
  146. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  147. data/lib/sequel/extensions/pg_range.rb +6 -121
  148. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  149. data/lib/sequel/extensions/pg_row.rb +5 -77
  150. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  151. data/lib/sequel/extensions/query.rb +3 -4
  152. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  153. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  154. data/lib/sequel/extensions/select_remove.rb +3 -3
  155. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  156. data/lib/sequel/extensions/sql_comments.rb +2 -2
  157. data/lib/sequel/extensions/string_agg.rb +11 -8
  158. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  159. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  160. data/lib/sequel/model/associations.rb +129 -131
  161. data/lib/sequel/model/base.rb +133 -731
  162. data/lib/sequel/model/default_inflections.rb +1 -1
  163. data/lib/sequel/model/errors.rb +0 -3
  164. data/lib/sequel/model/exceptions.rb +2 -6
  165. data/lib/sequel/model/inflections.rb +1 -26
  166. data/lib/sequel/model/plugins.rb +1 -0
  167. data/lib/sequel/model.rb +27 -62
  168. data/lib/sequel/plugins/active_model.rb +2 -5
  169. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  170. data/lib/sequel/plugins/association_pks.rb +14 -28
  171. data/lib/sequel/plugins/association_proxies.rb +6 -7
  172. data/lib/sequel/plugins/auto_validations.rb +4 -4
  173. data/lib/sequel/plugins/before_after_save.rb +0 -43
  174. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  175. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  176. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  177. data/lib/sequel/plugins/caching.rb +5 -5
  178. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  179. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  180. data/lib/sequel/plugins/column_select.rb +2 -2
  181. data/lib/sequel/plugins/composition.rb +15 -24
  182. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  183. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  184. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  185. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  186. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  187. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  188. data/lib/sequel/plugins/finder.rb +16 -10
  189. data/lib/sequel/plugins/force_encoding.rb +1 -7
  190. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  191. data/lib/sequel/plugins/input_transformer.rb +10 -11
  192. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  193. data/lib/sequel/plugins/instance_filters.rb +5 -5
  194. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  195. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  196. data/lib/sequel/plugins/json_serializer.rb +19 -19
  197. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  198. data/lib/sequel/plugins/list.rb +6 -6
  199. data/lib/sequel/plugins/many_through_many.rb +11 -8
  200. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  201. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  202. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  203. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  204. data/lib/sequel/plugins/pg_row.rb +2 -11
  205. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  206. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  207. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  208. data/lib/sequel/plugins/serialization.rb +15 -33
  209. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  210. data/lib/sequel/plugins/sharding.rb +2 -8
  211. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  212. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  213. data/lib/sequel/plugins/static_cache.rb +8 -9
  214. data/lib/sequel/plugins/string_stripper.rb +3 -3
  215. data/lib/sequel/plugins/subclasses.rb +1 -1
  216. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  217. data/lib/sequel/plugins/table_select.rb +2 -2
  218. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  219. data/lib/sequel/plugins/timestamps.rb +6 -7
  220. data/lib/sequel/plugins/touch.rb +4 -8
  221. data/lib/sequel/plugins/tree.rb +3 -3
  222. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  223. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  224. data/lib/sequel/plugins/update_or_create.rb +3 -3
  225. data/lib/sequel/plugins/update_refresh.rb +3 -3
  226. data/lib/sequel/plugins/uuid.rb +7 -11
  227. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  228. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  229. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  230. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  231. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  232. data/lib/sequel/sql.rb +145 -276
  233. data/lib/sequel/timezones.rb +8 -23
  234. data/lib/sequel/version.rb +2 -2
  235. data/lib/sequel.rb +1 -1
  236. data/spec/adapter_spec.rb +1 -1
  237. data/spec/adapters/db2_spec.rb +2 -103
  238. data/spec/adapters/mssql_spec.rb +89 -68
  239. data/spec/adapters/mysql_spec.rb +111 -478
  240. data/spec/adapters/oracle_spec.rb +1 -9
  241. data/spec/adapters/postgres_spec.rb +459 -664
  242. data/spec/adapters/spec_helper.rb +12 -31
  243. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  244. data/spec/adapters/sqlite_spec.rb +8 -146
  245. data/spec/bin_spec.rb +11 -16
  246. data/spec/core/connection_pool_spec.rb +173 -74
  247. data/spec/core/database_spec.rb +96 -244
  248. data/spec/core/dataset_spec.rb +99 -414
  249. data/spec/core/deprecated_spec.rb +3 -3
  250. data/spec/core/expression_filters_spec.rb +37 -144
  251. data/spec/core/mock_adapter_spec.rb +241 -4
  252. data/spec/core/object_graph_spec.rb +11 -60
  253. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  254. data/spec/core/schema_generator_spec.rb +51 -40
  255. data/spec/core/schema_spec.rb +88 -77
  256. data/spec/core/spec_helper.rb +6 -24
  257. data/spec/core/version_spec.rb +1 -1
  258. data/spec/core_extensions_spec.rb +7 -83
  259. data/spec/core_model_spec.rb +2 -2
  260. data/spec/deprecation_helper.rb +2 -14
  261. data/spec/extensions/accessed_columns_spec.rb +1 -1
  262. data/spec/extensions/active_model_spec.rb +3 -3
  263. data/spec/extensions/after_initialize_spec.rb +1 -1
  264. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  265. data/spec/extensions/association_dependencies_spec.rb +1 -1
  266. data/spec/extensions/association_pks_spec.rb +30 -92
  267. data/spec/extensions/association_proxies_spec.rb +1 -1
  268. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  269. data/spec/extensions/auto_validations_spec.rb +1 -1
  270. data/spec/extensions/blacklist_security_spec.rb +1 -1
  271. data/spec/extensions/blank_spec.rb +1 -1
  272. data/spec/extensions/boolean_readers_spec.rb +1 -1
  273. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  274. data/spec/extensions/caching_spec.rb +1 -1
  275. data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
  276. data/spec/extensions/column_conflicts_spec.rb +1 -1
  277. data/spec/extensions/column_select_spec.rb +4 -4
  278. data/spec/extensions/columns_introspection_spec.rb +1 -1
  279. data/spec/extensions/columns_updated_spec.rb +1 -1
  280. data/spec/extensions/composition_spec.rb +8 -30
  281. data/spec/extensions/connection_expiration_spec.rb +3 -3
  282. data/spec/extensions/connection_validator_spec.rb +3 -3
  283. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  284. data/spec/extensions/constraint_validations_spec.rb +1 -1
  285. data/spec/extensions/core_refinements_spec.rb +1 -3
  286. data/spec/extensions/csv_serializer_spec.rb +4 -9
  287. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  288. data/spec/extensions/dataset_associations_spec.rb +2 -1
  289. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  290. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  291. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  292. data/spec/extensions/defaults_setter_spec.rb +2 -2
  293. data/spec/extensions/delay_add_association_spec.rb +8 -9
  294. data/spec/extensions/dirty_spec.rb +1 -1
  295. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  296. data/spec/extensions/eager_each_spec.rb +2 -2
  297. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  298. data/spec/extensions/error_splitter_spec.rb +1 -1
  299. data/spec/extensions/error_sql_spec.rb +1 -1
  300. data/spec/extensions/eval_inspect_spec.rb +1 -1
  301. data/spec/extensions/finder_spec.rb +1 -1
  302. data/spec/extensions/force_encoding_spec.rb +2 -5
  303. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  304. data/spec/extensions/graph_each_spec.rb +5 -5
  305. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  306. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  307. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  308. data/spec/extensions/inflector_spec.rb +1 -1
  309. data/spec/extensions/input_transformer_spec.rb +7 -2
  310. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  311. data/spec/extensions/instance_filters_spec.rb +1 -1
  312. data/spec/extensions/instance_hooks_spec.rb +1 -95
  313. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  314. data/spec/extensions/json_serializer_spec.rb +1 -1
  315. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  316. data/spec/extensions/list_spec.rb +5 -6
  317. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  318. data/spec/extensions/many_through_many_spec.rb +25 -33
  319. data/spec/extensions/migration_spec.rb +12 -2
  320. data/spec/extensions/modification_detection_spec.rb +1 -1
  321. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  322. data/spec/extensions/named_timezones_spec.rb +3 -3
  323. data/spec/extensions/nested_attributes_spec.rb +1 -29
  324. data/spec/extensions/null_dataset_spec.rb +1 -11
  325. data/spec/extensions/optimistic_locking_spec.rb +2 -2
  326. data/spec/extensions/pagination_spec.rb +1 -1
  327. data/spec/extensions/pg_array_associations_spec.rb +22 -26
  328. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_array_spec.rb +3 -48
  330. data/spec/extensions/pg_enum_spec.rb +1 -1
  331. data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
  332. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  333. data/spec/extensions/pg_hstore_spec.rb +22 -31
  334. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_inet_spec.rb +1 -14
  336. data/spec/extensions/pg_interval_spec.rb +3 -13
  337. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  338. data/spec/extensions/pg_json_spec.rb +1 -13
  339. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  340. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  341. data/spec/extensions/pg_range_spec.rb +3 -88
  342. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  343. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  344. data/spec/extensions/pg_row_spec.rb +1 -44
  345. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  346. data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
  347. data/spec/extensions/prepared_statements_spec.rb +13 -48
  348. data/spec/extensions/pretty_table_spec.rb +40 -9
  349. data/spec/extensions/query_spec.rb +1 -12
  350. data/spec/extensions/rcte_tree_spec.rb +23 -34
  351. data/spec/extensions/round_timestamps_spec.rb +1 -5
  352. data/spec/extensions/s_spec.rb +1 -1
  353. data/spec/extensions/schema_caching_spec.rb +1 -1
  354. data/spec/extensions/schema_dumper_spec.rb +43 -32
  355. data/spec/extensions/select_remove_spec.rb +1 -1
  356. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  357. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  358. data/spec/extensions/serialization_spec.rb +5 -17
  359. data/spec/extensions/server_block_spec.rb +1 -1
  360. data/spec/extensions/server_logging_spec.rb +2 -2
  361. data/spec/extensions/sharding_spec.rb +1 -1
  362. data/spec/extensions/shared_caching_spec.rb +1 -28
  363. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  364. data/spec/extensions/singular_table_names_spec.rb +1 -1
  365. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  366. data/spec/extensions/spec_helper.rb +5 -27
  367. data/spec/extensions/split_array_nil_spec.rb +1 -1
  368. data/spec/extensions/split_values_spec.rb +1 -1
  369. data/spec/extensions/sql_comments_spec.rb +1 -1
  370. data/spec/extensions/sql_expr_spec.rb +1 -1
  371. data/spec/extensions/static_cache_spec.rb +1 -1
  372. data/spec/extensions/string_agg_spec.rb +2 -2
  373. data/spec/extensions/string_date_time_spec.rb +1 -1
  374. data/spec/extensions/string_stripper_spec.rb +1 -1
  375. data/spec/extensions/subclasses_spec.rb +1 -1
  376. data/spec/extensions/subset_conditions_spec.rb +1 -1
  377. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  378. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  379. data/spec/extensions/synchronize_sql_spec.rb +124 -0
  380. data/spec/extensions/table_select_spec.rb +4 -4
  381. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  382. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  383. data/spec/extensions/timestamps_spec.rb +5 -7
  384. data/spec/extensions/to_dot_spec.rb +1 -1
  385. data/spec/extensions/touch_spec.rb +1 -1
  386. data/spec/extensions/tree_spec.rb +1 -1
  387. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  388. data/spec/extensions/unlimited_update_spec.rb +1 -1
  389. data/spec/extensions/update_or_create_spec.rb +12 -16
  390. data/spec/extensions/update_primary_key_spec.rb +4 -3
  391. data/spec/extensions/update_refresh_spec.rb +1 -1
  392. data/spec/extensions/uuid_spec.rb +10 -13
  393. data/spec/extensions/validate_associated_spec.rb +1 -1
  394. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  395. data/spec/extensions/validation_contexts_spec.rb +1 -1
  396. data/spec/extensions/validation_helpers_spec.rb +10 -44
  397. data/spec/extensions/whitelist_security_spec.rb +5 -5
  398. data/spec/extensions/xml_serializer_spec.rb +8 -13
  399. data/spec/guards_helper.rb +2 -1
  400. data/spec/integration/associations_test.rb +1 -23
  401. data/spec/integration/database_test.rb +7 -7
  402. data/spec/integration/dataset_test.rb +12 -47
  403. data/spec/integration/eager_loader_test.rb +1 -1
  404. data/spec/integration/migrator_test.rb +1 -1
  405. data/spec/integration/model_test.rb +4 -82
  406. data/spec/integration/plugin_test.rb +7 -23
  407. data/spec/integration/prepared_statement_test.rb +8 -88
  408. data/spec/integration/schema_test.rb +10 -10
  409. data/spec/integration/spec_helper.rb +17 -21
  410. data/spec/integration/timezone_test.rb +5 -5
  411. data/spec/integration/transaction_test.rb +3 -55
  412. data/spec/integration/type_test.rb +9 -9
  413. data/spec/model/association_reflection_spec.rb +24 -9
  414. data/spec/model/associations_spec.rb +124 -303
  415. data/spec/model/base_spec.rb +43 -137
  416. data/spec/model/class_dataset_methods_spec.rb +2 -20
  417. data/spec/model/dataset_methods_spec.rb +1 -20
  418. data/spec/model/eager_loading_spec.rb +48 -17
  419. data/spec/model/hooks_spec.rb +5 -300
  420. data/spec/model/inflector_spec.rb +1 -1
  421. data/spec/model/model_spec.rb +29 -339
  422. data/spec/model/plugins_spec.rb +2 -16
  423. data/spec/model/record_spec.rb +33 -129
  424. data/spec/model/spec_helper.rb +5 -15
  425. data/spec/model/validations_spec.rb +1 -1
  426. data/spec/sequel_warning.rb +1 -12
  427. metadata +19 -65
  428. data/doc/active_record.rdoc +0 -927
  429. data/lib/sequel/adapters/cubrid.rb +0 -160
  430. data/lib/sequel/adapters/do/mysql.rb +0 -69
  431. data/lib/sequel/adapters/do/postgres.rb +0 -46
  432. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  433. data/lib/sequel/adapters/do.rb +0 -166
  434. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  435. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  436. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  437. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  438. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  439. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  440. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  441. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  442. data/lib/sequel/adapters/shared/informix.rb +0 -63
  443. data/lib/sequel/adapters/shared/progress.rb +0 -40
  444. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  445. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  446. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  447. data/lib/sequel/adapters/swift.rb +0 -169
  448. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  449. data/lib/sequel/dataset/mutation.rb +0 -98
  450. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  451. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  452. data/lib/sequel/extensions/filter_having.rb +0 -65
  453. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  454. data/lib/sequel/extensions/meta_def.rb +0 -37
  455. data/lib/sequel/extensions/query_literals.rb +0 -86
  456. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  457. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  458. data/lib/sequel/extensions/set_overrides.rb +0 -82
  459. data/lib/sequel/no_core_ext.rb +0 -4
  460. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  461. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  462. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  463. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  464. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  465. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  466. data/lib/sequel/plugins/schema.rb +0 -84
  467. data/lib/sequel/plugins/scissors.rb +0 -37
  468. data/spec/core/dataset_mutation_spec.rb +0 -253
  469. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  470. data/spec/extensions/before_after_save_spec.rb +0 -40
  471. data/spec/extensions/filter_having_spec.rb +0 -42
  472. data/spec/extensions/from_block_spec.rb +0 -21
  473. data/spec/extensions/hash_aliases_spec.rb +0 -26
  474. data/spec/extensions/identifier_columns_spec.rb +0 -19
  475. data/spec/extensions/meta_def_spec.rb +0 -35
  476. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  477. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  478. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  479. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  480. data/spec/extensions/query_literals_spec.rb +0 -185
  481. data/spec/extensions/schema_spec.rb +0 -123
  482. data/spec/extensions/scissors_spec.rb +0 -27
  483. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  484. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,160 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- #SEQUEL5: Remove
4
-
5
- require 'cubrid'
6
- Sequel.require 'adapters/shared/cubrid'
7
-
8
- module Sequel
9
- module Cubrid
10
- CUBRID_TYPE_PROCS = {
11
- ::Cubrid::DATE => lambda{|t| Date.new(t.year, t.month, t.day)},
12
- ::Cubrid::TIME => lambda{|t| SQLTime.create(t.hour, t.min, t.sec)},
13
- 21 => lambda(&:to_i)
14
- }#.freeze # SEQUEL5
15
-
16
- class Database < Sequel::Database
17
- include Sequel::Cubrid::DatabaseMethods
18
-
19
- ROW_COUNT = "SELECT ROW_COUNT()".freeze
20
- Sequel::Deprecation.deprecate_constant(self, :ROW_COUNT)
21
- LAST_INSERT_ID = "SELECT LAST_INSERT_ID()".freeze
22
- Sequel::Deprecation.deprecate_constant(self, :LAST_INSERT_ID)
23
-
24
- set_adapter_scheme :cubrid
25
-
26
- def connect(server)
27
- opts = server_opts(server)
28
- conn = ::Cubrid.connect(
29
- opts[:database],
30
- opts[:host] || 'localhost',
31
- opts[:port] || 30000,
32
- opts[:user] || 'public',
33
- opts[:password] || ''
34
- )
35
- conn.auto_commit = true
36
- conn
37
- end
38
-
39
- def server_version
40
- @server_version ||= synchronize(&:server_version)
41
- end
42
-
43
- def execute(sql, opts=OPTS)
44
- synchronize(opts[:server]) do |conn|
45
- r = log_connection_yield(sql, conn) do
46
- begin
47
- conn.query(sql)
48
- rescue => e
49
- raise_error(e)
50
- end
51
- end
52
- if block_given?
53
- yield(r)
54
- else
55
- begin
56
- case opts[:type]
57
- when :dui
58
- # This is cubrid's API, but it appears to be completely broken,
59
- # giving StandardError: ERROR: CCI, -18, Invalid request handle
60
- #r.affected_rows
61
-
62
- # Work around bugs by using the ROW_COUNT function.
63
- begin
64
- r2 = conn.query("SELECT ROW_COUNT()")
65
- r2.each{|a| return a.first.to_i}
66
- ensure
67
- r2.close if r2
68
- end
69
- when :insert
70
- begin
71
- r2 = conn.query("SELECT LAST_INSERT_ID()")
72
- r2.each{|a| return a.first.to_i}
73
- ensure
74
- r2.close if r2
75
- end
76
- end
77
- ensure
78
- r.close
79
- end
80
- end
81
- end
82
- end
83
-
84
- def execute_ddl(sql, opts=OPTS)
85
- execute(sql, opts.merge(:type=>:ddl))
86
- end
87
-
88
- def execute_dui(sql, opts=OPTS)
89
- execute(sql, opts.merge(:type=>:dui))
90
- end
91
-
92
- def execute_insert(sql, opts=OPTS)
93
- execute(sql, opts.merge(:type=>:insert))
94
- end
95
-
96
- def freeze
97
- server_version
98
- super
99
- end
100
-
101
- private
102
-
103
- def begin_transaction(conn, opts=OPTS)
104
- log_connection_yield("Transaction.begin", conn){conn.auto_commit = false}
105
- end
106
-
107
- def commit_transaction(conn, opts=OPTS)
108
- log_connection_yield('Transaction.commit', conn){conn.commit}
109
- end
110
-
111
- def dataset_class_default
112
- Dataset
113
- end
114
-
115
- def database_error_classes
116
- [StandardError]
117
- end
118
-
119
- def remove_transaction(conn, committed)
120
- conn.auto_commit = true
121
- ensure
122
- super
123
- end
124
-
125
- # This doesn't actually work, as the cubrid ruby driver
126
- # does not implement transactions correctly.
127
- def rollback_transaction(conn, opts=OPTS)
128
- log_connection_yield('Transaction.rollback', conn){conn.rollback}
129
- end
130
- end
131
-
132
- class Dataset < Sequel::Dataset
133
- include Sequel::Cubrid::DatasetMethods
134
- COLUMN_INFO_NAME = "name".freeze
135
- Sequel::Deprecation.deprecate_constant(self, :COLUMN_INFO_NAME)
136
- COLUMN_INFO_TYPE = "type_name".freeze
137
- Sequel::Deprecation.deprecate_constant(self, :COLUMN_INFO_TYPE)
138
-
139
- Database::DatasetClass = self
140
- Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
141
-
142
- def fetch_rows(sql)
143
- execute(sql) do |stmt|
144
- begin
145
- cols = stmt.column_info.map{|c| [output_identifier(c["name"]), CUBRID_TYPE_PROCS[c["type_name"]]]}
146
- self.columns = cols.map(&:first)
147
- stmt.each do |r|
148
- row = {}
149
- cols.zip(r).each{|(k, p), v| row[k] = (v && p) ? p.call(v) : v}
150
- yield row
151
- end
152
- ensure
153
- stmt.close
154
- end
155
- end
156
- self
157
- end
158
- end
159
- end
160
- end
@@ -1,69 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::DataObjects.load_driver 'do_mysql'
4
- Sequel.require 'adapters/shared/mysql'
5
-
6
- module Sequel
7
- module DataObjects
8
- Sequel.synchronize do
9
- DATABASE_SETUP[:mysql] = proc do |db|
10
- db.extend(Sequel::DataObjects::MySQL::DatabaseMethods)
11
- db.dataset_class = Sequel::DataObjects::MySQL::Dataset
12
- end
13
- end
14
-
15
- # Database and Dataset instance methods for MySQL specific
16
- # support via DataObjects.
17
- module MySQL
18
- # Database instance methods for MySQL databases accessed via DataObjects.
19
- module DatabaseMethods
20
- include Sequel::MySQL::DatabaseMethods
21
-
22
- private
23
-
24
- # The database name for the given database. Need to parse it out
25
- # of the connection string, since the DataObjects does no parsing on the
26
- # given connection string by default.
27
- def database_name
28
- (m = /\/(.*)/.match(URI.parse(uri).path)) && m[1]
29
- end
30
-
31
- # Recognize the tinyint(1) column as boolean.
32
- def schema_column_type(db_type)
33
- db_type =~ /\Atinyint\(1\)/ ? :boolean : super
34
- end
35
-
36
- # Apply the connectiong setting SQLs for every new connection.
37
- def setup_connection(conn)
38
- mysql_connection_setting_sqls.each{|sql| log_connection_yield(sql, conn){conn.create_command(sql).execute_non_query}}
39
- super
40
- end
41
- end
42
-
43
- # Dataset class for MySQL datasets accessed via DataObjects.
44
- class Dataset < DataObjects::Dataset
45
- include Sequel::MySQL::DatasetMethods
46
-
47
- APOS = "'".freeze
48
- Sequel::Deprecation.deprecate_constant(self, :APOS)
49
- APOS_RE = /'/.freeze
50
- Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
51
- DOUBLE_APOS = "''".freeze
52
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
53
-
54
- # The DataObjects MySQL driver uses the number of rows actually modified in the update,
55
- # instead of the number of matched by the filter.
56
- def provides_accurate_rows_matched?
57
- false
58
- end
59
-
60
- private
61
-
62
- # do_mysql sets NO_BACKSLASH_ESCAPES, so use standard SQL string escaping
63
- def literal_string_append(sql, s)
64
- sql << "'" << s.gsub("'", "''") << "'"
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,46 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::DataObjects.load_driver 'do_postgres'
4
- Sequel.require 'adapters/shared/postgres'
5
-
6
- module Sequel
7
- module DataObjects
8
- Sequel.synchronize do
9
- DATABASE_SETUP[:postgres] = proc do |db|
10
- db.extend(Sequel::DataObjects::Postgres::DatabaseMethods)
11
- db.extend_datasets Sequel::Postgres::DatasetMethods
12
- end
13
- end
14
-
15
- # Adapter, Database, and Dataset support for accessing a PostgreSQL
16
- # database via DataObjects.
17
- module Postgres
18
- # Methods to add to Database instances that access PostgreSQL via
19
- # DataObjects.
20
- module DatabaseMethods
21
- include Sequel::Postgres::DatabaseMethods
22
-
23
- # Add the primary_keys and primary_key_sequences instance variables,
24
- # so we can get the correct return values for inserted rows.
25
- def self.extended(db)
26
- super
27
- db.send(:initialize_postgres_adapter)
28
- end
29
-
30
- private
31
-
32
- DATABASE_ERROR_CLASSES = [::DataObjects::Error].freeze
33
- def database_error_classes
34
- DATABASE_ERROR_CLASSES
35
- end
36
-
37
- # Extend the adapter with the DataObjects PostgreSQL AdapterMethods
38
- def setup_connection(conn)
39
- conn = super(conn)
40
- connection_configuration_sqls.each{|sql| log_connection_yield(sql, conn){conn.create_command(sql).execute_non_query}}
41
- conn
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,41 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::DataObjects.load_driver 'do_sqlite3'
4
- Sequel.require 'adapters/shared/sqlite'
5
-
6
- module Sequel
7
- module DataObjects
8
- Sequel.synchronize do
9
- DATABASE_SETUP[:sqlite3] = proc do |db|
10
- db.extend(Sequel::DataObjects::SQLite::DatabaseMethods)
11
- db.extend_datasets Sequel::SQLite::DatasetMethods
12
- db.set_integer_booleans
13
- end
14
- end
15
-
16
- # Database and Dataset support for SQLite databases accessed via DataObjects.
17
- module SQLite
18
- # Instance methods for SQLite Database objects accessed via DataObjects.
19
- module DatabaseMethods
20
- include Sequel::SQLite::DatabaseMethods
21
-
22
- private
23
-
24
- # Default to a single connection for a memory database.
25
- def connection_pool_default_options
26
- o = super
27
- uri == 'sqlite3::memory:' ? o.merge(:max_connections=>1) : o
28
- end
29
-
30
- # Execute the connection pragmas on the connection
31
- def setup_connection(conn)
32
- connection_pragmas.each do |s|
33
- com = conn.create_command(s)
34
- log_connection_yield(s, conn){com.execute_non_query}
35
- end
36
- super
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,166 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("The do (DataObjects) adapter", "Please consider maintaining it yourself as an external gem if you want to continue using it")
4
-
5
- require 'data_objects'
6
-
7
- module Sequel
8
- # Module holding the DataObjects support for Sequel. DataObjects is a
9
- # ruby library with a standard API for accessing databases.
10
- #
11
- # The DataObjects adapter currently supports PostgreSQL, MySQL, and
12
- # SQLite:
13
- #
14
- # * Sequel.connect('do:sqlite3::memory:')
15
- # * Sequel.connect('do:postgres://user:password@host/database')
16
- # * Sequel.connect('do:mysql://user:password@host/database')
17
- module DataObjects
18
- # Contains procs keyed on subadapter type that extend the
19
- # given database object so it supports the correct database type.
20
- DATABASE_SETUP = {}
21
-
22
- # Wrapper for require that raises AdapterNotFound if driver could not be loaded
23
- def self.load_driver(path)
24
- require path
25
- rescue LoadError => e
26
- raise AdapterNotFound, e.message
27
- end
28
-
29
- # DataObjects uses it's own internal connection pooling in addition to the
30
- # pooling that Sequel uses. You should make sure that you don't set
31
- # the connection pool size to more than 8 for a
32
- # Sequel::DataObjects::Database object, or hack DataObjects (or Extlib) to
33
- # use a pool size at least as large as the pool size being used by Sequel.
34
- class Database < Sequel::Database
35
- DISCONNECT_ERROR_RE = /terminating connection due to administrator command/
36
- Sequel::Deprecation.deprecate_constant(self, :DISCONNECT_ERROR_RE)
37
-
38
- set_adapter_scheme :do
39
-
40
- # Setup a DataObjects::Connection to the database.
41
- def connect(server)
42
- setup_connection(::DataObjects::Connection.new(uri(server_opts(server))))
43
- end
44
-
45
- def disconnect_connection(conn)
46
- conn.dispose
47
- end
48
-
49
- # Execute the given SQL. If a block is given, the DataObjects::Reader
50
- # created is yielded to it. A block should not be provided unless a
51
- # a SELECT statement is being used (or something else that returns rows).
52
- # Otherwise, the return value is the insert id if opts[:type] is :insert,
53
- # or the number of affected rows, otherwise.
54
- def execute(sql, opts=OPTS)
55
- synchronize(opts[:server]) do |conn|
56
- begin
57
- command = conn.create_command(sql)
58
- res = log_connection_yield(sql, conn){block_given? ? command.execute_reader : command.execute_non_query}
59
- rescue ::DataObjects::Error => e
60
- raise_error(e)
61
- end
62
- if block_given?
63
- begin
64
- yield(res)
65
- ensure
66
- res.close if res
67
- end
68
- elsif opts[:type] == :insert
69
- res.insert_id
70
- else
71
- res.affected_rows
72
- end
73
- end
74
- end
75
-
76
- # Execute the SQL on the this database, returning the number of affected
77
- # rows.
78
- def execute_dui(sql, opts=OPTS)
79
- execute(sql, opts)
80
- end
81
-
82
- # Execute the SQL on this database, returning the primary key of the
83
- # table being inserted to.
84
- def execute_insert(sql, opts=OPTS)
85
- execute(sql, opts.merge(:type=>:insert))
86
- end
87
-
88
- # Return the subadapter type for this database, i.e. sqlite3 for
89
- # do:sqlite3::memory:.
90
- def subadapter
91
- uri.split(":").first
92
- end
93
-
94
- # Return the DataObjects URI for the Sequel URI, removing the do:
95
- # prefix.
96
- def uri(opts=OPTS)
97
- opts = @opts.merge(opts)
98
- (opts[:uri] || opts[:url]).sub(/\Ado:/, '')
99
- end
100
-
101
- private
102
-
103
- # Call the DATABASE_SETUP proc directly after initialization,
104
- # so the object always uses subadapter specific code. Also,
105
- # raise an error immediately if the connection doesn't have a
106
- # uri, since DataObjects requires one.
107
- def adapter_initialize
108
- raise(Error, "No connection string specified") unless uri
109
- if prok = Sequel::Database.load_adapter(subadapter.to_sym, :map=>DATABASE_SETUP, :subdir=>'do')
110
- prok.call(self)
111
- end
112
- end
113
-
114
- # Method to call on a statement object to execute SQL that does
115
- # not return any rows.
116
- def connection_execute_method
117
- :execute_non_query
118
- end
119
-
120
- # dataobjects uses the DataObjects::Error class as the main error class.
121
- def database_error_classes
122
- [::DataObjects::Error]
123
- end
124
-
125
- def dataset_class_default
126
- Dataset
127
- end
128
-
129
- # Recognize DataObjects::ConnectionError instances as disconnect errors.
130
- def disconnect_error?(e, opts)
131
- super || (e.is_a?(::DataObjects::Error) && (e.is_a?(::DataObjects::ConnectionError) || e.message =~ /terminating connection due to administrator command/))
132
- end
133
-
134
- # Execute SQL on the connection by creating a command first
135
- def log_connection_execute(conn, sql)
136
- log_connection_yield(sql, conn){conn.create_command(sql).execute_non_query}
137
- end
138
-
139
- # Allow extending the given connection when it is first created.
140
- # By default, just returns the connection.
141
- def setup_connection(conn)
142
- conn
143
- end
144
- end
145
-
146
- # Dataset class for Sequel::DataObjects::Database objects.
147
- class Dataset < Sequel::Dataset
148
- Database::DatasetClass = self
149
- Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
150
-
151
- # Execute the SQL on the database and yield the rows as hashes
152
- # with symbol keys.
153
- def fetch_rows(sql)
154
- execute(sql) do |reader|
155
- cols = self.columns = reader.fields.map{|f| output_identifier(f)}
156
- while(reader.next!) do
157
- h = {}
158
- cols.zip(reader.values).each{|k, v| h[k] = v}
159
- yield h
160
- end
161
- end
162
- self
163
- end
164
- end
165
- end
166
- end
@@ -1,92 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("The jdbc/as400 adapter", "This gem will replace it: https://github.com/ecraft/sequel-jdbc-as400")
4
-
5
- Sequel::JDBC.load_driver('com.ibm.as400.access.AS400JDBCDriver')
6
- Sequel.require 'adapters/jdbc/transactions'
7
- Sequel.require 'adapters/utils/emulate_offset_with_row_number'
8
-
9
- module Sequel
10
- module JDBC
11
- Sequel.synchronize do
12
- DATABASE_SETUP[:as400] = proc do |db|
13
- db.extend(Sequel::JDBC::AS400::DatabaseMethods)
14
- db.dataset_class = Sequel::JDBC::AS400::Dataset
15
- com.ibm.as400.access.AS400JDBCDriver
16
- end
17
- end
18
-
19
- # Database and Dataset support for AS400 databases accessed via JDBC.
20
- module AS400
21
- # Instance methods for AS400 Database objects accessed via JDBC.
22
- module DatabaseMethods
23
- include Sequel::JDBC::Transactions
24
-
25
- TRANSACTION_BEGIN = 'Transaction.begin'.freeze
26
- Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_BEGIN)
27
- TRANSACTION_COMMIT = 'Transaction.commit'.freeze
28
- Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_COMMIT)
29
- TRANSACTION_ROLLBACK = 'Transaction.rollback'.freeze
30
- Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_ROLLBACK)
31
-
32
- # AS400 uses the :as400 database type.
33
- def database_type
34
- :as400
35
- end
36
-
37
- # TODO: Fix for AS400
38
- def last_insert_id(conn, opts=OPTS)
39
- nil
40
- end
41
-
42
- # AS400 supports transaction isolation levels
43
- def supports_transaction_isolation_levels?
44
- true
45
- end
46
-
47
- private
48
-
49
- def disconnect_error?(exception, opts)
50
- super || exception.message =~ /\A(The connection does not exist|Communication link failure)\./
51
- end
52
-
53
- # Use JDBC connection's setAutoCommit to false to start transactions
54
- def begin_transaction(conn, opts=OPTS)
55
- set_transaction_isolation(conn, opts)
56
- super
57
- end
58
- end
59
-
60
- # Dataset class for AS400 datasets accessed via JDBC.
61
- class Dataset < JDBC::Dataset
62
- include EmulateOffsetWithRowNumber
63
-
64
- WILDCARD = Sequel::LiteralString.new('*').freeze
65
- Sequel::Deprecation.deprecate_constant(self, :WILDCARD)
66
- FETCH_FIRST_ROW_ONLY = " FETCH FIRST ROW ONLY".freeze
67
- Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST_ROW_ONLY)
68
- FETCH_FIRST = " FETCH FIRST ".freeze
69
- Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST)
70
- ROWS_ONLY = " ROWS ONLY".freeze
71
- Sequel::Deprecation.deprecate_constant(self, :ROWS_ONLY)
72
-
73
- # Modify the sql to limit the number of rows returned
74
- def select_limit_sql(sql)
75
- if l = @opts[:limit]
76
- if l == 1
77
- sql << " FETCH FIRST ROW ONLY"
78
- elsif l > 1
79
- sql << " FETCH FIRST "
80
- literal_append(sql, l)
81
- sql << " ROWS ONLY"
82
- end
83
- end
84
- end
85
-
86
- def supports_window_functions?
87
- true
88
- end
89
- end
90
- end
91
- end
92
- end
@@ -1,65 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- #SEQUEL5: Remove
4
-
5
- Sequel::JDBC.load_driver('Java::cubrid.jdbc.driver.CUBRIDDriver')
6
- Sequel.require 'adapters/shared/cubrid'
7
- Sequel.require 'adapters/jdbc/transactions'
8
-
9
- module Sequel
10
- module JDBC
11
- Sequel.synchronize do
12
- DATABASE_SETUP[:cubrid] = proc do |db|
13
- db.extend(Sequel::JDBC::Cubrid::DatabaseMethods)
14
- db.extend_datasets Sequel::Cubrid::DatasetMethods
15
- Java::cubrid.jdbc.driver.CUBRIDDriver
16
- end
17
- end
18
-
19
- module Cubrid
20
- module DatabaseMethods
21
- include Sequel::Cubrid::DatabaseMethods
22
- include Sequel::JDBC::Transactions
23
-
24
- def supports_savepoints?
25
- false
26
- end
27
-
28
- private
29
-
30
- # Get the last inserted id using LAST_INSERT_ID().
31
- def last_insert_id(conn, opts=OPTS)
32
- if stmt = opts[:stmt]
33
- rs = stmt.getGeneratedKeys
34
- begin
35
- if rs.next
36
- rs.getLong(1)
37
- end
38
- rescue NativeException
39
- nil
40
- ensure
41
- rs.close
42
- end
43
- end
44
- end
45
-
46
- # Use execute instead of executeUpdate.
47
- def execute_prepared_statement_insert(stmt)
48
- stmt.execute
49
- end
50
-
51
- # Return generated keys for insert statements, and use
52
- # execute intead of executeUpdate as CUBRID doesn't
53
- # return generated keys in executeUpdate.
54
- def execute_statement_insert(stmt, sql)
55
- stmt.execute(sql, JavaSQL::Statement.RETURN_GENERATED_KEYS)
56
- end
57
-
58
- # Return generated keys for insert statements.
59
- def prepare_jdbc_statement(conn, sql, opts)
60
- opts[:type] == :insert ? conn.prepareStatement(sql, JavaSQL::Statement.RETURN_GENERATED_KEYS) : super
61
- end
62
- end
63
- end
64
- end
65
- end
@@ -1,37 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- #SEQUEL5: Remove
4
-
5
- Sequel::JDBC.load_driver('org.firebirdsql.jdbc.FBDriver')
6
- Sequel.require 'adapters/shared/firebird'
7
- Sequel.require 'adapters/jdbc/transactions'
8
-
9
- module Sequel
10
- module JDBC
11
- Sequel.synchronize do
12
- DATABASE_SETUP[:firebirdsql] = proc do |db|
13
- db.extend(Sequel::JDBC::Firebird::DatabaseMethods)
14
- db.extend_datasets Sequel::Firebird::DatasetMethods
15
- org.firebirdsql.jdbc.FBDriver
16
- end
17
- end
18
-
19
- # Database and Dataset instance methods for Firebird specific
20
- # support via JDBC.
21
- module Firebird
22
- # Database instance methods for Firebird databases accessed via JDBC.
23
- module DatabaseMethods
24
- include Sequel::Firebird::DatabaseMethods
25
- include Sequel::JDBC::Transactions
26
-
27
- # Add the primary_keys and primary_key_sequences instance variables,
28
- # so we can get the correct return values for inserted rows.
29
- def self.extended(db)
30
- db.instance_eval do
31
- @primary_keys = {}
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end