From 701bf2ede6ed04c1cf0a899fdcd2a8008d9e01ab Mon Sep 17 00:00:00 2001 From: Aradhya Date: Wed, 29 Jun 2022 22:33:51 +0530 Subject: [PATCH] fix: fixed false operator placements in query --- frappe/database/query.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/frappe/database/query.py b/frappe/database/query.py index 337c9d892a..4a7d0e8a67 100644 --- a/frappe/database/query.py +++ b/frappe/database/query.py @@ -2,6 +2,7 @@ import operator import re from ast import literal_eval from functools import cached_property +from types import BuiltinFunctionType from typing import TYPE_CHECKING, Any, Callable, Dict, List, Tuple, Union import frappe @@ -389,17 +390,20 @@ class Engine: _args = [] for arg in args: - has_operator = False initial_fields = literal_eval_(arg.strip()) if to_cast: + has_primitive_operator = False for _operator in OPERATOR_MAP.keys(): if _operator in initial_fields: - has_operator = True - field = OPERATOR_MAP[_operator]( - *map(lambda field: Field(field.strip()), arg.split(_operator)) - ) + operator_mapping = OPERATOR_MAP[_operator] + # Only perform this if operator is of primitive type. + if isinstance(operator_mapping, BuiltinFunctionType): + has_primitive_operator = True + field = operator_mapping( + *map(lambda field: Field(field.strip()), arg.split(_operator)), + ) - field = Field(initial_fields) if not has_operator else field + field = Field(initial_fields) if not has_primitive_operator else field else: field = initial_fields