mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Fixed an issue where foreign key is not removed even if the referred table is removed in ERD. Fixes #7238
This commit is contained in:
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 #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:
|
for tab_fk in tab_fks:
|
||||||
if 'columns' not in tab_fk:
|
if 'columns' not in tab_fk:
|
||||||
continue
|
continue
|
||||||
print(tab_data)
|
try:
|
||||||
remote_table = all_nodes[tab_fk['columns'][0]['references']]
|
remote_table = all_nodes[tab_fk['columns'][0]['references']]
|
||||||
|
except KeyError:
|
||||||
|
continue
|
||||||
tab_fk['schema'] = tab_data['schema']
|
tab_fk['schema'] = tab_data['schema']
|
||||||
tab_fk['table'] = tab_data['name']
|
tab_fk['table'] = tab_data['name']
|
||||||
tab_fk['remote_schema'] = remote_table['schema']
|
tab_fk['remote_schema'] = remote_table['schema']
|
||||||
|
@ -210,6 +210,26 @@ export default class ERDCore {
|
|||||||
return newNode;
|
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) {
|
addLink(data, type) {
|
||||||
let tableNodesDict = this.getModel().getNodesDict();
|
let tableNodesDict = this.getModel().getNodesDict();
|
||||||
let sourceNode = tableNodesDict[data.referenced_table_uid];
|
let sourceNode = tableNodesDict[data.referenced_table_uid];
|
||||||
|
@ -69,11 +69,15 @@ export default class DialogWrapper {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
onSaveClick(isNew, data) {
|
onSaveClick(_isNew, data) {
|
||||||
return new Promise((resolve)=>{
|
return new Promise((resolve, reject)=>{
|
||||||
this.okCallback(data);
|
let errorMsg = this.okCallback(data);
|
||||||
this.close();
|
if(errorMsg) {
|
||||||
resolve();
|
reject(errorMsg);
|
||||||
|
} else {
|
||||||
|
this.close();
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,14 +347,20 @@ export default class BodyWidget extends React.Component {
|
|||||||
let dialog = this.getDialog('table_dialog');
|
let dialog = this.getDialog('table_dialog');
|
||||||
if(node) {
|
if(node) {
|
||||||
let [schema, table] = node.getSchemaTableName();
|
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);
|
node.setData(newData);
|
||||||
this.diagram.syncTableLinks(node, oldData);
|
this.diagram.syncTableLinks(node, oldData);
|
||||||
this.diagram.repaint();
|
this.diagram.repaint();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
dialog(gettext('New table'), {}, true, (newData)=>{
|
dialog(gettext('New table'), {}, true, (newData)=>{
|
||||||
|
if(this.diagram.anyDuplicateNodeName(newData)) {
|
||||||
|
return gettext('Table name already exists');
|
||||||
|
}
|
||||||
let newNode = this.diagram.addNode(newData);
|
let newNode = this.diagram.addNode(newData);
|
||||||
this.diagram.syncTableLinks(newNode);
|
this.diagram.syncTableLinks(newNode);
|
||||||
newNode.setSelected(true);
|
newNode.setSelected(true);
|
||||||
@ -424,8 +430,7 @@ export default class BodyWidget extends React.Component {
|
|||||||
+ '<br />' + gettext('Are you sure you want to delete ?'),
|
+ '<br />' + gettext('Are you sure you want to delete ?'),
|
||||||
() => {
|
() => {
|
||||||
this.diagram.getSelectedNodes().forEach((node)=>{
|
this.diagram.getSelectedNodes().forEach((node)=>{
|
||||||
node.setSelected(false);
|
this.diagram.removeNode(node);
|
||||||
node.remove();
|
|
||||||
});
|
});
|
||||||
this.diagram.getSelectedLinks().forEach((link)=>{
|
this.diagram.getSelectedLinks().forEach((link)=>{
|
||||||
this.diagram.removeOneToManyLink(link);
|
this.diagram.removeOneToManyLink(link);
|
||||||
|
Loading…
Reference in New Issue
Block a user