mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 16:06:01 +00:00
perspectives: prefer not circular lookups
This commit is contained in:
@@ -75,6 +75,9 @@ export abstract class PerspectiveTreeNode {
|
||||
get dataField() {
|
||||
return this.codeName;
|
||||
}
|
||||
get tableCode() {
|
||||
return null;
|
||||
}
|
||||
abstract getNodeLoadProps(parentRows: any[]): PerspectiveDataLoadProps;
|
||||
get isRoot() {
|
||||
return this.parentNode == null;
|
||||
@@ -83,6 +86,10 @@ export abstract class PerspectiveTreeNode {
|
||||
return true;
|
||||
}
|
||||
|
||||
hasTableCode(code: string) {
|
||||
return code == this.tableCode || this.parentNode?.hasTableCode(code);
|
||||
}
|
||||
|
||||
get uniqueName() {
|
||||
if (this.parentNode) return `${this.parentNode.uniqueName}.${this.codeName}`;
|
||||
return this.codeName;
|
||||
@@ -254,13 +261,10 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
|
||||
setConfig: ChangePerspectiveConfigFunc,
|
||||
dataProvider: PerspectiveDataProvider,
|
||||
databaseConfig: PerspectiveDatabaseConfig,
|
||||
parentNode: PerspectiveTreeNode,
|
||||
defaultChecked: boolean
|
||||
parentNode: PerspectiveTreeNode
|
||||
) {
|
||||
super(config, setConfig, parentNode, dataProvider, databaseConfig);
|
||||
|
||||
this.defaultChecked = defaultChecked;
|
||||
|
||||
this.foreignKey = (table as TableInfo)?.foreignKeys?.find(
|
||||
fk => fk.columns.length == 1 && fk.columns[0].columnName == column.columnName
|
||||
);
|
||||
@@ -303,6 +307,7 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
|
||||
}
|
||||
|
||||
get icon() {
|
||||
if (this.isCircular) return 'img circular';
|
||||
if (this.column.autoIncrement) return 'img autoincrement';
|
||||
if (this.foreignKey) return 'img foreign-key';
|
||||
return 'img column';
|
||||
@@ -332,6 +337,10 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
|
||||
return getFilterType(this.column.dataType);
|
||||
}
|
||||
|
||||
get isCircular() {
|
||||
return !!this.parentNode?.parentNode?.hasTableCode(this.tableCode);
|
||||
}
|
||||
|
||||
get childNodes(): PerspectiveTreeNode[] {
|
||||
if (!this.foreignKey) return [];
|
||||
const tbl = this?.db?.tables?.find(
|
||||
@@ -391,6 +400,13 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
get tableCode() {
|
||||
if (this.foreignKey) {
|
||||
return `${this.foreignKey.refSchemaName}|${this.foreignKey.refTableName}`;
|
||||
}
|
||||
return `${this.table.schemaName}|${this.table.pureName}`;
|
||||
}
|
||||
}
|
||||
|
||||
export class PerspectiveTableNode extends PerspectiveTreeNode {
|
||||
@@ -457,6 +473,10 @@ export class PerspectiveTableNode extends PerspectiveTreeNode {
|
||||
database: this.databaseConfig.database,
|
||||
};
|
||||
}
|
||||
|
||||
get tableCode() {
|
||||
return `${this.table.schemaName}|${this.table.pureName}`;
|
||||
}
|
||||
}
|
||||
|
||||
export class PerspectiveViewNode extends PerspectiveTreeNode {
|
||||
@@ -580,7 +600,6 @@ export class PerspectiveTableReferenceNode extends PerspectiveTableNode {
|
||||
}
|
||||
return super.codeName;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class PerspectiveCustomJoinTreeNode extends PerspectiveTableNode {
|
||||
@@ -667,25 +686,17 @@ export function getTableChildPerspectiveNodes(
|
||||
) {
|
||||
if (!table) return [];
|
||||
|
||||
const defaultColumns = getPerspectiveDefaultColumns(table, db);
|
||||
const columnNodes = table.columns.map(
|
||||
col => new PerspectiveTableColumnNode(col, table, db, config, setConfig, dataProvider, databaseConfig, parentColumn)
|
||||
);
|
||||
const circularColumns = columnNodes.filter(x => x.isCircular).map(x => x.columnName);
|
||||
const defaultColumns = getPerspectiveDefaultColumns(table, db, circularColumns);
|
||||
for (const node of columnNodes) {
|
||||
node.defaultChecked = defaultColumns.includes(node.columnName);
|
||||
}
|
||||
|
||||
const res = [];
|
||||
res.push(
|
||||
...table.columns.map(
|
||||
col =>
|
||||
new PerspectiveTableColumnNode(
|
||||
col,
|
||||
table,
|
||||
db,
|
||||
config,
|
||||
setConfig,
|
||||
dataProvider,
|
||||
databaseConfig,
|
||||
parentColumn,
|
||||
defaultColumns.includes(col.columnName)
|
||||
)
|
||||
)
|
||||
);
|
||||
res.push(...columnNodes);
|
||||
const dependencies = [];
|
||||
if (db && (table as TableInfo)?.dependencies) {
|
||||
for (const fk of (table as TableInfo)?.dependencies) {
|
||||
|
||||
Reference in New Issue
Block a user