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) {
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) {

View File

@ -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);
});
});