From 5ff587fc40adb574a4d03bd1c57e6bd3e88fe414 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Mon, 4 Apr 2022 12:32:08 +0530 Subject: [PATCH 1/3] fix(nestedset): Fix rgt value via update_add_node This bug was introduced via https://github.com/frappe/frappe/pull/16468/commits/3358fdf9a99ae9ff57be9ecb4e310f9a1bd105ac --- frappe/utils/nestedset.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frappe/utils/nestedset.py b/frappe/utils/nestedset.py index 1b6bd3e66d..6d81cc1e1c 100644 --- a/frappe/utils/nestedset.py +++ b/frappe/utils/nestedset.py @@ -63,9 +63,8 @@ def update_add_node(doc, parent, parent_field): left, right = frappe.db.get_value(doctype, {"name": parent}, ["lft", "rgt"], for_update=True) validate_loop(doc.doctype, doc.name, left, right) else: # root - right = frappe.qb.from_(Table).select( - Coalesce(Max(Table.rgt), 0) + Coalesce(Max(Table.rgt), 0) + 1 ).where(Coalesce(Table[parent_field], "") == "").run(pluck=True)[0] right = right or 1 From 9e01a022b88d770050ae64f7379c198bfc071c03 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Mon, 4 Apr 2022 15:14:37 +0530 Subject: [PATCH 2/3] fix(nestedset): update_move_node Revert to past-like structure and maintain only query conversions --- 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 6d81cc1e1c..a1fe04ccb6 100644 --- a/frappe/utils/nestedset.py +++ b/frappe/utils/nestedset.py @@ -109,14 +109,15 @@ def update_move_node(doc: Document, parent_field: str): ).run() if parent: + # re-query value due to computation above + new_parent = frappe.qb.from_(Table).select( + Table.lft, Table.rgt + ).where(Table.name == parent).for_update().run(as_dict=True)[0] + # set parent lft, rgt frappe.qb.update(Table).set(Table.rgt, Table.rgt + diff).where(Table.name == parent).run() # shift right at new parent - frappe.qb.update(Table).set(Table.lft, Table.lft + diff).set(Table.rgt, Table.rgt + diff).where( - (Table.lft >= new_parent.lft) & (Table.lft <= new_parent.rgt) - ).run() - frappe.qb.update(Table).set(Table.lft, Table.lft + diff).set(Table.rgt, Table.rgt + diff).where( Table.lft > new_parent.rgt ).run() From ce5ac24b611d0f774af6f5ede677f0294f646086 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Mon, 4 Apr 2022 15:15:51 +0530 Subject: [PATCH 3/3] feat(db): Set frappe.db.debug to mass debug queries --- frappe/database/database.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/database/database.py b/frappe/database/database.py index 70345a04dd..7551c5f628 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -115,6 +115,7 @@ class Database(object): {"name": "a%", "owner":"test@example.com"}) """ + debug = debug or getattr(self, "debug", False) query = str(query) if not run: return query