sequel 4.26.0 → 5.37.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 (692) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +405 -5656
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +232 -157
  5. data/bin/sequel +32 -9
  6. data/doc/advanced_associations.rdoc +252 -188
  7. data/doc/association_basics.rdoc +231 -273
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +75 -48
  10. data/doc/code_order.rdoc +28 -10
  11. data/doc/core_extensions.rdoc +104 -63
  12. data/doc/dataset_basics.rdoc +12 -21
  13. data/doc/dataset_filtering.rdoc +99 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +74 -31
  16. data/doc/migration.rdoc +72 -46
  17. data/doc/model_dataset_method_design.rdoc +129 -0
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +12 -12
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +59 -69
  22. data/doc/opening_databases.rdoc +84 -94
  23. data/doc/postgresql.rdoc +268 -38
  24. data/doc/prepared_statements.rdoc +29 -24
  25. data/doc/querying.rdoc +184 -164
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.10.0.txt +84 -0
  30. data/doc/release_notes/5.11.0.txt +83 -0
  31. data/doc/release_notes/5.12.0.txt +141 -0
  32. data/doc/release_notes/5.13.0.txt +27 -0
  33. data/doc/release_notes/5.14.0.txt +63 -0
  34. data/doc/release_notes/5.15.0.txt +39 -0
  35. data/doc/release_notes/5.16.0.txt +110 -0
  36. data/doc/release_notes/5.17.0.txt +31 -0
  37. data/doc/release_notes/5.18.0.txt +69 -0
  38. data/doc/release_notes/5.19.0.txt +28 -0
  39. data/doc/release_notes/5.2.0.txt +33 -0
  40. data/doc/release_notes/5.20.0.txt +89 -0
  41. data/doc/release_notes/5.21.0.txt +87 -0
  42. data/doc/release_notes/5.22.0.txt +48 -0
  43. data/doc/release_notes/5.23.0.txt +56 -0
  44. data/doc/release_notes/5.24.0.txt +56 -0
  45. data/doc/release_notes/5.25.0.txt +32 -0
  46. data/doc/release_notes/5.26.0.txt +35 -0
  47. data/doc/release_notes/5.27.0.txt +21 -0
  48. data/doc/release_notes/5.28.0.txt +16 -0
  49. data/doc/release_notes/5.29.0.txt +22 -0
  50. data/doc/release_notes/5.3.0.txt +121 -0
  51. data/doc/release_notes/5.30.0.txt +20 -0
  52. data/doc/release_notes/5.31.0.txt +148 -0
  53. data/doc/release_notes/5.32.0.txt +46 -0
  54. data/doc/release_notes/5.33.0.txt +24 -0
  55. data/doc/release_notes/5.34.0.txt +40 -0
  56. data/doc/release_notes/5.35.0.txt +56 -0
  57. data/doc/release_notes/5.36.0.txt +60 -0
  58. data/doc/release_notes/5.37.0.txt +30 -0
  59. data/doc/release_notes/5.4.0.txt +80 -0
  60. data/doc/release_notes/5.5.0.txt +61 -0
  61. data/doc/release_notes/5.6.0.txt +31 -0
  62. data/doc/release_notes/5.7.0.txt +108 -0
  63. data/doc/release_notes/5.8.0.txt +170 -0
  64. data/doc/release_notes/5.9.0.txt +99 -0
  65. data/doc/schema_modification.rdoc +102 -77
  66. data/doc/security.rdoc +160 -87
  67. data/doc/sharding.rdoc +74 -47
  68. data/doc/sql.rdoc +135 -122
  69. data/doc/testing.rdoc +34 -18
  70. data/doc/thread_safety.rdoc +2 -4
  71. data/doc/transactions.rdoc +101 -19
  72. data/doc/validations.rdoc +64 -51
  73. data/doc/virtual_rows.rdoc +90 -109
  74. data/lib/sequel.rb +3 -1
  75. data/lib/sequel/adapters/ado.rb +154 -22
  76. data/lib/sequel/adapters/ado/access.rb +21 -21
  77. data/lib/sequel/adapters/ado/mssql.rb +8 -15
  78. data/lib/sequel/adapters/amalgalite.rb +17 -25
  79. data/lib/sequel/adapters/ibmdb.rb +52 -58
  80. data/lib/sequel/adapters/jdbc.rb +149 -127
  81. data/lib/sequel/adapters/jdbc/db2.rb +32 -40
  82. data/lib/sequel/adapters/jdbc/derby.rb +56 -58
  83. data/lib/sequel/adapters/jdbc/h2.rb +40 -30
  84. data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
  85. data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
  86. data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
  87. data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
  88. data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
  89. data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
  90. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
  91. data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
  92. data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
  93. data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
  94. data/lib/sequel/adapters/mock.rb +104 -113
  95. data/lib/sequel/adapters/mysql.rb +42 -61
  96. data/lib/sequel/adapters/mysql2.rb +126 -35
  97. data/lib/sequel/adapters/odbc.rb +21 -28
  98. data/lib/sequel/adapters/odbc/db2.rb +3 -1
  99. data/lib/sequel/adapters/odbc/mssql.rb +11 -15
  100. data/lib/sequel/adapters/odbc/oracle.rb +11 -0
  101. data/lib/sequel/adapters/oracle.rb +62 -68
  102. data/lib/sequel/adapters/postgres.rb +257 -311
  103. data/lib/sequel/adapters/postgresql.rb +3 -1
  104. data/lib/sequel/adapters/shared/access.rb +75 -79
  105. data/lib/sequel/adapters/shared/db2.rb +96 -74
  106. data/lib/sequel/adapters/shared/mssql.rb +258 -213
  107. data/lib/sequel/adapters/shared/mysql.rb +284 -216
  108. data/lib/sequel/adapters/shared/oracle.rb +175 -60
  109. data/lib/sequel/adapters/shared/postgres.rb +829 -383
  110. data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
  111. data/lib/sequel/adapters/shared/sqlite.rb +382 -159
  112. data/lib/sequel/adapters/sqlanywhere.rb +53 -38
  113. data/lib/sequel/adapters/sqlite.rb +111 -105
  114. data/lib/sequel/adapters/tinytds.rb +38 -46
  115. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
  116. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
  117. data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
  118. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
  119. data/lib/sequel/adapters/utils/replace.rb +3 -4
  120. data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
  121. data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
  122. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
  123. data/lib/sequel/ast_transformer.rb +13 -89
  124. data/lib/sequel/connection_pool.rb +54 -26
  125. data/lib/sequel/connection_pool/sharded_single.rb +19 -12
  126. data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
  127. data/lib/sequel/connection_pool/single.rb +21 -12
  128. data/lib/sequel/connection_pool/threaded.rb +137 -119
  129. data/lib/sequel/core.rb +352 -320
  130. data/lib/sequel/database.rb +19 -2
  131. data/lib/sequel/database/connecting.rb +70 -55
  132. data/lib/sequel/database/dataset.rb +15 -5
  133. data/lib/sequel/database/dataset_defaults.rb +20 -102
  134. data/lib/sequel/database/features.rb +20 -4
  135. data/lib/sequel/database/logging.rb +25 -7
  136. data/lib/sequel/database/misc.rb +132 -118
  137. data/lib/sequel/database/query.rb +51 -28
  138. data/lib/sequel/database/schema_generator.rb +188 -75
  139. data/lib/sequel/database/schema_methods.rb +161 -92
  140. data/lib/sequel/database/transactions.rb +260 -58
  141. data/lib/sequel/dataset.rb +28 -12
  142. data/lib/sequel/dataset/actions.rb +354 -170
  143. data/lib/sequel/dataset/dataset_module.rb +46 -0
  144. data/lib/sequel/dataset/features.rb +81 -34
  145. data/lib/sequel/dataset/graph.rb +82 -58
  146. data/lib/sequel/dataset/misc.rb +139 -47
  147. data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
  148. data/lib/sequel/dataset/prepared_statements.rb +188 -85
  149. data/lib/sequel/dataset/query.rb +428 -214
  150. data/lib/sequel/dataset/sql.rb +446 -339
  151. data/lib/sequel/deprecated.rb +14 -2
  152. data/lib/sequel/exceptions.rb +48 -16
  153. data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
  154. data/lib/sequel/extensions/_model_pg_row.rb +43 -0
  155. data/lib/sequel/extensions/_pretty_table.rb +10 -9
  156. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  157. data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
  158. data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
  159. data/lib/sequel/extensions/blank.rb +2 -0
  160. data/lib/sequel/extensions/caller_logging.rb +79 -0
  161. data/lib/sequel/extensions/columns_introspection.rb +9 -4
  162. data/lib/sequel/extensions/connection_expiration.rb +99 -0
  163. data/lib/sequel/extensions/connection_validator.rb +26 -13
  164. data/lib/sequel/extensions/constant_sql_override.rb +65 -0
  165. data/lib/sequel/extensions/constraint_validations.rb +93 -38
  166. data/lib/sequel/extensions/core_extensions.rb +45 -53
  167. data/lib/sequel/extensions/core_refinements.rb +44 -46
  168. data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
  169. data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
  170. data/lib/sequel/extensions/date_arithmetic.rb +42 -16
  171. data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
  172. data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
  173. data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
  174. data/lib/sequel/extensions/error_sql.rb +7 -3
  175. data/lib/sequel/extensions/escaped_like.rb +100 -0
  176. data/lib/sequel/extensions/eval_inspect.rb +14 -15
  177. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  178. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  179. data/lib/sequel/extensions/freeze_datasets.rb +3 -0
  180. data/lib/sequel/extensions/from_block.rb +2 -31
  181. data/lib/sequel/extensions/graph_each.rb +19 -6
  182. data/lib/sequel/extensions/identifier_mangling.rb +180 -0
  183. data/lib/sequel/extensions/implicit_subquery.rb +48 -0
  184. data/lib/sequel/extensions/index_caching.rb +109 -0
  185. data/lib/sequel/extensions/inflector.rb +8 -4
  186. data/lib/sequel/extensions/integer64.rb +32 -0
  187. data/lib/sequel/extensions/looser_typecasting.rb +19 -9
  188. data/lib/sequel/extensions/migration.rb +132 -80
  189. data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
  190. data/lib/sequel/extensions/named_timezones.rb +88 -23
  191. data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
  192. data/lib/sequel/extensions/null_dataset.rb +12 -8
  193. data/lib/sequel/extensions/pagination.rb +35 -28
  194. data/lib/sequel/extensions/pg_array.rb +227 -316
  195. data/lib/sequel/extensions/pg_array_ops.rb +19 -7
  196. data/lib/sequel/extensions/pg_enum.rb +69 -24
  197. data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
  198. data/lib/sequel/extensions/pg_hstore.rb +50 -59
  199. data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
  200. data/lib/sequel/extensions/pg_inet.rb +34 -15
  201. data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
  202. data/lib/sequel/extensions/pg_interval.rb +26 -26
  203. data/lib/sequel/extensions/pg_json.rb +422 -141
  204. data/lib/sequel/extensions/pg_json_ops.rb +248 -9
  205. data/lib/sequel/extensions/pg_loose_count.rb +5 -1
  206. data/lib/sequel/extensions/pg_range.rb +162 -146
  207. data/lib/sequel/extensions/pg_range_ops.rb +10 -5
  208. data/lib/sequel/extensions/pg_row.rb +53 -87
  209. data/lib/sequel/extensions/pg_row_ops.rb +36 -13
  210. data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
  211. data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
  212. data/lib/sequel/extensions/pretty_table.rb +4 -0
  213. data/lib/sequel/extensions/query.rb +12 -7
  214. data/lib/sequel/extensions/round_timestamps.rb +6 -9
  215. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  216. data/lib/sequel/extensions/s.rb +59 -0
  217. data/lib/sequel/extensions/schema_caching.rb +14 -1
  218. data/lib/sequel/extensions/schema_dumper.rb +83 -55
  219. data/lib/sequel/extensions/select_remove.rb +8 -4
  220. data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
  221. data/lib/sequel/extensions/server_block.rb +50 -17
  222. data/lib/sequel/extensions/server_logging.rb +61 -0
  223. data/lib/sequel/extensions/split_array_nil.rb +8 -4
  224. data/lib/sequel/extensions/sql_comments.rb +96 -0
  225. data/lib/sequel/extensions/sql_expr.rb +4 -1
  226. data/lib/sequel/extensions/string_agg.rb +181 -0
  227. data/lib/sequel/extensions/string_date_time.rb +2 -0
  228. data/lib/sequel/extensions/symbol_aref.rb +53 -0
  229. data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
  230. data/lib/sequel/extensions/symbol_as.rb +23 -0
  231. data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
  232. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  233. data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
  234. data/lib/sequel/extensions/to_dot.rb +15 -5
  235. data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
  236. data/lib/sequel/model.rb +36 -126
  237. data/lib/sequel/model/associations.rb +850 -257
  238. data/lib/sequel/model/base.rb +652 -764
  239. data/lib/sequel/model/dataset_module.rb +13 -10
  240. data/lib/sequel/model/default_inflections.rb +3 -1
  241. data/lib/sequel/model/errors.rb +3 -3
  242. data/lib/sequel/model/exceptions.rb +12 -12
  243. data/lib/sequel/model/inflections.rb +8 -19
  244. data/lib/sequel/model/plugins.rb +111 -0
  245. data/lib/sequel/plugins/accessed_columns.rb +2 -0
  246. data/lib/sequel/plugins/active_model.rb +32 -7
  247. data/lib/sequel/plugins/after_initialize.rb +3 -1
  248. data/lib/sequel/plugins/association_dependencies.rb +27 -18
  249. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  250. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  251. data/lib/sequel/plugins/association_pks.rb +181 -83
  252. data/lib/sequel/plugins/association_proxies.rb +33 -9
  253. data/lib/sequel/plugins/auto_validations.rb +58 -23
  254. data/lib/sequel/plugins/before_after_save.rb +8 -0
  255. data/lib/sequel/plugins/blacklist_security.rb +23 -12
  256. data/lib/sequel/plugins/boolean_readers.rb +9 -6
  257. data/lib/sequel/plugins/boolean_subsets.rb +64 -0
  258. data/lib/sequel/plugins/caching.rb +27 -16
  259. data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
  260. data/lib/sequel/plugins/column_conflicts.rb +18 -3
  261. data/lib/sequel/plugins/column_select.rb +9 -5
  262. data/lib/sequel/plugins/columns_updated.rb +42 -0
  263. data/lib/sequel/plugins/composition.rb +36 -24
  264. data/lib/sequel/plugins/constraint_validations.rb +37 -16
  265. data/lib/sequel/plugins/csv_serializer.rb +58 -35
  266. data/lib/sequel/plugins/dataset_associations.rb +60 -18
  267. data/lib/sequel/plugins/def_dataset_method.rb +90 -0
  268. data/lib/sequel/plugins/defaults_setter.rb +74 -13
  269. data/lib/sequel/plugins/delay_add_association.rb +4 -1
  270. data/lib/sequel/plugins/dirty.rb +65 -24
  271. data/lib/sequel/plugins/eager_each.rb +27 -3
  272. data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
  273. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  274. data/lib/sequel/plugins/error_splitter.rb +19 -12
  275. data/lib/sequel/plugins/finder.rb +246 -0
  276. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  277. data/lib/sequel/plugins/force_encoding.rb +9 -12
  278. data/lib/sequel/plugins/hook_class_methods.rb +39 -54
  279. data/lib/sequel/plugins/input_transformer.rb +20 -10
  280. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  281. data/lib/sequel/plugins/insert_returning_select.rb +4 -2
  282. data/lib/sequel/plugins/instance_filters.rb +12 -8
  283. data/lib/sequel/plugins/instance_hooks.rb +36 -17
  284. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  285. data/lib/sequel/plugins/inverted_subsets.rb +24 -13
  286. data/lib/sequel/plugins/json_serializer.rb +123 -47
  287. data/lib/sequel/plugins/lazy_attributes.rb +20 -14
  288. data/lib/sequel/plugins/list.rb +40 -26
  289. data/lib/sequel/plugins/many_through_many.rb +28 -12
  290. data/lib/sequel/plugins/modification_detection.rb +17 -5
  291. data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
  292. data/lib/sequel/plugins/nested_attributes.rb +55 -28
  293. data/lib/sequel/plugins/optimistic_locking.rb +5 -3
  294. data/lib/sequel/plugins/pg_array_associations.rb +52 -18
  295. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
  296. data/lib/sequel/plugins/pg_row.rb +7 -51
  297. data/lib/sequel/plugins/prepared_statements.rb +53 -72
  298. data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
  299. data/lib/sequel/plugins/rcte_tree.rb +43 -63
  300. data/lib/sequel/plugins/serialization.rb +37 -44
  301. data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
  302. data/lib/sequel/plugins/sharding.rb +17 -10
  303. data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
  304. data/lib/sequel/plugins/singular_table_names.rb +2 -0
  305. data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
  306. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  307. data/lib/sequel/plugins/split_values.rb +13 -6
  308. data/lib/sequel/plugins/static_cache.rb +79 -53
  309. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  310. data/lib/sequel/plugins/string_stripper.rb +5 -3
  311. data/lib/sequel/plugins/subclasses.rb +20 -2
  312. data/lib/sequel/plugins/subset_conditions.rb +48 -0
  313. data/lib/sequel/plugins/table_select.rb +4 -2
  314. data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
  315. data/lib/sequel/plugins/throw_failures.rb +110 -0
  316. data/lib/sequel/plugins/timestamps.rb +22 -8
  317. data/lib/sequel/plugins/touch.rb +21 -8
  318. data/lib/sequel/plugins/tree.rb +57 -30
  319. data/lib/sequel/plugins/typecast_on_load.rb +14 -4
  320. data/lib/sequel/plugins/unlimited_update.rb +3 -7
  321. data/lib/sequel/plugins/update_or_create.rb +6 -4
  322. data/lib/sequel/plugins/update_primary_key.rb +3 -1
  323. data/lib/sequel/plugins/update_refresh.rb +28 -15
  324. data/lib/sequel/plugins/uuid.rb +70 -0
  325. data/lib/sequel/plugins/validate_associated.rb +20 -0
  326. data/lib/sequel/plugins/validation_class_methods.rb +40 -19
  327. data/lib/sequel/plugins/validation_contexts.rb +49 -0
  328. data/lib/sequel/plugins/validation_helpers.rb +49 -31
  329. data/lib/sequel/plugins/whitelist_security.rb +122 -0
  330. data/lib/sequel/plugins/xml_serializer.rb +31 -30
  331. data/lib/sequel/sql.rb +479 -329
  332. data/lib/sequel/timezones.rb +62 -32
  333. data/lib/sequel/version.rb +10 -3
  334. metadata +177 -477
  335. data/Rakefile +0 -165
  336. data/doc/active_record.rdoc +0 -912
  337. data/doc/release_notes/1.0.txt +0 -38
  338. data/doc/release_notes/1.1.txt +0 -143
  339. data/doc/release_notes/1.3.txt +0 -101
  340. data/doc/release_notes/1.4.0.txt +0 -53
  341. data/doc/release_notes/1.5.0.txt +0 -155
  342. data/doc/release_notes/2.0.0.txt +0 -298
  343. data/doc/release_notes/2.1.0.txt +0 -271
  344. data/doc/release_notes/2.10.0.txt +0 -328
  345. data/doc/release_notes/2.11.0.txt +0 -215
  346. data/doc/release_notes/2.12.0.txt +0 -534
  347. data/doc/release_notes/2.2.0.txt +0 -253
  348. data/doc/release_notes/2.3.0.txt +0 -88
  349. data/doc/release_notes/2.4.0.txt +0 -106
  350. data/doc/release_notes/2.5.0.txt +0 -137
  351. data/doc/release_notes/2.6.0.txt +0 -157
  352. data/doc/release_notes/2.7.0.txt +0 -166
  353. data/doc/release_notes/2.8.0.txt +0 -171
  354. data/doc/release_notes/2.9.0.txt +0 -97
  355. data/doc/release_notes/3.0.0.txt +0 -221
  356. data/doc/release_notes/3.1.0.txt +0 -406
  357. data/doc/release_notes/3.10.0.txt +0 -286
  358. data/doc/release_notes/3.11.0.txt +0 -254
  359. data/doc/release_notes/3.12.0.txt +0 -304
  360. data/doc/release_notes/3.13.0.txt +0 -210
  361. data/doc/release_notes/3.14.0.txt +0 -118
  362. data/doc/release_notes/3.15.0.txt +0 -78
  363. data/doc/release_notes/3.16.0.txt +0 -45
  364. data/doc/release_notes/3.17.0.txt +0 -58
  365. data/doc/release_notes/3.18.0.txt +0 -120
  366. data/doc/release_notes/3.19.0.txt +0 -67
  367. data/doc/release_notes/3.2.0.txt +0 -268
  368. data/doc/release_notes/3.20.0.txt +0 -41
  369. data/doc/release_notes/3.21.0.txt +0 -87
  370. data/doc/release_notes/3.22.0.txt +0 -39
  371. data/doc/release_notes/3.23.0.txt +0 -172
  372. data/doc/release_notes/3.24.0.txt +0 -420
  373. data/doc/release_notes/3.25.0.txt +0 -88
  374. data/doc/release_notes/3.26.0.txt +0 -88
  375. data/doc/release_notes/3.27.0.txt +0 -82
  376. data/doc/release_notes/3.28.0.txt +0 -304
  377. data/doc/release_notes/3.29.0.txt +0 -459
  378. data/doc/release_notes/3.3.0.txt +0 -192
  379. data/doc/release_notes/3.30.0.txt +0 -135
  380. data/doc/release_notes/3.31.0.txt +0 -146
  381. data/doc/release_notes/3.32.0.txt +0 -202
  382. data/doc/release_notes/3.33.0.txt +0 -157
  383. data/doc/release_notes/3.34.0.txt +0 -671
  384. data/doc/release_notes/3.35.0.txt +0 -144
  385. data/doc/release_notes/3.36.0.txt +0 -245
  386. data/doc/release_notes/3.37.0.txt +0 -338
  387. data/doc/release_notes/3.38.0.txt +0 -234
  388. data/doc/release_notes/3.39.0.txt +0 -237
  389. data/doc/release_notes/3.4.0.txt +0 -325
  390. data/doc/release_notes/3.40.0.txt +0 -73
  391. data/doc/release_notes/3.41.0.txt +0 -155
  392. data/doc/release_notes/3.42.0.txt +0 -74
  393. data/doc/release_notes/3.43.0.txt +0 -105
  394. data/doc/release_notes/3.44.0.txt +0 -152
  395. data/doc/release_notes/3.45.0.txt +0 -179
  396. data/doc/release_notes/3.46.0.txt +0 -122
  397. data/doc/release_notes/3.47.0.txt +0 -270
  398. data/doc/release_notes/3.48.0.txt +0 -477
  399. data/doc/release_notes/3.5.0.txt +0 -510
  400. data/doc/release_notes/3.6.0.txt +0 -366
  401. data/doc/release_notes/3.7.0.txt +0 -179
  402. data/doc/release_notes/3.8.0.txt +0 -151
  403. data/doc/release_notes/3.9.0.txt +0 -233
  404. data/doc/release_notes/4.0.0.txt +0 -262
  405. data/doc/release_notes/4.1.0.txt +0 -85
  406. data/doc/release_notes/4.10.0.txt +0 -226
  407. data/doc/release_notes/4.11.0.txt +0 -147
  408. data/doc/release_notes/4.12.0.txt +0 -105
  409. data/doc/release_notes/4.13.0.txt +0 -169
  410. data/doc/release_notes/4.14.0.txt +0 -68
  411. data/doc/release_notes/4.15.0.txt +0 -56
  412. data/doc/release_notes/4.16.0.txt +0 -36
  413. data/doc/release_notes/4.17.0.txt +0 -38
  414. data/doc/release_notes/4.18.0.txt +0 -36
  415. data/doc/release_notes/4.19.0.txt +0 -45
  416. data/doc/release_notes/4.2.0.txt +0 -129
  417. data/doc/release_notes/4.20.0.txt +0 -79
  418. data/doc/release_notes/4.21.0.txt +0 -94
  419. data/doc/release_notes/4.22.0.txt +0 -72
  420. data/doc/release_notes/4.23.0.txt +0 -65
  421. data/doc/release_notes/4.24.0.txt +0 -99
  422. data/doc/release_notes/4.25.0.txt +0 -181
  423. data/doc/release_notes/4.26.0.txt +0 -44
  424. data/doc/release_notes/4.3.0.txt +0 -40
  425. data/doc/release_notes/4.4.0.txt +0 -92
  426. data/doc/release_notes/4.5.0.txt +0 -34
  427. data/doc/release_notes/4.6.0.txt +0 -30
  428. data/doc/release_notes/4.7.0.txt +0 -103
  429. data/doc/release_notes/4.8.0.txt +0 -175
  430. data/doc/release_notes/4.9.0.txt +0 -190
  431. data/lib/sequel/adapters/cubrid.rb +0 -142
  432. data/lib/sequel/adapters/do.rb +0 -156
  433. data/lib/sequel/adapters/do/mysql.rb +0 -64
  434. data/lib/sequel/adapters/do/postgres.rb +0 -42
  435. data/lib/sequel/adapters/do/sqlite3.rb +0 -40
  436. data/lib/sequel/adapters/jdbc/as400.rb +0 -82
  437. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
  438. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
  439. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
  440. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
  441. data/lib/sequel/adapters/odbc/progress.rb +0 -8
  442. data/lib/sequel/adapters/shared/cubrid.rb +0 -243
  443. data/lib/sequel/adapters/shared/firebird.rb +0 -245
  444. data/lib/sequel/adapters/shared/informix.rb +0 -52
  445. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
  446. data/lib/sequel/adapters/shared/progress.rb +0 -38
  447. data/lib/sequel/adapters/swift.rb +0 -158
  448. data/lib/sequel/adapters/swift/mysql.rb +0 -47
  449. data/lib/sequel/adapters/swift/postgres.rb +0 -45
  450. data/lib/sequel/adapters/swift/sqlite.rb +0 -47
  451. data/lib/sequel/adapters/utils/pg_types.rb +0 -68
  452. data/lib/sequel/dataset/mutation.rb +0 -109
  453. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
  454. data/lib/sequel/extensions/filter_having.rb +0 -59
  455. data/lib/sequel/extensions/hash_aliases.rb +0 -45
  456. data/lib/sequel/extensions/meta_def.rb +0 -31
  457. data/lib/sequel/extensions/query_literals.rb +0 -80
  458. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
  459. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
  460. data/lib/sequel/extensions/set_overrides.rb +0 -72
  461. data/lib/sequel/no_core_ext.rb +0 -1
  462. data/lib/sequel/plugins/association_autoreloading.rb +0 -7
  463. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
  464. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
  465. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
  466. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
  467. data/lib/sequel/plugins/schema.rb +0 -80
  468. data/lib/sequel/plugins/scissors.rb +0 -33
  469. data/spec/adapters/db2_spec.rb +0 -160
  470. data/spec/adapters/firebird_spec.rb +0 -411
  471. data/spec/adapters/informix_spec.rb +0 -100
  472. data/spec/adapters/mssql_spec.rb +0 -706
  473. data/spec/adapters/mysql_spec.rb +0 -1287
  474. data/spec/adapters/oracle_spec.rb +0 -313
  475. data/spec/adapters/postgres_spec.rb +0 -3725
  476. data/spec/adapters/spec_helper.rb +0 -43
  477. data/spec/adapters/sqlanywhere_spec.rb +0 -170
  478. data/spec/adapters/sqlite_spec.rb +0 -653
  479. data/spec/bin_spec.rb +0 -254
  480. data/spec/core/connection_pool_spec.rb +0 -1016
  481. data/spec/core/database_spec.rb +0 -2531
  482. data/spec/core/dataset_spec.rb +0 -5098
  483. data/spec/core/deprecated_spec.rb +0 -70
  484. data/spec/core/expression_filters_spec.rb +0 -1243
  485. data/spec/core/mock_adapter_spec.rb +0 -462
  486. data/spec/core/object_graph_spec.rb +0 -303
  487. data/spec/core/placeholder_literalizer_spec.rb +0 -163
  488. data/spec/core/schema_generator_spec.rb +0 -179
  489. data/spec/core/schema_spec.rb +0 -1659
  490. data/spec/core/spec_helper.rb +0 -34
  491. data/spec/core/version_spec.rb +0 -7
  492. data/spec/core_extensions_spec.rb +0 -699
  493. data/spec/extensions/accessed_columns_spec.rb +0 -51
  494. data/spec/extensions/active_model_spec.rb +0 -123
  495. data/spec/extensions/after_initialize_spec.rb +0 -24
  496. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  497. data/spec/extensions/association_dependencies_spec.rb +0 -117
  498. data/spec/extensions/association_pks_spec.rb +0 -365
  499. data/spec/extensions/association_proxies_spec.rb +0 -86
  500. data/spec/extensions/auto_validations_spec.rb +0 -192
  501. data/spec/extensions/blacklist_security_spec.rb +0 -88
  502. data/spec/extensions/blank_spec.rb +0 -69
  503. data/spec/extensions/boolean_readers_spec.rb +0 -93
  504. data/spec/extensions/caching_spec.rb +0 -270
  505. data/spec/extensions/class_table_inheritance_spec.rb +0 -420
  506. data/spec/extensions/column_conflicts_spec.rb +0 -60
  507. data/spec/extensions/column_select_spec.rb +0 -108
  508. data/spec/extensions/columns_introspection_spec.rb +0 -91
  509. data/spec/extensions/composition_spec.rb +0 -242
  510. data/spec/extensions/connection_validator_spec.rb +0 -120
  511. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
  512. data/spec/extensions/constraint_validations_spec.rb +0 -325
  513. data/spec/extensions/core_refinements_spec.rb +0 -519
  514. data/spec/extensions/csv_serializer_spec.rb +0 -173
  515. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  516. data/spec/extensions/dataset_associations_spec.rb +0 -311
  517. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  518. data/spec/extensions/date_arithmetic_spec.rb +0 -150
  519. data/spec/extensions/defaults_setter_spec.rb +0 -101
  520. data/spec/extensions/delay_add_association_spec.rb +0 -52
  521. data/spec/extensions/dirty_spec.rb +0 -180
  522. data/spec/extensions/eager_each_spec.rb +0 -42
  523. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  524. data/spec/extensions/error_splitter_spec.rb +0 -18
  525. data/spec/extensions/error_sql_spec.rb +0 -20
  526. data/spec/extensions/eval_inspect_spec.rb +0 -73
  527. data/spec/extensions/filter_having_spec.rb +0 -40
  528. data/spec/extensions/force_encoding_spec.rb +0 -114
  529. data/spec/extensions/from_block_spec.rb +0 -21
  530. data/spec/extensions/graph_each_spec.rb +0 -109
  531. data/spec/extensions/hash_aliases_spec.rb +0 -24
  532. data/spec/extensions/hook_class_methods_spec.rb +0 -429
  533. data/spec/extensions/inflector_spec.rb +0 -183
  534. data/spec/extensions/input_transformer_spec.rb +0 -54
  535. data/spec/extensions/insert_returning_select_spec.rb +0 -46
  536. data/spec/extensions/instance_filters_spec.rb +0 -79
  537. data/spec/extensions/instance_hooks_spec.rb +0 -276
  538. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  539. data/spec/extensions/json_serializer_spec.rb +0 -291
  540. data/spec/extensions/lazy_attributes_spec.rb +0 -170
  541. data/spec/extensions/list_spec.rb +0 -267
  542. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  543. data/spec/extensions/many_through_many_spec.rb +0 -2172
  544. data/spec/extensions/meta_def_spec.rb +0 -21
  545. data/spec/extensions/migration_spec.rb +0 -712
  546. data/spec/extensions/modification_detection_spec.rb +0 -80
  547. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
  548. data/spec/extensions/named_timezones_spec.rb +0 -108
  549. data/spec/extensions/nested_attributes_spec.rb +0 -697
  550. data/spec/extensions/null_dataset_spec.rb +0 -85
  551. data/spec/extensions/optimistic_locking_spec.rb +0 -128
  552. data/spec/extensions/pagination_spec.rb +0 -118
  553. data/spec/extensions/pg_array_associations_spec.rb +0 -736
  554. data/spec/extensions/pg_array_ops_spec.rb +0 -143
  555. data/spec/extensions/pg_array_spec.rb +0 -395
  556. data/spec/extensions/pg_enum_spec.rb +0 -92
  557. data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
  558. data/spec/extensions/pg_hstore_spec.rb +0 -206
  559. data/spec/extensions/pg_inet_ops_spec.rb +0 -101
  560. data/spec/extensions/pg_inet_spec.rb +0 -52
  561. data/spec/extensions/pg_interval_spec.rb +0 -76
  562. data/spec/extensions/pg_json_ops_spec.rb +0 -229
  563. data/spec/extensions/pg_json_spec.rb +0 -218
  564. data/spec/extensions/pg_loose_count_spec.rb +0 -17
  565. data/spec/extensions/pg_range_ops_spec.rb +0 -58
  566. data/spec/extensions/pg_range_spec.rb +0 -404
  567. data/spec/extensions/pg_row_ops_spec.rb +0 -60
  568. data/spec/extensions/pg_row_plugin_spec.rb +0 -62
  569. data/spec/extensions/pg_row_spec.rb +0 -360
  570. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
  571. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
  572. data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
  573. data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
  574. data/spec/extensions/prepared_statements_spec.rb +0 -103
  575. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
  576. data/spec/extensions/pretty_table_spec.rb +0 -92
  577. data/spec/extensions/query_literals_spec.rb +0 -183
  578. data/spec/extensions/query_spec.rb +0 -102
  579. data/spec/extensions/rcte_tree_spec.rb +0 -392
  580. data/spec/extensions/round_timestamps_spec.rb +0 -43
  581. data/spec/extensions/schema_caching_spec.rb +0 -41
  582. data/spec/extensions/schema_dumper_spec.rb +0 -789
  583. data/spec/extensions/schema_spec.rb +0 -117
  584. data/spec/extensions/scissors_spec.rb +0 -26
  585. data/spec/extensions/select_remove_spec.rb +0 -38
  586. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
  587. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  588. data/spec/extensions/serialization_spec.rb +0 -362
  589. data/spec/extensions/server_block_spec.rb +0 -90
  590. data/spec/extensions/set_overrides_spec.rb +0 -61
  591. data/spec/extensions/sharding_spec.rb +0 -198
  592. data/spec/extensions/shared_caching_spec.rb +0 -175
  593. data/spec/extensions/single_table_inheritance_spec.rb +0 -297
  594. data/spec/extensions/singular_table_names_spec.rb +0 -22
  595. data/spec/extensions/skip_create_refresh_spec.rb +0 -17
  596. data/spec/extensions/spec_helper.rb +0 -71
  597. data/spec/extensions/split_array_nil_spec.rb +0 -24
  598. data/spec/extensions/split_values_spec.rb +0 -22
  599. data/spec/extensions/sql_expr_spec.rb +0 -60
  600. data/spec/extensions/static_cache_spec.rb +0 -361
  601. data/spec/extensions/string_date_time_spec.rb +0 -95
  602. data/spec/extensions/string_stripper_spec.rb +0 -68
  603. data/spec/extensions/subclasses_spec.rb +0 -66
  604. data/spec/extensions/table_select_spec.rb +0 -71
  605. data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
  606. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  607. data/spec/extensions/timestamps_spec.rb +0 -175
  608. data/spec/extensions/to_dot_spec.rb +0 -154
  609. data/spec/extensions/touch_spec.rb +0 -203
  610. data/spec/extensions/tree_spec.rb +0 -274
  611. data/spec/extensions/typecast_on_load_spec.rb +0 -80
  612. data/spec/extensions/unlimited_update_spec.rb +0 -20
  613. data/spec/extensions/update_or_create_spec.rb +0 -87
  614. data/spec/extensions/update_primary_key_spec.rb +0 -100
  615. data/spec/extensions/update_refresh_spec.rb +0 -53
  616. data/spec/extensions/validate_associated_spec.rb +0 -52
  617. data/spec/extensions/validation_class_methods_spec.rb +0 -1027
  618. data/spec/extensions/validation_helpers_spec.rb +0 -541
  619. data/spec/extensions/xml_serializer_spec.rb +0 -207
  620. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  621. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  622. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  623. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  624. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  625. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  626. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  627. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  628. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  629. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  630. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  631. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  632. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  633. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  634. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  635. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  636. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  637. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  638. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  639. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  640. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  641. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  642. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  643. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  644. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  645. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  646. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  647. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  648. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  649. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  650. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  651. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  652. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  653. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  654. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  655. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  656. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  657. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  658. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  659. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  660. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  661. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  662. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  663. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  664. data/spec/guards_helper.rb +0 -55
  665. data/spec/integration/associations_test.rb +0 -2454
  666. data/spec/integration/database_test.rb +0 -113
  667. data/spec/integration/dataset_test.rb +0 -1808
  668. data/spec/integration/eager_loader_test.rb +0 -687
  669. data/spec/integration/migrator_test.rb +0 -240
  670. data/spec/integration/model_test.rb +0 -226
  671. data/spec/integration/plugin_test.rb +0 -2240
  672. data/spec/integration/prepared_statement_test.rb +0 -467
  673. data/spec/integration/schema_test.rb +0 -817
  674. data/spec/integration/spec_helper.rb +0 -48
  675. data/spec/integration/timezone_test.rb +0 -86
  676. data/spec/integration/transaction_test.rb +0 -374
  677. data/spec/integration/type_test.rb +0 -133
  678. data/spec/model/association_reflection_spec.rb +0 -525
  679. data/spec/model/associations_spec.rb +0 -4426
  680. data/spec/model/base_spec.rb +0 -759
  681. data/spec/model/class_dataset_methods_spec.rb +0 -146
  682. data/spec/model/dataset_methods_spec.rb +0 -149
  683. data/spec/model/eager_loading_spec.rb +0 -2137
  684. data/spec/model/hooks_spec.rb +0 -604
  685. data/spec/model/inflector_spec.rb +0 -26
  686. data/spec/model/model_spec.rb +0 -982
  687. data/spec/model/plugins_spec.rb +0 -299
  688. data/spec/model/record_spec.rb +0 -2147
  689. data/spec/model/spec_helper.rb +0 -46
  690. data/spec/model/validations_spec.rb +0 -193
  691. data/spec/sequel_coverage.rb +0 -15
  692. data/spec/spec_config.rb +0 -10
@@ -1,43 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- if RUBY_VERSION >= '1.9.0'
4
- describe "Sequel::Dataset::RoundTimestamps" do
5
- before do
6
- @dataset = Sequel.mock.dataset.extension(:round_timestamps)
7
- end
8
-
9
- it "should round times properly for databases supporting microsecond precision" do
10
- @dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999.5)).must_equal "'01:02:03.500000'"
11
- @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999995)).must_equal "'2010-01-02 03:04:05.500000'"
12
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999995, 10000000))).must_equal "'2010-01-02 03:04:05.500000'"
13
-
14
- @dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999.4)).must_equal "'01:02:03.499999'"
15
- @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999994)).must_equal "'2010-01-02 03:04:05.499999'"
16
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999994, 10000000))).must_equal "'2010-01-02 03:04:05.499999'"
17
- end
18
-
19
- it "should round times properly for databases supporting millisecond precision" do
20
- def @dataset.timestamp_precision() 3 end
21
- @dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499500)).must_equal "'01:02:03.500'"
22
- @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4995)).must_equal "'2010-01-02 03:04:05.500'"
23
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54995, 10000))).must_equal "'2010-01-02 03:04:05.500'"
24
-
25
- @dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499499)).must_equal "'01:02:03.499'"
26
- @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4994)).must_equal "'2010-01-02 03:04:05.499'"
27
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54994, 10000))).must_equal "'2010-01-02 03:04:05.499'"
28
- end
29
-
30
- it "should round times properly for databases supporting second precision" do
31
- def @dataset.supports_timestamp_usecs?() false end
32
- @dataset.literal(Sequel::SQLTime.create(1, 2, 3, 500000)).must_equal "'01:02:04'"
33
- @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.5)).must_equal "'2010-01-02 03:04:06'"
34
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(55, 10))).must_equal "'2010-01-02 03:04:06'"
35
-
36
- @dataset.literal(Sequel::SQLTime.create(1, 2, 3, 499999)).must_equal "'01:02:03'"
37
- @dataset.literal(Time.local(2010, 1, 2, 3, 4, 5.4999999)).must_equal "'2010-01-02 03:04:05'"
38
- @dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999999, 10000000))).must_equal "'2010-01-02 03:04:05'"
39
- end
40
- end
41
- else
42
- skip_warn "round_timestamps extension: only works on ruby 1.9+"
43
- end
@@ -1,41 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "schema_caching extension" do
4
- before do
5
- @db = Sequel.mock.extension(:schema_caching)
6
- @schemas = {'"table"'=>[[:column, {:db_type=>"integer", :default=>"nextval('table_id_seq'::regclass)", :allow_null=>false, :primary_key=>true, :type=>:integer, :ruby_default=>nil}]]}
7
- @filename = "spec/files/test_schema_#$$.dump"
8
- @db.instance_variable_set(:@schemas, @schemas)
9
- end
10
- after do
11
- File.delete(@filename) if File.exist?(@filename)
12
- end
13
-
14
- it "Database#dump_schema_cache should dump cached schema to the given file" do
15
- File.exist?(@filename).must_equal false
16
- @db.dump_schema_cache(@filename)
17
- File.exist?(@filename).must_equal true
18
- File.size(@filename).must_be :>, 0
19
- end
20
-
21
- it "Database#load_schema_cache should load cached schema from the given file dumped by #dump_schema_cache" do
22
- @db.dump_schema_cache(@filename)
23
- db = Sequel::Database.new.extension(:schema_caching)
24
- db.load_schema_cache(@filename)
25
- @db.instance_variable_get(:@schemas).must_equal @schemas
26
- end
27
-
28
- it "Database#dump_schema_cache? should dump cached schema to the given file unless the file exists" do
29
- File.open(@filename, 'wb'){|f|}
30
- File.size(@filename).must_equal 0
31
- @db.dump_schema_cache?(@filename)
32
- File.size(@filename).must_equal 0
33
- end
34
-
35
- it "Database#load_schema_cache? should load cached schema from the given file if it exists" do
36
- db = Sequel::Database.new.extension(:schema_caching)
37
- File.exist?(@filename).must_equal false
38
- db.load_schema_cache?(@filename)
39
- db.instance_variable_get(:@schemas).must_equal({})
40
- end
41
- end
@@ -1,789 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
2
-
3
- describe "Sequel::Schema::Generator dump methods" do
4
- before do
5
- @d = Sequel::Database.new.extension(:schema_dumper)
6
- @g = Sequel::Schema::Generator
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 allow dumping indexes as separate add_index and drop_index methods" do
40
- g = @g.new(@d) do
41
- index :a
42
- index [:c, :e], :name=>:blah
43
- index [:b, :c], :unique=>true
44
- end
45
-
46
- g.dump_indexes(:add_index=>:t).must_equal((<<END_CODE).strip)
47
- add_index :t, [:a]
48
- add_index :t, [:c, :e], :name=>:blah
49
- add_index :t, [:b, :c], :unique=>true
50
- END_CODE
51
-
52
- g.dump_indexes(:drop_index=>:t).must_equal((<<END_CODE).strip)
53
- drop_index :t, [:b, :c], :unique=>true
54
- drop_index :t, [:c, :e], :name=>:blah
55
- drop_index :t, [:a]
56
- END_CODE
57
- end
58
-
59
- it "should raise an error if you try to dump a Generator that uses a constraint with a proc" do
60
- proc{@g.new(@d){check{a>1}}.dump_constraints}.must_raise(Sequel::Error)
61
- end
62
- end
63
-
64
- describe "Sequel::Database dump methods" do
65
- before do
66
- @d = Sequel::Database.new.extension(:schema_dumper)
67
- @d.meta_def(:tables){|o| [:t1, :t2]}
68
- @d.meta_def(:schema) do |t, *o|
69
- case t
70
- when :t1, 't__t1', Sequel.identifier(:t__t1)
71
- [[:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true, :allow_null=>false}],
72
- [:c2, {:db_type=>'varchar(20)', :allow_null=>true}]]
73
- when :t2
74
- [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>false}],
75
- [:c2, {:db_type=>'numeric', :primary_key=>true, :allow_null=>false}]]
76
- when :t5
77
- [[:c1, {:db_type=>'blahblah', :allow_null=>true}]]
78
- end
79
- end
80
- end
81
-
82
- it "should support dumping table schemas as create_table method calls" do
83
- @d.dump_table_schema(:t1).must_equal "create_table(:t1) do\n primary_key :c1\n String :c2, :size=>20\nend"
84
- end
85
-
86
- it "should support dumping table schemas when given a string" do
87
- @d.dump_table_schema('t__t1').must_equal "create_table(\"t__t1\") do\n primary_key :c1\n String :c2, :size=>20\nend"
88
- end
89
-
90
- it "should support dumping table schemas when given an identifier" do
91
- @d.dump_table_schema(Sequel.identifier(:t__t1)).must_equal "create_table(\"t__t1\") do\n primary_key :c1\n String :c2, :size=>20\nend"
92
- end
93
-
94
- it "should dump non-Integer primary key columns with explicit :type" do
95
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'bigint', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]]}
96
- @d.dump_table_schema(:t6).must_equal "create_table(:t6) do\n primary_key :c1, :type=>Bignum\nend"
97
- end
98
-
99
- it "should handle foreign keys" do
100
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer', :allow_null=>true}]]}
101
- @d.meta_def(:supports_foreign_key_parsing?){true}
102
- @d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2]}]}
103
- @d.dump_table_schema(:t6).must_equal "create_table(:t6) do\n foreign_key :c1, :t2, :key=>[:c2]\nend"
104
- end
105
-
106
- it "should handle primary keys that are also foreign keys" do
107
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]]}
108
- @d.meta_def(:supports_foreign_key_parsing?){true}
109
- @d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2]}]}
110
- s = @d.dump_table_schema(:t6)
111
- s.must_match(/create_table\(:t6\) do\n primary_key :c1, /)
112
- s.must_match(/:table=>:t2/)
113
- s.must_match(/:key=>\[:c2\]/)
114
- end
115
-
116
- it "should handle foreign key options" do
117
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer', :allow_null=>true}]]}
118
- @d.meta_def(:supports_foreign_key_parsing?){true}
119
- @d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true}]}
120
- s = @d.dump_table_schema(:t6)
121
- s.must_match(/create_table\(:t6\) do\n foreign_key :c1, :t2, /)
122
- s.must_match(/:key=>\[:c2\]/)
123
- s.must_match(/:on_delete=>:restrict/)
124
- s.must_match(/:on_update=>:set_null/)
125
- s.must_match(/:deferrable=>true/)
126
- end
127
-
128
- it "should handle foreign key options in the primary key" do
129
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]]}
130
- @d.meta_def(:supports_foreign_key_parsing?){true}
131
- @d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true}]}
132
- s = @d.dump_table_schema(:t6)
133
- s.must_match(/create_table\(:t6\) do\n primary_key :c1, /)
134
- s.must_match(/:table=>:t2/)
135
- s.must_match(/:key=>\[:c2\]/)
136
- s.must_match(/:on_delete=>:restrict/)
137
- s.must_match(/:on_update=>:set_null/)
138
- s.must_match(/:deferrable=>true/)
139
- end
140
-
141
- it "should omit foreign key options that are the same as defaults" do
142
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer', :allow_null=>true}]]}
143
- @d.meta_def(:supports_foreign_key_parsing?){true}
144
- @d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:no_action, :on_update=>:no_action, :deferrable=>false}]}
145
- s = @d.dump_table_schema(:t6)
146
- s.must_match(/create_table\(:t6\) do\n foreign_key :c1, :t2, /)
147
- s.must_match(/:key=>\[:c2\]/)
148
- s.wont_match(/:on_delete/)
149
- s.wont_match(/:on_update/)
150
- s.wont_match(/:deferrable/)
151
- end
152
-
153
- it "should omit foreign key options that are the same as defaults in the primary key" do
154
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]]}
155
- @d.meta_def(:supports_foreign_key_parsing?){true}
156
- @d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:no_action, :on_update=>:no_action, :deferrable=>false}]}
157
- s = @d.dump_table_schema(:t6)
158
- s.must_match(/create_table\(:t6\) do\n primary_key :c1, /)
159
- s.must_match(/:table=>:t2/)
160
- s.must_match(/:key=>\[:c2\]/)
161
- s.wont_match(/:on_delete/)
162
- s.wont_match(/:on_update/)
163
- s.wont_match(/:deferrable/)
164
- end
165
-
166
- it "should dump primary key columns with explicit type equal to the database type when :same_db option is passed" do
167
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'somedbspecifictype', :primary_key=>true, :allow_null=>false}]]}
168
- @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"
169
- end
170
-
171
- it "should use a composite primary_key calls if there is a composite primary key" do
172
- @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"
173
- end
174
-
175
- it "should use a composite foreign_key calls if there is a composite foreign key" do
176
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer'}], [:c2, {:db_type=>'integer'}]]}
177
- @d.meta_def(:supports_foreign_key_parsing?){true}
178
- @d.meta_def(:foreign_key_list){|*s| [{:columns=>[:c1, :c2], :table=>:t2, :key=>[:c3, :c4]}]}
179
- @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"
180
- end
181
-
182
- it "should include index information if available" do
183
- @d.meta_def(:supports_index_parsing?){true}
184
- @d.meta_def(:indexes) do |t|
185
- {:i1=>{:columns=>[:c1], :unique=>false},
186
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
187
- end
188
- @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"
189
- end
190
-
191
- it "should support dumping the whole database as a migration" do
192
- @d.dump_schema_migration.must_equal <<-END_MIG
193
- Sequel.migration do
194
- change do
195
- create_table(:t1) do
196
- primary_key :c1
197
- String :c2, :size=>20
198
- end
199
-
200
- create_table(:t2) do
201
- Integer :c1, :null=>false
202
- BigDecimal :c2, :null=>false
203
-
204
- primary_key [:c1, :c2]
205
- end
206
- end
207
- end
208
- END_MIG
209
- end
210
-
211
- it "should sort table names when dumping a migration" do
212
- @d.meta_def(:tables){|o| [:t2, :t1]}
213
- @d.dump_schema_migration.must_equal <<-END_MIG
214
- Sequel.migration do
215
- change do
216
- create_table(:t1) do
217
- primary_key :c1
218
- String :c2, :size=>20
219
- end
220
-
221
- create_table(:t2) do
222
- Integer :c1, :null=>false
223
- BigDecimal :c2, :null=>false
224
-
225
- primary_key [:c1, :c2]
226
- end
227
- end
228
- end
229
- END_MIG
230
- end
231
-
232
- it "should sort table names topologically when dumping a migration with foreign keys" do
233
- @d.meta_def(:tables){|o| [:t1, :t2]}
234
- @d.meta_def(:schema) do |t|
235
- t == :t1 ? [[:c2, {:db_type=>'integer'}]] : [[:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true}]]
236
- end
237
- @d.meta_def(:supports_foreign_key_parsing?){true}
238
- @d.meta_def(:foreign_key_list) do |t|
239
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
240
- end
241
- @d.dump_schema_migration.must_equal <<-END_MIG
242
- Sequel.migration do
243
- change do
244
- create_table(:t2) do
245
- primary_key :c1
246
- end
247
-
248
- create_table(:t1) do
249
- foreign_key :c2, :t2, :key=>[:c1]
250
- end
251
- end
252
- end
253
- END_MIG
254
- end
255
-
256
- it "should handle circular dependencies when dumping a migration with foreign keys" do
257
- @d.meta_def(:tables){|o| [:t1, :t2]}
258
- @d.meta_def(:schema) do |t|
259
- t == :t1 ? [[:c2, {:db_type=>'integer'}]] : [[:c1, {:db_type=>'integer'}]]
260
- end
261
- @d.meta_def(:supports_foreign_key_parsing?){true}
262
- @d.meta_def(:foreign_key_list) do |t|
263
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : [{:columns=>[:c1], :table=>:t1, :key=>[:c2]}]
264
- end
265
- @d.dump_schema_migration.must_equal <<-END_MIG
266
- Sequel.migration do
267
- change do
268
- create_table(:t1) do
269
- Integer :c2
270
- end
271
-
272
- create_table(:t2) do
273
- foreign_key :c1, :t1, :key=>[:c2]
274
- end
275
-
276
- alter_table(:t1) do
277
- add_foreign_key [:c2], :t2, :key=>[:c1]
278
- end
279
- end
280
- end
281
- END_MIG
282
- end
283
-
284
- it "should sort topologically even if the database raises an error when trying to parse foreign keys for a non-existent table" do
285
- @d.meta_def(:tables){|o| [:t1, :t2]}
286
- @d.meta_def(:schema) do |t|
287
- t == :t1 ? [[:c2, {:db_type=>'integer'}]] : [[:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true}]]
288
- end
289
- @d.meta_def(:supports_foreign_key_parsing?){true}
290
- @d.meta_def(:foreign_key_list) do |t|
291
- raise Sequel::DatabaseError unless [:t1, :t2].include?(t)
292
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
293
- end
294
- @d.dump_schema_migration.must_equal <<-END_MIG
295
- Sequel.migration do
296
- change do
297
- create_table(:t2) do
298
- primary_key :c1
299
- end
300
-
301
- create_table(:t1) do
302
- foreign_key :c2, :t2, :key=>[:c1]
303
- end
304
- end
305
- end
306
- END_MIG
307
- end
308
-
309
- it "should honor the :same_db option to not convert types" do
310
- @d.dump_table_schema(:t1, :same_db=>true).must_equal "create_table(:t1) do\n primary_key :c1\n column :c2, \"varchar(20)\"\nend"
311
- @d.dump_schema_migration(:same_db=>true).must_equal <<-END_MIG
312
- Sequel.migration do
313
- change do
314
- create_table(:t1) do
315
- primary_key :c1
316
- column :c2, "varchar(20)"
317
- end
318
-
319
- create_table(:t2) do
320
- column :c1, "integer", :null=>false
321
- column :c2, "numeric", :null=>false
322
-
323
- primary_key [:c1, :c2]
324
- end
325
- end
326
- end
327
- END_MIG
328
- end
329
-
330
- it "should honor the :index_names => false option to not include names of indexes" do
331
- @d.meta_def(:supports_index_parsing?){true}
332
- @d.meta_def(:indexes) do |t|
333
- {:i1=>{:columns=>[:c1], :unique=>false},
334
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
335
- end
336
- @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"
337
- @d.dump_schema_migration(:index_names=>false).must_equal <<-END_MIG
338
- Sequel.migration do
339
- change do
340
- create_table(:t1, :ignore_index_errors=>true) do
341
- primary_key :c1
342
- String :c2, :size=>20
343
-
344
- index [:c1]
345
- index [:c2, :c1], :unique=>true
346
- end
347
-
348
- create_table(:t2, :ignore_index_errors=>true) do
349
- Integer :c1, :null=>false
350
- BigDecimal :c2, :null=>false
351
-
352
- primary_key [:c1, :c2]
353
-
354
- index [:c1]
355
- index [:c2, :c1], :unique=>true
356
- end
357
- end
358
- end
359
- END_MIG
360
- end
361
-
362
- it "should make :index_names => :namespace option a noop if there is a global index namespace" do
363
- @d.meta_def(:supports_index_parsing?){true}
364
- @d.meta_def(:indexes) do |t|
365
- {:i1=>{:columns=>[:c1], :unique=>false},
366
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
367
- end
368
- @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"
369
- @d.dump_schema_migration(:index_names=>:namespace).must_equal <<-END_MIG
370
- Sequel.migration do
371
- change do
372
- create_table(:t1, :ignore_index_errors=>true) do
373
- primary_key :c1
374
- String :c2, :size=>20
375
-
376
- index [:c1], :name=>:i1
377
- index [:c2, :c1]
378
- end
379
-
380
- create_table(:t2, :ignore_index_errors=>true) do
381
- Integer :c1, :null=>false
382
- BigDecimal :c2, :null=>false
383
-
384
- primary_key [:c1, :c2]
385
-
386
- index [:c1], :name=>:i1
387
- index [:c2, :c1], :name=>:t1_c2_c1_index
388
- end
389
- end
390
- end
391
- END_MIG
392
- end
393
-
394
- 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
395
- @d.meta_def(:global_index_namespace?){false}
396
- @d.meta_def(:supports_index_parsing?){true}
397
- @d.meta_def(:indexes) do |t|
398
- {:i1=>{:columns=>[:c1], :unique=>false},
399
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
400
- end
401
- @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"
402
- @d.dump_schema_migration(:index_names=>:namespace).must_equal <<-END_MIG
403
- Sequel.migration do
404
- change do
405
- create_table(:t1, :ignore_index_errors=>true) do
406
- primary_key :c1
407
- String :c2, :size=>20
408
-
409
- index [:c1], :name=>:t1_i1
410
- index [:c2, :c1]
411
- end
412
-
413
- create_table(:t2, :ignore_index_errors=>true) do
414
- Integer :c1, :null=>false
415
- BigDecimal :c2, :null=>false
416
-
417
- primary_key [:c1, :c2]
418
-
419
- index [:c1], :name=>:t2_i1
420
- index [:c2, :c1], :name=>:t2_t1_c2_c1_index
421
- end
422
- end
423
- end
424
- END_MIG
425
- end
426
-
427
- it "should honor the :indexes => false option to not include indexes" do
428
- @d.meta_def(:supports_index_parsing?){true}
429
- @d.meta_def(:indexes) do |t|
430
- {:i1=>{:columns=>[:c1], :unique=>false},
431
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
432
- end
433
- @d.dump_table_schema(:t1, :indexes=>false).must_equal "create_table(:t1) do\n primary_key :c1\n String :c2, :size=>20\nend"
434
- @d.dump_schema_migration(:indexes=>false).must_equal <<-END_MIG
435
- Sequel.migration do
436
- change do
437
- create_table(:t1) do
438
- primary_key :c1
439
- String :c2, :size=>20
440
- end
441
-
442
- create_table(:t2) do
443
- Integer :c1, :null=>false
444
- BigDecimal :c2, :null=>false
445
-
446
- primary_key [:c1, :c2]
447
- end
448
- end
449
- end
450
- END_MIG
451
- end
452
-
453
- it "should have :indexes => false option disable foreign keys as well when dumping a whole migration" do
454
- @d.meta_def(:foreign_key_list) do |t|
455
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
456
- end
457
- @d.dump_schema_migration(:indexes=>false).wont_match(/foreign_key/)
458
- end
459
-
460
- it "should have :foreign_keys option override :indexes => false disabling of foreign keys" do
461
- @d.meta_def(:supports_foreign_key_parsing?){true}
462
- @d.meta_def(:foreign_key_list) do |t|
463
- t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
464
- end
465
- @d.dump_schema_migration(:indexes=>false, :foreign_keys=>true).must_match(/foreign_key/)
466
- end
467
-
468
- it "should support dumping just indexes as a migration" do
469
- @d.meta_def(:tables){|o| [:t1]}
470
- @d.meta_def(:supports_index_parsing?){true}
471
- @d.meta_def(:indexes) do |t|
472
- {:i1=>{:columns=>[:c1], :unique=>false},
473
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
474
- end
475
- @d.dump_indexes_migration.must_equal <<-END_MIG
476
- Sequel.migration do
477
- change do
478
- add_index :t1, [:c1], :ignore_errors=>true, :name=>:i1
479
- add_index :t1, [:c2, :c1], :ignore_errors=>true, :unique=>true
480
- end
481
- end
482
- END_MIG
483
- end
484
-
485
- it "should honor the :index_names => false option to not include names of indexes when dumping just indexes as a migration" do
486
- @d.meta_def(:tables){|o| [:t1]}
487
- @d.meta_def(:supports_index_parsing?){true}
488
- @d.meta_def(:indexes) do |t|
489
- {:i1=>{:columns=>[:c1], :unique=>false},
490
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>true}}
491
- end
492
- @d.dump_indexes_migration(:index_names=>false).must_equal <<-END_MIG
493
- Sequel.migration do
494
- change do
495
- add_index :t1, [:c1], :ignore_errors=>true
496
- add_index :t1, [:c2, :c1], :ignore_errors=>true, :unique=>true
497
- end
498
- end
499
- END_MIG
500
- end
501
-
502
- it "should honor the :index_names => :namespace option be a noop if there is a global index namespace" do
503
- @d.meta_def(:tables){|o| [:t1, :t2]}
504
- @d.meta_def(:supports_index_parsing?){true}
505
- @d.meta_def(:indexes) do |t|
506
- {:i1=>{:columns=>[:c1], :unique=>false},
507
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
508
- end
509
- @d.dump_indexes_migration(:index_names=>:namespace).must_equal <<-END_MIG
510
- Sequel.migration do
511
- change do
512
- add_index :t1, [:c1], :ignore_errors=>true, :name=>:i1
513
- add_index :t1, [:c2, :c1], :ignore_errors=>true
514
-
515
- add_index :t2, [:c1], :ignore_errors=>true, :name=>:i1
516
- add_index :t2, [:c2, :c1], :ignore_errors=>true, :name=>:t1_c2_c1_index
517
- end
518
- end
519
- END_MIG
520
- end
521
-
522
- 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
523
- @d.meta_def(:global_index_namespace?){false}
524
- @d.meta_def(:tables){|o| [:t1, :t2]}
525
- @d.meta_def(:supports_index_parsing?){true}
526
- @d.meta_def(:indexes) do |t|
527
- {:i1=>{:columns=>[:c1], :unique=>false},
528
- :t1_c2_c1_index=>{:columns=>[:c2, :c1], :unique=>false}}
529
- end
530
- @d.dump_indexes_migration(:index_names=>:namespace).must_equal <<-END_MIG
531
- Sequel.migration do
532
- change do
533
- add_index :t1, [:c1], :ignore_errors=>true, :name=>:t1_i1
534
- add_index :t1, [:c2, :c1], :ignore_errors=>true
535
-
536
- add_index :t2, [:c1], :ignore_errors=>true, :name=>:t2_i1
537
- add_index :t2, [:c2, :c1], :ignore_errors=>true, :name=>:t2_t1_c2_c1_index
538
- end
539
- end
540
- END_MIG
541
- end
542
-
543
- it "should handle missing index parsing support when dumping index migration" do
544
- @d.meta_def(:tables){|o| [:t1]}
545
- @d.dump_indexes_migration.must_equal <<-END_MIG
546
- Sequel.migration do
547
- change do
548
-
549
- end
550
- end
551
- END_MIG
552
- end
553
-
554
- it "should handle missing foreign key parsing support when dumping foreign key migration" do
555
- @d.meta_def(:tables){|o| [:t1]}
556
- @d.dump_foreign_key_migration.must_equal <<-END_MIG
557
- Sequel.migration do
558
- change do
559
-
560
- end
561
- end
562
- END_MIG
563
- end
564
-
565
- it "should support dumping just foreign_keys as a migration" do
566
- @d.meta_def(:tables){|o| [:t1, :t2, :t3]}
567
- @d.meta_def(:schema) do |t|
568
- t == :t1 ? [[:c2, {:db_type=>'integer'}]] : [[:c1, {:db_type=>'integer'}]]
569
- end
570
- @d.meta_def(:supports_foreign_key_parsing?){true}
571
- @d.meta_def(:foreign_key_list) do |t, *a|
572
- case t
573
- when :t1
574
- [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}]
575
- when :t2
576
- [{:columns=>[:c1, :c3], :table=>:t1, :key=>[:c2, :c4]}]
577
- else
578
- []
579
- end
580
- end
581
- @d.dump_foreign_key_migration.must_equal <<-END_MIG
582
- Sequel.migration do
583
- change do
584
- alter_table(:t1) do
585
- add_foreign_key [:c2], :t2, :key=>[:c1]
586
- end
587
-
588
- alter_table(:t2) do
589
- add_foreign_key [:c1, :c3], :t1, :key=>[:c2, :c4]
590
- end
591
- end
592
- end
593
- END_MIG
594
- end
595
-
596
- it "should handle not null values and defaults" do
597
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'date', :default=>"'now()'", :allow_null=>true}], [:c2, {:db_type=>'datetime', :allow_null=>false}]]}
598
- @d.dump_table_schema(:t3).must_equal "create_table(:t3) do\n Date :c1\n DateTime :c2, :null=>false\nend"
599
- end
600
-
601
- it "should handle converting common defaults" do
602
- @d.meta_def(:schema) do |t, *os|
603
- s = [[:c1, {:db_type=>'boolean', :default=>"false", :type=>:boolean, :allow_null=>true}],
604
- [:c2, {:db_type=>'varchar', :default=>"'blah'", :type=>:string, :allow_null=>true}],
605
- [:c3, {:db_type=>'integer', :default=>"-1", :type=>:integer, :allow_null=>true}],
606
- [:c4, {:db_type=>'float', :default=>"1.0", :type=>:float, :allow_null=>true}],
607
- [:c5, {:db_type=>'decimal', :default=>"100.50", :type=>:decimal, :allow_null=>true}],
608
- [:c6, {:db_type=>'blob', :default=>"'blah'", :type=>:blob, :allow_null=>true}],
609
- [:c7, {:db_type=>'date', :default=>"'2008-10-29'", :type=>:date, :allow_null=>true}],
610
- [:c8, {:db_type=>'datetime', :default=>"'2008-10-29 10:20:30'", :type=>:datetime, :allow_null=>true}],
611
- [:c9, {:db_type=>'time', :default=>"'10:20:30'", :type=>:time, :allow_null=>true}],
612
- [:c10, {:db_type=>'foo', :default=>"'6 weeks'", :type=>nil, :allow_null=>true}],
613
- [:c11, {:db_type=>'date', :default=>"CURRENT_DATE", :type=>:date, :allow_null=>true}],
614
- [:c12, {:db_type=>'timestamp', :default=>"now()", :type=>:datetime, :allow_null=>true}]]
615
- s.each{|_, c| c[:ruby_default] = column_schema_to_ruby_default(c[:default], c[:type])}
616
- s
617
- end
618
- @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=>BigDecimal.new(\"0.1005E3\")\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"
619
- @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=>BigDecimal.new(\"0.1005E3\")\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"
620
- end
621
-
622
- it "should not use a literal string as a fallback if using MySQL with the :same_db option" do
623
- @d.meta_def(:database_type){:mysql}
624
- @d.meta_def(:supports_index_parsing?){false}
625
- @d.meta_def(:supports_foreign_key_parsing?){false}
626
- @d.meta_def(:schema) do |t, *os|
627
- s = [[:c10, {:db_type=>'foo', :default=>"'6 weeks'", :type=>nil, :allow_null=>true}]]
628
- s.each{|_, c| c[:ruby_default] = column_schema_to_ruby_default(c[:default], c[:type])}
629
- s
630
- end
631
- @d.dump_table_schema(:t5, :same_db=>true).must_equal "create_table(:t5) do\n column :c10, \"foo\"\nend"
632
- end
633
-
634
- it "should convert unknown database types to strings" do
635
- @d.dump_table_schema(:t5).must_equal "create_table(:t5) do\n String :c1\nend"
636
- end
637
-
638
- it "should convert many database types to ruby types" do
639
- types = %w"mediumint smallint int integer mediumint(6) smallint(7) int(8) integer(9)
640
- tinyint tinyint(2) bigint bigint(20) real float double boolean tinytext mediumtext
641
- longtext text clob date datetime timestamp time char character
642
- varchar varchar(255) varchar(30) bpchar string money
643
- decimal decimal(10,2) numeric numeric(15,3) number bytea tinyblob mediumblob longblob
644
- blob varbinary varbinary(10) binary binary(20) year" +
645
- ["double precision", "timestamp with time zone", "timestamp without time zone",
646
- "time with time zone", "time without time zone", "character varying(20)"] +
647
- %w"nvarchar ntext smalldatetime smallmoney binary varbinary nchar" +
648
- ["timestamp(6) without time zone", "timestamp(6) with time zone", 'mediumint(10) unsigned', 'int(9) unsigned',
649
- 'int(10) unsigned', "int(12) unsigned", 'bigint unsigned', 'tinyint(3) unsigned', 'identity', 'int identity'] +
650
- %w"integer(10) bit"
651
- @d.meta_def(:schema) do |t, *o|
652
- i = 0
653
- types.map{|x| [:"c#{i+=1}", {:db_type=>x, :allow_null=>true}]}
654
- end
655
- @d.dump_table_schema(:x).must_equal((<<END_MIG).chomp)
656
- create_table(:x) do
657
- Integer :c1
658
- Integer :c2
659
- Integer :c3
660
- Integer :c4
661
- Integer :c5
662
- Integer :c6
663
- Integer :c7
664
- Integer :c8
665
- Integer :c9
666
- Integer :c10
667
- Bignum :c11
668
- Bignum :c12
669
- Float :c13
670
- Float :c14
671
- Float :c15
672
- TrueClass :c16
673
- String :c17, :text=>true
674
- String :c18, :text=>true
675
- String :c19, :text=>true
676
- String :c20, :text=>true
677
- String :c21, :text=>true
678
- Date :c22
679
- DateTime :c23
680
- DateTime :c24
681
- Time :c25, :only_time=>true
682
- String :c26, :fixed=>true
683
- String :c27, :fixed=>true
684
- String :c28
685
- String :c29, :size=>255
686
- String :c30, :size=>30
687
- String :c31
688
- String :c32
689
- BigDecimal :c33, :size=>[19, 2]
690
- BigDecimal :c34
691
- BigDecimal :c35, :size=>[10, 2]
692
- BigDecimal :c36
693
- BigDecimal :c37, :size=>[15, 3]
694
- BigDecimal :c38
695
- File :c39
696
- File :c40
697
- File :c41
698
- File :c42
699
- File :c43
700
- File :c44
701
- File :c45, :size=>10
702
- File :c46
703
- File :c47, :size=>20
704
- Integer :c48
705
- Float :c49
706
- DateTime :c50
707
- DateTime :c51
708
- Time :c52, :only_time=>true
709
- Time :c53, :only_time=>true
710
- String :c54, :size=>20
711
- String :c55
712
- String :c56, :text=>true
713
- DateTime :c57
714
- BigDecimal :c58, :size=>[19, 2]
715
- File :c59
716
- File :c60
717
- String :c61, :fixed=>true
718
- DateTime :c62, :size=>6
719
- DateTime :c63, :size=>6
720
- Integer :c64
721
- Integer :c65
722
- Bignum :c66
723
- Bignum :c67
724
- Bignum :c68
725
- Integer :c69
726
- Integer :c70
727
- Integer :c71
728
- Integer :c72
729
- TrueClass :c73
730
-
731
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c64), 0)
732
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c65), 0)
733
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c66), 0)
734
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c67), 0)
735
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c68), 0)
736
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c69), 0)
737
- end
738
- END_MIG
739
- end
740
-
741
- it "should convert mysql types to ruby types" do
742
- types = ['double(15,2)', 'double(7,1) unsigned']
743
- @d.meta_def(:schema) do |t, *o|
744
- i = 0
745
- types.map{|x| [:"c#{i+=1}", {:db_type=>x, :allow_null=>true}]}
746
- end
747
- @d.dump_table_schema(:x).must_equal((<<END_MIG).chomp)
748
- create_table(:x) do
749
- Float :c1
750
- Float :c2
751
-
752
- check Sequel::SQL::BooleanExpression.new(:>=, Sequel::SQL::Identifier.new(:c2), 0)
753
- end
754
- END_MIG
755
- end
756
-
757
- it "should force specify :null option for MySQL timestamp columns when using :same_db" do
758
- @d.meta_def(:database_type){:mysql}
759
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'timestamp', :primary_key=>true, :allow_null=>true}]]}
760
- @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"
761
-
762
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'timestamp', :primary_key=>true, :allow_null=>false}]]}
763
- @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"
764
- end
765
-
766
- it "should use separate primary_key call with non autoincrementable types" do
767
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'varchar(8)', :primary_key=>true, :auto_increment=>false}]]}
768
- @d.dump_table_schema(:t3).must_equal "create_table(:t3) do\n String :c1, :size=>8\n \n primary_key [:c1]\nend"
769
- @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"
770
- end
771
-
772
- it "should use explicit type for non integer foreign_key types" do
773
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'date', :primary_key=>true, :auto_increment=>false}]]}
774
- @d.meta_def(:supports_foreign_key_parsing?){true}
775
- @d.meta_def(:foreign_key_list){|t, *a| [{:columns=>[:c1], :table=>:t3, :key=>[:c1]}] if t == :t4}
776
- ["create_table(:t4) do\n foreign_key :c1, :t3, :type=>Date, :key=>[:c1]\n \n primary_key [:c1]\nend",
777
- "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))
778
- ["create_table(:t4) do\n foreign_key :c1, :t3, :type=>\"date\", :key=>[:c1]\n \n primary_key [:c1]\nend",
779
- "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))
780
- end
781
-
782
- it "should correctly handing autoincrementing primary keys that are also foreign keys" do
783
- @d.meta_def(:schema){|*s| [[:c1, {:db_type=>'integer', :primary_key=>true, :auto_increment=>true}]]}
784
- @d.meta_def(:supports_foreign_key_parsing?){true}
785
- @d.meta_def(:foreign_key_list){|t, *a| [{:columns=>[:c1], :table=>:t3, :key=>[:c1]}] if t == :t4}
786
- ["create_table(:t4) do\n primary_key :c1, :table=>:t3, :key=>[:c1]\nend",
787
- "create_table(:t4) do\n primary_key :c1, :key=>[:c1], :table=>:t3\nend"].must_include(@d.dump_table_schema(:t4))
788
- end
789
- end