def partial_eval(self): lhs = ES52[self.lhs].partial_eval() rhs = ES52[self.rhs].partial_eval() if is_literal(lhs): if is_literal(rhs): return FALSE if value_compare(lhs.value, rhs.value) else TRUE else: lhs, rhs = rhs, lhs # FLIP SO WE CAN USE TERMS FILTER if is_literal(rhs) and same_json_type(lhs.type, BOOLEAN): # SPECIAL CASE true == "T" rhs = string2boolean(rhs.value) if rhs is None: return FALSE rhs = Literal(rhs) return EqOp([lhs, rhs]) if lhs.type != OBJECT and rhs.type != OBJECT and not same_json_type( lhs.type, rhs.type): # OBJECT MEANS WE REALLY DO NOT KNOW THE TYPE return FALSE if is_op(lhs, NestedOp): return self.lang[NestedOp(path=lhs.frum, where=AndOp( [lhs.where, EqOp([lhs.select, rhs])]))] return EqOp([lhs, rhs])
def partial_eval(self): lhs = ES52[self.lhs].partial_eval() rhs = ES52[self.rhs].partial_eval() if is_literal(lhs): if is_literal(rhs): return FALSE if value_compare(lhs.value, rhs.value) else TRUE else: return EqOp([rhs, lhs]) # FLIP SO WE CAN USE TERMS FILTER return EqOp([lhs, rhs])