Merge pull request #226 from hasanlussa/fix/column-name-in-discovery

Fix expected column name when autoupdate
This commit is contained in:
Janny 2016-12-12 10:15:08 -05:00 committed by GitHub
commit 529eebbc60
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);
});
});