sequel 4.49.0 → 5.0.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 (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  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/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,261 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("Sequel support for Firebird", "Please consider maintaining it yourself as an external sequel adapter if you want to continue using it")
4
-
5
- module Sequel
6
- module Firebird
7
- Sequel::Database.set_shared_adapter_scheme(:firebird, self)
8
-
9
- module DatabaseMethods
10
- AUTO_INCREMENT = ''.freeze
11
- Sequel::Deprecation.deprecate_constant(self, :AUTO_INCREMENT)
12
- TEMPORARY = 'GLOBAL TEMPORARY '.freeze
13
- Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
14
-
15
- def clear_primary_key(*tables)
16
- tables.each{|t| @primary_keys.delete(dataset.send(:input_identifier, t))}
17
- end
18
-
19
- def create_trigger(*args)
20
- self << create_trigger_sql(*args)
21
- end
22
-
23
- def database_type
24
- :firebird
25
- end
26
-
27
- def drop_sequence(name)
28
- self << drop_sequence_sql(name)
29
- end
30
-
31
- # Return primary key for the given table.
32
- def primary_key(table)
33
- t = dataset.send(:input_identifier, table)
34
- @primary_keys.fetch(t) do
35
- pk = fetch("SELECT RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS NATURAL JOIN RDB$RELATION_CONSTRAINTS WHERE RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND RDB$RELATION_NAME = ?", t).single_value
36
- @primary_keys[t] = dataset.send(:output_identifier, pk.rstrip) if pk
37
- end
38
- end
39
-
40
- def restart_sequence(*args)
41
- self << restart_sequence_sql(*args)
42
- end
43
-
44
- def sequences(opts=OPTS)
45
- ds = self[:"rdb$generators"].server(opts[:server]).where(:"rdb$system_flag" => 0).select(:"rdb$generator_name")
46
- block_given? ? yield(ds) : ds.map{|r| ds.send(:output_identifier, r[:"rdb$generator_name"])}
47
- end
48
-
49
- def tables(opts=OPTS)
50
- tables_or_views(0, opts)
51
- end
52
-
53
- def views(opts=OPTS)
54
- tables_or_views(1, opts)
55
- end
56
-
57
- private
58
-
59
- def temporary_table_sql
60
- 'GLOBAL TEMPORARY '
61
- end
62
-
63
- # Use Firebird specific syntax for add column
64
- def alter_table_sql(table, op)
65
- case op[:op]
66
- when :add_column
67
- "ALTER TABLE #{quote_schema_table(table)} ADD #{column_definition_sql(op)}"
68
- when :drop_column
69
- "ALTER TABLE #{quote_schema_table(table)} DROP #{column_definition_sql(op)}"
70
- when :rename_column
71
- "ALTER TABLE #{quote_schema_table(table)} ALTER #{quote_identifier(op[:name])} TO #{quote_identifier(op[:new_name])}"
72
- when :set_column_type
73
- "ALTER TABLE #{quote_schema_table(table)} ALTER #{quote_identifier(op[:name])} TYPE #{type_literal(op)}"
74
- else
75
- super(table, op)
76
- end
77
- end
78
-
79
- def auto_increment_sql
80
- ''
81
- end
82
-
83
- def create_sequence_sql(name, opts=OPTS)
84
- "CREATE SEQUENCE #{quote_identifier(name)}"
85
- end
86
-
87
- # Firebird gets an override because of the mess of creating a
88
- # sequence and trigger for auto-incrementing primary keys.
89
- def create_table_from_generator(name, generator, options)
90
- drop_statement, create_statements = create_table_sql_list(name, generator, options)
91
- (execute_ddl(drop_statement) rescue nil) if drop_statement
92
- create_statements.each{|sql| execute_ddl(sql)}
93
- end
94
-
95
- def create_table_sql_list(name, generator, options=OPTS)
96
- statements = [create_table_sql(name, generator, options)]
97
- drop_seq_statement = nil
98
- generator.columns.each do |c|
99
- if c[:auto_increment]
100
- c[:sequence_name] ||= "seq_#{name}_#{c[:name]}"
101
- unless c[:create_sequence] == false
102
- drop_seq_statement = drop_sequence_sql(c[:sequence_name])
103
- statements << create_sequence_sql(c[:sequence_name])
104
- statements << restart_sequence_sql(c[:sequence_name], {:restart_position => c[:sequence_start_position]}) if c[:sequence_start_position]
105
- end
106
- unless c[:create_trigger] == false
107
- c[:trigger_name] ||= "BI_#{name}_#{c[:name]}"
108
- c[:quoted_name] = quote_identifier(c[:name])
109
- trigger_definition = <<-END
110
- begin
111
- if ((new.#{c[:quoted_name]} is null) or (new.#{c[:quoted_name]} = 0)) then
112
- begin
113
- new.#{c[:quoted_name]} = next value for #{c[:sequence_name]};
114
- end
115
- end
116
- END
117
- statements << create_trigger_sql(name, c[:trigger_name], trigger_definition, {:events => [:insert]})
118
- end
119
- end
120
- end
121
- [drop_seq_statement, statements]
122
- end
123
-
124
- def create_trigger_sql(table, name, definition, opts=OPTS)
125
- events = opts[:events] ? Array(opts[:events]) : [:insert, :update, :delete]
126
- whence = opts[:after] ? 'AFTER' : 'BEFORE'
127
- inactive = opts[:inactive] ? 'INACTIVE' : 'ACTIVE'
128
- position = opts.fetch(:position, 0)
129
- sql = <<-end_sql
130
- CREATE TRIGGER #{quote_identifier(name)} for #{quote_identifier(table)}
131
- #{inactive} #{whence} #{events.map{|e| e.to_s.upcase}.join(' OR ')} position #{position}
132
- as #{definition}
133
- end_sql
134
- sql
135
- end
136
-
137
- def drop_sequence_sql(name)
138
- "DROP SEQUENCE #{quote_identifier(name)}"
139
- end
140
-
141
- def remove_cached_schema(table)
142
- clear_primary_key(table)
143
- super
144
- end
145
-
146
- def restart_sequence_sql(name, opts=OPTS)
147
- seq_name = quote_identifier(name)
148
- "ALTER SEQUENCE #{seq_name} RESTART WITH #{opts[:restart_position]}"
149
- end
150
-
151
- def tables_or_views(type, opts)
152
- ds = self[:"rdb$relations"].server(opts[:server]).where(:"rdb$relation_type" => type, Sequel::SQL::Function.new(:COALESCE, :"rdb$system_flag", 0) => 0).select(:"rdb$relation_name")
153
- ds.map{|r| ds.send(:output_identifier, r[:"rdb$relation_name"].rstrip)}
154
- end
155
-
156
- def type_literal_generic_string(column)
157
- column[:text] ? :"BLOB SUB_TYPE TEXT" : super
158
- end
159
-
160
- # Firebird supports views with check option, but not local.
161
- def view_with_check_option_support
162
- true
163
- end
164
- end
165
-
166
- module DatasetMethods
167
- NULL = LiteralString.new('NULL').freeze
168
-
169
- BOOL_TRUE = '1'.freeze
170
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
171
- BOOL_FALSE = '0'.freeze
172
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
173
- FIRST = " FIRST ".freeze
174
- Sequel::Deprecation.deprecate_constant(self, :FIRST)
175
- SKIP = " SKIP ".freeze
176
- Sequel::Deprecation.deprecate_constant(self, :SKIP)
177
- DEFAULT_FROM = " FROM RDB$DATABASE"
178
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_FROM)
179
-
180
- Dataset.def_sql_method(self, :select, %w'with select distinct limit columns from join where group having compounds order')
181
- Dataset.def_sql_method(self, :insert, %w'insert into columns values returning')
182
-
183
- # Insert given values into the database.
184
- def insert(*values)
185
- if @opts[:sql] || @opts[:returning]
186
- super
187
- else
188
- returning(insert_pk).insert(*values){|r| return r.values.first}
189
- end
190
- end
191
-
192
- # Insert a record returning the record inserted
193
- def insert_select(*values)
194
- with_sql_first(insert_select_sql(*values))
195
- end
196
-
197
- # The SQL to use for an insert_select, adds a RETURNING clause to the insert
198
- # unless the RETURNING clause is already present.
199
- def insert_select_sql(*values)
200
- ds = opts[:returning] ? self : returning
201
- ds.insert_sql(*values)
202
- end
203
-
204
- def requires_sql_standard_datetimes?
205
- true
206
- end
207
-
208
- def supports_cte?(type=:select)
209
- type == :select
210
- end
211
-
212
- def supports_insert_select?
213
- true
214
- end
215
-
216
- # Firebird does not support INTERSECT or EXCEPT
217
- def supports_intersect_except?
218
- false
219
- end
220
-
221
- def supports_returning?(type)
222
- type == :insert
223
- end
224
-
225
- private
226
-
227
- def empty_from_sql
228
- " FROM RDB$DATABASE"
229
- end
230
-
231
- def insert_pk(*values)
232
- pk = db.primary_key(opts[:from].first)
233
- pk ? Sequel::SQL::Identifier.new(pk) : NULL
234
- end
235
-
236
- def literal_false
237
- '0'
238
- end
239
-
240
- def literal_true
241
- '1'
242
- end
243
-
244
- # Firebird can insert multiple rows using a UNION
245
- def multi_insert_sql_strategy
246
- :union
247
- end
248
-
249
- def select_limit_sql(sql)
250
- if l = @opts[:limit]
251
- sql << " FIRST "
252
- literal_append(sql, l)
253
- end
254
- if o = @opts[:offset]
255
- sql << " SKIP "
256
- literal_append(sql, o)
257
- end
258
- end
259
- end
260
- end
261
- end
@@ -1,63 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("Sequel support for Informix", "Please consider maintaining it yourself as an external sequel adapter if you want to continue using it")
4
-
5
- module Sequel
6
- module Informix
7
- Sequel::Database.set_shared_adapter_scheme(:informix, self)
8
-
9
- module DatabaseMethods
10
- TEMPORARY = 'TEMP '.freeze
11
- Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
12
-
13
- # Informix uses the :informix database type
14
- def database_type
15
- :informix
16
- end
17
-
18
- private
19
-
20
- # Informix has issues with quoted identifiers, so
21
- # turn off database quoting by default.
22
- def quote_identifiers_default
23
- false
24
- end
25
-
26
- # SQL fragment for showing a table is temporary
27
- def temporary_table_sql
28
- 'TEMP '
29
- end
30
- end
31
-
32
- module DatasetMethods
33
- FIRST = " FIRST ".freeze
34
- Sequel::Deprecation.deprecate_constant(self, :FIRST)
35
- SKIP = " SKIP ".freeze
36
- Sequel::Deprecation.deprecate_constant(self, :SKIP)
37
-
38
- Dataset.def_sql_method(self, :select, %w'select limit distinct columns from join where having group compounds order')
39
-
40
- def quote_identifiers?
41
- @opts.fetch(:quote_identifiers, false)
42
- end
43
-
44
- # Informix does not support INTERSECT or EXCEPT
45
- def supports_intersect_except?
46
- false
47
- end
48
-
49
- private
50
-
51
- def select_limit_sql(sql)
52
- if o = @opts[:offset]
53
- sql << " SKIP "
54
- literal_append(sql, o)
55
- end
56
- if l = @opts[:limit]
57
- sql << " FIRST "
58
- literal_append(sql, l)
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,40 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("Sequel support for Progress", "Please consider maintaining it yourself as an external sequel adapter if you want to continue using it")
4
-
5
- module Sequel
6
- module Progress
7
- module DatabaseMethods
8
- # Progress uses the :progress database type.
9
- def database_type
10
- :progress
11
- end
12
- end
13
-
14
- module DatasetMethods
15
- Dataset.def_sql_method(self, :select, %w'select limit distinct columns from join where group order having compounds')
16
-
17
- # Progress requires SQL standard datetimes
18
- def requires_sql_standard_datetimes?
19
- true
20
- end
21
-
22
- # Progress does not support INTERSECT or EXCEPT
23
- def supports_intersect_except?
24
- false
25
- end
26
-
27
- private
28
-
29
- # Progress uses TOP for limit, but it is only supported in Progress 10.
30
- # The Progress adapter targets Progress 9, so it silently ignores the option.
31
- def select_limit_sql(sql)
32
- raise(Error, "OFFSET not supported") if @opts[:offset]
33
- # if l = @opts[:limit]
34
- # sql << " TOP "
35
- # literal_append(sql, l)
36
- # end
37
- end
38
- end
39
- end
40
- end
@@ -1,169 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("The swift adapter", "Please consider maintaining it yourself as an external gem if you want to continue using it")
4
-
5
- module Sequel
6
- # Module holding the Swift DB support for Sequel. Swift DB is a
7
- # collection of drivers used in Swift ORM.
8
- #
9
- # The Swift adapter currently supports PostgreSQL, MySQL and SQLite3
10
- #
11
- # Sequel.connect('swift://user:password@host/database?db_type=postgres')
12
- # Sequel.connect('swift://user:password@host/database?db_type=mysql')
13
- module Swift
14
- # Contains procs keyed on sub adapter type that extend the
15
- # given database object so it supports the correct database type.
16
- DATABASE_SETUP = {:postgres=>proc do |db|
17
- db.extend(Sequel::Swift::Postgres::DatabaseMethods)
18
- db.extend_datasets Sequel::Postgres::DatasetMethods
19
- db.swift_class = ::Swift::DB::Postgres
20
- end,
21
- :mysql=>proc do |db|
22
- db.extend(Sequel::Swift::MySQL::DatabaseMethods)
23
- db.dataset_class = Sequel::Swift::MySQL::Dataset
24
- db.swift_class = ::Swift::DB::Mysql
25
- end,
26
- :sqlite=>proc do |db|
27
- db.extend(Sequel::Swift::SQLite::DatabaseMethods)
28
- db.dataset_class = Sequel::Swift::SQLite::Dataset
29
- db.swift_class = ::Swift::DB::Sqlite3
30
- db.set_integer_booleans
31
- end,
32
- }
33
-
34
- class Database < Sequel::Database
35
- set_adapter_scheme :swift
36
-
37
- # The Swift adapter class being used by this database. Connections
38
- # in this database's connection pool will be instances of this class.
39
- attr_accessor :swift_class
40
-
41
- def initialize(opts=OPTS)
42
- Sequel.require "adapters/swift/#{opts[:db_type]}" if %w'postgres mysql sqlite'.include?(opts[:db_type].to_s)
43
- super
44
- end
45
-
46
- # Create an instance of swift_class for the given options.
47
- def connect(server)
48
- opts = server_opts(server)
49
- opts[:pass] = opts[:password]
50
- setup_connection(swift_class.new(opts))
51
- end
52
-
53
- # Execute the given SQL, yielding a Swift::Result if a block is given.
54
- def execute(sql, opts=OPTS)
55
- synchronize(opts[:server]) do |conn|
56
- begin
57
- res = log_connection_yield(sql, conn){conn.execute(sql)}
58
- yield res if block_given?
59
- nil
60
- rescue ::Swift::Error => e
61
- raise_error(e)
62
- end
63
- end
64
- end
65
-
66
- # Execute the SQL on the this database, returning the number of affected
67
- # rows.
68
- def execute_dui(sql, opts=OPTS)
69
- synchronize(opts[:server]) do |conn|
70
- begin
71
- log_connection_yield(sql, conn){conn.execute(sql).affected_rows}
72
- rescue ::Swift::Error => e
73
- raise_error(e)
74
- end
75
- end
76
- end
77
-
78
- # Execute the SQL on this database, returning the primary key of the
79
- # table being inserted to.
80
- def execute_insert(sql, opts=OPTS)
81
- synchronize(opts[:server]) do |conn|
82
- begin
83
- log_connection_yield(sql, conn){conn.execute(sql).insert_id}
84
- rescue ::Swift::Error => e
85
- raise_error(e)
86
- end
87
- end
88
- end
89
-
90
- private
91
-
92
- # Call the DATABASE_SETUP proc directly after initialization,
93
- # so the object always uses sub adapter specific code. Also,
94
- # raise an error immediately if the connection doesn't have a
95
- # db_type specified, since one is required to include the correct
96
- # subadapter.
97
- def adapter_initialize
98
- if db_type = @opts[:db_type] and !db_type.to_s.empty?
99
- if prok = DATABASE_SETUP[db_type.to_s.to_sym]
100
- prok.call(self)
101
- else
102
- raise(Error, "No :db_type option specified")
103
- end
104
- else
105
- raise(Error, ":db_type option not valid, should be postgres, mysql, or sqlite")
106
- end
107
- end
108
-
109
- # Method to call on a statement object to execute SQL that does
110
- # not return any rows.
111
- def connection_execute_method
112
- :execute
113
- end
114
-
115
- def database_error_classes
116
- [::Swift::Error]
117
- end
118
-
119
- def dataset_class_default
120
- Dataset
121
- end
122
-
123
- # Set the :db entry to the same as the :database entry, since
124
- # Swift uses :db.
125
- def server_opts(o)
126
- o = super
127
- o[:db] ||= o[:database]
128
- o
129
- end
130
-
131
- # Allow extending the given connection when it is first created.
132
- # By default, just returns the connection.
133
- def setup_connection(conn)
134
- conn
135
- end
136
- end
137
-
138
- class Dataset < Sequel::Dataset
139
- Database::DatasetClass = self
140
- Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
141
-
142
- # Set the columns and yield the hashes to the block.
143
- def fetch_rows(sql)
144
- execute(sql) do |res|
145
- col_map = {}
146
- self.columns = res.fields.map do |c|
147
- col_map[c] = output_identifier(c)
148
- end
149
- tz = db.timezone if Sequel.application_timezone
150
- res.each do |r|
151
- h = {}
152
- r.each do |k, v|
153
- h[col_map[k]] = case v
154
- when StringIO
155
- SQL::Blob.new(v.read)
156
- when DateTime
157
- tz ? Sequel.database_to_application_timestamp(Sequel.send(:convert_input_datetime_no_offset, v, tz)) : v
158
- else
159
- v
160
- end
161
- end
162
- yield h
163
- end
164
- end
165
- self
166
- end
167
- end
168
- end
169
- end