From c778ce370f03e568bf3cc51a7484bd84fd00f081 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 2 May 2025 19:09:10 +0530 Subject: [PATCH] perf: Avoid Coalesce in QB `is` implementation --- frappe/database/operator_map.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frappe/database/operator_map.py b/frappe/database/operator_map.py index 8d68ce0dcc..ffdee044b6 100644 --- a/frappe/database/operator_map.py +++ b/frappe/database/operator_map.py @@ -95,7 +95,14 @@ def func_between(key: Field, value: list | tuple) -> frappe.qb: def func_is(key, value): "Wrapper for IS" - return Coalesce(key, "") != "" if value.lower() == "set" else Coalesce(key, "") == "" + + match value.lower(): + case "set": + return key != "" + case "not set": + return key.isnull() | (key == "") + case _: + raise ValueError("`is` operator only supports `set` and `not set` as value") def func_timespan(key: Field, value: str) -> frappe.qb: