Exemple #1
0
    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])
Exemple #2
0
    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])