From c3efea74d9f90db342d5391c1c25f062f23dc506 Mon Sep 17 00:00:00 2001 From: Karan Raina Date: Tue, 18 Feb 2020 22:29:07 +0530 Subject: [PATCH] added default values for new columns when running autoupdate(), default values are added for new columns Signed-off-by: Karan Raina --- lib/migration.js | 3 ++- test/postgresql.migration.test.js | 33 ++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/migration.js b/lib/migration.js index 2e16d0cf..67febe2b 100644 --- a/lib/migration.js +++ b/lib/migration.js @@ -161,7 +161,8 @@ function mixinMigration(PostgreSQL) { model, self.column(model, propName), actualFields, ); if (!found && self.propertyHasNotBeenDeleted(model, propName)) { - sql.push('ADD COLUMN ' + self.addPropertyToActual(model, propName)); + // add new columns with default values + sql.push('ADD COLUMN ' + self.addPropertyToActual(model, propName) + self.columnDbDefault(model, propName)); } }); if (sql.length > 0) { diff --git a/test/postgresql.migration.test.js b/test/postgresql.migration.test.js index 7d0724c2..1b9f0338 100644 --- a/test/postgresql.migration.test.js +++ b/test/postgresql.migration.test.js @@ -14,7 +14,7 @@ describe('migrations', function() { before(setup); it('should run migration', function(done) { - db.automigrate(['UserDataWithIndexes', 'OrderData', 'DefaultUuid'], done); + db.automigrate(['UserDataWithIndexes', 'OrderData', 'DefaultUuid', 'DefaultValueAfterColumnAdd'], done); }); it('UserDataWithIndexes should have correct indexes', function(done) { @@ -109,6 +109,32 @@ describe('migrations', function() { done(); }); }); + + it('should add default value for new required columns', async function() { + const DefaultValueAfterColumnAdd = await db.getModel('DefaultValueAfterColumnAdd'); + await DefaultValueAfterColumnAdd.create({ + name: 'name1', + }); + await db.defineProperty('DefaultValueAfterColumnAdd', 'createdByAdmin', { + type: Boolean, required: true, default: true, + }); + await db.defineProperty('DefaultValueAfterColumnAdd', 'birthDate', { + type: Date, required: true, default: '2020-02-18T16:50:24.746Z', + }); + await db.defineProperty('DefaultValueAfterColumnAdd', 'pendingPeriod', { + type: Number, required: true, default: 10, + }); + await db.autoupdate(['DefaultValueAfterColumnAdd']); + const res = await DefaultValueAfterColumnAdd.findOne(); + + assert.deepEqual(res.toJSON(), { + id: 1, + name: 'name1', + createdByAdmin: true, + birthDate: new Date('2020-02-18T16:50:24.746Z'), + pendingPeriod: 10, + }); + }); }); function setup(done) { @@ -172,6 +198,10 @@ function setup(done) { }}, }); + const DefaultValueAfterColumnAdd = db.define('DefaultValueAfterColumnAdd', { + name: String, + }); + done(); } @@ -230,3 +260,4 @@ function checkColumns(table, cb) { cb(err, cols); }); } +