Exemple #1
0
    def truncate_array(name, pred, transform):
        boundary = pred.lit.value

        if pred.op == Operation.LT or pred.op == Operation.LT_EQ:
            return Expressions.predicate(Operation.LT_EQ, name,
                                         transform.apply(boundary))
        elif pred.op == Operation.GT or pred.op == Operation.GT_EQ:
            return Expressions.predicate(Operation.GT_EQ, name,
                                         transform.apply(boundary))
        elif pred.op == Operation.EQ:
            return Expressions.predicate(pred.op, name,
                                         transform.apply(boundary))
Exemple #2
0
    def truncate_decimal(name, pred, transform):
        boundary = pred.lit.value

        if pred.op == Operation.LT:
            minus_one = boundary - decimal.Decimal(1)
            return Expressions.predicate(Operation.LT_EQ, name,
                                         transform.apply(minus_one))
        elif pred.op == Operation.LT_EQ:
            return Expressions.predicate(Operation.LT_EQ, name,
                                         transform.apply(boundary))
        elif pred.op == Operation.GT:
            plus_one = boundary + decimal.Decimal(1)
            return Expressions.predicate(Operation.GT_EQ, name,
                                         transform.apply(plus_one))
        elif pred.op == Operation.GT_EQ:
            return Expressions.predicate(Operation.GT_EQ, name,
                                         transform.apply(boundary))
        elif pred.op == Operation.EQ:
            return Expressions.predicate(pred.op, name,
                                         transform.apply(boundary))
Exemple #3
0
    def remove_time_filters(self, expressions, expression):
        if expression.op == Operation.AND:
            self.remove_time_filters(expressions, expression.left)
            self.remove_time_filters(expressions, expression.right)
            return
        elif isinstance(expression, UnboundPredicate):
            pred = expression
            ref = pred.ref
            lit = pred.lit

            if ref.name in ScanSummaryBuilder.TIMESTAMP_NAMES:
                ts_literal = lit.to(TimestampType.without_timezone())
                millis = ScanSummaryBuilder.to_millis(ts_literal.value)
                self.add_timestamp_filter(
                    Expressions.predicate(pred.op, "timestamp_ms", millis))
                return

        expressions.append(expression)