dependencies

This commit is contained in:
Jan Prochazka
2020-02-02 17:27:33 +01:00
parent b76c12c7d7
commit 9f3679fefb
4 changed files with 34 additions and 5 deletions

View File

@@ -13,6 +13,10 @@ module.exports = {
async tableInfo({ conid, database, schemaName, pureName }) { async tableInfo({ conid, database, schemaName, pureName }) {
const opened = await databaseConnections.ensureOpened(conid, database); const opened = await databaseConnections.ensureOpened(conid, database);
const table = opened.structure.tables.find(x => x.pureName == pureName && x.schemaName == schemaName); const table = opened.structure.tables.find(x => x.pureName == pureName && x.schemaName == schemaName);
return table; const allForeignKeys = _.flatten(opened.structure.tables.map(x => x.foreignKeys));
return {
...table,
dependencies: allForeignKeys.filter(x => x.refSchemaName == schemaName && x.refTableName == pureName),
};
}, },
}; };

View File

@@ -16,7 +16,7 @@ function extractPrimaryKeys(table, pkColumns) {
const filtered = pkColumns.filter(byTableFilter(table)); const filtered = pkColumns.filter(byTableFilter(table));
if (filtered.length == 0) return undefined; if (filtered.length == 0) return undefined;
return { return {
constraintName: filtered[0].constraintName, ..._.pick(filtered[0], ['constraintName', 'schemaName', 'pureName']),
constraintType: 'primaryKey', constraintType: 'primaryKey',
columns: filtered.map(fp.pick('columnName')), columns: filtered.map(fp.pick('columnName')),
}; };
@@ -27,7 +27,15 @@ function extractForeignKeys(table, fkColumns) {
return _.keys(grouped).map(constraintName => ({ return _.keys(grouped).map(constraintName => ({
constraintName, constraintName,
constraintType: 'foreignKey', constraintType: 'foreignKey',
..._.pick(fkColumns[0], ['refSchemaName', 'refTableName', 'updateAction', 'deleteAction']), ..._.pick(grouped[constraintName][0], [
'constraintName',
'schemaName',
'pureName',
'refSchemaName',
'refTableName',
'updateAction',
'deleteAction',
]),
columns: grouped[constraintName].map(fp.pick(['columnName', 'refColumnName'])), columns: grouped[constraintName].map(fp.pick(['columnName', 'refColumnName'])),
})); }));
} }

3
types/dbinfo.d.ts vendored
View File

@@ -8,7 +8,7 @@ export interface ColumnReference {
refColumnName?: string; refColumnName?: string;
} }
export interface ConstraintInfo { export interface ConstraintInfo extends NamedObjectInfo {
constraintName: string; constraintName: string;
constraintType: string; constraintType: string;
} }
@@ -44,6 +44,7 @@ export interface TableInfo extends NamedObjectInfo {
columns: ColumnInfo[]; columns: ColumnInfo[];
primaryKey?: PrimaryKeyInfo; primaryKey?: PrimaryKeyInfo;
foreignKeys: ForeignKeyInfo[]; foreignKeys: ForeignKeyInfo[];
dependencies?: ForeignKeyInfo[];
} }
export interface DatabaseInfo { export interface DatabaseInfo {
tables: TableInfo[]; tables: TableInfo[];

View File

@@ -24,7 +24,7 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam
params: { conid, database, schemaName, pureName }, params: { conid, database, schemaName, pureName },
}); });
if (!tableInfo) return null; if (!tableInfo) return null;
const { columns, primaryKey, foreignKeys } = tableInfo; const { columns, primaryKey, foreignKeys, dependencies } = tableInfo;
return ( return (
<WhitePage> <WhitePage>
<ObjectListControl <ObjectListControl
@@ -102,6 +102,22 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam
<TableColumn fieldName="updateAction" header="ON UPDATE" /> <TableColumn fieldName="updateAction" header="ON UPDATE" />
<TableColumn fieldName="deleteAction" header="ON DELETE" /> <TableColumn fieldName="deleteAction" header="ON DELETE" />
</ObjectListControl> </ObjectListControl>
<ObjectListControl collection={dependencies} makeAppObj={constraintAppObject} title="Dependencies">
<TableColumn
fieldName="baseColumns"
header="Base columns"
formatter={row => row.columns.map(x => x.columnName).join(', ')}
/>
<TableColumn fieldName="baseTable" header="Base table" formatter={row => row.pureName} />
<TableColumn
fieldName="refColumns"
header="Referenced columns"
formatter={row => row.columns.map(x => x.refColumnName).join(', ')}
/>
<TableColumn fieldName="updateAction" header="ON UPDATE" />
<TableColumn fieldName="deleteAction" header="ON DELETE" />
</ObjectListControl>
</WhitePage> </WhitePage>
); );
} }