diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js
index 8096fff9e..3a50d538e 100644
--- a/packages/api/src/controllers/databaseConnections.js
+++ b/packages/api/src/controllers/databaseConnections.js
@@ -11,6 +11,7 @@ const {
generateDbPairingId,
matchPairedObjects,
extendDatabaseInfo,
+ modelCompareDbDiffOptions,
} = require('dbgate-tools');
const { html, parse } = require('diff2html');
const { handleProcessCommunication } = require('../utility/processComm');
@@ -231,6 +232,11 @@ module.exports = {
structure_meta: 'get',
async structure({ conid, database }) {
+ if (conid == '__model') {
+ const model = await importDbModel(database);
+ return model;
+ }
+
const opened = await this.ensureOpened(conid, database);
return opened.structure;
// const existing = this.opened.find((x) => x.conid == conid && x.database == database);
@@ -298,9 +304,7 @@ module.exports = {
// },
async getUnifiedDiff({ sourceConid, sourceDatabase, targetConid, targetDatabase }) {
- const dbDiffOptions = {
- // schemaMode: 'ignore',
- };
+ const dbDiffOptions = sourceConid == '__model' ? modelCompareDbDiffOptions : {};
const sourceDb = generateDbPairingId(
extendDatabaseInfo(await this.structure({ conid: sourceConid, database: sourceDatabase }))
diff --git a/packages/api/src/shell/generateDeploySql.js b/packages/api/src/shell/generateDeploySql.js
index 2bcf75411..acc7bd7f9 100644
--- a/packages/api/src/shell/generateDeploySql.js
+++ b/packages/api/src/shell/generateDeploySql.js
@@ -4,6 +4,7 @@ const {
matchPairedObjects,
databaseInfoFromYamlModel,
extendDatabaseInfo,
+ modelCompareDbDiffOptions,
} = require('dbgate-tools');
const importDbModel = require('../utility/importDbModel');
const requireEngineDriver = require('../utility/requireEngineDriver');
@@ -28,9 +29,7 @@ async function generateDeploySql({
);
const currentModel = generateDbPairingId(extendDatabaseInfo(analysedStructure));
const opts = {
- ignoreCase: true,
- schemaMode: 'ignore',
- ignoreConstraintNames: true,
+ ...modelCompareDbDiffOptions,
noDropTable: true,
noDropColumn: true,
diff --git a/packages/tools/src/diffTools.ts b/packages/tools/src/diffTools.ts
index bcbf4e9ac..06a5691c1 100644
--- a/packages/tools/src/diffTools.ts
+++ b/packages/tools/src/diffTools.ts
@@ -523,3 +523,9 @@ export function matchPairedObjects(db1: DatabaseInfo, db2: DatabaseInfo, opts: D
return res;
}
+
+export const modelCompareDbDiffOptions: DbDiffOptions = {
+ ignoreCase: true,
+ schemaMode: 'ignore',
+ ignoreConstraintNames: true,
+};
diff --git a/packages/web/src/impexp/FormConnectionSelect.svelte b/packages/web/src/impexp/FormConnectionSelect.svelte
index 957e2d74d..4f7911f32 100644
--- a/packages/web/src/impexp/FormConnectionSelect.svelte
+++ b/packages/web/src/impexp/FormConnectionSelect.svelte
@@ -3,15 +3,19 @@
import FormSelectField from '../forms/FormSelectField.svelte';
import getConnectionLabel from '../utility/getConnectionLabel';
import { useConnectionList } from '../utility/metadataLoaders';
+ export let allowChooseModel = false;
$: connections = useConnectionList();
- $: connectionOptions = _.sortBy(
- ($connections || []).map(conn => ({
- value: conn._id,
- label: getConnectionLabel(conn),
- })),
- 'label'
- );
+ $: connectionOptions = [
+ ...(allowChooseModel ? [{ label: '(DB Model)', value: '__model' }] : []),
+ ..._.sortBy(
+ ($connections || []).map(conn => ({
+ value: conn._id,
+ label: getConnectionLabel(conn),
+ })),
+ 'label'
+ ),
+ ];