@Override public Expression negate() { return new UnboundPredicate<>(op().negate(), ref(), literal()); }
private void removeTimeFilters(List<Expression> expressions, Expression expression) { if (expression.op() == Operation.AND) { And and = (And) expression; removeTimeFilters(expressions, and.left()); removeTimeFilters(expressions, and.right()); return; } else if (expression instanceof UnboundPredicate) { UnboundPredicate pred = (UnboundPredicate) expression; NamedReference ref = (NamedReference) pred.ref(); Literal<?> lit = pred.literal(); if (TIMESTAMP_NAMES.contains(ref.name())) { Literal<Long> tsLiteral = lit.to(Types.TimestampType.withoutZone()); long millis = toMillis(tsLiteral.value()); addTimestampFilter(Expressions.predicate(pred.op(), "timestamp_ms", millis)); return; } } expressions.add(expression); }
Or or1 = (Or) projection; UnboundPredicate<?> dateint1 = assertAndUnwrapUnbound(or1.left()); Assert.assertEquals("Should be a dateint predicate", "dateint", dateint1.ref().name()); Assert.assertEquals("Should be dateint=20180416", 20180416, dateint1.literal().value()); Assert.assertTrue(or1.right() instanceof Or); Or or2 = (Or) or1.right(); UnboundPredicate<?> dateint2 = assertAndUnwrapUnbound(or2.left()); Assert.assertEquals("Should be a dateint predicate", "dateint", dateint2.ref().name()); Assert.assertEquals("Should be dateint=20180415", 20180415, dateint2.literal().value()); UnboundPredicate<?> dateint3 = assertAndUnwrapUnbound(or2.right()); Assert.assertEquals("Should be a dateint predicate", "dateint", dateint3.ref().name()); Assert.assertEquals("Should be dateint=20180417", 20180417, dateint3.literal().value());
"id", projected.ref().name()); Assert.assertEquals("Operation should match", bound.op(), projected.op());
"id", projected.ref().name()); Assert.assertEquals("Operation should match", bound.op(), projected.op());
UnboundPredicate<?> unbound = assertAndUnwrapUnbound(residual); Assert.assertEquals("Residual should be hour < 12", LT, unbound.op()); Assert.assertEquals("Residual should be hour < 12", "hour", unbound.ref().name()); Assert.assertEquals("Residual should be hour < 12", 12, unbound.literal().value()); unbound = assertAndUnwrapUnbound(residual); Assert.assertEquals("Residual should be hour > 11", GT, unbound.op()); Assert.assertEquals("Residual should be hour > 11", "hour", unbound.ref().name()); Assert.assertEquals("Residual should be hour > 11", 11, unbound.literal().value());