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 diff --git a/frappe/utils/nestedset.py b/frappe/utils/nestedset.py index 1b6bd3e66d..a1fe04ccb6 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 @@ -110,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()