sequel 5.20.0 → 5.49.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 (511) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +398 -1922
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +7 -7
  5. data/doc/advanced_associations.rdoc +4 -4
  6. data/doc/association_basics.rdoc +80 -16
  7. data/doc/cheat_sheet.rdoc +6 -5
  8. data/doc/code_order.rdoc +10 -12
  9. data/doc/dataset_filtering.rdoc +17 -2
  10. data/doc/fork_safety.rdoc +84 -0
  11. data/doc/migration.rdoc +11 -5
  12. data/doc/model_dataset_method_design.rdoc +1 -1
  13. data/doc/model_plugins.rdoc +1 -1
  14. data/doc/opening_databases.rdoc +10 -2
  15. data/doc/postgresql.rdoc +82 -3
  16. data/doc/querying.rdoc +4 -4
  17. data/doc/release_notes/5.21.0.txt +87 -0
  18. data/doc/release_notes/5.22.0.txt +48 -0
  19. data/doc/release_notes/5.23.0.txt +56 -0
  20. data/doc/release_notes/5.24.0.txt +56 -0
  21. data/doc/release_notes/5.25.0.txt +32 -0
  22. data/doc/release_notes/5.26.0.txt +35 -0
  23. data/doc/release_notes/5.27.0.txt +21 -0
  24. data/doc/release_notes/5.28.0.txt +16 -0
  25. data/doc/release_notes/5.29.0.txt +22 -0
  26. data/doc/release_notes/5.30.0.txt +20 -0
  27. data/doc/release_notes/5.31.0.txt +148 -0
  28. data/doc/release_notes/5.32.0.txt +46 -0
  29. data/doc/release_notes/5.33.0.txt +24 -0
  30. data/doc/release_notes/5.34.0.txt +40 -0
  31. data/doc/release_notes/5.35.0.txt +56 -0
  32. data/doc/release_notes/5.36.0.txt +60 -0
  33. data/doc/release_notes/5.37.0.txt +30 -0
  34. data/doc/release_notes/5.38.0.txt +28 -0
  35. data/doc/release_notes/5.39.0.txt +19 -0
  36. data/doc/release_notes/5.40.0.txt +40 -0
  37. data/doc/release_notes/5.41.0.txt +25 -0
  38. data/doc/release_notes/5.42.0.txt +136 -0
  39. data/doc/release_notes/5.43.0.txt +98 -0
  40. data/doc/release_notes/5.44.0.txt +32 -0
  41. data/doc/release_notes/5.45.0.txt +34 -0
  42. data/doc/release_notes/5.46.0.txt +87 -0
  43. data/doc/release_notes/5.47.0.txt +59 -0
  44. data/doc/release_notes/5.48.0.txt +14 -0
  45. data/doc/release_notes/5.49.0.txt +59 -0
  46. data/doc/sharding.rdoc +2 -0
  47. data/doc/sql.rdoc +13 -1
  48. data/doc/testing.rdoc +20 -7
  49. data/doc/transactions.rdoc +0 -8
  50. data/doc/validations.rdoc +1 -1
  51. data/doc/virtual_rows.rdoc +1 -1
  52. data/lib/sequel/adapters/ado/access.rb +1 -1
  53. data/lib/sequel/adapters/ado.rb +43 -35
  54. data/lib/sequel/adapters/ibmdb.rb +2 -2
  55. data/lib/sequel/adapters/jdbc/mysql.rb +6 -6
  56. data/lib/sequel/adapters/jdbc/postgresql.rb +11 -17
  57. data/lib/sequel/adapters/jdbc/sqlite.rb +29 -0
  58. data/lib/sequel/adapters/jdbc.rb +24 -6
  59. data/lib/sequel/adapters/mysql.rb +1 -1
  60. data/lib/sequel/adapters/mysql2.rb +2 -3
  61. data/lib/sequel/adapters/odbc.rb +8 -6
  62. data/lib/sequel/adapters/oracle.rb +5 -4
  63. data/lib/sequel/adapters/postgres.rb +15 -9
  64. data/lib/sequel/adapters/shared/access.rb +6 -6
  65. data/lib/sequel/adapters/shared/mssql.rb +66 -21
  66. data/lib/sequel/adapters/shared/mysql.rb +27 -10
  67. data/lib/sequel/adapters/shared/oracle.rb +29 -23
  68. data/lib/sequel/adapters/shared/postgres.rb +271 -32
  69. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  70. data/lib/sequel/adapters/shared/sqlite.rb +161 -19
  71. data/lib/sequel/adapters/sqlanywhere.rb +1 -1
  72. data/lib/sequel/adapters/sqlite.rb +1 -1
  73. data/lib/sequel/adapters/tinytds.rb +15 -2
  74. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -1
  75. data/lib/sequel/ast_transformer.rb +6 -0
  76. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  77. data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
  78. data/lib/sequel/connection_pool/single.rb +1 -1
  79. data/lib/sequel/connection_pool/threaded.rb +2 -2
  80. data/lib/sequel/core.rb +333 -319
  81. data/lib/sequel/database/connecting.rb +3 -4
  82. data/lib/sequel/database/logging.rb +7 -1
  83. data/lib/sequel/database/misc.rb +31 -12
  84. data/lib/sequel/database/query.rb +3 -1
  85. data/lib/sequel/database/schema_generator.rb +53 -51
  86. data/lib/sequel/database/schema_methods.rb +38 -23
  87. data/lib/sequel/database/transactions.rb +17 -18
  88. data/lib/sequel/dataset/actions.rb +14 -9
  89. data/lib/sequel/dataset/features.rb +16 -0
  90. data/lib/sequel/dataset/misc.rb +2 -2
  91. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  92. data/lib/sequel/dataset/prepared_statements.rb +2 -0
  93. data/lib/sequel/dataset/query.rb +26 -9
  94. data/lib/sequel/dataset/sql.rb +76 -25
  95. data/lib/sequel/dataset.rb +4 -2
  96. data/lib/sequel/deprecated.rb +3 -1
  97. data/lib/sequel/exceptions.rb +2 -0
  98. data/lib/sequel/extensions/_pretty_table.rb +1 -2
  99. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  100. data/lib/sequel/extensions/async_thread_pool.rb +438 -0
  101. data/lib/sequel/extensions/blank.rb +8 -0
  102. data/lib/sequel/extensions/columns_introspection.rb +1 -2
  103. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  104. data/lib/sequel/extensions/connection_validator.rb +2 -2
  105. data/lib/sequel/extensions/core_refinements.rb +2 -0
  106. data/lib/sequel/extensions/date_arithmetic.rb +36 -24
  107. data/lib/sequel/extensions/duplicate_columns_handler.rb +3 -1
  108. data/lib/sequel/extensions/eval_inspect.rb +2 -0
  109. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  110. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  111. data/lib/sequel/extensions/index_caching.rb +9 -7
  112. data/lib/sequel/extensions/inflector.rb +9 -1
  113. data/lib/sequel/extensions/integer64.rb +2 -0
  114. data/lib/sequel/extensions/migration.rb +11 -3
  115. data/lib/sequel/extensions/named_timezones.rb +56 -8
  116. data/lib/sequel/extensions/pagination.rb +1 -1
  117. data/lib/sequel/extensions/pg_array.rb +5 -0
  118. data/lib/sequel/extensions/pg_array_ops.rb +14 -6
  119. data/lib/sequel/extensions/pg_enum.rb +11 -3
  120. data/lib/sequel/extensions/pg_extended_date_support.rb +2 -2
  121. data/lib/sequel/extensions/pg_hstore.rb +6 -0
  122. data/lib/sequel/extensions/pg_hstore_ops.rb +54 -2
  123. data/lib/sequel/extensions/pg_inet.rb +15 -5
  124. data/lib/sequel/extensions/pg_interval.rb +36 -8
  125. data/lib/sequel/extensions/pg_json.rb +387 -123
  126. data/lib/sequel/extensions/pg_json_ops.rb +238 -0
  127. data/lib/sequel/extensions/pg_loose_count.rb +3 -1
  128. data/lib/sequel/extensions/pg_range.rb +17 -9
  129. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  130. data/lib/sequel/extensions/pg_row.rb +4 -2
  131. data/lib/sequel/extensions/pg_row_ops.rb +24 -0
  132. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  133. data/lib/sequel/extensions/query.rb +3 -0
  134. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  135. data/lib/sequel/extensions/s.rb +2 -0
  136. data/lib/sequel/extensions/schema_dumper.rb +24 -7
  137. data/lib/sequel/extensions/server_block.rb +18 -7
  138. data/lib/sequel/extensions/sql_comments.rb +2 -2
  139. data/lib/sequel/extensions/string_agg.rb +1 -1
  140. data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
  141. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
  142. data/lib/sequel/extensions/to_dot.rb +9 -3
  143. data/lib/sequel/model/associations.rb +356 -117
  144. data/lib/sequel/model/base.rb +107 -68
  145. data/lib/sequel/model/errors.rb +10 -1
  146. data/lib/sequel/model/inflections.rb +1 -1
  147. data/lib/sequel/model/plugins.rb +9 -3
  148. data/lib/sequel/model.rb +3 -1
  149. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  150. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  151. data/lib/sequel/plugins/association_pks.rb +60 -18
  152. data/lib/sequel/plugins/association_proxies.rb +8 -2
  153. data/lib/sequel/plugins/async_thread_pool.rb +39 -0
  154. data/lib/sequel/plugins/auto_validations.rb +39 -5
  155. data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
  156. data/lib/sequel/plugins/blacklist_security.rb +1 -2
  157. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  158. data/lib/sequel/plugins/caching.rb +3 -0
  159. data/lib/sequel/plugins/class_table_inheritance.rb +33 -28
  160. data/lib/sequel/plugins/column_encryption.rb +728 -0
  161. data/lib/sequel/plugins/composition.rb +7 -2
  162. data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
  163. data/lib/sequel/plugins/constraint_validations.rb +2 -1
  164. data/lib/sequel/plugins/csv_serializer.rb +28 -9
  165. data/lib/sequel/plugins/dataset_associations.rb +4 -1
  166. data/lib/sequel/plugins/dirty.rb +60 -22
  167. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  168. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  169. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  170. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  171. data/lib/sequel/plugins/json_serializer.rb +57 -35
  172. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  173. data/lib/sequel/plugins/many_through_many.rb +108 -9
  174. data/lib/sequel/plugins/nested_attributes.rb +15 -3
  175. data/lib/sequel/plugins/pg_array_associations.rb +58 -41
  176. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +91 -30
  177. data/lib/sequel/plugins/prepared_statements.rb +15 -12
  178. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
  179. data/lib/sequel/plugins/rcte_tree.rb +43 -35
  180. data/lib/sequel/plugins/serialization.rb +8 -3
  181. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  182. data/lib/sequel/plugins/sharding.rb +11 -5
  183. data/lib/sequel/plugins/single_table_inheritance.rb +22 -15
  184. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  185. data/lib/sequel/plugins/static_cache.rb +9 -4
  186. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  187. data/lib/sequel/plugins/string_stripper.rb +1 -1
  188. data/lib/sequel/plugins/subclasses.rb +2 -0
  189. data/lib/sequel/plugins/throw_failures.rb +1 -1
  190. data/lib/sequel/plugins/timestamps.rb +1 -1
  191. data/lib/sequel/plugins/tree.rb +9 -4
  192. data/lib/sequel/plugins/typecast_on_load.rb +3 -2
  193. data/lib/sequel/plugins/unused_associations.rb +521 -0
  194. data/lib/sequel/plugins/update_or_create.rb +1 -1
  195. data/lib/sequel/plugins/validation_class_methods.rb +5 -1
  196. data/lib/sequel/plugins/validation_helpers.rb +18 -11
  197. data/lib/sequel/plugins/xml_serializer.rb +1 -1
  198. data/lib/sequel/sql.rb +20 -5
  199. data/lib/sequel/timezones.rb +63 -17
  200. data/lib/sequel/version.rb +1 -1
  201. metadata +113 -381
  202. data/Rakefile +0 -151
  203. data/doc/release_notes/4.0.0.txt +0 -262
  204. data/doc/release_notes/4.1.0.txt +0 -85
  205. data/doc/release_notes/4.10.0.txt +0 -226
  206. data/doc/release_notes/4.11.0.txt +0 -147
  207. data/doc/release_notes/4.12.0.txt +0 -105
  208. data/doc/release_notes/4.13.0.txt +0 -169
  209. data/doc/release_notes/4.14.0.txt +0 -68
  210. data/doc/release_notes/4.15.0.txt +0 -56
  211. data/doc/release_notes/4.16.0.txt +0 -36
  212. data/doc/release_notes/4.17.0.txt +0 -38
  213. data/doc/release_notes/4.18.0.txt +0 -36
  214. data/doc/release_notes/4.19.0.txt +0 -45
  215. data/doc/release_notes/4.2.0.txt +0 -129
  216. data/doc/release_notes/4.20.0.txt +0 -79
  217. data/doc/release_notes/4.21.0.txt +0 -94
  218. data/doc/release_notes/4.22.0.txt +0 -72
  219. data/doc/release_notes/4.23.0.txt +0 -65
  220. data/doc/release_notes/4.24.0.txt +0 -99
  221. data/doc/release_notes/4.25.0.txt +0 -181
  222. data/doc/release_notes/4.26.0.txt +0 -44
  223. data/doc/release_notes/4.27.0.txt +0 -78
  224. data/doc/release_notes/4.28.0.txt +0 -57
  225. data/doc/release_notes/4.29.0.txt +0 -41
  226. data/doc/release_notes/4.3.0.txt +0 -40
  227. data/doc/release_notes/4.30.0.txt +0 -37
  228. data/doc/release_notes/4.31.0.txt +0 -57
  229. data/doc/release_notes/4.32.0.txt +0 -132
  230. data/doc/release_notes/4.33.0.txt +0 -88
  231. data/doc/release_notes/4.34.0.txt +0 -86
  232. data/doc/release_notes/4.35.0.txt +0 -130
  233. data/doc/release_notes/4.36.0.txt +0 -116
  234. data/doc/release_notes/4.37.0.txt +0 -50
  235. data/doc/release_notes/4.38.0.txt +0 -67
  236. data/doc/release_notes/4.39.0.txt +0 -127
  237. data/doc/release_notes/4.4.0.txt +0 -92
  238. data/doc/release_notes/4.40.0.txt +0 -179
  239. data/doc/release_notes/4.41.0.txt +0 -77
  240. data/doc/release_notes/4.42.0.txt +0 -221
  241. data/doc/release_notes/4.43.0.txt +0 -87
  242. data/doc/release_notes/4.44.0.txt +0 -125
  243. data/doc/release_notes/4.45.0.txt +0 -370
  244. data/doc/release_notes/4.46.0.txt +0 -404
  245. data/doc/release_notes/4.47.0.txt +0 -56
  246. data/doc/release_notes/4.48.0.txt +0 -293
  247. data/doc/release_notes/4.49.0.txt +0 -222
  248. data/doc/release_notes/4.5.0.txt +0 -34
  249. data/doc/release_notes/4.6.0.txt +0 -30
  250. data/doc/release_notes/4.7.0.txt +0 -103
  251. data/doc/release_notes/4.8.0.txt +0 -175
  252. data/doc/release_notes/4.9.0.txt +0 -190
  253. data/spec/adapter_spec.rb +0 -4
  254. data/spec/adapters/db2_spec.rb +0 -170
  255. data/spec/adapters/mssql_spec.rb +0 -804
  256. data/spec/adapters/mysql_spec.rb +0 -1065
  257. data/spec/adapters/oracle_spec.rb +0 -371
  258. data/spec/adapters/postgres_spec.rb +0 -4125
  259. data/spec/adapters/spec_helper.rb +0 -44
  260. data/spec/adapters/sqlanywhere_spec.rb +0 -97
  261. data/spec/adapters/sqlite_spec.rb +0 -652
  262. data/spec/bin_spec.rb +0 -278
  263. data/spec/core/connection_pool_spec.rb +0 -1250
  264. data/spec/core/database_spec.rb +0 -2865
  265. data/spec/core/dataset_spec.rb +0 -5515
  266. data/spec/core/deprecated_spec.rb +0 -70
  267. data/spec/core/expression_filters_spec.rb +0 -1455
  268. data/spec/core/mock_adapter_spec.rb +0 -722
  269. data/spec/core/object_graph_spec.rb +0 -336
  270. data/spec/core/placeholder_literalizer_spec.rb +0 -166
  271. data/spec/core/schema_generator_spec.rb +0 -214
  272. data/spec/core/schema_spec.rb +0 -1826
  273. data/spec/core/spec_helper.rb +0 -24
  274. data/spec/core/version_spec.rb +0 -14
  275. data/spec/core_extensions_spec.rb +0 -763
  276. data/spec/core_model_spec.rb +0 -2
  277. data/spec/core_spec.rb +0 -1
  278. data/spec/deprecation_helper.rb +0 -30
  279. data/spec/extensions/accessed_columns_spec.rb +0 -51
  280. data/spec/extensions/active_model_spec.rb +0 -99
  281. data/spec/extensions/after_initialize_spec.rb +0 -28
  282. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  283. data/spec/extensions/association_dependencies_spec.rb +0 -125
  284. data/spec/extensions/association_pks_spec.rb +0 -423
  285. data/spec/extensions/association_proxies_spec.rb +0 -100
  286. data/spec/extensions/auto_literal_strings_spec.rb +0 -205
  287. data/spec/extensions/auto_validations_spec.rb +0 -229
  288. data/spec/extensions/blacklist_security_spec.rb +0 -95
  289. data/spec/extensions/blank_spec.rb +0 -69
  290. data/spec/extensions/boolean_readers_spec.rb +0 -93
  291. data/spec/extensions/boolean_subsets_spec.rb +0 -47
  292. data/spec/extensions/caching_spec.rb +0 -273
  293. data/spec/extensions/caller_logging_spec.rb +0 -52
  294. data/spec/extensions/class_table_inheritance_spec.rb +0 -750
  295. data/spec/extensions/column_conflicts_spec.rb +0 -75
  296. data/spec/extensions/column_select_spec.rb +0 -129
  297. data/spec/extensions/columns_introspection_spec.rb +0 -90
  298. data/spec/extensions/columns_updated_spec.rb +0 -35
  299. data/spec/extensions/composition_spec.rb +0 -248
  300. data/spec/extensions/connection_expiration_spec.rb +0 -151
  301. data/spec/extensions/connection_validator_spec.rb +0 -144
  302. data/spec/extensions/constant_sql_override_spec.rb +0 -24
  303. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -300
  304. data/spec/extensions/constraint_validations_spec.rb +0 -439
  305. data/spec/extensions/core_refinements_spec.rb +0 -528
  306. data/spec/extensions/csv_serializer_spec.rb +0 -183
  307. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  308. data/spec/extensions/dataset_associations_spec.rb +0 -365
  309. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  310. data/spec/extensions/date_arithmetic_spec.rb +0 -181
  311. data/spec/extensions/datetime_parse_to_time_spec.rb +0 -169
  312. data/spec/extensions/def_dataset_method_spec.rb +0 -100
  313. data/spec/extensions/defaults_setter_spec.rb +0 -150
  314. data/spec/extensions/delay_add_association_spec.rb +0 -73
  315. data/spec/extensions/dirty_spec.rb +0 -189
  316. data/spec/extensions/duplicate_columns_handler_spec.rb +0 -104
  317. data/spec/extensions/eager_each_spec.rb +0 -62
  318. data/spec/extensions/eager_graph_eager_spec.rb +0 -100
  319. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  320. data/spec/extensions/error_splitter_spec.rb +0 -18
  321. data/spec/extensions/error_sql_spec.rb +0 -20
  322. data/spec/extensions/escaped_like_spec.rb +0 -40
  323. data/spec/extensions/eval_inspect_spec.rb +0 -81
  324. data/spec/extensions/finder_spec.rb +0 -260
  325. data/spec/extensions/force_encoding_spec.rb +0 -126
  326. data/spec/extensions/freeze_datasets_spec.rb +0 -31
  327. data/spec/extensions/graph_each_spec.rb +0 -113
  328. data/spec/extensions/hook_class_methods_spec.rb +0 -402
  329. data/spec/extensions/identifier_mangling_spec.rb +0 -201
  330. data/spec/extensions/implicit_subquery_spec.rb +0 -58
  331. data/spec/extensions/index_caching_spec.rb +0 -66
  332. data/spec/extensions/inflector_spec.rb +0 -183
  333. data/spec/extensions/input_transformer_spec.rb +0 -69
  334. data/spec/extensions/insert_returning_select_spec.rb +0 -72
  335. data/spec/extensions/instance_filters_spec.rb +0 -79
  336. data/spec/extensions/instance_hooks_spec.rb +0 -246
  337. data/spec/extensions/integer64_spec.rb +0 -22
  338. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  339. data/spec/extensions/json_serializer_spec.rb +0 -336
  340. data/spec/extensions/lazy_attributes_spec.rb +0 -183
  341. data/spec/extensions/list_spec.rb +0 -291
  342. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  343. data/spec/extensions/many_through_many_spec.rb +0 -2177
  344. data/spec/extensions/migration_spec.rb +0 -864
  345. data/spec/extensions/modification_detection_spec.rb +0 -93
  346. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -92
  347. data/spec/extensions/named_timezones_spec.rb +0 -111
  348. data/spec/extensions/nested_attributes_spec.rb +0 -767
  349. data/spec/extensions/null_dataset_spec.rb +0 -85
  350. data/spec/extensions/optimistic_locking_spec.rb +0 -127
  351. data/spec/extensions/pagination_spec.rb +0 -116
  352. data/spec/extensions/pg_array_associations_spec.rb +0 -802
  353. data/spec/extensions/pg_array_ops_spec.rb +0 -144
  354. data/spec/extensions/pg_array_spec.rb +0 -398
  355. data/spec/extensions/pg_auto_constraint_validations_spec.rb +0 -172
  356. data/spec/extensions/pg_enum_spec.rb +0 -118
  357. data/spec/extensions/pg_extended_date_support_spec.rb +0 -126
  358. data/spec/extensions/pg_hstore_ops_spec.rb +0 -238
  359. data/spec/extensions/pg_hstore_spec.rb +0 -219
  360. data/spec/extensions/pg_inet_ops_spec.rb +0 -102
  361. data/spec/extensions/pg_inet_spec.rb +0 -72
  362. data/spec/extensions/pg_interval_spec.rb +0 -103
  363. data/spec/extensions/pg_json_ops_spec.rb +0 -289
  364. data/spec/extensions/pg_json_spec.rb +0 -262
  365. data/spec/extensions/pg_loose_count_spec.rb +0 -23
  366. data/spec/extensions/pg_range_ops_spec.rb +0 -60
  367. data/spec/extensions/pg_range_spec.rb +0 -519
  368. data/spec/extensions/pg_row_ops_spec.rb +0 -61
  369. data/spec/extensions/pg_row_plugin_spec.rb +0 -60
  370. data/spec/extensions/pg_row_spec.rb +0 -363
  371. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -93
  372. data/spec/extensions/pg_timestamptz_spec.rb +0 -17
  373. data/spec/extensions/prepared_statements_safe_spec.rb +0 -66
  374. data/spec/extensions/prepared_statements_spec.rb +0 -177
  375. data/spec/extensions/pretty_table_spec.rb +0 -123
  376. data/spec/extensions/query_spec.rb +0 -94
  377. data/spec/extensions/rcte_tree_spec.rb +0 -381
  378. data/spec/extensions/round_timestamps_spec.rb +0 -39
  379. data/spec/extensions/s_spec.rb +0 -60
  380. data/spec/extensions/schema_caching_spec.rb +0 -64
  381. data/spec/extensions/schema_dumper_spec.rb +0 -870
  382. data/spec/extensions/select_remove_spec.rb +0 -38
  383. data/spec/extensions/sequel_4_dataset_methods_spec.rb +0 -121
  384. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  385. data/spec/extensions/serialization_spec.rb +0 -365
  386. data/spec/extensions/server_block_spec.rb +0 -97
  387. data/spec/extensions/server_logging_spec.rb +0 -45
  388. data/spec/extensions/sharding_spec.rb +0 -189
  389. data/spec/extensions/shared_caching_spec.rb +0 -151
  390. data/spec/extensions/single_table_inheritance_spec.rb +0 -347
  391. data/spec/extensions/singular_table_names_spec.rb +0 -22
  392. data/spec/extensions/skip_create_refresh_spec.rb +0 -18
  393. data/spec/extensions/spec_helper.rb +0 -63
  394. data/spec/extensions/split_array_nil_spec.rb +0 -24
  395. data/spec/extensions/split_values_spec.rb +0 -57
  396. data/spec/extensions/sql_comments_spec.rb +0 -33
  397. data/spec/extensions/sql_expr_spec.rb +0 -59
  398. data/spec/extensions/static_cache_spec.rb +0 -471
  399. data/spec/extensions/string_agg_spec.rb +0 -90
  400. data/spec/extensions/string_date_time_spec.rb +0 -95
  401. data/spec/extensions/string_stripper_spec.rb +0 -68
  402. data/spec/extensions/subclasses_spec.rb +0 -79
  403. data/spec/extensions/subset_conditions_spec.rb +0 -38
  404. data/spec/extensions/symbol_aref_refinement_spec.rb +0 -28
  405. data/spec/extensions/symbol_as_refinement_spec.rb +0 -21
  406. data/spec/extensions/synchronize_sql_spec.rb +0 -124
  407. data/spec/extensions/table_select_spec.rb +0 -83
  408. data/spec/extensions/tactical_eager_loading_spec.rb +0 -402
  409. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  410. data/spec/extensions/throw_failures_spec.rb +0 -74
  411. data/spec/extensions/timestamps_spec.rb +0 -209
  412. data/spec/extensions/to_dot_spec.rb +0 -153
  413. data/spec/extensions/touch_spec.rb +0 -226
  414. data/spec/extensions/tree_spec.rb +0 -334
  415. data/spec/extensions/typecast_on_load_spec.rb +0 -86
  416. data/spec/extensions/unlimited_update_spec.rb +0 -21
  417. data/spec/extensions/update_or_create_spec.rb +0 -83
  418. data/spec/extensions/update_primary_key_spec.rb +0 -105
  419. data/spec/extensions/update_refresh_spec.rb +0 -59
  420. data/spec/extensions/uuid_spec.rb +0 -101
  421. data/spec/extensions/validate_associated_spec.rb +0 -52
  422. data/spec/extensions/validation_class_methods_spec.rb +0 -1040
  423. data/spec/extensions/validation_contexts_spec.rb +0 -31
  424. data/spec/extensions/validation_helpers_spec.rb +0 -525
  425. data/spec/extensions/whitelist_security_spec.rb +0 -157
  426. data/spec/extensions/xml_serializer_spec.rb +0 -213
  427. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  428. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  429. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  430. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  431. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  432. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  433. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  434. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  435. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  436. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  437. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  438. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  439. data/spec/files/double_migration/001_create_sessions.rb +0 -9
  440. data/spec/files/double_migration/002_create_nodes.rb +0 -19
  441. data/spec/files/double_migration/003_3_create_users.rb +0 -4
  442. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  443. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  444. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  445. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  446. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  447. data/spec/files/empty_migration/001_create_sessions.rb +0 -9
  448. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  449. data/spec/files/empty_migration/003_3_create_users.rb +0 -4
  450. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  451. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  452. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  453. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  454. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  455. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  456. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  457. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  458. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  459. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  460. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  461. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  462. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  463. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  464. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  465. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  466. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  467. data/spec/files/reversible_migrations/006_reversible.rb +0 -10
  468. data/spec/files/reversible_migrations/007_reversible.rb +0 -10
  469. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  470. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  471. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  472. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  473. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  474. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  475. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  476. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  477. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  478. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  479. data/spec/guards_helper.rb +0 -59
  480. data/spec/integration/associations_test.rb +0 -2597
  481. data/spec/integration/database_test.rb +0 -113
  482. data/spec/integration/dataset_test.rb +0 -1981
  483. data/spec/integration/eager_loader_test.rb +0 -687
  484. data/spec/integration/migrator_test.rb +0 -262
  485. data/spec/integration/model_test.rb +0 -203
  486. data/spec/integration/plugin_test.rb +0 -2396
  487. data/spec/integration/prepared_statement_test.rb +0 -405
  488. data/spec/integration/schema_test.rb +0 -889
  489. data/spec/integration/spec_helper.rb +0 -65
  490. data/spec/integration/timezone_test.rb +0 -86
  491. data/spec/integration/transaction_test.rb +0 -603
  492. data/spec/integration/type_test.rb +0 -127
  493. data/spec/model/association_reflection_spec.rb +0 -803
  494. data/spec/model/associations_spec.rb +0 -4738
  495. data/spec/model/base_spec.rb +0 -875
  496. data/spec/model/class_dataset_methods_spec.rb +0 -146
  497. data/spec/model/dataset_methods_spec.rb +0 -198
  498. data/spec/model/eager_loading_spec.rb +0 -2377
  499. data/spec/model/hooks_spec.rb +0 -370
  500. data/spec/model/inflector_spec.rb +0 -26
  501. data/spec/model/model_spec.rb +0 -956
  502. data/spec/model/plugins_spec.rb +0 -429
  503. data/spec/model/record_spec.rb +0 -2118
  504. data/spec/model/spec_helper.rb +0 -46
  505. data/spec/model/validations_spec.rb +0 -220
  506. data/spec/model_no_assoc_spec.rb +0 -1
  507. data/spec/model_spec.rb +0 -1
  508. data/spec/plugin_spec.rb +0 -1
  509. data/spec/sequel_coverage.rb +0 -15
  510. data/spec/sequel_warning.rb +0 -4
  511. data/spec/spec_config.rb +0 -12
@@ -1,870 +0,0 @@
1
- require_relative "spec_helper"
2
-
3
- describe "Sequel::Schema::CreateTableGenerator dump methods" do
4
- before do
5
- @d = Sequel::Database.new.extension(:schema_dumper)
6
- @g = Sequel::Schema::CreateTableGenerator
7
- end
8
-
9
- it "should allow the same table information to be converted to a string for evaling inside of another instance with the same result" do
10
- g = @g.new(@d) do
11
- Integer :a
12
- varchar :b
13
- column :dt, DateTime
14
- column :vc, :varchar
15
- primary_key :c
16
- foreign_key :d, :a
17
- foreign_key :e
18
- foreign_key [:d, :e], :name=>:cfk
19
- constraint :blah, "a=1"
20
- check :a=>1
21
- unique [:e]
22
- index :a
23
- index [:c, :e]
24
- index [:b, :c], :type=>:hash
25
- index [:d], :unique=>true
26
- spatial_index :a
27
- full_text_index [:b, :c]
28
- end
29
- g2 = @g.new(@d) do
30
- instance_eval(g.dump_columns, __FILE__, __LINE__)
31
- instance_eval(g.dump_constraints, __FILE__, __LINE__)
32
- instance_eval(g.dump_indexes, __FILE__, __LINE__)
33
- end
34
- g.columns.must_equal g2.columns
35
- g.constraints.must_equal g2.constraints
36
- g.indexes.must_equal g2.indexes
37
- end
38
-
39
- it "should respect :keep_order option to primary_key" do
40
- g = @g.new(@d) do
41
- Integer :a
42
- primary_key :c, :keep_order=>true
43
- end
44
- g2 = @g.new(@d) do
45
- instance_eval(g.dump_columns, __FILE__, __LINE__)
46
- end
47
- g.columns.must_equal g2.columns
48
- end
49
-
50
- it "should allow dumping indexes as separate add_index and drop_index methods" do
51
- g = @g.new(@d) do
52
- index :a
53
- index [:c, :e], :name=>:blah
54
- index [:b, :c], :unique=>true
55
- end
56
-
57
- g.dump_indexes(:add_index=>:t).must_equal((<<END_CODE).strip)
58
- add_index :t, [:a]
59
- add_index :t, [:c, :e], :name=>:blah
60
- add_index :t, [:b, :c], :unique=>true
61
- END_CODE
62
-
63
- g.dump_indexes(:drop_index=>:t).must_equal((<<END_CODE).strip)
64
- drop_index :t, [:b, :c], :unique=>true
65
- drop_index :t, [:c, :e], :name=>:blah
66
- drop_index :t, [:a]
67
- END_CODE
68
- end
69
-
70
- it "should raise an error if you try to dump a Generator that uses a constraint with a proc" do
71
- proc{@g.new(@d){check{a>1}}.dump_constraints}.must_raise(Sequel::Error)
72
- end
73
- end
74
-
75
- describe "Sequel::Database dump methods" do
76
- before do
77
- @d = Sequel::Database.new.extension(:schema_dumper)
78
- def @d.tables(o) o[:schema] ? [o[:schema]] : [:t1, :t2] end
79
- def @d.schema(t, *o)
80
- v = case t
81
- when :t1, 't__t1', Sequel.identifier(:t__t1)
82
- [[:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true, :allow_null=>false}],
83
- [:c2, {:db_type=>'varchar(20)', :allow_null=>true}]]
84
- when :t2
85
- [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>false}],
86
- [:c2, {:db_type=>'numeric', :primary_key=>true, :allow_null=>false}]]
87
- when :t3
88
- [[:c2, {:db_type=>'varchar(20)', :allow_null=>true}],
89
- [:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true, :allow_null=>false}]]
90
- when :t5
91
- [[:c1, {:db_type=>'blahblah', :allow_null=>true}]]
92
- end
93
-
94
- if o.first.is_a?(Hash) && o.first[:schema]
95
- v.last.last[:db_type] = o.first[:schema]
96
- end
97
-
98
- v
99
- end
100
- end
101
-
102
- it "should support dumping table with :schema option" do
103
- @d.dump_table_schema(:t1, :schema=>'varchar(15)').must_equal "create_table(:t1) do\n primary_key :c1\n String :c2, :size=>15\nend"
104
- end
105
-
106
- it "should support dumping table schemas as create_table method calls" do
107
- @d.dump_table_schema(:t1).must_equal "create_table(:t1) do\n primary_key :c1\n String :c2, :size=>20\nend"
108
- end
109
-
110
- it "should support dumping table schemas when given a string" do
111
- @d.dump_table_schema('t__t1').must_equal "create_table(\"t__t1\") do\n primary_key :c1\n String :c2, :size=>20\nend"
112
- end
113
-
114
- it "should support dumping table schemas when given an identifier" do
115
- @d.dump_table_schema(Sequel.identifier(:t__t1)).must_equal "create_table(Sequel::SQL::Identifier.new(:t__t1)) do\n primary_key :c1\n String :c2, :size=>20\nend"
116
- end
117
-
118
- it "should dump non-Integer primary key columns with explicit :type" do
119
- def @d.schema(*s) [[:c1, {:db_type=>'bigint', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]] end
120
- @d.dump_table_schema(:t6).must_equal "create_table(:t6) do\n primary_key :c1, :type=>:Bignum\nend"
121
- end
122
-
123
- it "should dump non-Integer primary key columns with explicit :type when using :same_db=>true" do
124
- def @d.schema(*s) [[:c1, {:db_type=>'bigint', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]] end
125
- @d.dump_table_schema(:t6, :same_db=>true).must_equal "create_table(:t6) do\n primary_key :c1, :type=>:Bignum\nend"
126
- end
127
-
128
- it "should dump auto incrementing primary keys with :keep_order option if they are not first" do
129
- @d.dump_table_schema(:t3).must_equal "create_table(:t3) do\n String :c2, :size=>20\n primary_key :c1, :keep_order=>true\nend"
130
- end
131
-
132
- it "should handle foreign keys" do
133
- def @d.schema(*s) [[:c1, {:db_type=>'integer', :allow_null=>true}]] end
134
- def @d.supports_foreign_key_parsing?; true end
135
- def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2]}] end
136
- @d.dump_table_schema(:t6).must_equal "create_table(:t6) do\n foreign_key :c1, :t2, :key=>[:c2]\nend"
137
- end
138
-
139
- it "should handle primary keys that are also foreign keys" do
140
- def @d.schema(*s) [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]] end
141
- def @d.supports_foreign_key_parsing?; true end
142
- def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2]}] end
143
- @d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
144
- create_table(:t6) do
145
- primary_key :c1, :table=>:t2, :key=>[:c2]
146
- end
147
- OUTPUT
148
- end
149
-
150
- it "should handle foreign key options" do
151
- def @d.schema(*s) [[:c1, {:db_type=>'integer', :allow_null=>true}]] end
152
- def @d.supports_foreign_key_parsing?; true end
153
- def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true}] end
154
- @d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
155
- create_table(:t6) do
156
- foreign_key :c1, :t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true
157
- end
158
- OUTPUT
159
- end
160
-
161
- it "should handle foreign key options in the primary key" do
162
- def @d.schema(*s) [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]] end
163
- def @d.supports_foreign_key_parsing?; true end
164
- def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true}] end
165
- @d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
166
- create_table(:t6) do
167
- primary_key :c1, :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true
168
- end
169
- OUTPUT
170
- end
171
-
172
- it "should omit foreign key options that are the same as defaults" do
173
- def @d.schema(*s) [[:c1, {:db_type=>'integer', :allow_null=>true}]] end
174
- def @d.supports_foreign_key_parsing?; true end
175
- def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:no_action, :on_update=>:no_action, :deferrable=>false}] end
176
- @d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
177
- create_table(:t6) do
178
- foreign_key :c1, :t2, :key=>[:c2]
179
- end
180
- OUTPUT
181
- end
182
-
183
- it "should omit foreign key options that are the same as defaults in the primary key" do
184
- def @d.schema(*s) [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]] end
185
- def @d.supports_foreign_key_parsing?; true end
186
- def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:no_action, :on_update=>:no_action, :deferrable=>false}] end
187
- @d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
188
- create_table(:t6) do
189
- primary_key :c1, :table=>:t2, :key=>[:c2]
190
- end
191
- OUTPUT
192
- end
193
-
194
- it "should dump primary key columns with explicit type equal to the database type when :same_db option is passed" do
195
- def @d.schema(*s) [[:c1, {:db_type=>'somedbspecifictype', :primary_key=>true, :allow_null=>false}]] end
196
- @d.dump_table_schema(:t7, :same_db => true).must_equal "create_table(:t7) do\n column :c1, \"somedbspecifictype\", :null=>false\n \n primary_key [:c1]\nend"
197
- end
198
-
199
- it "should use a composite primary_key calls if there is a composite primary key" do
200
- @d.dump_table_schema(:t2).must_equal "create_table(:t2) do\n Integer :c1, :null=>false\n BigDecimal :c2, :null=>false\n \n primary_key [:c1, :c2]\nend"
201
- end
202
-
203
- it "should use a composite foreign_key calls if there is a composite foreign key" do
204
- def @d.schema(*s) [[:c1, {:db_type=>'integer'}], [:c2, {:db_type=>'integer'}]] end
205
- def @d.supports_foreign_key_parsing?; true end
206
- def @d.foreign_key_list(*s) [{:columns=>[:c1, :c2], :table=>:t2, :key=>[:c3, :c4]}] end
207
- @d.dump_table_schema(:t1).must_equal "create_table(:t1) do\n Integer :c1\n Integer :c2\n \n foreign_key [:c1, :c2], :t2, :key=>[:c3, :c4]\nend"
208
- end
209
-
210
- it "should include index information if available" do
211
- def @d.supports_index_parsing?; true end
212
- def @d.indexes(t)
213
- {:i1=>{:columns=>[:c1], :unique=>false},
214
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
215
- end
216
- @d.dump_table_schema(:t1).must_equal "create_table(:t1, :ignore_index_errors=>true) do\n primary_key :c1\n String :c2, :size=>20\n \n index [:c1], :name=>:i1\n index [:c2, :c1], :unique=>true\nend"
217
- end
218
-
219
- it "should support dumping the whole database as a migration with a :schema option" do
220
- @d.dump_schema_migration(:schema=>'t__t1').must_equal <<-END_MIG
221
- Sequel.migration do
222
- change do
223
- create_table("t__t1") do
224
- primary_key :c1
225
- String :c2
226
- end
227
- end
228
- end
229
- END_MIG
230
- end
231
-
232
- it "should support dumping the whole database as a migration" do
233
- @d.dump_schema_migration.must_equal <<-END_MIG
234
- Sequel.migration do
235
- change do
236
- create_table(:t1) do
237
- primary_key :c1
238
- String :c2, :size=>20
239
- end
240
-
241
- create_table(:t2) do
242
- Integer :c1, :null=>false
243
- BigDecimal :c2, :null=>false
244
-
245
- primary_key [:c1, :c2]
246
- end
247
- end
248
- end
249
- END_MIG
250
- end
251
-
252
- it "should sort table names when dumping a migration" do
253
- def @d.tables(o) [:t2, :t1] end
254
- @d.dump_schema_migration.must_equal <<-END_MIG
255
- Sequel.migration do
256
- change do
257
- create_table(:t1) do
258
- primary_key :c1
259
- String :c2, :size=>20
260
- end
261
-
262
- create_table(:t2) do
263
- Integer :c1, :null=>false
264
- BigDecimal :c2, :null=>false
265
-
266
- primary_key [:c1, :c2]
267
- end
268
- end
269
- end
270
- END_MIG
271
- end
272
-
273
- it "should sort table names topologically when dumping a migration with foreign keys" do
274
- def @d.tables(o) [:t1, :t2] end
275
- def @d.schema(t, *o)
276
- t == :t1 ? [[:c2, {:db_type=>'integer'}]] : [[:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true}]]
277
- end
278
- def @d.supports_foreign_key_parsing?; true end
279
- def @d.foreign_key_list(t)
280
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
281
- end
282
- @d.dump_schema_migration.must_equal <<-END_MIG
283
- Sequel.migration do
284
- change do
285
- create_table(:t2) do
286
- primary_key :c1
287
- end
288
-
289
- create_table(:t1) do
290
- foreign_key :c2, :t2, :key=>[:c1]
291
- end
292
- end
293
- end
294
- END_MIG
295
- end
296
-
297
- it "should handle circular dependencies when dumping a migration with foreign keys" do
298
- def @d.tables(o) [:t1, :t2] end
299
- def @d.schema(t, *o)
300
- t == :t1 ? [[:c2, {:db_type=>'integer'}]] : [[:c1, {:db_type=>'integer'}]]
301
- end
302
- def @d.supports_foreign_key_parsing?; true end
303
- def @d.foreign_key_list(t)
304
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : [{:columns=>[:c1], :table=>:t1, :key=>[:c2]}]
305
- end
306
- @d.dump_schema_migration.must_equal <<-END_MIG
307
- Sequel.migration do
308
- change do
309
- create_table(:t1) do
310
- Integer :c2
311
- end
312
-
313
- create_table(:t2) do
314
- foreign_key :c1, :t1, :key=>[:c2]
315
- end
316
-
317
- alter_table(:t1) do
318
- add_foreign_key [:c2], :t2, :key=>[:c1]
319
- end
320
- end
321
- end
322
- END_MIG
323
- end
324
-
325
- it "should sort topologically even if the database raises an error when trying to parse foreign keys for a non-existent table" do
326
- def @d.tables(o) [:t1, :t2] end
327
- def @d.schema(t, *o)
328
- t == :t1 ? [[:c2, {:db_type=>'integer'}]] : [[:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true}]]
329
- end
330
- def @d.supports_foreign_key_parsing?; true end
331
- def @d.foreign_key_list(t)
332
- raise Sequel::DatabaseError unless [:t1, :t2].include?(t)
333
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
334
- end
335
- @d.dump_schema_migration.must_equal <<-END_MIG
336
- Sequel.migration do
337
- change do
338
- create_table(:t2) do
339
- primary_key :c1
340
- end
341
-
342
- create_table(:t1) do
343
- foreign_key :c2, :t2, :key=>[:c1]
344
- end
345
- end
346
- end
347
- END_MIG
348
- end
349
-
350
- it "should honor the :same_db option to not convert types" do
351
- @d.dump_table_schema(:t1, :same_db=>true).must_equal "create_table(:t1) do\n primary_key :c1\n column :c2, \"varchar(20)\"\nend"
352
- @d.dump_schema_migration(:same_db=>true).must_equal <<-END_MIG
353
- Sequel.migration do
354
- change do
355
- create_table(:t1) do
356
- primary_key :c1
357
- column :c2, "varchar(20)"
358
- end
359
-
360
- create_table(:t2) do
361
- column :c1, "integer", :null=>false
362
- column :c2, "numeric", :null=>false
363
-
364
- primary_key [:c1, :c2]
365
- end
366
- end
367
- end
368
- END_MIG
369
- end
370
-
371
- it "should honor the :index_names => false option to not include names of indexes" do
372
- def @d.supports_index_parsing?; true end
373
- def @d.indexes(t)
374
- {:i1=>{:columns=>[:c1], :unique=>false},
375
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
376
- end
377
- @d.dump_table_schema(:t1, :index_names=>false).must_equal "create_table(:t1, :ignore_index_errors=>true) do\n primary_key :c1\n String :c2, :size=>20\n \n index [:c1]\n index [:c2, :c1], :unique=>true\nend"
378
- @d.dump_schema_migration(:index_names=>false).must_equal <<-END_MIG
379
- Sequel.migration do
380
- change do
381
- create_table(:t1, :ignore_index_errors=>true) do
382
- primary_key :c1
383
- String :c2, :size=>20
384
-
385
- index [:c1]
386
- index [:c2, :c1], :unique=>true
387
- end
388
-
389
- create_table(:t2, :ignore_index_errors=>true) do
390
- Integer :c1, :null=>false
391
- BigDecimal :c2, :null=>false
392
-
393
- primary_key [:c1, :c2]
394
-
395
- index [:c1]
396
- index [:c2, :c1], :unique=>true
397
- end
398
- end
399
- end
400
- END_MIG
401
- end
402
-
403
- it "should make :index_names => :namespace option a noop if there is a global index namespace" do
404
- def @d.supports_index_parsing?; true end
405
- def @d.indexes(t)
406
- {:i1=>{:columns=>[:c1], :unique=>false},
407
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
408
- end
409
- @d.dump_table_schema(:t1, :index_names=>:namespace).must_equal "create_table(:t1, :ignore_index_errors=>true) do\n primary_key :c1\n String :c2, :size=>20\n \n index [:c1], :name=>:i1\n index [:c2, :c1]\nend"
410
- @d.dump_schema_migration(:index_names=>:namespace).must_equal <<-END_MIG
411
- Sequel.migration do
412
- change do
413
- create_table(:t1, :ignore_index_errors=>true) do
414
- primary_key :c1
415
- String :c2, :size=>20
416
-
417
- index [:c1], :name=>:i1
418
- index [:c2, :c1]
419
- end
420
-
421
- create_table(:t2, :ignore_index_errors=>true) do
422
- Integer :c1, :null=>false
423
- BigDecimal :c2, :null=>false
424
-
425
- primary_key [:c1, :c2]
426
-
427
- index [:c1], :name=>:i1
428
- index [:c2, :c1], :name=>:t1_c2_c1_index
429
- end
430
- end
431
- end
432
- END_MIG
433
- end
434
-
435
- it "should honor the :index_names => :namespace option to include names of indexes with prepended table name if there is no global index namespace" do
436
- def @d.global_index_namespace?; false end
437
- def @d.supports_index_parsing?; true end
438
- def @d.indexes(t)
439
- {:i1=>{:columns=>[:c1], :unique=>false},
440
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
441
- end
442
- @d.dump_table_schema(:t1, :index_names=>:namespace).must_equal "create_table(:t1, :ignore_index_errors=>true) do\n primary_key :c1\n String :c2, :size=>20\n \n index [:c1], :name=>:t1_i1\n index [:c2, :c1]\nend"
443
- @d.dump_schema_migration(:index_names=>:namespace).must_equal <<-END_MIG
444
- Sequel.migration do
445
- change do
446
- create_table(:t1, :ignore_index_errors=>true) do
447
- primary_key :c1
448
- String :c2, :size=>20
449
-
450
- index [:c1], :name=>:t1_i1
451
- index [:c2, :c1]
452
- end
453
-
454
- create_table(:t2, :ignore_index_errors=>true) do
455
- Integer :c1, :null=>false
456
- BigDecimal :c2, :null=>false
457
-
458
- primary_key [:c1, :c2]
459
-
460
- index [:c1], :name=>:t2_i1
461
- index [:c2, :c1], :name=>:t2_t1_c2_c1_index
462
- end
463
- end
464
- end
465
- END_MIG
466
- end
467
-
468
- it "should honor the :indexes => false option to not include indexes" do
469
- def @d.supports_index_parsing?; true end
470
- def @d.indexes(t)
471
- {:i1=>{:columns=>[:c1], :unique=>false},
472
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
473
- end
474
- @d.dump_table_schema(:t1, :indexes=>false).must_equal "create_table(:t1) do\n primary_key :c1\n String :c2, :size=>20\nend"
475
- @d.dump_schema_migration(:indexes=>false).must_equal <<-END_MIG
476
- Sequel.migration do
477
- change do
478
- create_table(:t1) do
479
- primary_key :c1
480
- String :c2, :size=>20
481
- end
482
-
483
- create_table(:t2) do
484
- Integer :c1, :null=>false
485
- BigDecimal :c2, :null=>false
486
-
487
- primary_key [:c1, :c2]
488
- end
489
- end
490
- end
491
- END_MIG
492
- end
493
-
494
- it "should have :indexes => false option disable foreign keys as well when dumping a whole migration" do
495
- def @d.foreign_key_list(t)
496
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
497
- end
498
- @d.dump_schema_migration(:indexes=>false).wont_match(/foreign_key/)
499
- end
500
-
501
- it "should have :foreign_keys option override :indexes => false disabling of foreign keys" do
502
- def @d.supports_foreign_key_parsing?; true end
503
- def @d.foreign_key_list(t)
504
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
505
- end
506
- @d.dump_schema_migration(:indexes=>false, :foreign_keys=>true).must_equal(<<OUTPUT)
507
- Sequel.migration do
508
- change do
509
- create_table(:t2) do
510
- Integer :c1, :null=>false
511
- BigDecimal :c2, :null=>false
512
-
513
- primary_key [:c1, :c2]
514
- end
515
-
516
- create_table(:t1) do
517
- primary_key :c1
518
- foreign_key :c2, :t2, :type=>String, :size=>20, :key=>[:c1]
519
- end
520
- end
521
- end
522
- OUTPUT
523
- end
524
-
525
- it "should support dumping just indexes as a migration" do
526
- def @d.tables(o) [:t1] end
527
- def @d.supports_index_parsing?; true end
528
- def @d.indexes(t)
529
- {:i1=>{:columns=>[:c1], :unique=>false},
530
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
531
- end
532
- @d.dump_indexes_migration.must_equal <<-END_MIG
533
- Sequel.migration do
534
- change do
535
- add_index :t1, [:c1], :ignore_errors=>true, :name=>:i1
536
- add_index :t1, [:c2, :c1], :ignore_errors=>true, :unique=>true
537
- end
538
- end
539
- END_MIG
540
- end
541
-
542
- it "should honor the :index_names => false option to not include names of indexes when dumping just indexes as a migration" do
543
- def @d.tables(o) [:t1] end
544
- def @d.supports_index_parsing?; true end
545
- def @d.indexes(t)
546
- {:i1=>{:columns=>[:c1], :unique=>false},
547
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
548
- end
549
- @d.dump_indexes_migration(:index_names=>false).must_equal <<-END_MIG
550
- Sequel.migration do
551
- change do
552
- add_index :t1, [:c1], :ignore_errors=>true
553
- add_index :t1, [:c2, :c1], :ignore_errors=>true, :unique=>true
554
- end
555
- end
556
- END_MIG
557
- end
558
-
559
- it "should honor the :index_names => :namespace option be a noop if there is a global index namespace" do
560
- def @d.tables(o) [:t1, :t2] end
561
- def @d.supports_index_parsing?; true end
562
- def @d.indexes(t)
563
- {:i1=>{:columns=>[:c1], :unique=>false},
564
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
565
- end
566
- @d.dump_indexes_migration(:index_names=>:namespace).must_equal <<-END_MIG
567
- Sequel.migration do
568
- change do
569
- add_index :t1, [:c1], :ignore_errors=>true, :name=>:i1
570
- add_index :t1, [:c2, :c1], :ignore_errors=>true
571
-
572
- add_index :t2, [:c1], :ignore_errors=>true, :name=>:i1
573
- add_index :t2, [:c2, :c1], :ignore_errors=>true, :name=>:t1_c2_c1_index
574
- end
575
- end
576
- END_MIG
577
- end
578
-
579
- it "should honor the :index_names => :namespace option to include names of indexes with prepended table name when dumping just indexes as a migration if there is no global index namespace" do
580
- def @d.global_index_namespace?; false end
581
- def @d.tables(o) [:t1, :t2] end
582
- def @d.supports_index_parsing?; true end
583
- def @d.indexes(t)
584
- {:i1=>{:columns=>[:c1], :unique=>false},
585
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
586
- end
587
- @d.dump_indexes_migration(:index_names=>:namespace).must_equal <<-END_MIG
588
- Sequel.migration do
589
- change do
590
- add_index :t1, [:c1], :ignore_errors=>true, :name=>:t1_i1
591
- add_index :t1, [:c2, :c1], :ignore_errors=>true
592
-
593
- add_index :t2, [:c1], :ignore_errors=>true, :name=>:t2_i1
594
- add_index :t2, [:c2, :c1], :ignore_errors=>true, :name=>:t2_t1_c2_c1_index
595
- end
596
- end
597
- END_MIG
598
- end
599
-
600
- it "should handle missing index parsing support when dumping index migration" do
601
- def @d.tables(o) [:t1] end
602
- @d.dump_indexes_migration.must_equal <<-END_MIG
603
- Sequel.migration do
604
- change do
605
-
606
- end
607
- end
608
- END_MIG
609
- end
610
-
611
- it "should handle missing foreign key parsing support when dumping foreign key migration" do
612
- def @d.tables(o) [:t1] end
613
- @d.dump_foreign_key_migration.must_equal <<-END_MIG
614
- Sequel.migration do
615
- change do
616
-
617
- end
618
- end
619
- END_MIG
620
- end
621
-
622
- it "should support dumping just foreign_keys as a migration" do
623
- def @d.tables(o) [:t1, :t2, :t3] end
624
- def @d.schema(t, *o)
625
- t == :t1 ? [[:c2, {:db_type=>'integer'}]] : [[:c1, {:db_type=>'integer'}]]
626
- end
627
- def @d.supports_foreign_key_parsing?; true end
628
- def @d.foreign_key_list(t, *a)
629
- case t
630
- when :t1
631
- [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}]
632
- when :t2
633
- [{:columns=>[:c1, :c3], :table=>:t1, :key=>[:c2, :c4]}]
634
- else
635
- []
636
- end
637
- end
638
- @d.dump_foreign_key_migration.must_equal <<-END_MIG
639
- Sequel.migration do
640
- change do
641
- alter_table(:t1) do
642
- add_foreign_key [:c2], :t2, :key=>[:c1]
643
- end
644
-
645
- alter_table(:t2) do
646
- add_foreign_key [:c1, :c3], :t1, :key=>[:c2, :c4]
647
- end
648
- end
649
- end
650
- END_MIG
651
- end
652
-
653
- it "should handle not null values and defaults" do
654
- def @d.schema(*s) [[:c1, {:db_type=>'date', :default=>"'now()'", :allow_null=>true}], [:c2, {:db_type=>'datetime', :allow_null=>false}]] end
655
- @d.dump_table_schema(:t3).must_equal "create_table(:t3) do\n Date :c1\n DateTime :c2, :null=>false\nend"
656
- end
657
-
658
- it "should handle converting common defaults" do
659
- def @d.schema(t, *os)
660
- s = [[:c1, {:db_type=>'boolean', :default=>"false", :type=>:boolean, :allow_null=>true}],
661
- [:c2, {:db_type=>'varchar', :default=>"'blah'", :type=>:string, :allow_null=>true}],
662
- [:c3, {:db_type=>'integer', :default=>"-1", :type=>:integer, :allow_null=>true}],
663
- [:c4, {:db_type=>'float', :default=>"1.0", :type=>:float, :allow_null=>true}],
664
- [:c5, {:db_type=>'decimal', :default=>"100.50", :type=>:decimal, :allow_null=>true}],
665
- [:c6, {:db_type=>'blob', :default=>"'blah'", :type=>:blob, :allow_null=>true}],
666
- [:c7, {:db_type=>'date', :default=>"'2008-10-29'", :type=>:date, :allow_null=>true}],
667
- [:c8, {:db_type=>'datetime', :default=>"'2008-10-29 10:20:30'", :type=>:datetime, :allow_null=>true}],
668
- [:c9, {:db_type=>'time', :default=>"'10:20:30'", :type=>:time, :allow_null=>true}],
669
- [:c10, {:db_type=>'foo', :default=>"'6 weeks'", :type=>nil, :allow_null=>true}],
670
- [:c11, {:db_type=>'date', :default=>"CURRENT_DATE", :type=>:date, :allow_null=>true}],
671
- [:c12, {:db_type=>'timestamp', :default=>"now()", :type=>:datetime, :allow_null=>true}]]
672
- s.each{|_, c| c[:ruby_default] = column_schema_to_ruby_default(c[:default], c[:type])}
673
- s
674
- end
675
- e = RUBY_VERSION >= '2.4' ? 'e' : 'E'
676
- @d.dump_table_schema(:t4).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').must_equal "create_table(:t4) do\n TrueClass :c1, :default=>false\n String :c2, :default=>\"blah\"\n Integer :c3, :default=>-1\n Float :c4, :default=>1.0\n BigDecimal :c5, :default=>Kernel::BigDecimal(\"0.1005#{e}3\")\n File :c6, :default=>Sequel::SQL::Blob.new(\"blah\")\n Date :c7, :default=>Date.new(2008, 10, 29)\n DateTime :c8, :default=>DateTime.parse(\"2008-10-29T10:20:30.0\")\n Time :c9, :default=>Sequel::SQLTime.parse(\"10:20:30.0\"), :only_time=>true\n String :c10\n Date :c11, :default=>Sequel::CURRENT_DATE\n DateTime :c12, :default=>Sequel::CURRENT_TIMESTAMP\nend"
677
- @d.dump_table_schema(:t4, :same_db=>true).gsub(/[+-]\d\d\d\d"\)/, '")').gsub(/\.0+/, '.0').must_equal "create_table(:t4) do\n column :c1, \"boolean\", :default=>false\n column :c2, \"varchar\", :default=>\"blah\"\n column :c3, \"integer\", :default=>-1\n column :c4, \"float\", :default=>1.0\n column :c5, \"decimal\", :default=>Kernel::BigDecimal(\"0.1005#{e}3\")\n column :c6, \"blob\", :default=>Sequel::SQL::Blob.new(\"blah\")\n column :c7, \"date\", :default=>Date.new(2008, 10, 29)\n column :c8, \"datetime\", :default=>DateTime.parse(\"2008-10-29T10:20:30.0\")\n column :c9, \"time\", :default=>Sequel::SQLTime.parse(\"10:20:30.0\")\n column :c10, \"foo\", :default=>Sequel::LiteralString.new(\"'6 weeks'\")\n column :c11, \"date\", :default=>Sequel::CURRENT_DATE\n column :c12, \"timestamp\", :default=>Sequel::CURRENT_TIMESTAMP\nend"
678
- end
679
-
680
- it "should not use a literal string as a fallback if using MySQL with the :same_db option" do
681
- def @d.database_type; :mysql end
682
- def @d.supports_index_parsing?; false end
683
- def @d.supports_foreign_key_parsing?; false end
684
- def @d.schema(t, *os)
685
- s = [[:c10, {:db_type=>'foo', :default=>"'6 weeks'", :type=>nil, :allow_null=>true}]]
686
- s.each{|_, c| c[:ruby_default] = column_schema_to_ruby_default(c[:default], c[:type])}
687
- s
688
- end
689
- @d.dump_table_schema(:t5, :same_db=>true).must_equal "create_table(:t5) do\n column :c10, \"foo\"\nend"
690
- end
691
-
692
- it "should convert unknown database types to strings" do
693
- @d.dump_table_schema(:t5).must_equal "create_table(:t5) do\n String :c1\nend"
694
- end
695
-
696
- it "should convert many database types to ruby types" do
697
- def @d.schema(t, *o)
698
- types = %w"mediumint smallint int integer mediumint(6) smallint(7) int(8) integer(9)
699
- tinyint tinyint(2) bigint bigint(20) real float double boolean tinytext mediumtext
700
- longtext text clob date datetime timestamp time char character
701
- varchar varchar(255) varchar(30) bpchar string money
702
- decimal decimal(10,2) numeric numeric(15,3) number bytea tinyblob mediumblob longblob
703
- blob varbinary varbinary(10) binary binary(20) year" +
704
- ["double precision", "timestamp with time zone", "timestamp without time zone",
705
- "time with time zone", "time without time zone", "character varying(20)"] +
706
- %w"nvarchar ntext smalldatetime smallmoney binary varbinary nchar" +
707
- ["timestamp(6) without time zone", "timestamp(6) with time zone", 'mediumint(10) unsigned', 'int(9) unsigned',
708
- 'int(10) unsigned', "int(12) unsigned", 'bigint unsigned', 'tinyint(3) unsigned', 'identity', 'int identity'] +
709
- %w"integer(10) bit bool"
710
- i = 0
711
- types.map{|x| [:"c#{i+=1}", {:db_type=>x, :allow_null=>true}]}
712
- end
713
- @d.dump_table_schema(:x).must_equal((<<END_MIG).chomp)
714
- create_table(:x) do
715
- Integer :c1
716
- Integer :c2
717
- Integer :c3
718
- Integer :c4
719
- Integer :c5
720
- Integer :c6
721
- Integer :c7
722
- Integer :c8
723
- Integer :c9
724
- Integer :c10
725
- Bignum :c11
726
- Bignum :c12
727
- Float :c13
728
- Float :c14
729
- Float :c15
730
- TrueClass :c16
731
- String :c17, :text=>true
732
- String :c18, :text=>true
733
- String :c19, :text=>true
734
- String :c20, :text=>true
735
- String :c21, :text=>true
736
- Date :c22
737
- DateTime :c23
738
- DateTime :c24
739
- Time :c25, :only_time=>true
740
- String :c26, :fixed=>true
741
- String :c27, :fixed=>true
742
- String :c28
743
- String :c29, :size=>255
744
- String :c30, :size=>30
745
- String :c31
746
- String :c32
747
- BigDecimal :c33, :size=>[19, 2]
748
- BigDecimal :c34
749
- BigDecimal :c35, :size=>[10, 2]
750
- BigDecimal :c36
751
- BigDecimal :c37, :size=>[15, 3]
752
- BigDecimal :c38
753
- File :c39
754
- File :c40
755
- File :c41
756
- File :c42
757
- File :c43
758
- File :c44
759
- File :c45, :size=>10
760
- File :c46
761
- File :c47, :size=>20
762
- Integer :c48
763
- Float :c49
764
- DateTime :c50
765
- DateTime :c51
766
- Time :c52, :only_time=>true
767
- Time :c53, :only_time=>true
768
- String :c54, :size=>20
769
- String :c55
770
- String :c56, :text=>true
771
- DateTime :c57
772
- BigDecimal :c58, :size=>[19, 2]
773
- File :c59
774
- File :c60
775
- String :c61, :fixed=>true
776
- DateTime :c62, :size=>6
777
- DateTime :c63, :size=>6
778
- Integer :c64
779
- Integer :c65
780
- Bignum :c66
781
- Bignum :c67
782
- Bignum :c68
783
- Integer :c69
784
- Integer :c70
785
- Integer :c71
786
- Integer :c72
787
- TrueClass :c73
788
- TrueClass :c74
789
-
790
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c64), 0)
791
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c65), 0)
792
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c66), 0)
793
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c67), 0)
794
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c68), 0)
795
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c69), 0)
796
- end
797
- END_MIG
798
- end
799
-
800
- it "should convert mysql types to ruby types" do
801
- def @d.schema(t, *o)
802
- i = 0
803
- ['float unsigned', 'double(15,2)', 'double(7,1) unsigned'].map{|x| [:"c#{i+=1}", {:db_type=>x, :allow_null=>true}]}
804
- end
805
- @d.dump_table_schema(:x).must_equal((<<END_MIG).chomp)
806
- create_table(:x) do
807
- Float :c1
808
- Float :c2
809
- Float :c3
810
-
811
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c1), 0)
812
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c3), 0)
813
- end
814
- END_MIG
815
- end
816
-
817
- it "should convert oracle special types to ruby types" do
818
- def @d.database_type; :oracle end
819
- def @d.schema(t, *o)
820
- i = 0
821
- ['number not null', 'date not null', 'varchar2(4 byte) not null'].map{|x| [:"c#{i+=1}", {:db_type=>x, :allow_null=>false}]}
822
- end
823
- @d.dump_table_schema(:x).must_equal((<<END_MIG).chomp)
824
- create_table(:x) do
825
- BigDecimal :c1, :null=>false
826
- Date :c2, :null=>false
827
- String :c3, :null=>false
828
- end
829
- END_MIG
830
- end
831
-
832
- it "should force specify :null option for MySQL timestamp columns when using :same_db" do
833
- def @d.database_type; :mysql end
834
- def @d.schema(*s) [[:c1, {:db_type=>'timestamp', :primary_key=>true, :allow_null=>true}]] end
835
- @d.dump_table_schema(:t3, :same_db=>true).must_equal "create_table(:t3) do\n column :c1, \"timestamp\", :null=>true\n \n primary_key [:c1]\nend"
836
-
837
- def @d.schema(*s) [[:c1, {:db_type=>'timestamp', :primary_key=>true, :allow_null=>false}]] end
838
- @d.dump_table_schema(:t3, :same_db=>true).must_equal "create_table(:t3) do\n column :c1, \"timestamp\", :null=>false\n \n primary_key [:c1]\nend"
839
- end
840
-
841
- it "should use separate primary_key call with non autoincrementable types" do
842
- def @d.schema(*s) [[:c1, {:db_type=>'varchar(8)', :primary_key=>true, :auto_increment=>false}]] end
843
- @d.dump_table_schema(:t3).must_equal "create_table(:t3) do\n String :c1, :size=>8\n \n primary_key [:c1]\nend"
844
- @d.dump_table_schema(:t3, :same_db=>true).must_equal "create_table(:t3) do\n column :c1, \"varchar(8)\"\n \n primary_key [:c1]\nend"
845
- end
846
-
847
- it "should use explicit type for non integer foreign_key types" do
848
- def @d.schema(*s) [[:c1, {:db_type=>'date', :primary_key=>true, :auto_increment=>false}]] end
849
- def @d.supports_foreign_key_parsing?; true end
850
- def @d.foreign_key_list(t, *a) [{:columns=>[:c1], :table=>:t3, :key=>[:c1]}] if t == :t4 end
851
- ["create_table(:t4) do\n foreign_key :c1, :t3, :type=>Date, :key=>[:c1]\n \n primary_key [:c1]\nend",
852
- "create_table(:t4) do\n foreign_key :c1, :t3, :key=>[:c1], :type=>Date\n \n primary_key [:c1]\nend"].must_include(@d.dump_table_schema(:t4))
853
- ["create_table(:t4) do\n foreign_key :c1, :t3, :type=>\"date\", :key=>[:c1]\n \n primary_key [:c1]\nend",
854
- "create_table(:t4) do\n foreign_key :c1, :t3, :key=>[:c1], :type=>\"date\"\n \n primary_key [:c1]\nend"].must_include(@d.dump_table_schema(:t4, :same_db=>true))
855
- end
856
-
857
- it "should correctly handing autoincrementing primary keys that are also foreign keys" do
858
- def @d.schema(*s) [[:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true}]] end
859
- def @d.supports_foreign_key_parsing?; true end
860
- def @d.foreign_key_list(t, *a) [{:columns=>[:c1], :table=>:t3, :key=>[:c1]}] if t == :t4 end
861
- ["create_table(:t4) do\n primary_key :c1, :table=>:t3, :key=>[:c1]\nend",
862
- "create_table(:t4) do\n primary_key :c1, :key=>[:c1], :table=>:t3\nend"].must_include(@d.dump_table_schema(:t4))
863
- end
864
-
865
- it "should handle dumping on PostgreSQL using qualified tables" do
866
- @d = Sequel.connect('mock://postgres').extension(:schema_dumper)
867
- def @d.schema(*s) [[:c1, {:db_type=>'timestamp', :primary_key=>true, :allow_null=>true}]] end
868
- @d.dump_table_schema(Sequel.qualify(:foo, :bar), :same_db=>true).must_equal "create_table(Sequel::SQL::QualifiedIdentifier.new(:foo, :bar)) do\n column :c1, \"timestamp\"\n \n primary_key [:c1]\nend"
869
- end
870
- end