From 7a0dc40693ef225b50f303ea93a3dd455eb4e161 Mon Sep 17 00:00:00 2001 From: Aradhya Tripathi <67282231+Aradhya-Tripathi@users.noreply.github.com> Date: Wed, 18 May 2022 14:39:22 +0530 Subject: [PATCH] feat!: Added support for IS in frappe qb (#16877) Fixes #16869 Using https://github.com/dickerschutz/frappe/commit/53148c3f90487dde8537733d16961947d5363885 --- frappe/database/query.py | 6 ++++++ frappe/tests/test_db.py | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/frappe/database/query.py b/frappe/database/query.py index f7393bfa54..b107759af0 100644 --- a/frappe/database/query.py +++ b/frappe/database/query.py @@ -85,6 +85,11 @@ def func_between(key: Field, value: Union[List, Tuple]) -> frappe.qb: return key[slice(*value)] +def func_is(key, value): + "Wrapper for IS" + return Field(key).isnotnull() if value.lower() == "set" else Field(key).isnull() + + def make_function(key: Any, value: Union[int, str]): """returns fucntion query @@ -135,6 +140,7 @@ OPERATOR_MAP = { "not like": not_like, "regex": func_regex, "between": func_between, + "is": func_is, } diff --git a/frappe/tests/test_db.py b/frappe/tests/test_db.py index 338bde7502..86e54cb866 100644 --- a/frappe/tests/test_db.py +++ b/frappe/tests/test_db.py @@ -858,3 +858,12 @@ class TestDDLCommandsPost(unittest.TestCase): ) dt.delete(ignore_permissions=True) + + def test_is(self): + user = frappe.qb.DocType("User") + self.assertIn( + "is not null", frappe.db.get_values(user, filters={user.name: ("is", "set")}, run=False).lower() + ) + self.assertIn( + "is null", frappe.db.get_values(user, filters={user.name: ("is", "not set")}, run=False).lower() + )