From 692666957730ff4278c1c9cde0c32aa28ebfa5cd Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 31 Oct 2023 14:33:15 +0530 Subject: [PATCH] perf: Ignore `amended_from` link fields in link field checks Small perf benefit at not much cost. `amended_from` are *always* refererring to cancelled documents so there's no need to check these fields. --- frappe/desk/form/linked_with.py | 6 +++++- frappe/model/delete_doc.py | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/frappe/desk/form/linked_with.py b/frappe/desk/form/linked_with.py index 501953c030..cbe6dd7acc 100644 --- a/frappe/desk/form/linked_with.py +++ b/frappe/desk/form/linked_with.py @@ -71,7 +71,7 @@ class SubmittableDocumentTree: def get_all_children(self): """Get all nodes of a tree except the root node (all the nested submitted - documents those are present in referencing tables (dependent tables). + documents those are present in referencing tables dependent tables). """ while self.to_be_visited_documents: next_level_children = defaultdict(list) @@ -101,6 +101,10 @@ class SubmittableDocumentTree: child_docs = defaultdict(list) for field in referencing_fields: + if field["fieldname"] == "amended_from": + # perf: amended_from links are always linked to cancelled documents. + continue + links = ( get_referencing_documents( parent_dt, diff --git a/frappe/model/delete_doc.py b/frappe/model/delete_doc.py index f67585540a..f580198460 100644 --- a/frappe/model/delete_doc.py +++ b/frappe/model/delete_doc.py @@ -249,6 +249,8 @@ def check_if_doc_is_linked(doc, method="Delete"): for lf in link_fields: link_dt, link_field, issingle = lf["parent"], lf["fieldname"], lf["issingle"] + if link_field == "amended_from": + continue try: meta = frappe.get_meta(link_dt) @@ -258,7 +260,7 @@ def check_if_doc_is_linked(doc, method="Delete"): continue if issingle: - if frappe.db.get_value(link_dt, None, link_field) == doc.name: + if frappe.db.get_single_value(link_dt, link_field) == doc.name: raise_link_exists_exception(doc, link_dt, link_dt) continue