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 }) {
const opened = await databaseConnections.ensureOpened(conid, database);
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));
if (filtered.length == 0) return undefined;
return {
constraintName: filtered[0].constraintName,
..._.pick(filtered[0], ['constraintName', 'schemaName', 'pureName']),
constraintType: 'primaryKey',
columns: filtered.map(fp.pick('columnName')),
};
@@ -27,7 +27,15 @@ function extractForeignKeys(table, fkColumns) {
return _.keys(grouped).map(constraintName => ({
constraintName,
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'])),
}));
}

3
types/dbinfo.d.ts vendored
View File

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

View File

@@ -24,7 +24,7 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam
params: { conid, database, schemaName, pureName },
});
if (!tableInfo) return null;
const { columns, primaryKey, foreignKeys } = tableInfo;
const { columns, primaryKey, foreignKeys, dependencies } = tableInfo;
return (
<WhitePage>
<ObjectListControl
@@ -102,6 +102,22 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam
<TableColumn fieldName="updateAction" header="ON UPDATE" />
<TableColumn fieldName="deleteAction" header="ON DELETE" />
</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>
);
}