sequel 5.29.0 → 5.30.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (323) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +8 -1922
  3. data/doc/release_notes/5.30.0.txt +20 -0
  4. data/lib/sequel/adapters/shared/sqlite.rb +7 -1
  5. data/lib/sequel/database/transactions.rb +5 -9
  6. data/lib/sequel/version.rb +1 -1
  7. metadata +4 -368
  8. data/Rakefile +0 -151
  9. data/doc/release_notes/4.0.0.txt +0 -262
  10. data/doc/release_notes/4.1.0.txt +0 -85
  11. data/doc/release_notes/4.10.0.txt +0 -226
  12. data/doc/release_notes/4.11.0.txt +0 -147
  13. data/doc/release_notes/4.12.0.txt +0 -105
  14. data/doc/release_notes/4.13.0.txt +0 -169
  15. data/doc/release_notes/4.14.0.txt +0 -68
  16. data/doc/release_notes/4.15.0.txt +0 -56
  17. data/doc/release_notes/4.16.0.txt +0 -36
  18. data/doc/release_notes/4.17.0.txt +0 -38
  19. data/doc/release_notes/4.18.0.txt +0 -36
  20. data/doc/release_notes/4.19.0.txt +0 -45
  21. data/doc/release_notes/4.2.0.txt +0 -129
  22. data/doc/release_notes/4.20.0.txt +0 -79
  23. data/doc/release_notes/4.21.0.txt +0 -94
  24. data/doc/release_notes/4.22.0.txt +0 -72
  25. data/doc/release_notes/4.23.0.txt +0 -65
  26. data/doc/release_notes/4.24.0.txt +0 -99
  27. data/doc/release_notes/4.25.0.txt +0 -181
  28. data/doc/release_notes/4.26.0.txt +0 -44
  29. data/doc/release_notes/4.27.0.txt +0 -78
  30. data/doc/release_notes/4.28.0.txt +0 -57
  31. data/doc/release_notes/4.29.0.txt +0 -41
  32. data/doc/release_notes/4.3.0.txt +0 -40
  33. data/doc/release_notes/4.30.0.txt +0 -37
  34. data/doc/release_notes/4.31.0.txt +0 -57
  35. data/doc/release_notes/4.32.0.txt +0 -132
  36. data/doc/release_notes/4.33.0.txt +0 -88
  37. data/doc/release_notes/4.34.0.txt +0 -86
  38. data/doc/release_notes/4.35.0.txt +0 -130
  39. data/doc/release_notes/4.36.0.txt +0 -116
  40. data/doc/release_notes/4.37.0.txt +0 -50
  41. data/doc/release_notes/4.38.0.txt +0 -67
  42. data/doc/release_notes/4.39.0.txt +0 -127
  43. data/doc/release_notes/4.4.0.txt +0 -92
  44. data/doc/release_notes/4.40.0.txt +0 -179
  45. data/doc/release_notes/4.41.0.txt +0 -77
  46. data/doc/release_notes/4.42.0.txt +0 -221
  47. data/doc/release_notes/4.43.0.txt +0 -87
  48. data/doc/release_notes/4.44.0.txt +0 -125
  49. data/doc/release_notes/4.45.0.txt +0 -370
  50. data/doc/release_notes/4.46.0.txt +0 -404
  51. data/doc/release_notes/4.47.0.txt +0 -56
  52. data/doc/release_notes/4.48.0.txt +0 -293
  53. data/doc/release_notes/4.49.0.txt +0 -222
  54. data/doc/release_notes/4.5.0.txt +0 -34
  55. data/doc/release_notes/4.6.0.txt +0 -30
  56. data/doc/release_notes/4.7.0.txt +0 -103
  57. data/doc/release_notes/4.8.0.txt +0 -175
  58. data/doc/release_notes/4.9.0.txt +0 -190
  59. data/spec/adapter_spec.rb +0 -4
  60. data/spec/adapters/db2_spec.rb +0 -170
  61. data/spec/adapters/mssql_spec.rb +0 -828
  62. data/spec/adapters/mysql_spec.rb +0 -1060
  63. data/spec/adapters/oracle_spec.rb +0 -371
  64. data/spec/adapters/postgres_spec.rb +0 -4476
  65. data/spec/adapters/spec_helper.rb +0 -44
  66. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  67. data/spec/adapters/sqlite_spec.rb +0 -652
  68. data/spec/bin_spec.rb +0 -278
  69. data/spec/core/connection_pool_spec.rb +0 -1250
  70. data/spec/core/database_spec.rb +0 -2915
  71. data/spec/core/dataset_spec.rb +0 -5544
  72. data/spec/core/deprecated_spec.rb +0 -70
  73. data/spec/core/expression_filters_spec.rb +0 -1498
  74. data/spec/core/mock_adapter_spec.rb +0 -722
  75. data/spec/core/object_graph_spec.rb +0 -336
  76. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  77. data/spec/core/schema_generator_spec.rb +0 -214
  78. data/spec/core/schema_spec.rb +0 -1844
  79. data/spec/core/spec_helper.rb +0 -24
  80. data/spec/core/version_spec.rb +0 -14
  81. data/spec/core_extensions_spec.rb +0 -763
  82. data/spec/core_model_spec.rb +0 -2
  83. data/spec/core_spec.rb +0 -1
  84. data/spec/deprecation_helper.rb +0 -30
  85. data/spec/extensions/accessed_columns_spec.rb +0 -51
  86. data/spec/extensions/active_model_spec.rb +0 -99
  87. data/spec/extensions/after_initialize_spec.rb +0 -28
  88. data/spec/extensions/any_not_empty_spec.rb +0 -23
  89. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  90. data/spec/extensions/association_dependencies_spec.rb +0 -125
  91. data/spec/extensions/association_multi_add_remove_spec.rb +0 -1041
  92. data/spec/extensions/association_pks_spec.rb +0 -423
  93. data/spec/extensions/association_proxies_spec.rb +0 -100
  94. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  95. data/spec/extensions/auto_validations_spec.rb +0 -229
  96. data/spec/extensions/blacklist_security_spec.rb +0 -95
  97. data/spec/extensions/blank_spec.rb +0 -69
  98. data/spec/extensions/boolean_readers_spec.rb +0 -93
  99. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  100. data/spec/extensions/caching_spec.rb +0 -273
  101. data/spec/extensions/caller_logging_spec.rb +0 -52
  102. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  103. data/spec/extensions/column_conflicts_spec.rb +0 -75
  104. data/spec/extensions/column_select_spec.rb +0 -129
  105. data/spec/extensions/columns_introspection_spec.rb +0 -90
  106. data/spec/extensions/columns_updated_spec.rb +0 -35
  107. data/spec/extensions/composition_spec.rb +0 -248
  108. data/spec/extensions/connection_expiration_spec.rb +0 -151
  109. data/spec/extensions/connection_validator_spec.rb +0 -144
  110. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  111. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  112. data/spec/extensions/constraint_validations_spec.rb +0 -439
  113. data/spec/extensions/core_refinements_spec.rb +0 -528
  114. data/spec/extensions/csv_serializer_spec.rb +0 -183
  115. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  116. data/spec/extensions/dataset_associations_spec.rb +0 -365
  117. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  118. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  119. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  120. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  121. data/spec/extensions/defaults_setter_spec.rb +0 -150
  122. data/spec/extensions/delay_add_association_spec.rb +0 -73
  123. data/spec/extensions/dirty_spec.rb +0 -222
  124. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  125. data/spec/extensions/eager_each_spec.rb +0 -62
  126. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  127. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  128. data/spec/extensions/empty_failure_backtraces_spec.rb +0 -60
  129. data/spec/extensions/error_splitter_spec.rb +0 -18
  130. data/spec/extensions/error_sql_spec.rb +0 -20
  131. data/spec/extensions/escaped_like_spec.rb +0 -40
  132. data/spec/extensions/eval_inspect_spec.rb +0 -81
  133. data/spec/extensions/exclude_or_null_spec.rb +0 -15
  134. data/spec/extensions/finder_spec.rb +0 -260
  135. data/spec/extensions/force_encoding_spec.rb +0 -126
  136. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  137. data/spec/extensions/graph_each_spec.rb +0 -113
  138. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  139. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  140. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  141. data/spec/extensions/index_caching_spec.rb +0 -66
  142. data/spec/extensions/inflector_spec.rb +0 -183
  143. data/spec/extensions/input_transformer_spec.rb +0 -69
  144. data/spec/extensions/insert_conflict_spec.rb +0 -103
  145. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  146. data/spec/extensions/instance_filters_spec.rb +0 -79
  147. data/spec/extensions/instance_hooks_spec.rb +0 -246
  148. data/spec/extensions/integer64_spec.rb +0 -22
  149. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  150. data/spec/extensions/json_serializer_spec.rb +0 -346
  151. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  152. data/spec/extensions/list_spec.rb +0 -291
  153. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  154. data/spec/extensions/many_through_many_spec.rb +0 -2177
  155. data/spec/extensions/migration_spec.rb +0 -864
  156. data/spec/extensions/modification_detection_spec.rb +0 -93
  157. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  158. data/spec/extensions/named_timezones_spec.rb +0 -218
  159. data/spec/extensions/nested_attributes_spec.rb +0 -815
  160. data/spec/extensions/null_dataset_spec.rb +0 -85
  161. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  162. data/spec/extensions/pagination_spec.rb +0 -116
  163. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  164. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  165. data/spec/extensions/pg_array_spec.rb +0 -398
  166. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -209
  167. data/spec/extensions/pg_enum_spec.rb +0 -118
  168. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  169. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  170. data/spec/extensions/pg_hstore_spec.rb +0 -219
  171. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  172. data/spec/extensions/pg_inet_spec.rb +0 -72
  173. data/spec/extensions/pg_interval_spec.rb +0 -103
  174. data/spec/extensions/pg_json_ops_spec.rb +0 -356
  175. data/spec/extensions/pg_json_spec.rb +0 -451
  176. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  177. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  178. data/spec/extensions/pg_range_spec.rb +0 -600
  179. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  180. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  181. data/spec/extensions/pg_row_spec.rb +0 -363
  182. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  183. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  184. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  185. data/spec/extensions/prepared_statements_spec.rb +0 -177
  186. data/spec/extensions/pretty_table_spec.rb +0 -123
  187. data/spec/extensions/query_spec.rb +0 -94
  188. data/spec/extensions/rcte_tree_spec.rb +0 -387
  189. data/spec/extensions/round_timestamps_spec.rb +0 -39
  190. data/spec/extensions/s_spec.rb +0 -60
  191. data/spec/extensions/schema_caching_spec.rb +0 -64
  192. data/spec/extensions/schema_dumper_spec.rb +0 -870
  193. data/spec/extensions/select_remove_spec.rb +0 -38
  194. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  195. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  196. data/spec/extensions/serialization_spec.rb +0 -365
  197. data/spec/extensions/server_block_spec.rb +0 -135
  198. data/spec/extensions/server_logging_spec.rb +0 -45
  199. data/spec/extensions/sharding_spec.rb +0 -197
  200. data/spec/extensions/shared_caching_spec.rb +0 -151
  201. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  202. data/spec/extensions/singular_table_names_spec.rb +0 -22
  203. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  204. data/spec/extensions/spec_helper.rb +0 -70
  205. data/spec/extensions/split_array_nil_spec.rb +0 -24
  206. data/spec/extensions/split_values_spec.rb +0 -57
  207. data/spec/extensions/sql_comments_spec.rb +0 -33
  208. data/spec/extensions/sql_expr_spec.rb +0 -59
  209. data/spec/extensions/static_cache_cache_spec.rb +0 -35
  210. data/spec/extensions/static_cache_spec.rb +0 -471
  211. data/spec/extensions/string_agg_spec.rb +0 -90
  212. data/spec/extensions/string_date_time_spec.rb +0 -95
  213. data/spec/extensions/string_stripper_spec.rb +0 -68
  214. data/spec/extensions/subclasses_spec.rb +0 -79
  215. data/spec/extensions/subset_conditions_spec.rb +0 -38
  216. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  217. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  218. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  219. data/spec/extensions/table_select_spec.rb +0 -83
  220. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  221. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  222. data/spec/extensions/throw_failures_spec.rb +0 -74
  223. data/spec/extensions/timestamps_spec.rb +0 -209
  224. data/spec/extensions/to_dot_spec.rb +0 -153
  225. data/spec/extensions/touch_spec.rb +0 -226
  226. data/spec/extensions/tree_spec.rb +0 -334
  227. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  228. data/spec/extensions/unlimited_update_spec.rb +0 -21
  229. data/spec/extensions/update_or_create_spec.rb +0 -83
  230. data/spec/extensions/update_primary_key_spec.rb +0 -105
  231. data/spec/extensions/update_refresh_spec.rb +0 -59
  232. data/spec/extensions/uuid_spec.rb +0 -101
  233. data/spec/extensions/validate_associated_spec.rb +0 -52
  234. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  235. data/spec/extensions/validation_contexts_spec.rb +0 -31
  236. data/spec/extensions/validation_helpers_spec.rb +0 -525
  237. data/spec/extensions/whitelist_security_spec.rb +0 -157
  238. data/spec/extensions/xml_serializer_spec.rb +0 -213
  239. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  240. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  241. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  242. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  243. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  244. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  245. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  246. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  247. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  248. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  249. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  250. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  251. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  252. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  253. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  254. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  255. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  256. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  257. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  258. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  259. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  260. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  261. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  262. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  263. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  264. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  265. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  266. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  267. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  268. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  269. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  270. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  271. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  272. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  273. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  274. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  275. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  276. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  277. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  278. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  279. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  280. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  281. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  282. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  283. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  284. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  285. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  286. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  287. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  288. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  289. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  290. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  291. data/spec/guards_helper.rb +0 -59
  292. data/spec/integration/associations_test.rb +0 -2597
  293. data/spec/integration/database_test.rb +0 -113
  294. data/spec/integration/dataset_test.rb +0 -2037
  295. data/spec/integration/eager_loader_test.rb +0 -687
  296. data/spec/integration/migrator_test.rb +0 -262
  297. data/spec/integration/model_test.rb +0 -203
  298. data/spec/integration/plugin_test.rb +0 -2423
  299. data/spec/integration/prepared_statement_test.rb +0 -405
  300. data/spec/integration/schema_test.rb +0 -903
  301. data/spec/integration/spec_helper.rb +0 -71
  302. data/spec/integration/timezone_test.rb +0 -86
  303. data/spec/integration/transaction_test.rb +0 -603
  304. data/spec/integration/type_test.rb +0 -127
  305. data/spec/model/association_reflection_spec.rb +0 -803
  306. data/spec/model/associations_spec.rb +0 -4738
  307. data/spec/model/base_spec.rb +0 -875
  308. data/spec/model/class_dataset_methods_spec.rb +0 -146
  309. data/spec/model/dataset_methods_spec.rb +0 -198
  310. data/spec/model/eager_loading_spec.rb +0 -2377
  311. data/spec/model/hooks_spec.rb +0 -370
  312. data/spec/model/inflector_spec.rb +0 -26
  313. data/spec/model/model_spec.rb +0 -956
  314. data/spec/model/plugins_spec.rb +0 -429
  315. data/spec/model/record_spec.rb +0 -2118
  316. data/spec/model/spec_helper.rb +0 -46
  317. data/spec/model/validations_spec.rb +0 -220
  318. data/spec/model_no_assoc_spec.rb +0 -1
  319. data/spec/model_spec.rb +0 -1
  320. data/spec/plugin_spec.rb +0 -1
  321. data/spec/sequel_coverage.rb +0 -15
  322. data/spec/sequel_warning.rb +0 -5
  323. data/spec/spec_config.rb +0 -12
@@ -1,44 +0,0 @@
1
- require 'logger'
2
- require_relative "../sequel_warning"
3
-
4
- if ENV['COVERAGE']
5
- require_relative "../sequel_coverage"
6
- SimpleCov.sequel_coverage(:group=>%r{lib/sequel/adapters})
7
- end
8
-
9
- $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
10
- require_relative "../../lib/sequel"
11
-
12
- begin
13
- require_relative "../spec_config"
14
- rescue LoadError
15
- end
16
-
17
- Sequel::DB = nil
18
- Sequel.split_symbols = true if ENV['SEQUEL_SPLIT_SYMBOLS']
19
- Sequel::Database.extension :duplicate_column_handler if ENV['SEQUEL_DUPLICATE_COLUMN_HANDLER']
20
- Sequel::Database.extension :columns_introspection if ENV['SEQUEL_COLUMNS_INTROSPECTION']
21
- Sequel::Model.cache_associations = false if ENV['SEQUEL_NO_CACHE_ASSOCIATIONS']
22
- Sequel::Model.plugin :prepared_statements if ENV['SEQUEL_MODEL_PREPARED_STATEMENTS']
23
- Sequel::Model.plugin :throw_failures if ENV['SEQUEL_MODEL_THROW_FAILURES']
24
- Sequel::Model.cache_anonymous_models = false
25
-
26
- require_relative '../guards_helper'
27
-
28
- unless defined?(DB)
29
- env_var = "SEQUEL_#{SEQUEL_ADAPTER_TEST.to_s.upcase}_URL"
30
- env_var = ENV.has_key?(env_var) ? env_var : 'SEQUEL_INTEGRATION_URL'
31
- DB = Sequel.connect(ENV[env_var])
32
- end
33
-
34
- IDENTIFIER_MANGLING = !!ENV['SEQUEL_IDENTIFIER_MANGLING'] unless defined?(IDENTIFIER_MANGLING)
35
- DB.extension(:identifier_mangling) if IDENTIFIER_MANGLING
36
-
37
- DB.extension :pg_timestamptz if ENV['SEQUEL_PG_TIMESTAMPTZ']
38
- DB.extension :integer64 if ENV['SEQUEL_INTEGER64']
39
- DB.extension :index_caching if ENV['SEQUEL_INDEX_CACHING']
40
-
41
- if dch = ENV['SEQUEL_DUPLICATE_COLUMNS_HANDLER']
42
- DB.extension :duplicate_columns_handler
43
- DB.opts[:on_duplicate_columns] = dch.to_sym unless dch.empty?
44
- end
@@ -1,97 +0,0 @@
1
- SEQUEL_ADAPTER_TEST = :sqlanywhere
2
-
3
- require_relative 'spec_helper'
4
-
5
- describe "convert_smallint_to_bool" do
6
- before do
7
- @db = DB
8
- @ds = @db[:booltest]
9
- end
10
- after do
11
- @db.convert_smallint_to_bool = true
12
- end
13
-
14
- describe "Database#convert_smallint_to_bool" do
15
- before do
16
- @db.create_table!(:booltest){column :b, 'smallint'; column :i, 'integer'}
17
- end
18
- after do
19
- @db.drop_table(:booltest)
20
- end
21
-
22
- it "should consider smallint datatypes as boolean if set, but not larger smallints" do
23
- @db.schema(:booltest, :reload=>true).first.last[:type].must_equal :boolean
24
- @db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
25
- @db.convert_smallint_to_bool = false
26
- @db.schema(:booltest, :reload=>true).first.last[:type].must_equal :integer
27
- @db.schema(:booltest, :reload=>true).first.last[:db_type].must_match /smallint/i
28
- end
29
-
30
- it "should return smallints as bools and integers as integers when set" do
31
- @ds.delete
32
- @ds.insert(:b=>true, :i=>10)
33
- @ds.all.must_equal [{:b=>true, :i=>10}]
34
- @ds.delete
35
- @ds.insert(:b=>false, :i=>0)
36
- @ds.all.must_equal [{:b=>false, :i=>0}]
37
- @ds.delete
38
- @ds.insert(:b=>true, :i=>1)
39
- @ds.all.must_equal [{:b=>true, :i=>1}]
40
- end
41
-
42
- it "should return all smallints as integers when unset" do
43
- @db.convert_smallint_to_bool = false
44
- @ds.delete
45
- @ds.insert(:b=>true, :i=>10)
46
- @ds.all.must_equal [{:b=>1, :i=>10}]
47
- @ds.delete
48
- @ds.insert(:b=>false, :i=>0)
49
- @ds.all.must_equal [{:b=>0, :i=>0}]
50
-
51
- @ds.delete
52
- @ds.insert(:b=>1, :i=>10)
53
- @ds.all.must_equal [{:b=>1, :i=>10}]
54
- @ds.delete
55
- @ds.insert(:b=>0, :i=>0)
56
- @ds.all.must_equal [{:b=>0, :i=>0}]
57
- end
58
- end
59
-
60
- describe "Dataset#convert_smallint_to_bool" do
61
- before do
62
- @db.create_table!(:booltest){column :b, 'smallint'; column :i, 'integer'}
63
- end
64
- after do
65
- @db.drop_table(:booltest)
66
- end
67
-
68
- it "should return smallints as bools and integers as integers when set" do
69
- @ds.delete
70
- @ds.insert(:b=>true, :i=>10)
71
- @ds.all.must_equal [{:b=>true, :i=>10}]
72
- @ds.delete
73
- @ds.insert(:b=>false, :i=>0)
74
- @ds.all.must_equal [{:b=>false, :i=>0}]
75
- @ds.delete
76
- @ds.insert(:b=>true, :i=>1)
77
- @ds.all.must_equal [{:b=>true, :i=>1}]
78
- end
79
-
80
- it "should support with_convert_smallint_to_bool for returning modified dataset with setting changed" do
81
- @ds = @ds.with_convert_smallint_to_bool(false)
82
- @ds.delete
83
- @ds.insert(:b=>true, :i=>10)
84
- @ds.all.must_equal [{:b=>1, :i=>10}]
85
- @ds.delete
86
- @ds.insert(:b=>false, :i=>0)
87
- @ds.all.must_equal [{:b=>0, :i=>0}]
88
-
89
- @ds.delete
90
- @ds.insert(:b=>1, :i=>10)
91
- @ds.all.must_equal [{:b=>1, :i=>10}]
92
- @ds.delete
93
- @ds.insert(:b=>0, :i=>0)
94
- @ds.all.must_equal [{:b=>0, :i=>0}]
95
- end
96
- end
97
- end
@@ -1,652 +0,0 @@
1
- SEQUEL_ADAPTER_TEST = :sqlite
2
-
3
- require_relative 'spec_helper'
4
-
5
- describe "An SQLite database" do
6
- before do
7
- @db = DB
8
- end
9
- after do
10
- @db.drop_table?(:fk)
11
- @db.use_timestamp_timezones = false
12
- Sequel.datetime_class = Time
13
- end
14
-
15
- it "should support casting to Date by using the date function" do
16
- @db.get(Sequel.cast('2012-10-20 11:12:13', Date)).must_equal '2012-10-20'
17
- end
18
-
19
- it "should support casting to Time or DateTime by using the datetime function" do
20
- @db.get(Sequel.cast('2012-10-20', Time)).must_equal '2012-10-20 00:00:00'
21
- @db.get(Sequel.cast('2012-10-20', DateTime)).must_equal '2012-10-20 00:00:00'
22
- end
23
-
24
- it "should provide the SQLite version as an integer" do
25
- @db.sqlite_version.must_be_kind_of(Integer)
26
- end
27
-
28
- it "should support a use_timestamp_timezones setting" do
29
- @db.use_timestamp_timezones = true
30
- @db.create_table!(:fk){Time :time}
31
- @db[:fk].insert(Time.now)
32
- @db[:fk].get(Sequel.cast(:time, String)).must_match(/[-+]\d\d\d\d\z/)
33
- @db.use_timestamp_timezones = false
34
- @db[:fk].delete
35
- @db[:fk].insert(Time.now)
36
- @db[:fk].get(Sequel.cast(:time, String)).wont_match(/[-+]\d\d\d\d\z/)
37
- end
38
-
39
- it "should provide a list of existing tables" do
40
- @db.drop_table?(:fk)
41
- @db.tables.must_be_kind_of(Array)
42
- @db.tables.wont_include(:fk)
43
- @db.create_table!(:fk){String :name}
44
- @db.tables.must_include(:fk)
45
- end
46
-
47
- cspecify "should support timestamps and datetimes and respect datetime_class", [:jdbc] do
48
- @db.create_table!(:fk){timestamp :t; datetime :d}
49
- @db.use_timestamp_timezones = true
50
- t1 = Time.at(1)
51
- @db[:fk].insert(:t => t1, :d => t1)
52
- @db[:fk].map(:t).must_equal [t1]
53
- @db[:fk].map(:d).must_equal [t1]
54
- Sequel.datetime_class = DateTime
55
- t2 = Sequel.string_to_datetime(t1.iso8601)
56
- @db[:fk].map(:t).must_equal [t2]
57
- @db[:fk].map(:d).must_equal [t2]
58
- end
59
-
60
- it "should support sequential primary keys" do
61
- @db.create_table!(:fk) {primary_key :id; text :name}
62
- @db[:fk].insert(:name => 'abc')
63
- @db[:fk].insert(:name => 'def')
64
- @db[:fk].insert(:name => 'ghi')
65
- @db[:fk].order(:name).all.must_equal [
66
- {:id => 1, :name => 'abc'},
67
- {:id => 2, :name => 'def'},
68
- {:id => 3, :name => 'ghi'}
69
- ]
70
- end
71
-
72
- it "should correctly parse the schema" do
73
- @db.create_table!(:fk) {timestamp :t}
74
- @db.schema(:fk, :reload=>true).must_equal [[:t, {:type=>:datetime, :allow_null=>true, :default=>nil, :ruby_default=>nil, :db_type=>"timestamp", :primary_key=>false}]]
75
- end
76
-
77
- it "should handle and return BigDecimal values for numeric columns" do
78
- DB.create_table!(:fk){numeric :d}
79
- d = DB[:fk]
80
- d.insert(:d=>BigDecimal('80.0'))
81
- d.insert(:d=>BigDecimal('NaN'))
82
- d.insert(:d=>BigDecimal('Infinity'))
83
- d.insert(:d=>BigDecimal('-Infinity'))
84
- ds = d.all
85
- ds.shift.must_equal(:d=>BigDecimal('80.0'))
86
- ds.map{|x| x[:d].to_s}.must_equal %w'NaN Infinity -Infinity'
87
- DB
88
- end
89
- end
90
-
91
- describe "SQLite temporary views" do
92
- before do
93
- @db = DB
94
- @db.drop_view(:items) rescue nil
95
- @db.create_table!(:items){Integer :number}
96
- @db[:items].insert(10)
97
- @db[:items].insert(20)
98
- end
99
- after do
100
- @db.drop_table?(:items)
101
- end
102
-
103
- it "should be supported" do
104
- @db.create_view(:items_view, @db[:items].where(:number=>10), :temp=>true)
105
- @db[:items_view].map(:number).must_equal [10]
106
- @db.disconnect
107
- lambda{@db[:items_view].map(:number)}.must_raise(Sequel::DatabaseError)
108
- end
109
- end
110
-
111
- describe "SQLite VALUES support" do
112
- before do
113
- @db = DB
114
- end
115
-
116
- it "should create a dataset using the VALUES clause via #values" do
117
- @db.values([[1, 2], [3, 4]]).map([:column1, :column2]).must_equal [[1, 2], [3, 4]]
118
- end
119
-
120
- it "should support VALUES with unions" do
121
- @db.values([[1]]).union(@db.values([[3]])).map(&:values).map(&:first).must_equal [1, 3]
122
- end
123
-
124
- it "should support VALUES in CTEs" do
125
- @db[:a].cross_join(:b).with(:a, @db.values([[1, 2]]), :args=>[:c1, :c2]).with(:b, @db.values([[3, 4]]), :args=>[:c3, :c4]).map([:c1, :c2, :c3, :c4]).must_equal [[1, 2, 3, 4]]
126
- end
127
- end if DB.sqlite_version >= 30803
128
-
129
- describe "SQLite type conversion" do
130
- before do
131
- @db = DB
132
- @integer_booleans = @db.integer_booleans
133
- @db.integer_booleans = true
134
- @ds = @db[:items]
135
- @db.drop_table?(:items)
136
- end
137
- after do
138
- @db.integer_booleans = @integer_booleans
139
- Sequel.datetime_class = Time
140
- @db.drop_table?(:items)
141
- end
142
-
143
- it "should handle integers in boolean columns" do
144
- @db.create_table(:items){TrueClass :a}
145
- @db[:items].insert(false)
146
- @db[:items].select_map(:a).must_equal [false]
147
- @db[:items].select_map(Sequel.expr(:a)+:a).must_equal [0]
148
- @db[:items].update(:a=>true)
149
- @db[:items].select_map(:a).must_equal [true]
150
- @db[:items].select_map(Sequel.expr(:a)+:a).must_equal [2]
151
- end
152
-
153
- it "should handle integers/floats/strings/decimals in numeric/decimal columns" do
154
- @db.create_table(:items){Numeric :a}
155
- @db[:items].insert(100)
156
- @db[:items].select_map(:a).must_equal [BigDecimal('100')]
157
- @db[:items].get(:a).must_be_kind_of(BigDecimal)
158
-
159
- @db[:items].update(:a=>100.1)
160
- @db[:items].select_map(:a).must_equal [BigDecimal('100.1')]
161
- @db[:items].get(:a).must_be_kind_of(BigDecimal)
162
-
163
- @db[:items].update(:a=>'100.1')
164
- @db[:items].select_map(:a).must_equal [BigDecimal('100.1')]
165
- @db[:items].get(:a).must_be_kind_of(BigDecimal)
166
-
167
- @db[:items].update(:a=>BigDecimal('100.1'))
168
- @db[:items].select_map(:a).must_equal [BigDecimal('100.1')]
169
- @db[:items].get(:a).must_be_kind_of(BigDecimal)
170
- end
171
-
172
- it "should handle integer/float date columns as julian date" do
173
- @db.create_table(:items){Date :a}
174
- i = 2455979
175
- @db[:items].insert(i)
176
- @db[:items].first.must_equal(:a=>Date.jd(i))
177
- @db[:items].update(:a=>2455979.1)
178
- @db[:items].first.must_equal(:a=>Date.jd(i))
179
- end
180
-
181
- it "should handle integer/float time columns as seconds" do
182
- @db.create_table(:items){Time :a, :only_time=>true}
183
- @db[:items].insert(3661)
184
- @db[:items].first.must_equal(:a=>Sequel::SQLTime.create(1, 1, 1))
185
- @db[:items].update(:a=>3661.000001)
186
- @db[:items].first.must_equal(:a=>Sequel::SQLTime.create(1, 1, 1, 1))
187
- end
188
-
189
- it "should handle integer datetime columns as unix timestamp" do
190
- @db.create_table(:items){DateTime :a}
191
- i = 1329860756
192
- @db[:items].insert(i)
193
- @db[:items].first.must_equal(:a=>Time.at(i))
194
- Sequel.datetime_class = DateTime
195
- @db[:items].first.must_equal(:a=>DateTime.strptime(i.to_s, '%s'))
196
- end
197
-
198
- it "should handle float datetime columns as julian date" do
199
- @db.create_table(:items){DateTime :a}
200
- i = 2455979.5
201
- @db[:items].insert(i)
202
- @db[:items].first.must_equal(:a=>Time.at(1329825600))
203
- Sequel.datetime_class = DateTime
204
- @db[:items].first.must_equal(:a=>DateTime.jd(2455979.5))
205
- end
206
-
207
- it "should handle integer/float blob columns" do
208
- @db.create_table(:items){File :a}
209
- @db[:items].insert(1)
210
- @db[:items].first.must_equal(:a=>Sequel::SQL::Blob.new('1'))
211
- @db[:items].update(:a=>'1.1')
212
- @db[:items].first.must_equal(:a=>Sequel::SQL::Blob.new(1.1.to_s))
213
- end
214
- end if DB.adapter_scheme == :sqlite
215
-
216
- describe "An SQLite dataset" do
217
- before do
218
- @d = DB.dataset
219
- end
220
-
221
- it "should raise errors if given a regexp pattern match" do
222
- proc{@d.literal(Sequel.expr(:x).like(/a/))}.must_raise(Sequel::InvalidOperation)
223
- proc{@d.literal(~Sequel.expr(:x).like(/a/))}.must_raise(Sequel::InvalidOperation)
224
- proc{@d.literal(Sequel.expr(:x).like(/a/i))}.must_raise(Sequel::InvalidOperation)
225
- proc{@d.literal(~Sequel.expr(:x).like(/a/i))}.must_raise(Sequel::InvalidOperation)
226
- end
227
- end
228
-
229
- describe "SQLite::Dataset#delete" do
230
- before do
231
- DB.create_table! :items do
232
- primary_key :id
233
- String :name
234
- Float :value
235
- end
236
- @d = DB[:items]
237
- @d.delete # remove all records
238
- @d.insert(:name => 'abc', :value => 1.23)
239
- @d.insert(:name => 'def', :value => 4.56)
240
- @d.insert(:name => 'ghi', :value => 7.89)
241
- end
242
- after do
243
- DB.drop_table?(:items)
244
- end
245
-
246
- it "should return the number of records affected when filtered" do
247
- @d.count.must_equal 3
248
- @d.filter{value < 3}.delete.must_equal 1
249
- @d.count.must_equal 2
250
-
251
- @d.filter{value < 3}.delete.must_equal 0
252
- @d.count.must_equal 2
253
- end
254
-
255
- it "should return the number of records affected when unfiltered" do
256
- @d.count.must_equal 3
257
- @d.delete.must_equal 3
258
- @d.count.must_equal 0
259
-
260
- @d.delete.must_equal 0
261
- end
262
- end
263
-
264
- describe "SQLite::Dataset#update" do
265
- before do
266
- DB.create_table! :items do
267
- primary_key :id
268
- String :name
269
- Float :value
270
- end
271
- @d = DB[:items]
272
- @d.delete # remove all records
273
- @d.insert(:name => 'abc', :value => 1.23)
274
- @d.insert(:name => 'def', :value => 4.56)
275
- @d.insert(:name => 'ghi', :value => 7.89)
276
- end
277
-
278
- it "should return the number of records affected" do
279
- @d.filter(:name => 'abc').update(:value => 2).must_equal 1
280
-
281
- @d.update(:value => 10).must_equal 3
282
-
283
- @d.filter(:name => 'xxx').update(:value => 23).must_equal 0
284
- end
285
- end
286
-
287
- describe "SQLite::Dataset#insert_conflict" do
288
- before(:all) do
289
- DB.create_table! :ic_test do
290
- primary_key :id
291
- String :name
292
- end
293
- end
294
-
295
- after(:each) do
296
- DB[:ic_test].delete
297
- end
298
-
299
- after(:all) do
300
- DB.drop_table?(:ic_test)
301
- end
302
-
303
- it "Dataset#insert_ignore and insert_constraint should ignore uniqueness violations" do
304
- DB[:ic_test].insert(:id => 1, :name => "one")
305
- proc {DB[:ic_test].insert(:id => 1, :name => "one")}.must_raise Sequel::ConstraintViolation
306
-
307
- DB[:ic_test].insert_ignore.insert(:id => 1, :name => "one")
308
- DB[:ic_test].all.must_equal([{:id => 1, :name => "one"}])
309
-
310
- DB[:ic_test].insert_conflict(:ignore).insert(:id => 1, :name => "one")
311
- DB[:ic_test].all.must_equal([{:id => 1, :name => "one"}])
312
- end
313
-
314
- it "Dataset#insert_constraint should handle replacement" do
315
- DB[:ic_test].insert(:id => 1, :name => "one")
316
-
317
- DB[:ic_test].insert_conflict(:replace).insert(:id => 1, :name => "two")
318
- DB[:ic_test].all.must_equal([{:id => 1, :name => "two"}])
319
- end
320
- end
321
-
322
- describe "SQLite dataset" do
323
- before do
324
- DB.create_table! :test do
325
- primary_key :id
326
- String :name
327
- Float :value
328
- end
329
- DB.create_table! :items do
330
- primary_key :id
331
- String :name
332
- Float :value
333
- end
334
- @d = DB[:items]
335
- @d.insert(:name => 'abc', :value => 1.23)
336
- @d.insert(:name => 'def', :value => 4.56)
337
- @d.insert(:name => 'ghi', :value => 7.89)
338
- end
339
- after do
340
- DB.drop_table?(:test, :items)
341
- end
342
-
343
- it "should be able to insert from a subquery" do
344
- DB[:test].insert(@d)
345
- DB[:test].count.must_equal 3
346
- DB[:test].select(:name, :value).order(:value).to_a.must_equal \
347
- @d.select(:name, :value).order(:value).to_a
348
- end
349
-
350
- it "should support #explain" do
351
- DB[:test].explain.must_be_kind_of(String)
352
- end
353
-
354
- it "should have #explain work when identifier_output_method is modified" do
355
- DB[:test].with_identifier_output_method(:upcase).explain.must_be_kind_of(String)
356
- end if IDENTIFIER_MANGLING
357
- end
358
-
359
- describe "A SQLite database" do
360
- before do
361
- @db = DB
362
- @db.create_table! :test2 do
363
- text :name
364
- integer :value
365
- end
366
- end
367
- after do
368
- @db.drop_table?(:test, :test2, :test3, :test3_backup0, :test3_backup1, :test3_backup2)
369
- end
370
-
371
- it "should support add_column operations" do
372
- @db.add_column :test2, :xyz, :text
373
-
374
- @db[:test2].columns.must_equal [:name, :value, :xyz]
375
- @db[:test2].insert(:name => 'mmm', :value => 111, :xyz=>'000')
376
- @db[:test2].first.must_equal(:name => 'mmm', :value => 111, :xyz=>'000')
377
- end
378
-
379
- it "should support drop_column operations" do
380
- @db.drop_column :test2, :value
381
- @db[:test2].columns.must_equal [:name]
382
- @db[:test2].insert(:name => 'mmm')
383
- @db[:test2].first.must_equal(:name => 'mmm')
384
- end
385
-
386
- it "should support drop_column operations in a transaction" do
387
- @db.transaction{@db.drop_column :test2, :value}
388
- @db[:test2].columns.must_equal [:name]
389
- @db[:test2].insert(:name => 'mmm')
390
- @db[:test2].first.must_equal(:name => 'mmm')
391
- end
392
-
393
- it "should keep a composite primary key when dropping columns" do
394
- @db.create_table!(:test2){Integer :a; Integer :b; Integer :c; primary_key [:a, :b]}
395
- @db.drop_column :test2, :c
396
- @db[:test2].columns.must_equal [:a, :b]
397
- @db[:test2].insert(:a=>1, :b=>2)
398
- @db[:test2].insert(:a=>2, :b=>3)
399
- proc{@db[:test2].insert(:a=>2, :b=>3)}.must_raise(Sequel::UniqueConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
400
- end
401
-
402
- it "should keep column attributes when dropping a column" do
403
- @db.create_table! :test3 do
404
- primary_key :id
405
- text :name
406
- integer :value
407
- end
408
-
409
- # This lame set of additions and deletions are to test that the primary keys
410
- # don't get messed up when we recreate the database.
411
- @db[:test3].insert( :name => "foo", :value => 1)
412
- @db[:test3].insert( :name => "foo", :value => 2)
413
- @db[:test3].insert( :name => "foo", :value => 3)
414
- @db[:test3].filter(:id => 2).delete
415
-
416
- @db.drop_column :test3, :value
417
-
418
- @db['PRAGMA table_info(?)', :test3][:id][:pk].to_i.must_equal 1
419
- @db[:test3].select(:id).all.must_equal [{:id => 1}, {:id => 3}]
420
- end
421
-
422
- it "should keep foreign keys when dropping a column" do
423
- @db.create_table! :test do
424
- primary_key :id
425
- String :name
426
- Integer :value
427
- end
428
- @db.create_table! :test3 do
429
- String :name
430
- Integer :value
431
- foreign_key :test_id, :test, :on_delete => :set_null, :on_update => :cascade
432
- end
433
-
434
- @db[:test3].insert(:name => "abc", :test_id => @db[:test].insert(:name => "foo", :value => 3))
435
- @db[:test3].insert(:name => "def", :test_id => @db[:test].insert(:name => "bar", :value => 4))
436
-
437
- @db.drop_column :test3, :value
438
-
439
- @db[:test].filter(:name => 'bar').delete
440
- @db[:test3][:name => 'def'][:test_id].must_be_nil
441
-
442
- @db[:test].filter(:name => 'foo').update(:id=>100)
443
- @db[:test3][:name => 'abc'][:test_id].must_equal 100
444
- end
445
-
446
- it "should support rename_column operations" do
447
- @db[:test2].delete
448
- @db.add_column :test2, :xyz, :text
449
- @db[:test2].insert(:name => 'mmm', :value => 111, :xyz => 'qqqq')
450
-
451
- @db[:test2].columns.must_equal [:name, :value, :xyz]
452
- @db.rename_column :test2, :xyz, :zyx, :type => :text
453
- @db[:test2].columns.must_equal [:name, :value, :zyx]
454
- @db[:test2].first[:zyx].must_equal 'qqqq'
455
- @db[:test2].count.must_equal 1
456
- end
457
-
458
- it "should preserve defaults when dropping or renaming columns" do
459
- @db.create_table! :test3 do
460
- String :s, :default=>'a'
461
- Integer :i
462
- end
463
-
464
- @db[:test3].insert
465
- @db[:test3].first[:s].must_equal 'a'
466
- @db[:test3].delete
467
- @db.drop_column :test3, :i
468
- @db[:test3].insert
469
- @db[:test3].first[:s].must_equal 'a'
470
- @db[:test3].delete
471
- @db.rename_column :test3, :s, :t
472
- @db[:test3].insert
473
- @db[:test3].first[:t].must_equal 'a'
474
- @db[:test3].delete
475
- end
476
-
477
-
478
- it "should preserve autoincrement after table modification" do
479
- @db.create_table!(:test2) do
480
- primary_key :id
481
- Integer :val, :null => false
482
- end
483
- @db.rename_column(:test2, :val, :value)
484
-
485
- t = @db[:test2]
486
- id1 = t.insert(:value=>1)
487
- t.delete
488
- id2 = t.insert(:value=>1)
489
- id2.must_be :>, id1
490
- end
491
-
492
- it "should handle quoted tables when dropping or renaming columns" do
493
- table_name = "T T"
494
- @db.drop_table?(table_name)
495
- @db.create_table! table_name do
496
- Integer :"s s"
497
- Integer :"i i"
498
- end
499
-
500
- @db.from(table_name).insert(:"s s"=>1, :"i i"=>2)
501
- @db.from(table_name).all.must_equal [{:"s s"=>1, :"i i"=>2}]
502
- @db.drop_column table_name, :"i i"
503
- @db.from(table_name).all.must_equal [{:"s s"=>1}]
504
- @db.rename_column table_name, :"s s", :"t t"
505
- @db.from(table_name).all.must_equal [{:"t t"=>1}]
506
- @db.drop_table?(table_name)
507
- end
508
-
509
- it "should choose a temporary table name that isn't already used when dropping or renaming columns" do
510
- @db.tables.each{|t| @db.drop_table(t) if t.to_s =~ /test3/}
511
- @db.create_table :test3 do
512
- Integer :h
513
- Integer :i
514
- end
515
- @db.create_table :test3_backup0 do
516
- Integer :j
517
- end
518
- @db.create_table :test3_backup1 do
519
- Integer :k
520
- end
521
-
522
- @db[:test3].columns.must_equal [:h, :i]
523
- @db[:test3_backup0].columns.must_equal [:j]
524
- @db[:test3_backup1].columns.must_equal [:k]
525
- @db.drop_column(:test3, :i)
526
- @db[:test3].columns.must_equal [:h]
527
- @db[:test3_backup0].columns.must_equal [:j]
528
- @db[:test3_backup1].columns.must_equal [:k]
529
-
530
- @db.create_table :test3_backup2 do
531
- Integer :l
532
- end
533
-
534
- @db.rename_column(:test3, :h, :i)
535
- @db[:test3].columns.must_equal [:i]
536
- @db[:test3_backup0].columns.must_equal [:j]
537
- @db[:test3_backup1].columns.must_equal [:k]
538
- @db[:test3_backup2].columns.must_equal [:l]
539
- end
540
-
541
- it "should support add_index" do
542
- @db.add_index :test2, :value, :unique => true
543
- @db.add_index :test2, [:name, :value]
544
- end
545
-
546
- it "should support drop_index" do
547
- @db.add_index :test2, :value, :unique => true
548
- @db.drop_index :test2, :value
549
- end
550
-
551
- it "should keep applicable indexes when emulating schema methods" do
552
- @db.create_table!(:test3){Integer :a; Integer :b}
553
- @db.add_index :test3, :a
554
- @db.add_index :test3, :b
555
- @db.add_index :test3, [:b, :a]
556
- @db.drop_column :test3, :b
557
- @db.indexes(:test3)[:test3_a_index].must_equal(:unique=>false, :columns=>[:a])
558
- end
559
-
560
- it "should have support for various #transaction modes" do
561
- @db.transaction(:mode => :immediate){}
562
- @db.transaction(:mode => :exclusive){}
563
- @db.transaction(:mode => :deferred){}
564
- @db.transaction{}
565
-
566
- @db.transaction_mode.must_be_nil
567
- @db.transaction_mode = :immediate
568
- @db.transaction_mode.must_equal :immediate
569
- @db.transaction{}
570
- @db.transaction(:mode => :exclusive){}
571
- proc {@db.transaction_mode = :invalid}.must_raise(Sequel::Error)
572
- @db.transaction_mode.must_equal :immediate
573
- proc {@db.transaction(:mode => :invalid) {}}.must_raise(Sequel::Error)
574
- end
575
-
576
- it "should keep unique constraints when copying tables" do
577
- @db.alter_table(:test2){add_unique_constraint :name}
578
- @db.alter_table(:test2){drop_column :value}
579
- @db[:test2].insert(:name=>'a')
580
- proc{@db[:test2].insert(:name=>'a')}.must_raise(Sequel::ConstraintViolation, Sequel::UniqueConstraintViolation)
581
- end
582
-
583
- it "should not ignore adding new constraints when adding not null constraints" do
584
- @db.alter_table :test2 do
585
- set_column_not_null :value
586
- add_constraint(:value_range1, :value => 3..5)
587
- add_constraint(:value_range2, :value => 0..9)
588
- end
589
-
590
- @db[:test2].insert(:value => 4)
591
- proc{@db[:test2].insert(:value => 1)}.must_raise(Sequel::ConstraintViolation)
592
- proc{@db[:test2].insert(:value => nil)}.must_raise(Sequel::ConstraintViolation)
593
- @db[:test2].select_order_map(:value).must_equal [4]
594
- end
595
-
596
- it "should show unique constraints in Database#indexes" do
597
- @db.alter_table(:test2){add_unique_constraint :name}
598
- @db.indexes(:test2).values.first[:columns].must_equal [:name]
599
- end if DB.sqlite_version >= 30808
600
- end
601
-
602
- describe "SQLite", 'INSERT ON CONFLICT' do
603
- before(:all) do
604
- @db = DB
605
- @db.create_table!(:ic_test){Integer :a; Integer :b; Integer :c; TrueClass :c_is_unique, :default=>false; unique :a, :name=>:ic_test_a_uidx; unique [:b, :c], :name=>:ic_test_b_c_uidx; index [:c], :where=>:c_is_unique, :unique=>true}
606
- @ds = @db[:ic_test]
607
- end
608
- before do
609
- @ds.delete
610
- end
611
- after(:all) do
612
- @db.drop_table?(:ic_test)
613
- end
614
-
615
- it "Dataset#insert_ignore and insert_conflict should ignore uniqueness violations" do
616
- @ds.insert(1, 2, 3, false)
617
- @ds.insert(10, 11, 3, true)
618
- proc{@ds.insert(1, 3, 4, false)}.must_raise Sequel::UniqueConstraintViolation
619
- proc{@ds.insert(11, 12, 3, true)}.must_raise Sequel::UniqueConstraintViolation
620
- @ds.insert_ignore.insert(1, 3, 4, false)
621
- @ds.insert_conflict.insert(1, 3, 4, false)
622
- @ds.insert_conflict.insert(11, 12, 3, true)
623
- @ds.insert_conflict(:target=>:a).insert(1, 3, 4, false)
624
- @ds.insert_conflict(:target=>:c, :conflict_where=>:c_is_unique).insert(11, 12, 3, true)
625
- @ds.all.must_equal [{:a=>1, :b=>2, :c=>3, :c_is_unique=>false}, {:a=>10, :b=>11, :c=>3, :c_is_unique=>true}]
626
- end unless DB.adapter_scheme == :amalgalite
627
-
628
- it "Dataset#insert_ignore and insert_conflict should work with multi_insert/import" do
629
- @ds.insert(1, 2, 3, false)
630
- @ds.insert_ignore.multi_insert([{:a=>1, :b=>3, :c=>4}])
631
- @ds.insert_ignore.import([:a, :b, :c], [[1, 3, 4]])
632
- @ds.all.must_equal [{:a=>1, :b=>2, :c=>3, :c_is_unique=>false}]
633
- @ds.insert_conflict(:target=>:a, :update=>{:b=>3}).import([:a, :b, :c], [[1, 3, 4]])
634
- @ds.all.must_equal [{:a=>1, :b=>3, :c=>3, :c_is_unique=>false}]
635
- @ds.insert_conflict(:target=>:a, :update=>{:b=>4}).multi_insert([{:a=>1, :b=>5, :c=>6}])
636
- @ds.all.must_equal [{:a=>1, :b=>4, :c=>3, :c_is_unique=>false}]
637
- end
638
-
639
- it "Dataset#insert_conflict should handle upserts" do
640
- @ds.insert(1, 2, 3, false)
641
- @ds.insert_conflict(:target=>:a, :update=>{:b=>3}).insert(1, 3, 4, false)
642
- @ds.all.must_equal [{:a=>1, :b=>3, :c=>3, :c_is_unique=>false}]
643
- @ds.insert_conflict(:target=>[:b, :c], :update=>{:c=>5}).insert(5, 3, 3, false)
644
- @ds.all.must_equal [{:a=>1, :b=>3, :c=>5, :c_is_unique=>false}]
645
- @ds.insert_conflict(:target=>:a, :update=>{:b=>4}).insert(1, 3, nil, false)
646
- @ds.all.must_equal [{:a=>1, :b=>4, :c=>5, :c_is_unique=>false}]
647
- @ds.insert_conflict(:target=>:a, :update=>{:b=>5}, :update_where=>{Sequel[:ic_test][:b]=>4}).insert(1, 3, 4, false)
648
- @ds.all.must_equal [{:a=>1, :b=>5, :c=>5, :c_is_unique=>false}]
649
- @ds.insert_conflict(:target=>:a, :update=>{:b=>6}, :update_where=>{Sequel[:ic_test][:b]=>4}).insert(1, 3, 4, false)
650
- @ds.all.must_equal [{:a=>1, :b=>5, :c=>5, :c_is_unique=>false}]
651
- end
652
- end if DB.sqlite_version >= 32400