add-column.test.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. 'use strict';
  2. const Support = require('../../support');
  3. const { DataTypes } = require('@sequelize/core');
  4. const expectsql = Support.expectsql;
  5. const current = Support.sequelize;
  6. const sql = current.dialect.queryGenerator;
  7. const customSequelize = Support.createSequelizeInstance({
  8. schema: 'custom',
  9. });
  10. const customSql = customSequelize.dialect.queryGenerator;
  11. describe(Support.getTestDialectTeaser('SQL'), () => {
  12. describe('addColumn', () => {
  13. const User = current.define('User', {}, { timestamps: false });
  14. if (['mysql', 'mariadb'].includes(current.dialect.name)) {
  15. it('properly generate alter queries', () => {
  16. return expectsql(
  17. sql.addColumnQuery(
  18. User.table,
  19. 'level_id',
  20. current.normalizeAttribute({
  21. type: DataTypes.FLOAT,
  22. allowNull: false,
  23. }),
  24. ),
  25. {
  26. mariadb: 'ALTER TABLE `Users` ADD `level_id` FLOAT NOT NULL;',
  27. mysql: 'ALTER TABLE `Users` ADD `level_id` FLOAT NOT NULL;',
  28. },
  29. );
  30. });
  31. it('properly generate alter queries for foreign keys', () => {
  32. return expectsql(
  33. sql.addColumnQuery(
  34. User.table,
  35. 'level_id',
  36. current.normalizeAttribute({
  37. type: DataTypes.INTEGER,
  38. references: {
  39. table: 'level',
  40. key: 'id',
  41. },
  42. onUpdate: 'cascade',
  43. onDelete: 'cascade',
  44. }),
  45. ),
  46. {
  47. mariadb:
  48. 'ALTER TABLE `Users` ADD `level_id` INTEGER, ADD CONSTRAINT `Users_level_id_foreign_idx` FOREIGN KEY (`level_id`) REFERENCES `level` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;',
  49. mysql:
  50. 'ALTER TABLE `Users` ADD `level_id` INTEGER, ADD CONSTRAINT `Users_level_id_foreign_idx` FOREIGN KEY (`level_id`) REFERENCES `level` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;',
  51. },
  52. );
  53. });
  54. it('properly generate alter queries with FIRST', () => {
  55. return expectsql(
  56. sql.addColumnQuery(
  57. User.table,
  58. 'test_added_col_first',
  59. current.normalizeAttribute({
  60. type: DataTypes.STRING,
  61. first: true,
  62. }),
  63. ),
  64. {
  65. mariadb: 'ALTER TABLE `Users` ADD `test_added_col_first` VARCHAR(255) FIRST;',
  66. mysql: 'ALTER TABLE `Users` ADD `test_added_col_first` VARCHAR(255) FIRST;',
  67. },
  68. );
  69. });
  70. it('properly generates alter queries with column level comment', () => {
  71. return expectsql(
  72. sql.addColumnQuery(
  73. User.table,
  74. 'column_with_comment',
  75. current.normalizeAttribute({
  76. type: DataTypes.STRING,
  77. comment: 'This is a comment',
  78. }),
  79. ),
  80. {
  81. mariadb:
  82. "ALTER TABLE `Users` ADD `column_with_comment` VARCHAR(255) COMMENT 'This is a comment';",
  83. mysql:
  84. "ALTER TABLE `Users` ADD `column_with_comment` VARCHAR(255) COMMENT 'This is a comment';",
  85. },
  86. );
  87. });
  88. }
  89. it('defaults the schema to the one set in the Sequelize options', () => {
  90. const User = customSequelize.define('User', {}, { timestamps: false });
  91. return expectsql(
  92. customSql.addColumnQuery(
  93. User.table,
  94. 'level_id',
  95. customSequelize.normalizeAttribute({
  96. type: DataTypes.FLOAT,
  97. allowNull: false,
  98. }),
  99. ),
  100. {
  101. 'mariadb mysql': 'ALTER TABLE `custom`.`Users` ADD `level_id` FLOAT NOT NULL;',
  102. postgres: 'ALTER TABLE "custom"."Users" ADD COLUMN "level_id" REAL NOT NULL;',
  103. sqlite3: 'ALTER TABLE `custom.Users` ADD `level_id` REAL NOT NULL;',
  104. mssql: 'ALTER TABLE [custom].[Users] ADD [level_id] REAL NOT NULL;',
  105. db2: 'ALTER TABLE "custom"."Users" ADD "level_id" REAL NOT NULL;',
  106. snowflake: 'ALTER TABLE "custom"."Users" ADD "level_id" FLOAT NOT NULL;',
  107. ibmi: 'ALTER TABLE "custom"."Users" ADD "level_id" REAL NOT NULL',
  108. },
  109. );
  110. });
  111. });
  112. });