diff --git a/integration-tests/__tests__/alter-table.spec.js b/integration-tests/__tests__/alter-table.spec.js index 55e544fc0..a7157b862 100644 --- a/integration-tests/__tests__/alter-table.spec.js +++ b/integration-tests/__tests__/alter-table.spec.js @@ -166,4 +166,14 @@ describe('Alter table', () => { }); }) ); + + test.each(engines.map(engine => [engine.label, engine]))( + 'Change autoincrement - %s', + testWrapper(async (conn, driver, engine) => { + await testTableDiff(engine, conn, driver, tbl => { + tbl.columns.find(x => x.columnName == 'col_pk').autoIncrement = true; + }); + }) + ); + }); diff --git a/integration-tests/engines.js b/integration-tests/engines.js index 431d0eb75..1bd0ab110 100644 --- a/integration-tests/engines.js +++ b/integration-tests/engines.js @@ -191,8 +191,8 @@ const filterLocal = [ '-MySQL', '-MariaDB', '-PostgreSQL', - '-SQL Server', - 'SQLite', + 'SQL Server', + '-SQLite', '-CockroachDB', '-ClickHouse', ]; diff --git a/packages/tools/src/alterPlan.ts b/packages/tools/src/alterPlan.ts index ee8be2e9c..4f837a8c0 100644 --- a/packages/tools/src/alterPlan.ts +++ b/packages/tools/src/alterPlan.ts @@ -416,6 +416,12 @@ export class AlterPlan { this._testTableRecreate(op, 'createConstraint', obj => this._canCreateConstraint(obj), 'newObject') || this._testTableRecreate(op, 'dropConstraint', obj => this._canDropConstraint(obj), 'oldObject') || this._testTableRecreate(op, 'changeColumn', this.dialect.changeColumn, 'newObject') || + this._testTableRecreate( + op, + 'changeColumn', + obj => this._canChangeAutoIncrement(obj, op as AlterOperation_ChangeColumn), + 'newObject' + ) || this._testTableRecreate(op, 'renameColumn', true, 'object') || [op] ); }); @@ -443,6 +449,13 @@ export class AlterPlan { return null; } + _canChangeAutoIncrement(column: ColumnInfo, op: AlterOperation_ChangeColumn) { + if (!!column.autoIncrement != !!op.oldObject.autoIncrement) { + return this.dialect.changeAutoIncrement; + } + return null; + } + _testTableRecreate( op: AlterOperation, operationType: string, diff --git a/packages/types/dialect.d.ts b/packages/types/dialect.d.ts index 864e45235..c8cbf6384 100644 --- a/packages/types/dialect.d.ts +++ b/packages/types/dialect.d.ts @@ -24,6 +24,7 @@ export interface SqlDialect { createColumn?: boolean; dropColumn?: boolean; changeColumn?: boolean; + changeAutoIncrement?: boolean; createIndex?: boolean; dropIndex?: boolean; createForeignKey?: boolean; diff --git a/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js b/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js index fe66b43fe..380cb92d2 100644 --- a/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js +++ b/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js @@ -97,6 +97,7 @@ const dialect = { createColumn: true, dropColumn: true, changeColumn: true, + changeAutoIncrement: true, createIndex: true, dropIndex: true, anonymousPrimaryKey: true, diff --git a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js index 2827e499f..6ab5399c8 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js @@ -30,6 +30,7 @@ const dialect = { createColumn: true, dropColumn: true, changeColumn: true, + changeAutoIncrement: true, createIndex: true, dropIndex: true, createForeignKey: true,