diff --git a/integration-tests/__tests__/alter-processor.spec.js b/integration-tests/__tests__/alter-processor.spec.js index 8bc181784..3315b2114 100644 --- a/integration-tests/__tests__/alter-processor.spec.js +++ b/integration-tests/__tests__/alter-processor.spec.js @@ -41,7 +41,7 @@ async function testTableDiff(conn, driver, mangle) { structure2 = extendDatabaseInfo(structure2); const sql = getAlterTableScript(tget(structure1), tget(structure2), {}, structure2, driver); - console.log('RUNNING ALTER SQL:', sql); + console.log('RUNNING ALTER SQL', driver.engine, ':', sql); await driver.query(conn, sql); @@ -51,10 +51,11 @@ async function testTableDiff(conn, driver, mangle) { // expect(stableStringify(structure2)).toEqual(stableStringify(structure2Real)); } +// const TESTED_COLUMNS = ['col_std', 'col_def', 'col_fk', 'col_idx']; +const TESTED_COLUMNS = ['col_std']; + function engines_columns_source() { - return _.flatten( - engines.map(engine => ['col_std', 'col_def', 'col_fk', 'col_idx'].map(column => [engine.label, column, engine])) - ); + return _.flatten(engines.map(engine => TESTED_COLUMNS.map(column => [engine.label, column, engine]))); } describe('Alter processor', () => { @@ -92,7 +93,7 @@ describe('Alter processor', () => { ); test.each(engines_columns_source())( - 'Rename column - %s', + 'Rename column - %s - %s', testWrapper(async (conn, driver, column, engine) => { await testTableDiff( conn, diff --git a/packages/tools/src/alterPlan.ts b/packages/tools/src/alterPlan.ts index 3547e184a..d1321b6e2 100644 --- a/packages/tools/src/alterPlan.ts +++ b/packages/tools/src/alterPlan.ts @@ -189,5 +189,14 @@ export function runAlterOperation(op: AlterOperation, processor: AlterProcessor) case 'dropConstraint': processor.dropConstraint(op.oldObject); break; + case 'renameColumn': + processor.renameColumn(op.object, op.newName); + break; + case 'renameTable': + processor.renameTable(op.object, op.newName); + break; + case 'renameConstraint': + processor.renameConstraint(op.object, op.newName); + break; } } diff --git a/packages/tools/src/diffTools.ts b/packages/tools/src/diffTools.ts index d76033c38..29877f6dc 100644 --- a/packages/tools/src/diffTools.ts +++ b/packages/tools/src/diffTools.ts @@ -255,9 +255,11 @@ function planAlterTable(plan: AlterPlan, oldTable: TableInfo, newTable: TableInf .filter(x => x[0] && x[1]) .forEach(x => { if (!testEqualsColumns(x[0], x[1], true, true, opts)) { - if (!testEqualsColumns(x[0], x[1], false, true, opts)) { + if (testEqualsColumns(x[0], x[1], false, true, opts)) { + // console.log('PLAN RENAME COLUMN') plan.renameColumn(x[0], x[1].columnName); } else { + // console.log('PLAN CHANGE COLUMN') plan.changeColumn(x[0], x[1]); } } diff --git a/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js b/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js index 4a4059590..c0df840fe 100644 --- a/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js @@ -1,5 +1,9 @@ const { SqlDumper } = global.DBGATE_TOOLS; -class Dumper extends SqlDumper {} +class Dumper extends SqlDumper { + renameColumn(column, newcol) { + this.putCmd('^alter ^table %f ^rename ^column %i ^to %i', column, column.columnName, newcol); + } +} module.exports = Dumper;