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,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
@@ -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