From cdb0732646a2d9151b5d121de750d491e2a980ac Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Wed, 24 Aug 2022 10:30:51 +0530 Subject: [PATCH] perf: avoid coalescing wherever possible (#17920) --- frappe/model/db_query.py | 3 +++ frappe/tests/test_db_query.py | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 97956a7818..a2f597f7bd 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -612,6 +612,9 @@ class DatabaseQuery: ) elif f.operator.lower() in ("in", "not in"): + # if values contain '' or falsy values then only coalesce column + can_be_null = not f.value or any(v is None or v == "" for v in f.value) + values = f.value or "" if isinstance(values, str): values = values.split(",") diff --git a/frappe/tests/test_db_query.py b/frappe/tests/test_db_query.py index 331b8eb8b8..1e660f8a5d 100644 --- a/frappe/tests/test_db_query.py +++ b/frappe/tests/test_db_query.py @@ -831,6 +831,11 @@ class TestReportview(FrappeTestCase): self.assertTrue(dashboard_settings) + def test_coalesce_with_in_ops(self): + self.assertNotIn("ifnull", frappe.get_all("User", {"name": ("in", ["a", "b"])}, run=0)) + self.assertIn("ifnull", frappe.get_all("User", {"name": ("in", ["a", None])}, run=0)) + self.assertIn("ifnull", frappe.get_all("User", {"name": ("in", ["a", ""])}, run=0)) + def add_child_table_to_blog_post(): child_table = frappe.get_doc(