public inbox for [email protected]
help / color / mirror / Atom feed[pgAdmin][RM7238] ERD: Remove foreign references when table node is removed
2+ messages / 2 participants
[nested] [flat]
* [pgAdmin][RM7238] ERD: Remove foreign references when table node is removed
@ 2022-03-17 09:52 Aditya Toshniwal <[email protected]>
2022-03-17 11:33 ` Re: [pgAdmin][RM7238] ERD: Remove foreign references when table node is removed Akshay Joshi <[email protected]>
0 siblings, 1 reply; 2+ messages in thread
From: Aditya Toshniwal @ 2022-03-17 09:52 UTC (permalink / raw)
To: pgadmin-hackers
Hi Hackers,
Attached patch fixes issue where foreign key is not removed even if the
referred table is removed in ERD. I have also added a check to not allow
duplicate table names.
Please review.
--
Thanks,
Aditya Toshniwal
pgAdmin Hacker | Software Architect | *edbpostgres.com*
<http://edbpostgres.com;
"Don't Complain about Heat, Plant a TREE"
Attachments:
[application/octet-stream] RM7238.patch (4.4K, 3-RM7238.patch)
download | inline diff:
diff --git a/web/pgadmin/tools/erd/__init__.py b/web/pgadmin/tools/erd/__init__.py
index b951ecb53..260b5a70e 100644
--- a/web/pgadmin/tools/erd/__init__.py
+++ b/web/pgadmin/tools/erd/__init__.py
@@ -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']
diff --git a/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js b/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js
index e3de3670a..0265668a9 100644
--- a/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js
+++ b/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js
@@ -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];
diff --git a/web/pgadmin/tools/erd/static/js/erd_tool/dialogs/DialogWrapper.js b/web/pgadmin/tools/erd/static/js/erd_tool/dialogs/DialogWrapper.js
index 4fe960f45..c46bde715 100644
--- a/web/pgadmin/tools/erd/static/js/erd_tool/dialogs/DialogWrapper.js
+++ b/web/pgadmin/tools/erd/static/js/erd_tool/dialogs/DialogWrapper.js
@@ -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();
+ }
});
}
diff --git a/web/pgadmin/tools/erd/static/js/erd_tool/ui_components/BodyWidget.jsx b/web/pgadmin/tools/erd/static/js/erd_tool/ui_components/BodyWidget.jsx
index afd3689b4..2b598d808 100644
--- a/web/pgadmin/tools/erd/static/js/erd_tool/ui_components/BodyWidget.jsx
+++ b/web/pgadmin/tools/erd/static/js/erd_tool/ui_components/BodyWidget.jsx
@@ -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);
^ permalink raw reply [nested|flat] 2+ messages in thread
* Re: [pgAdmin][RM7238] ERD: Remove foreign references when table node is removed
2022-03-17 09:52 [pgAdmin][RM7238] ERD: Remove foreign references when table node is removed Aditya Toshniwal <[email protected]>
@ 2022-03-17 11:33 ` Akshay Joshi <[email protected]>
0 siblings, 0 replies; 2+ messages in thread
From: Akshay Joshi @ 2022-03-17 11:33 UTC (permalink / raw)
To: Aditya Toshniwal <[email protected]>; +Cc: pgadmin-hackers
Thanks, the patch applied.
On Thu, Mar 17, 2022 at 3:23 PM Aditya Toshniwal <
[email protected]> wrote:
> Hi Hackers,
>
> Attached patch fixes issue where foreign key is not removed even if the
> referred table is removed in ERD. I have also added a check to not allow
> duplicate table names.
>
> Please review.
>
> --
> Thanks,
> Aditya Toshniwal
> pgAdmin Hacker | Software Architect | *edbpostgres.com*
> <http://edbpostgres.com;
> "Don't Complain about Heat, Plant a TREE"
>
--
*Thanks & Regards*
*Akshay Joshi*
*pgAdmin Hacker | Principal Software Architect*
*EDB Postgres <http://edbpostgres.com>*
*Mobile: +91 976-788-8246*
^ permalink raw reply [nested|flat] 2+ messages in thread
end of thread, other threads:[~2022-03-17 11:33 UTC | newest]
Thread overview: 2+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2022-03-17 09:52 [pgAdmin][RM7238] ERD: Remove foreign references when table node is removed Aditya Toshniwal <[email protected]>
2022-03-17 11:33 ` Akshay Joshi <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox