Fixed an issue where foreign key is not removed even if the referred table is removed in ERD. Fixes #7238
parent
08880ebd2e
commit
3299b0c1b0
|
@ -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.
|
||||
|
|
|
@ -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']
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue