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,34 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- #SEQUEL5: Remove
4
-
5
- Sequel::JDBC.load_driver('com.informix.jdbc.IfxDriver')
6
- Sequel.require 'adapters/shared/informix'
7
-
8
- module Sequel
9
- module JDBC
10
- Sequel.synchronize do
11
- DATABASE_SETUP[:"informix-sqli"] = proc do |db|
12
- db.extend(Sequel::JDBC::Informix::DatabaseMethods)
13
- db.extend_datasets Sequel::Informix::DatasetMethods
14
- com.informix.jdbc.IfxDriver
15
- end
16
- end
17
-
18
- # Database and Dataset instance methods for Informix specific
19
- # support via JDBC.
20
- module Informix
21
- # Database instance methods for Informix databases accessed via JDBC.
22
- module DatabaseMethods
23
- include Sequel::Informix::DatabaseMethods
24
-
25
- private
26
-
27
- # TODO: implement
28
- def last_insert_id(conn, opts=OPTS)
29
- nil
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,34 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- #SEQUEL5: Remove
4
-
5
- Sequel::JDBC.load_driver('com.progress.sql.jdbc.JdbcProgressDriver')
6
- Sequel.require 'adapters/shared/progress'
7
- Sequel.require 'adapters/jdbc/transactions'
8
-
9
- module Sequel
10
- module JDBC
11
- Sequel.synchronize do
12
- DATABASE_SETUP[:jdbcprogress] = proc do |db|
13
- db.extend(Sequel::JDBC::Progress::DatabaseMethods)
14
- db.extend_datasets Sequel::Progress::DatasetMethods
15
- com.progress.sql.jdbc.JdbcProgressDriver
16
- end
17
- end
18
-
19
- # Database and Dataset instance methods for Progress v9 specific
20
- # support via JDBC.
21
- module Progress
22
- # Database instance methods for Progress databases accessed via JDBC.
23
- module DatabaseMethods
24
- include Sequel::Progress::DatabaseMethods
25
- include Sequel::JDBC::Transactions
26
-
27
- # Progress DatabaseMetaData doesn't even implement supportsSavepoints()
28
- def supports_savepoints?
29
- false
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,12 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- #SEQUEL5: Remove
4
-
5
- Sequel.require 'adapters/shared/progress'
6
-
7
- Sequel.synchronize do
8
- Sequel::ODBC::DATABASE_SETUP[:progress] = proc do |db|
9
- db.extend Sequel::Progress::DatabaseMethods
10
- db.extend_datasets(Sequel::Progress::DatasetMethods)
11
- end
12
- end
@@ -1,245 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("Sequel support for Cubrid", "Please consider maintaining it yourself as an external sequel adapter if you want to continue using it")
4
-
5
- Sequel.require %w'split_alter_table unmodified_identifiers', 'adapters/utils'
6
-
7
- module Sequel
8
- module Cubrid
9
- Sequel::Database.set_shared_adapter_scheme(:cubrid, self)
10
-
11
- module DatabaseMethods
12
- include Sequel::Database::SplitAlterTable
13
- include UnmodifiedIdentifiers::DatabaseMethods
14
-
15
- AUTOINCREMENT = 'AUTO_INCREMENT'.freeze
16
- Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
17
- COLUMN_DEFINITION_ORDER = [:auto_increment, :default, :null, :unique, :primary_key, :references]#.freeze # SEQUEL5
18
-
19
- def database_type
20
- :cubrid
21
- end
22
-
23
- def indexes(table, opts=OPTS)
24
- m = output_identifier_meth
25
- m2 = input_identifier_meth
26
- indexes = {}
27
- metadata_dataset.
28
- from{db_index[:i]}.
29
- join(Sequel[:db_index_key].as(:k), :index_name=>:index_name, :class_name=>:class_name).
30
- where{{i[:class_name]=>m2.call(table), :is_primary_key=>'NO'}}.
31
- order{k[:key_order]}.
32
- select{[i[:index_name], k[:key_attr_name].as(:column), :is_unique]}.
33
- each do |row|
34
- index = indexes[m.call(row[:index_name])] ||= {:columns=>[], :unique=>row[:is_unique]=='YES'}
35
- index[:columns] << m.call(row[:column])
36
- end
37
- indexes
38
- end
39
-
40
- def supports_savepoints?
41
- false
42
- end
43
-
44
- def schema_parse_table(table_name, opts)
45
- m = output_identifier_meth(opts[:dataset])
46
- m2 = input_identifier_meth(opts[:dataset])
47
-
48
- pks = metadata_dataset.
49
- from{db_index[:i]}.
50
- join(Sequel[:db_index_key].as(:k), :index_name=>:index_name, :class_name=>:class_name).
51
- where{{i[:class_name]=>m2.call(table_name), :is_primary_key=>'YES'}}.
52
- order{k[:key_order]}.
53
- select_map{k[:key_attr_name]}.
54
- map{|c| m.call(c)}
55
-
56
- metadata_dataset.
57
- from(:db_attribute).
58
- where(:class_name=>m2.call(table_name)).
59
- order(:def_order).
60
- select{[:attr_name, data_type.as(:db_type), default_value.as(:default), is_nullable.as(:allow_null), :prec]}.
61
- map do |row|
62
- name = m.call(row.delete(:attr_name))
63
- row[:allow_null] = row[:allow_null] == 'YES'
64
- row[:primary_key] = pks.include?(name)
65
- row[:type] = schema_column_type(row[:db_type])
66
- row[:max_length] = row[:prec] if row[:type] == :string
67
- [name, row]
68
- end
69
- end
70
-
71
- def tables(opts=OPTS)
72
- _tables('CLASS')
73
- end
74
-
75
- def views(opts=OPTS)
76
- _tables('VCLASS')
77
- end
78
-
79
- private
80
-
81
- def _tables(type)
82
- m = output_identifier_meth
83
- metadata_dataset.
84
- from(:db_class).
85
- where(:is_system_class=>'NO', :class_type=>type).
86
- select_map(:class_name).
87
- map{|c| m.call(c)}
88
- end
89
-
90
- def alter_table_rename_column_sql(table, op)
91
- "RENAME COLUMN #{quote_identifier(op[:name])} AS #{quote_identifier(op[:new_name])}"
92
- end
93
-
94
- def alter_table_change_column_sql(table, op)
95
- o = op[:op]
96
- opts = schema(table).find{|x| x.first == op[:name]}
97
- opts = opts ? opts.last.dup : {}
98
- opts[:name] = o == :rename_column ? op[:new_name] : op[:name]
99
- opts[:type] = o == :set_column_type ? op[:type] : opts[:db_type]
100
- opts[:null] = o == :set_column_null ? op[:null] : opts[:allow_null]
101
- opts[:default] = o == :set_column_default ? op[:default] : opts[:ruby_default]
102
- opts.delete(:default) if opts[:default] == nil
103
- "CHANGE COLUMN #{quote_identifier(op[:name])} #{column_definition_sql(op.merge(opts))}"
104
- end
105
- alias alter_table_set_column_type_sql alter_table_change_column_sql
106
- alias alter_table_set_column_null_sql alter_table_change_column_sql
107
- alias alter_table_set_column_default_sql alter_table_change_column_sql
108
-
109
- def alter_table_sql(table, op)
110
- case op[:op]
111
- when :drop_index
112
- "ALTER TABLE #{quote_schema_table(table)} #{drop_index_sql(table, op)}"
113
- else
114
- super
115
- end
116
- end
117
-
118
- def auto_increment_sql
119
- 'AUTO_INCREMENT'
120
- end
121
-
122
- # CUBRID requires auto increment before primary key
123
- def column_definition_order
124
- COLUMN_DEFINITION_ORDER
125
- end
126
-
127
- # CUBRID requires FOREIGN KEY keywords before a column reference
128
- def column_references_sql(column)
129
- sql = super
130
- sql = " FOREIGN KEY#{sql}" unless column[:columns]
131
- sql
132
- end
133
-
134
- def connection_execute_method
135
- :query
136
- end
137
-
138
- DATABASE_ERROR_REGEXPS = {
139
- /Operation would have caused one or more unique constraint violations/ => UniqueConstraintViolation,
140
- /The constraint of the foreign key .+ is invalid|Update\/Delete operations are restricted by the foreign key/ => ForeignKeyConstraintViolation,
141
- /cannot be made NULL/ => NotNullConstraintViolation,
142
- /Your transaction .+ has been unilaterally aborted by the system/ => SerializationFailure,
143
- }.freeze
144
- def database_error_regexps
145
- DATABASE_ERROR_REGEXPS
146
- end
147
-
148
- # CUBRID does not support named column constraints.
149
- def supports_named_column_constraints?
150
- false
151
- end
152
-
153
- # CUBRID doesn't support booleans, it recommends using smallint.
154
- def type_literal_generic_trueclass(column)
155
- :smallint
156
- end
157
-
158
- # CUBRID uses clob for text types.
159
- def uses_clob_for_text?
160
- true
161
- end
162
-
163
- # CUBRID supports views with check option, but not local.
164
- def view_with_check_option_support
165
- true
166
- end
167
- end
168
-
169
- module DatasetMethods
170
- include UnmodifiedIdentifiers::DatasetMethods
171
-
172
- COMMA = ', '.freeze
173
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
174
- LIMIT = " LIMIT ".freeze
175
- Sequel::Deprecation.deprecate_constant(self, :LIMIT)
176
- BOOL_FALSE = '0'.freeze
177
- Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
178
- BOOL_TRUE = '1'.freeze
179
- Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
180
- ONLY_OFFSET = ",4294967295".freeze
181
- Sequel::Deprecation.deprecate_constant(self, :ONLY_OFFSET)
182
-
183
- def supports_join_using?
184
- false
185
- end
186
-
187
- def supports_multiple_column_in?
188
- false
189
- end
190
-
191
- def supports_timestamp_usecs?
192
- false
193
- end
194
-
195
- # CUBRID supposedly supports TRUNCATE, but it appears not to work in my testing.
196
- # Fallback to using DELETE.
197
- def truncate
198
- delete
199
- nil
200
- end
201
-
202
- private
203
-
204
- def literal_false
205
- '0'
206
- end
207
-
208
- def literal_true
209
- '1'
210
- end
211
-
212
- # CUBRID supports multiple rows in INSERT.
213
- def multi_insert_sql_strategy
214
- :values
215
- end
216
-
217
- # CUBRID requires a limit to use an offset,
218
- # and requires a FROM table if a limit is used.
219
- def select_limit_sql(sql)
220
- return unless @opts[:from]
221
- l = @opts[:limit]
222
- o = @opts[:offset]
223
- if l || o
224
- sql << " LIMIT "
225
- if o
226
- literal_append(sql, o)
227
- if l
228
- sql << ', '
229
- literal_append(sql, l)
230
- else
231
- # Hope you don't have more than 2**32 + offset rows in your dataset
232
- sql << ",4294967295"
233
- end
234
- else
235
- literal_append(sql, l)
236
- end
237
- end
238
- end
239
-
240
- # CUBRID doesn't support FOR UPDATE.
241
- def select_lock_sql(sql)
242
- end
243
- end
244
- end
245
- end
@@ -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