From 798206c3b39ca35f86a181f8804f429e96f67833 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 18 Oct 2022 17:32:40 +0530 Subject: [PATCH 1/2] fix: dont db_set on unsaved document (cherry picked from commit 1bd61d5c255b74eb485f8a4e770041e8df3fac5b) --- frappe/model/document.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frappe/model/document.py b/frappe/model/document.py index 3d64e68415..4812f4aa4c 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -1173,6 +1173,9 @@ class Document(BaseDocument): # to trigger notification on value change self.run_method("before_change") + if self.name is None: + return + frappe.db.set_value( self.doctype, self.name, From a5ad248802124eaf1329e0028f02bc38ea3d6f2e Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 18 Oct 2022 22:09:21 +0530 Subject: [PATCH 2/2] test: db_set does not query for new doc --- frappe/tests/test_document.py | 6 ++++++ frappe/tests/utils.py | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index 6080df48d3..cec7ee3bb0 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -163,6 +163,12 @@ class TestDocument(FrappeTestCase): self.assertRaises(frappe.ValidationError, d.run_method, "validate") self.assertRaises(frappe.ValidationError, d.save) + def test_db_set_no_query_on_new_docs(self): + user = frappe.new_doc("User") + user.db_set("user_type", "Magical Wizard") + with self.assertQueryCount(0): + user.db_set("user_type", "Magical Wizard") + def test_update_after_submit(self): d = self.test_insert() d.starts_on = "2014-09-09" diff --git a/frappe/tests/utils.py b/frappe/tests/utils.py index 7a8ebb7010..1e99966cf5 100644 --- a/frappe/tests/utils.py +++ b/frappe/tests/utils.py @@ -69,16 +69,18 @@ class FrappeTestCase(unittest.TestCase): @contextmanager def assertQueryCount(self, count): + queries = [] + def _sql_with_count(*args, **kwargs): - frappe.db.sql_query_count += 1 - return orig_sql(*args, **kwargs) + ret = orig_sql(*args, **kwargs) + queries.append(frappe.db.last_query) + return ret try: orig_sql = frappe.db.sql - frappe.db.sql_query_count = 0 frappe.db.sql = _sql_with_count yield - self.assertLessEqual(frappe.db.sql_query_count, count) + self.assertLessEqual(len(queries), count, msg="Queries executed: " + "\n\n".join(queries)) finally: frappe.db.sql = orig_sql