diff --git a/packages/tools/src/computeDiffRows.ts b/packages/tools/src/computeDiffRows.ts
index 9f68b6b39..dbe18b181 100644
--- a/packages/tools/src/computeDiffRows.ts
+++ b/packages/tools/src/computeDiffRows.ts
@@ -36,30 +36,35 @@ export function computeDiffRowsCore(sourceList, targetList, testEqual) {
return res;
}
-const COMPARE_DEFS = {
+export const DbDiffCompareDefs = {
tables: {
test: testEqualTables,
name: 'Table',
+ plural: 'Tables',
icon: 'img table',
},
views: {
test: testEqualSqlObjects,
name: 'View',
+ plural: 'Views',
icon: 'img view',
},
matviews: {
test: testEqualSqlObjects,
name: 'Materialized view',
+ plural: 'Materialized views',
icon: 'img view',
},
procedures: {
test: testEqualSqlObjects,
name: 'Procedure',
+ plural: 'Procedures',
icon: 'img procedure',
},
functions: {
test: testEqualSqlObjects,
name: 'Function',
+ plural: 'Functions',
icon: 'img function',
},
};
@@ -74,7 +79,7 @@ export function computeDbDiffRows(
const res = [];
for (const objectTypeField of ['tables', 'views', 'procedures', 'matviews', 'functions']) {
- const defs = COMPARE_DEFS[objectTypeField];
+ const defs = DbDiffCompareDefs[objectTypeField];
res.push(
..._.sortBy(
computeDiffRowsCore(sourceDb[objectTypeField], targetDb[objectTypeField], (a, b) =>
diff --git a/packages/web/src/forms/RowsFilterSwitcher.svelte b/packages/web/src/forms/RowsFilterSwitcher.svelte
new file mode 100644
index 000000000..542f6818c
--- /dev/null
+++ b/packages/web/src/forms/RowsFilterSwitcher.svelte
@@ -0,0 +1,28 @@
+
+
+{#if count > 0}
+ {
+ $values = { ...$values, [field]: !$values[field] };
+ }}
+ >
+
+ {label} ({count})
+
+
+{/if}
+
+
diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte
index a5baa9d1f..4f38e6cc6 100644
--- a/packages/web/src/icons/FontIcon.svelte
+++ b/packages/web/src/icons/FontIcon.svelte
@@ -64,6 +64,8 @@
'icon preview': 'mdi mdi-file-find',
'icon eye': 'mdi mdi-eye',
'icon check-all': 'mdi mdi-check-all',
+ 'icon checkbox-blank': 'mdi mdi-checkbox-blank-outline',
+ 'icon checkbox-marked': 'mdi mdi-checkbox-marked-outline',
'icon run': 'mdi mdi-play',
'icon chevron-down': 'mdi mdi-chevron-down',
@@ -105,6 +107,11 @@
'img yaml': 'mdi mdi-code-brackets color-icon-red',
'img compare': 'mdi mdi-compare color-icon-red',
+ 'img add': 'mdi mdi-plus-circle color-icon-green',
+ 'img minus': 'mdi mdi-minus-circle color-icon-red',
+ 'img equal': 'mdi mdi-equal',
+ 'img changed': 'mdi mdi-file-edit color-icon-yellow',
+
'img free-table': 'mdi mdi-table color-icon-green',
'img macro': 'mdi mdi-hammer-wrench',
diff --git a/packages/web/src/tabs/CompareModelTab.svelte b/packages/web/src/tabs/CompareModelTab.svelte
index 718fa3839..62316bd7c 100644
--- a/packages/web/src/tabs/CompareModelTab.svelte
+++ b/packages/web/src/tabs/CompareModelTab.svelte
@@ -79,6 +79,23 @@
if (newObject) dmp.createSqlObject(newObject);
return { sql: dmp.s };
}
+
+ function filterDiffRows(rows, values, filter) {
+ let res = rows
+ .filter(row => filterName(filter, row.sourcePureName, row.targetPureName))
+ .filter(row => !values?.hideAdded || row.state != 'added')
+ .filter(row => !values?.hideRemoved || row.state != 'removed')
+ .filter(row => !values?.hideChanged || row.state != 'changed')
+ .filter(row => !values?.hideEqual || row.state != 'equal');
+
+ for (const objectTypeField of _.keys(DbDiffCompareDefs)) {
+ if (values && values[`hide_${objectTypeField}`]) {
+ res = res.filter(row => row.objectTypeField != objectTypeField);
+ }
+ }
+
+ return res;
+ }