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
This commit is contained in:
muhammad hasan 2016-12-10 06:35:53 +07:00 committed by jannyHou
parent 333fa21024
commit 0f1b14b158
2 changed files with 71 additions and 9 deletions

View File

@ -152,9 +152,9 @@ function mixinMigration(MySQL, mysql) {
} }
if (found) { if (found) {
actualize(propName, found); actualize(colName, found);
} else { } else {
sql.push('ADD COLUMN ' + self.client.escapeId(propName) + ' ' + sql.push('ADD COLUMN ' + self.client.escapeId(colName) + ' ' +
self.buildColumnDefinition(model, propName)); self.buildColumnDefinition(model, propName));
} }
}); });
@ -227,7 +227,8 @@ function mixinMigration(MySQL, mysql) {
} }
var found = ai[propName] && ai[propName].info; var found = ai[propName] && ai[propName].info;
if (!found) { if (!found) {
var pName = self.client.escapeId(propName); var colName = expectedColName(propName);
var pName = self.client.escapeId(colName);
var type = ''; var type = '';
var kind = ''; var kind = '';
if (i.type) { if (i.type) {

View File

@ -58,6 +58,19 @@ describe('MySQL connector', function() {
'type': 'Number', 'type': 'Number',
'required': false, '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, 'required': false,
'length': 40, '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.automigrate(function() {
ds.discoverModelProperties('customer_test', function(err, props) { ds.discoverModelProperties('customer_test', function(err, props) {
assert.equal(props.length, 4); assert.equal(props.length, 5);
var names = props.map(function(p) { var names = props.map(function(p) {
return p.columnName; return p.columnName;
}); });
@ -128,6 +181,7 @@ describe('MySQL connector', function() {
assert.equal(names[1], 'name'); assert.equal(names[1], 'name');
assert.equal(names[2], 'email'); assert.equal(names[2], 'email');
assert.equal(names[3], 'age'); assert.equal(names[3], 'age');
assert.equal(names[4], 'customer_discount');
ds.connector.execute('SHOW INDEXES FROM customer_test', function(err, indexes) { ds.connector.execute('SHOW INDEXES FROM customer_test', function(err, indexes) {
if (err) return done (err); if (err) return done (err);
@ -140,24 +194,31 @@ describe('MySQL connector', function() {
if (err) return done (err); if (err) return done (err);
ds.discoverModelProperties('customer_test', function(err, props) { ds.discoverModelProperties('customer_test', function(err, props) {
if (err) return done (err); if (err) return done (err);
assert.equal(props.length, 4); assert.equal(props.length, 7);
var names = props.map(function(p) { var names = props.map(function(p) {
return p.columnName; return p.columnName;
}); });
assert.equal(names[0], 'id'); assert.equal(names[0], 'id');
assert.equal(names[1], 'email'); assert.equal(names[1], 'email');
assert.equal(names[2], 'firstName'); assert.equal(names[2], 'customer_discount');
assert.equal(names[3], 'lastName'); 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) { ds.connector.execute('SHOW INDEXES FROM customer_test', function(err, updatedindexes) {
if (err) return done (err); if (err) return done (err);
assert(updatedindexes); assert(updatedindexes);
assert(updatedindexes.length.should.be.above(2)); assert(updatedindexes.length.should.be.above(3));
assert.equal(updatedindexes[1].Key_name, 'updated_name_index'); assert.equal(updatedindexes[1].Key_name, 'customer_code');
assert.equal(updatedindexes[2].Key_name, 'updated_name_index'); 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 //Mysql supports only index sorting in ascending; DESC is ignored
assert.equal(updatedindexes[1].Collation, 'A'); assert.equal(updatedindexes[1].Collation, 'A');
assert.equal(updatedindexes[2].Collation, 'A'); assert.equal(updatedindexes[2].Collation, 'A');
assert.equal(updatedindexes[3].Collation, 'A');
assert.equal(updatedindexes[1].Non_unique, 0); assert.equal(updatedindexes[1].Non_unique, 0);
assert.equal(updatedindexes[2].Non_unique, 0);
assert.equal(updatedindexes[3].Non_unique, 0);
done(err, result); done(err, result);
}); });
}); });