Merge pull request #1326 from wubzz/bugfix/renameCol_drops_default_value

.renameColumn should not drop defaultValue or nullable state.
This commit is contained in:
wubzz 2016-04-02 00:28:54 +02:00
commit bb9663f2b3
2 changed files with 37 additions and 1 deletions

View File

@ -77,8 +77,17 @@ assign(TableCompiler_MySQL.prototype, {
if (!refs.length) { return; }
return compiler.dropFKRefs(runner, refs);
}).then(function () {
let sql = `alter table ${table} change ${wrapped} ${column.Type}`;
if(String(column.Null).toUpperCase() !== 'YES') {
sql += ` NOT NULL`
}
if(column.Default !== void 0 && column.Default !== null) {
sql += ` DEFAULT '${column.Default}'`
}
return runner.query({
sql: 'alter table ' + table + ' change ' + wrapped + ' ' + column.Type
sql: sql
});
}).then(function () {
if (!refs.length) { return; }

View File

@ -438,6 +438,33 @@ module.exports = function(knex) {
tbl.renameColumn('id', 'id_new');
});
});
it('#933 - .renameColumn should not drop null or default value', function() {
return knex.transaction(function (tr) {
var getColInfo = function() { return tr('renameColTest').columnInfo()};
return tr.schema.dropTableIfExists('renameColTest')
.createTable('renameColTest', function (table) {
table.integer('colnameint').defaultTo(1);
table.string('colnamestring').defaultTo('knex').notNullable();
})
.then(getColInfo)
.then(function (colInfo) {
expect(String(colInfo.colnameint.defaultValue)).to.contain('1');
expect(colInfo.colnamestring.defaultValue).to.contain('knex'); //Using contain because of different response per dialect. IE mysql 'knex', postgres 'knex::character varying'
expect(colInfo.colnamestring.nullable).to.equal(false);
return tr.schema.table('renameColTest', function (table) {
table.renameColumn('colnameint', 'colnameintchanged');
table.renameColumn('colnamestring', 'colnamestringchanged');
})
})
.then(getColInfo)
.then(function (columnInfo) {
expect(String(columnInfo.colnameintchanged.defaultValue)).to.contain('1');
expect(columnInfo.colnamestringchanged.defaultValue).to.contain('knex');
expect(columnInfo.colnamestringchanged.nullable).to.equal(false);
});
});
});
});
});