Fixed an issue where foreign key is not removed even if the referred table is removed in ERD. Fixes #7238

pull/81/head
Aditya Toshniwal 2022-03-17 17:01:07 +05:30 committed by Akshay Joshi
parent 08880ebd2e
commit 3299b0c1b0
5 changed files with 43 additions and 11 deletions

View File

@ -20,3 +20,4 @@ Bug fixes
*********
| `Issue #7059 <https://redmine.postgresql.org/issues/7059>`_ - Fixed an issue where the error is shown on logout when the authentication source is oauth2.
| `Issue #7238 <https://redmine.postgresql.org/issues/7238>`_ - Fixed an issue where foreign key is not removed even if the referred table is removed in ERD.

View File

@ -547,8 +547,10 @@ def translate_foreign_keys(tab_fks, tab_data, all_nodes):
for tab_fk in tab_fks:
if 'columns' not in tab_fk:
continue
print(tab_data)
remote_table = all_nodes[tab_fk['columns'][0]['references']]
try:
remote_table = all_nodes[tab_fk['columns'][0]['references']]
except KeyError:
continue
tab_fk['schema'] = tab_data['schema']
tab_fk['table'] = tab_data['name']
tab_fk['remote_schema'] = remote_table['schema']

View File

@ -210,6 +210,26 @@ export default class ERDCore {
return newNode;
}
removeNode(node) {
let self = this;
node.setSelected(false);
Object.values(node.getPorts()).forEach((port)=>{
Object.values(port.getLinks()).forEach((link)=>{
self.removeOneToManyLink(link);
});
});
node.remove();
}
anyDuplicateNodeName(newNodeData, oldNodeData) {
if(newNodeData.name == oldNodeData?.name && newNodeData.schema == oldNodeData?.schema) {
return false;
}
return _.filter(this.getNodesData(), (n)=>{
return n.name==newNodeData.name && n.schema==newNodeData.schema;
}).length > 0;
}
addLink(data, type) {
let tableNodesDict = this.getModel().getNodesDict();
let sourceNode = tableNodesDict[data.referenced_table_uid];

View File

@ -69,11 +69,15 @@ export default class DialogWrapper {
};
}
onSaveClick(isNew, data) {
return new Promise((resolve)=>{
this.okCallback(data);
this.close();
resolve();
onSaveClick(_isNew, data) {
return new Promise((resolve, reject)=>{
let errorMsg = this.okCallback(data);
if(errorMsg) {
reject(errorMsg);
} else {
this.close();
resolve();
}
});
}

View File

@ -347,14 +347,20 @@ export default class BodyWidget extends React.Component {
let dialog = this.getDialog('table_dialog');
if(node) {
let [schema, table] = node.getSchemaTableName();
dialog(gettext('Table: %s (%s)', _.escape(table),_.escape(schema)), node.getData(), false, (newData)=>{
let oldData = node.getData();
let oldData = node.getData();
dialog(gettext('Table: %s (%s)', _.escape(table),_.escape(schema)), oldData, false, (newData)=>{
if(this.diagram.anyDuplicateNodeName(newData, oldData)) {
return gettext('Table name already exists');
}
node.setData(newData);
this.diagram.syncTableLinks(node, oldData);
this.diagram.repaint();
});
} else {
dialog(gettext('New table'), {}, true, (newData)=>{
if(this.diagram.anyDuplicateNodeName(newData)) {
return gettext('Table name already exists');
}
let newNode = this.diagram.addNode(newData);
this.diagram.syncTableLinks(newNode);
newNode.setSelected(true);
@ -424,8 +430,7 @@ export default class BodyWidget extends React.Component {
+ '<br />' + gettext('Are you sure you want to delete ?'),
() => {
this.diagram.getSelectedNodes().forEach((node)=>{
node.setSelected(false);
node.remove();
this.diagram.removeNode(node);
});
this.diagram.getSelectedLinks().forEach((link)=>{
this.diagram.removeOneToManyLink(link);