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(