diff --git a/packages/datalib/src/PerspectiveTreeNode.ts b/packages/datalib/src/PerspectiveTreeNode.ts index 4b1477375..a949d8115 100644 --- a/packages/datalib/src/PerspectiveTreeNode.ts +++ b/packages/datalib/src/PerspectiveTreeNode.ts @@ -7,6 +7,7 @@ import { TableInfo, ViewInfo, } from 'dbgate-types'; +import { equalFullName } from 'dbgate-tools'; import { ChangePerspectiveConfigFunc, createPerspectiveNodeConfig, @@ -141,7 +142,7 @@ export abstract class PerspectiveTreeNode { return this.isCheckedColumn; } get isCheckedNode() { - return !!this.config.nodes?.find(x => x.designerId == this.designerId)?.isNodeChecked; + return !!this.designerId && !!this.config.nodes?.find(x => x.designerId == this.designerId)?.isNodeChecked; } get isSecondaryChecked() { return false; @@ -1017,9 +1018,14 @@ function findDesignerIdForNode( _isEqual( refColumns.map(x => x.target), x.columns.map(x => x.target) + ) && + equalFullName( + config.nodes.find(n => n.designerId == x.targetId), + node.namedObject ) ); if (ref1 && !parentNode.hasDesignerIdInIncestors(ref1.targetId)) { + // console.log('FOUND1', node.title, ref1.targetId, refColumns); return nodeCreateFunc(ref1.targetId); } @@ -1033,9 +1039,14 @@ function findDesignerIdForNode( _isEqual( refColumns.map(x => x.source), x.columns.map(x => x.target) + ) && + equalFullName( + config.nodes.find(n => n.designerId == x.sourceId), + node.namedObject ) ); if (ref2 && !parentNode.hasDesignerIdInIncestors(ref2.sourceId)) { + // console.log('FOUND2', node.title, ref2.sourceId, refColumns); return nodeCreateFunc(ref2.sourceId); } diff --git a/packages/datalib/src/processPerspectiveDefaultColunns.ts b/packages/datalib/src/processPerspectiveDefaultColunns.ts index eef1213ff..ba9917fc0 100644 --- a/packages/datalib/src/processPerspectiveDefaultColunns.ts +++ b/packages/datalib/src/processPerspectiveDefaultColunns.ts @@ -42,16 +42,13 @@ function getPerspectiveDefaultColumns( return [[columns[0]], null]; } -export function shouldProcessPerspectiveDefaultColunns( +export function perspectiveNodesHaveStructure( config: PerspectiveConfig, dbInfos: MultipleDatabaseInfo, conid: string, database: string ) { - const nodesNotProcessed = config.nodes.filter(x => !x.defaultColumnsProcessed); - if (nodesNotProcessed.length == 0) return false; - - for (const node of nodesNotProcessed) { + for (const node of config.nodes) { const db = dbInfos?.[node.conid || conid]?.[node.database || database]; if (!db) return false; @@ -64,6 +61,18 @@ export function shouldProcessPerspectiveDefaultColunns( return true; } +export function shouldProcessPerspectiveDefaultColunns( + config: PerspectiveConfig, + dbInfos: MultipleDatabaseInfo, + conid: string, + database: string +) { + const nodesNotProcessed = config.nodes.filter(x => !x.defaultColumnsProcessed); + if (nodesNotProcessed.length == 0) return false; + + return perspectiveNodesHaveStructure(config, dbInfos, conid, database); +} + function processPerspectiveDefaultColunnsStep( config: PerspectiveConfig, dbInfos: MultipleDatabaseInfo, diff --git a/packages/tools/src/nameTools.ts b/packages/tools/src/nameTools.ts index 2a8911e20..14e2b8961 100644 --- a/packages/tools/src/nameTools.ts +++ b/packages/tools/src/nameTools.ts @@ -1,6 +1,14 @@ import _cloneDeep from 'lodash/cloneDeep'; import _isString from 'lodash/isString'; -import { ColumnInfo, ColumnReference, DatabaseInfo, DatabaseInfoObjects, SqlDialect, TableInfo } from 'dbgate-types'; +import { + ColumnInfo, + ColumnReference, + DatabaseInfo, + DatabaseInfoObjects, + NamedObjectInfo, + SqlDialect, + TableInfo, +} from 'dbgate-types'; export function fullNameFromString(name) { const m = name.match(/\[([^\]]+)\]\.\[([^\]]+)\]/); @@ -39,6 +47,11 @@ export function equalStringLike(s1, s2) { return (s1 || '').toLowerCase().trim() == (s2 || '').toLowerCase().trim(); } +export function equalFullName(name1: NamedObjectInfo, name2: NamedObjectInfo) { + if (!name1 || !name2) return name1 == name2; + return name1.pureName == name2.pureName && name1.schemaName == name2.schemaName; +} + export function findObjectLike( { pureName, schemaName }, dbinfo: DatabaseInfo, diff --git a/packages/web/src/perspectives/PerspectiveDesigner.svelte b/packages/web/src/perspectives/PerspectiveDesigner.svelte index 2d27446d8..e4a27607d 100644 --- a/packages/web/src/perspectives/PerspectiveDesigner.svelte +++ b/packages/web/src/perspectives/PerspectiveDesigner.svelte @@ -1,5 +1,10 @@