diff --git a/integration-tests/__tests__/deploy-database.spec.js b/integration-tests/__tests__/deploy-database.spec.js index 480ba1e09..042396c33 100644 --- a/integration-tests/__tests__/deploy-database.spec.js +++ b/integration-tests/__tests__/deploy-database.spec.js @@ -117,7 +117,12 @@ async function testDatabaseDeploy(engine, conn, driver, dbModelsYaml, options) { const dbhan = conn.isPreparedOnly ? await connectUtility(driver, conn, 'read') : conn; const structure = await driver.analyseFull(dbhan); if (conn.isPreparedOnly) await driver.close(dbhan); - checkStructure(engine, structure, finalCheckAgainstModel ?? dbModelsYaml[dbModelsYaml.length - 1], options); + checkStructure( + engine, + structure, + finalCheckAgainstModel ?? _.findLast(dbModelsYaml, x => _.isArray(x)), + options + ); } describe('Deploy database', () => { @@ -452,6 +457,7 @@ describe('Deploy database', () => { }, }, ], + 'insert into t1 (id) values (3);', ]); const res1 = await driver.query(conn, `select val from t1 where id = 1`); @@ -459,6 +465,9 @@ describe('Deploy database', () => { const res2 = await driver.query(conn, `select val from t1 where id = 2`); expect(res2.rows[0].val).toEqual(20); + + const res3 = await driver.query(conn, `select val from t1 where id = 3`); + expect(res2.rows[0].val).toEqual(20); }) ); diff --git a/integration-tests/engines.js b/integration-tests/engines.js index eb14d8c4e..29aa575fe 100644 --- a/integration-tests/engines.js +++ b/integration-tests/engines.js @@ -188,9 +188,9 @@ const filterLocal = [ // filter local testing '-MySQL', '-MariaDB', - 'PostgreSQL', + '-PostgreSQL', '-SQL Server', - '-SQLite', + 'SQLite', '-CockroachDB', '-ClickHouse', ]; diff --git a/packages/tools/src/SqlDumper.ts b/packages/tools/src/SqlDumper.ts index e9d46b1d3..a5da1a95d 100644 --- a/packages/tools/src/SqlDumper.ts +++ b/packages/tools/src/SqlDumper.ts @@ -263,7 +263,7 @@ export class SqlDumper implements AlterProcessor { } columnDefault(column: ColumnInfo) { - if (column.defaultConstraint != null) { + if (column.defaultConstraint != null && this.dialect?.namedDefaultConstraint) { this.put(' ^constraint %i ^default %s ', column.defaultConstraint, column.defaultValue); } else { this.put(' ^default %s ', column.defaultValue); diff --git a/packages/types/dialect.d.ts b/packages/types/dialect.d.ts index f4d117f1c..864e45235 100644 --- a/packages/types/dialect.d.ts +++ b/packages/types/dialect.d.ts @@ -37,6 +37,7 @@ export interface SqlDialect { renameSqlObject?: boolean; multipleSchema?: boolean; filteredIndexes?: boolean; + namedDefaultConstraint?: boolean; specificNullabilityImplementation?: boolean; omitForeignKeys?: boolean; diff --git a/plugins/dbgate-plugin-mssql/src/frontend/driver.js b/plugins/dbgate-plugin-mssql/src/frontend/driver.js index 751ef78e6..b0141e08f 100644 --- a/plugins/dbgate-plugin-mssql/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mssql/src/frontend/driver.js @@ -42,6 +42,7 @@ const dialect = { filteredIndexes: true, dropReferencesWhenDropTable: true, + namedDefaultConstraint: true, columnProperties: { isSparse: true, diff --git a/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js b/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js index 8b3ab83a9..d5a41fff8 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js @@ -32,6 +32,10 @@ class Dumper extends SqlDumper { } changeColumn(oldcol, newcol, constraints) { + this.fillNewNotNullDefaults({ + ...newcol, + columnName: oldcol.columnName, + }); this.put('^alter ^table %f ^change ^column %i %i ', oldcol, oldcol.columnName, newcol.columnName); this.columnDefinition(newcol); this.inlineConstraints(constraints); @@ -91,7 +95,7 @@ class Dumper extends SqlDumper { } selectScopeIdentity() { - this.put('^select ^last_insert_id()') + this.put('^select ^last_insert_id()'); } }