diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/static/js/foreign_key.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/static/js/foreign_key.ui.js index 2dffa5f02..2bbca0d29 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/static/js/foreign_key.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/static/js/foreign_key.ui.js @@ -256,7 +256,8 @@ export default class ForeignKeySchema extends BaseUISchema { } } - let oldindex = 'fki_'+actionObj.oldState.name; + let oldFk = _.get(actionObj.oldState, _.slice(actionObj.path, 0, -1)); + let oldindex = 'fki_'+oldFk.name; if(state.hasindex) { return {}; } else if(!state.autoindex) { diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui.js index 5d8d1d039..a8e1b8cca 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui.js @@ -352,6 +352,15 @@ export default class TableSchema extends BaseUISchema { delete c.inheritedfromtable; return c; }); + + /* Make autoindex as true if there is coveringindex since ERD works in create mode */ + newData.foreign_key = (newData.foreign_key||[]).map((fk)=>{ + fk.autoindex = false; + if(fk.coveringindex) { + fk.autoindex = true; + } + return fk; + }); return newData; } diff --git a/web/pgadmin/tools/erd/static/js/erd_tool/nodes/TableNode.jsx b/web/pgadmin/tools/erd/static/js/erd_tool/nodes/TableNode.jsx index db2ff3050..fb43fa768 100644 --- a/web/pgadmin/tools/erd/static/js/erd_tool/nodes/TableNode.jsx +++ b/web/pgadmin/tools/erd/static/js/erd_tool/nodes/TableNode.jsx @@ -65,8 +65,9 @@ export class TableNodeModel extends DefaultNodeModel { } cloneData(name) { + const SKIP_CLONE_KEYS = ['foreign_key']; let newData = { - ...this.getData(), + ..._.pickBy(this.getData(), (_v, k)=>(SKIP_CLONE_KEYS.indexOf(k) == -1)), }; if(name) { newData['name'] = name; @@ -148,12 +149,16 @@ export class TableNodeWidget extends React.Component { }); } - generateColumn(col) { + generateColumn(col, tableData) { let port = this.props.node.getPort(this.props.node.getPortName(col.attnum)); let icon = ColumnIcon; + let localFkCols = []; + (tableData.foreign_key||[]).forEach((fk)=>{ + localFkCols.push(...fk.columns.map((c)=>c.local_column)); + }); if(col.is_primary_key) { icon = PrimaryKeyIcon; - } else if(port && port.getSubtype() == 'many') { + } else if(localFkCols.indexOf(col.name) > -1) { icon = ForeignKeyIcon; } return ( @@ -186,7 +191,7 @@ export class TableNodeWidget extends React.Component { } render() { - let node_data = this.props.node.getData(); + let tableData = this.props.node.getData(); return (
{this.props.node.fireEvent({}, 'editTable');}}>
@@ -198,14 +203,14 @@ export class TableNodeWidget extends React.Component {
-
{node_data.schema}
+
{tableData.schema}
-
{node_data.name}
+
{tableData.name}
- {_.map(node_data.columns, (col)=>this.generateColumn(col))} + {_.map(tableData.columns, (col)=>this.generateColumn(col, tableData))}
);