From cf164fffba6742886d67b71c443b48e15ca8506c Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Tue, 13 Jul 2021 19:11:07 +0530 Subject: [PATCH 1/4] fix: Error on updating docs via API --- frappe/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/api.py b/frappe/api.py index 36d51e894c..636c6b2888 100644 --- a/frappe/api.py +++ b/frappe/api.py @@ -82,7 +82,7 @@ def handle(): if frappe.local.request.method=="PUT": data = get_request_form_data() - doc = frappe.get_doc(doctype, name) + doc = frappe.get_doc(doctype, name, for_update=True) if "flags" in data: del data["flags"] From 33f8bfcaf29fc2d920ff5110a7b616e902afbcea Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Sun, 18 Jul 2021 17:46:16 +0530 Subject: [PATCH 2/4] fix: Add for update in nest set model updates --- frappe/utils/nestedset.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/frappe/utils/nestedset.py b/frappe/utils/nestedset.py index 3c024c40e4..b0657b1108 100644 --- a/frappe/utils/nestedset.py +++ b/frappe/utils/nestedset.py @@ -57,13 +57,14 @@ def update_add_node(doc, parent, parent_field): # get the last sibling of the parent if parent: - left, right = frappe.db.sql("select lft, rgt from `tab{0}` where name=%s" + left, right = frappe.db.sql("select lft, rgt from `tab{0}` where name=%s for update" .format(doctype), parent)[0] validate_loop(doc.doctype, doc.name, left, right) else: # root right = frappe.db.sql(""" SELECT COALESCE(MAX(rgt), 0) + 1 FROM `tab{0}` WHERE COALESCE(`{1}`, '') = '' + FOR UPDATE """.format(doctype, parent_field))[0][0] right = right or 1 @@ -89,7 +90,7 @@ def update_move_node(doc, parent_field): if parent: new_parent = frappe.db.sql("""select lft, rgt from `tab{0}` - where name = %s""".format(doc.doctype), parent, as_dict=1)[0] + where name = %s for update""".format(doc.doctype), parent, as_dict=1)[0] validate_loop(doc.doctype, doc.name, new_parent.lft, new_parent.rgt) @@ -108,7 +109,7 @@ def update_move_node(doc, parent_field): if parent: new_parent = frappe.db.sql("""select lft, rgt from `tab%s` - where name = %s""" % (doc.doctype, '%s'), parent, as_dict=1)[0] + where name = %s for update""" % (doc.doctype, '%s'), parent, as_dict=1)[0] # set parent lft, rgt @@ -128,7 +129,7 @@ def update_move_node(doc, parent_field): new_diff = new_parent.rgt - doc.lft else: # new root - max_rgt = frappe.db.sql("""select max(rgt) from `tab{0}`""".format(doc.doctype))[0][0] + max_rgt = frappe.db.sql("""select max(rgt) from `tab{0}` for update""".format(doc.doctype))[0][0] new_diff = max_rgt + 1 - doc.lft # bring back from dark side From 0c3e923e0fd1dbcab3a6493cea8fb8083bfc46b0 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 19 Jul 2021 10:49:44 +0530 Subject: [PATCH 3/4] fix: Remove for update flag from aggregate functions --- frappe/utils/nestedset.py | 1 - 1 file changed, 1 deletion(-) diff --git a/frappe/utils/nestedset.py b/frappe/utils/nestedset.py index b0657b1108..75c1b0c2ae 100644 --- a/frappe/utils/nestedset.py +++ b/frappe/utils/nestedset.py @@ -64,7 +64,6 @@ def update_add_node(doc, parent, parent_field): right = frappe.db.sql(""" SELECT COALESCE(MAX(rgt), 0) + 1 FROM `tab{0}` WHERE COALESCE(`{1}`, '') = '' - FOR UPDATE """.format(doctype, parent_field))[0][0] right = right or 1 From f1f8678ee0c631b791e479de87909fdf2853c714 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 19 Jul 2021 10:54:22 +0530 Subject: [PATCH 4/4] fix: Remove for update flag from aggregate functions --- frappe/utils/nestedset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/utils/nestedset.py b/frappe/utils/nestedset.py index 75c1b0c2ae..4a65140449 100644 --- a/frappe/utils/nestedset.py +++ b/frappe/utils/nestedset.py @@ -128,7 +128,7 @@ def update_move_node(doc, parent_field): new_diff = new_parent.rgt - doc.lft else: # new root - max_rgt = frappe.db.sql("""select max(rgt) from `tab{0}` for update""".format(doc.doctype))[0][0] + max_rgt = frappe.db.sql("""select max(rgt) from `tab{0}`""".format(doc.doctype))[0][0] new_diff = max_rgt + 1 - doc.lft # bring back from dark side