diff --git a/packages/tools/src/diffTools.ts b/packages/tools/src/diffTools.ts index fd64a3868..6c617f08f 100644 --- a/packages/tools/src/diffTools.ts +++ b/packages/tools/src/diffTools.ts @@ -280,7 +280,7 @@ export function testEqualTypes(a: ColumnInfo, b: ColumnInfo, opts: DbDiffOptions if (opts.ignoreDataTypes) { return true; } - + if ((a.dataType || '').toLowerCase() != (b.dataType || '').toLowerCase()) { console.debug( `Column ${a.pureName}.${a.columnName}, ${b.pureName}.${b.columnName}: different data type: ${a.dataType}, ${b.dataType}` @@ -368,6 +368,18 @@ function planAlterTable(plan: AlterPlan, oldTable: TableInfo, newTable: TableInf constraintPairs.filter(x => x[0] == null).forEach(x => plan.createConstraint(x[1])); } +export function testEqualTables( + a: TableInfo, + b: TableInfo, + opts: DbDiffOptions, + db: DatabaseInfo, + driver: EngineDriver +) { + const plan = new AlterPlan(db, driver.dialect, opts); + planAlterTable(plan, a, b, opts); + return plan.operations.length == 0; +} + export function createAlterTablePlan( oldTable: TableInfo, newTable: TableInfo, @@ -470,6 +482,8 @@ export function getAlterDatabaseScript( } export function matchPairedObjects(db1: DatabaseInfo, db2: DatabaseInfo, opts: DbDiffOptions) { + if (!db1 || !db2) return null; + const res = _cloneDeep(db2); for (const objectTypeField of ['tables', 'views', 'procedures', 'matviews', 'functions']) { diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index dcc0ccf27..9581db77d 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -156,6 +156,20 @@ registerCommand({ }, }); +registerCommand({ + id: 'new.modelCompare', + category: 'New', + icon: 'img compare', + name: 'Compare DB Models', + onClick: () => { + openNewTab({ + title: 'Compare', + icon: 'img compare', + tabComponent: 'CompareModelTab', + }); + }, +}); + registerCommand({ id: 'new.freetable', category: 'New', diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 833bf73ed..acff365b7 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -50,6 +50,8 @@ 'icon arrow-begin': 'mdi mdi-arrow-collapse-left', 'icon arrow-end': 'mdi mdi-arrow-collapse-right', 'icon arrow-right': 'mdi mdi-arrow-right', + 'icon arrow-left-bold': 'mdi mdi-arrow-left-bold', + 'icon arrow-right-bold': 'mdi mdi-arrow-right-bold', 'icon triple-left': 'mdi mdi-chevron-triple-left', 'icon triple-right': 'mdi mdi-chevron-triple-right', 'icon format-code': 'mdi mdi-code-tags-check', @@ -97,6 +99,7 @@ 'img favorite': 'mdi mdi-star color-icon-yellow', 'img query-design': 'mdi mdi-vector-polyline-edit color-icon-red', 'img yaml': 'mdi mdi-code-brackets color-icon-red', + 'img compare': 'mdi mdi-compare color-icon-red', 'img free-table': 'mdi mdi-table color-icon-green', 'img macro': 'mdi mdi-hammer-wrench', diff --git a/packages/web/src/impexp/ImportExportConfigurator.svelte b/packages/web/src/impexp/ImportExportConfigurator.svelte index aa9d818d6..dfbddfc4e 100644 --- a/packages/web/src/impexp/ImportExportConfigurator.svelte +++ b/packages/web/src/impexp/ImportExportConfigurator.svelte @@ -149,7 +149,7 @@ setPreviewSource={previewSource.set} />