diff --git a/packages/datalib/package.json b/packages/datalib/package.json index 98e8b85dc..ab79364fb 100644 --- a/packages/datalib/package.json +++ b/packages/datalib/package.json @@ -12,6 +12,7 @@ ], "dependencies": { "dbgate-sqltree": "^5.0.0-alpha.1", + "dbgate-tools": "^5.0.0-alpha.1", "dbgate-filterparser": "^5.0.0-alpha.1" }, "devDependencies": { diff --git a/packages/datalib/src/getPerspectiveDefaultColumns.ts b/packages/datalib/src/getPerspectiveDefaultColumns.ts index fbe090156..d3ede9479 100644 --- a/packages/datalib/src/getPerspectiveDefaultColumns.ts +++ b/packages/datalib/src/getPerspectiveDefaultColumns.ts @@ -1,3 +1,4 @@ +import { findForeignKeyForColumn } from 'dbgate-tools'; import { DatabaseInfo, TableInfo } from 'dbgate-types'; export function getPerspectiveDefaultColumns(table: TableInfo, db: DatabaseInfo): string[] { @@ -8,6 +9,7 @@ export function getPerspectiveDefaultColumns(table: TableInfo, db: DatabaseInfo) x => x.toLowerCase().includes('name'), x => x.toLowerCase().includes('title'), x => x.dataType?.toLowerCase()?.includes('char'), + x => findForeignKeyForColumn(table, x)?.columns?.length == 1, ]; for (const predicate of predicates) { diff --git a/packages/tools/src/nameTools.ts b/packages/tools/src/nameTools.ts index 033196279..2a8911e20 100644 --- a/packages/tools/src/nameTools.ts +++ b/packages/tools/src/nameTools.ts @@ -1,4 +1,5 @@ -import _ from 'lodash'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isString from 'lodash/isString'; import { ColumnInfo, ColumnReference, DatabaseInfo, DatabaseInfoObjects, SqlDialect, TableInfo } from 'dbgate-types'; export function fullNameFromString(name) { @@ -54,7 +55,10 @@ export function findObjectLike( return dbinfo[objectTypeField]?.find(x => equalStringLike(x.pureName, pureName)); } -export function findForeignKeyForColumn(table: TableInfo, column: ColumnInfo) { +export function findForeignKeyForColumn(table: TableInfo, column: ColumnInfo | string) { + if (_isString(column)) { + return (table.foreignKeys || []).find(fk => fk.columns.find(col => col.columnName == column)); + } return (table.foreignKeys || []).find(fk => fk.columns.find(col => col.columnName == column.columnName)); } @@ -76,7 +80,7 @@ function columnsConstraintName(prefix: string, table: TableInfo, columns: Column export function fillConstraintNames(table: TableInfo, dialect: SqlDialect) { if (!table) return table; - const res = _.cloneDeep(table); + const res = _cloneDeep(table); if (res.primaryKey && !res.primaryKey.constraintName && !dialect.anonymousPrimaryKey) { res.primaryKey.constraintName = `PK_${res.pureName}`; }