From 0f1b14b1581d14f9de212e0ffa81424a84180ae6 Mon Sep 17 00:00:00 2001 From: muhammad hasan Date: Sat, 10 Dec 2016 06:35:53 +0700 Subject: [PATCH] Fix expected column name when autoupdate Fix mysql column name being ignored on dataType change or new column being added Fix mysql column name ignored if index changed Add column name case on autoupdate test Fix test case scheme error Fix describe test --- lib/migration.js | 7 ++-- test/mysql.autoupdate.test.js | 73 ++++++++++++++++++++++++++++++++--- 2 files changed, 71 insertions(+), 9 deletions(-) diff --git a/lib/migration.js b/lib/migration.js index 2fe870c..b8e9cdc 100644 --- a/lib/migration.js +++ b/lib/migration.js @@ -152,9 +152,9 @@ function mixinMigration(MySQL, mysql) { } if (found) { - actualize(propName, found); + actualize(colName, found); } else { - sql.push('ADD COLUMN ' + self.client.escapeId(propName) + ' ' + + sql.push('ADD COLUMN ' + self.client.escapeId(colName) + ' ' + self.buildColumnDefinition(model, propName)); } }); @@ -227,7 +227,8 @@ function mixinMigration(MySQL, mysql) { } var found = ai[propName] && ai[propName].info; if (!found) { - var pName = self.client.escapeId(propName); + var colName = expectedColName(propName); + var pName = self.client.escapeId(colName); var type = ''; var kind = ''; if (i.type) { diff --git a/test/mysql.autoupdate.test.js b/test/mysql.autoupdate.test.js index 7bac69e..3975fee 100644 --- a/test/mysql.autoupdate.test.js +++ b/test/mysql.autoupdate.test.js @@ -58,6 +58,19 @@ describe('MySQL connector', function() { 'type': 'Number', 'required': false, }, + 'discount': { + 'type': 'Number', + 'required': false, + 'dataType': 'decimal', + 'precision': 10, + 'scale': 2, + 'mysql': { + 'columnName': 'customer_discount', + 'dataType': 'decimal', + 'dataPrecision': 10, + 'dataScale': 2, + }, + }, }, }; @@ -109,6 +122,46 @@ describe('MySQL connector', function() { 'required': false, 'length': 40, }, + // remove age + // change data type details with column name + 'discount': { + 'type': 'Number', + 'required': false, + 'dataType': 'decimal', + 'precision': 12, + 'scale': 5, + 'mysql': { + 'columnName': 'customer_discount', + 'dataType': 'decimal', + 'dataPrecision': 12, + 'dataScale': 5, + }, + }, + // add new column with column name + 'address': { + 'type': 'String', + 'required': false, + 'length': 10, + 'mysql': { + 'columnName': 'customer_address', + 'dataType': 'varchar', + 'length': 10, + }, + }, + // add new column with index & column name + 'code': { + 'type': 'String', + 'required': true, + 'length': 12, + 'index': { + unique: true, + }, + 'mysql': { + 'columnName': 'customer_code', + 'dataType': 'varchar', + 'length': 12, + }, + }, }, }; @@ -116,7 +169,7 @@ describe('MySQL connector', function() { ds.automigrate(function() { ds.discoverModelProperties('customer_test', function(err, props) { - assert.equal(props.length, 4); + assert.equal(props.length, 5); var names = props.map(function(p) { return p.columnName; }); @@ -128,6 +181,7 @@ describe('MySQL connector', function() { assert.equal(names[1], 'name'); assert.equal(names[2], 'email'); assert.equal(names[3], 'age'); + assert.equal(names[4], 'customer_discount'); ds.connector.execute('SHOW INDEXES FROM customer_test', function(err, indexes) { if (err) return done (err); @@ -140,24 +194,31 @@ describe('MySQL connector', function() { if (err) return done (err); ds.discoverModelProperties('customer_test', function(err, props) { if (err) return done (err); - assert.equal(props.length, 4); + assert.equal(props.length, 7); var names = props.map(function(p) { return p.columnName; }); assert.equal(names[0], 'id'); assert.equal(names[1], 'email'); - assert.equal(names[2], 'firstName'); - assert.equal(names[3], 'lastName'); + assert.equal(names[2], 'customer_discount'); + assert.equal(names[3], 'firstName'); + assert.equal(names[4], 'lastName'); + assert.equal(names[5], 'customer_address'); + assert.equal(names[6], 'customer_code'); ds.connector.execute('SHOW INDEXES FROM customer_test', function(err, updatedindexes) { if (err) return done (err); assert(updatedindexes); - assert(updatedindexes.length.should.be.above(2)); - assert.equal(updatedindexes[1].Key_name, 'updated_name_index'); + assert(updatedindexes.length.should.be.above(3)); + assert.equal(updatedindexes[1].Key_name, 'customer_code'); assert.equal(updatedindexes[2].Key_name, 'updated_name_index'); + assert.equal(updatedindexes[3].Key_name, 'updated_name_index'); //Mysql supports only index sorting in ascending; DESC is ignored assert.equal(updatedindexes[1].Collation, 'A'); assert.equal(updatedindexes[2].Collation, 'A'); + assert.equal(updatedindexes[3].Collation, 'A'); assert.equal(updatedindexes[1].Non_unique, 0); + assert.equal(updatedindexes[2].Non_unique, 0); + assert.equal(updatedindexes[3].Non_unique, 0); done(err, result); }); });