private static ComparisonExpression equal(Expression left, Expression right) { return comparison(EQUAL, left, right); }
private static ComparisonExpression notEqual(Expression left, Expression right) { return comparison(NOT_EQUAL, left, right); }
private static ComparisonExpression isDistinctFrom(Expression left, Expression right) { return comparison(IS_DISTINCT_FROM, left, right); }
private static ComparisonExpression lessThanOrEqual(Expression left, Expression right) { return comparison(LESS_THAN_OR_EQUAL, left, right); }
private static ComparisonExpression greaterThanOrEqual(Expression left, Expression right) { return comparison(GREATER_THAN_OR_EQUAL, left, right); }
private static ComparisonExpression lessThan(Expression left, Expression expression) { return comparison(LESS_THAN, left, expression); }
private static ComparisonExpression greaterThan(Expression left, Expression right) { return comparison(GREATER_THAN, left, right); }
private static ComparisonExpression isDistinctFrom(Expression left, Expression right) { return comparison(IS_DISTINCT_FROM, left, right); }
private static ComparisonExpression greaterThanOrEqual(Expression left, Expression right) { return comparison(GREATER_THAN_OR_EQUAL, left, right); }
private static ComparisonExpression lessThan(Expression left, Expression expression) { return comparison(LESS_THAN, left, expression); }
private static ComparisonExpression equal(Expression left, Expression right) { return comparison(EQUAL, left, right); }
private static Expression unprocessableExpression1(Symbol symbol) { return comparison(GREATER_THAN, symbol.toSymbolReference(), symbol.toSymbolReference()); }
private static Expression unprocessableExpression2(Symbol symbol) { return comparison(LESS_THAN, symbol.toSymbolReference(), symbol.toSymbolReference()); }
@Test public void testFromUnprocessableComparison() { assertUnsupportedPredicate(comparison(GREATER_THAN, unprocessableExpression1(C_BIGINT), unprocessableExpression2(C_BIGINT))); assertUnsupportedPredicate(not(comparison(GREATER_THAN, unprocessableExpression1(C_BIGINT), unprocessableExpression2(C_BIGINT)))); }
@Test public void testFromUnprocessableComparison() { assertUnsupportedPredicate(comparison(GREATER_THAN, unprocessableExpression1(C_BIGINT), unprocessableExpression2(C_BIGINT))); assertUnsupportedPredicate(not(comparison(GREATER_THAN, unprocessableExpression1(C_BIGINT), unprocessableExpression2(C_BIGINT)))); }
private static Expression randPredicate(Symbol symbol, Type type) { return comparison(GREATER_THAN, symbol.toSymbolReference(), cast(new FunctionCall(QualifiedName.of("rand"), ImmutableList.of()), type)); }
@Test public void testExpressionConstantFolding() { Expression originalExpression = comparison(GREATER_THAN, C_VARBINARY.toSymbolReference(), function("from_hex", stringLiteral("123456"))); ExtractionResult result = fromPredicate(originalExpression); assertEquals(result.getRemainingExpression(), TRUE_LITERAL); Slice value = Slices.wrappedBuffer(BaseEncoding.base16().decode("123456")); assertEquals(result.getTupleDomain(), withColumnDomains(ImmutableMap.of(C_VARBINARY, Domain.create(ValueSet.ofRanges(Range.greaterThan(VARBINARY, value)), false)))); Expression expression = toPredicate(result.getTupleDomain()); assertEquals(expression, comparison(GREATER_THAN, C_VARBINARY.toSymbolReference(), varbinaryLiteral(value))); }
@Test public void testExpressionConstantFolding() { Expression originalExpression = comparison(GREATER_THAN, C_VARBINARY.toSymbolReference(), function("from_hex", stringLiteral("123456"))); ExtractionResult result = fromPredicate(originalExpression); assertEquals(result.getRemainingExpression(), TRUE_LITERAL); Slice value = Slices.wrappedBuffer(BaseEncoding.base16().decode("123456")); assertEquals(result.getTupleDomain(), withColumnDomains(ImmutableMap.of(C_VARBINARY, Domain.create(ValueSet.ofRanges(Range.greaterThan(VARBINARY, value)), false)))); Expression expression = toPredicate(result.getTupleDomain()); assertEquals(expression, comparison(GREATER_THAN, C_VARBINARY.toSymbolReference(), varbinaryLiteral(value))); }
@Test void testMultipleCoercionsOnSymbolSide() { assertPredicateTranslates( comparison(GREATER_THAN, cast(cast(C_SMALLINT, REAL), DOUBLE), doubleLiteral(3.7)), withColumnDomains(ImmutableMap.of(C_SMALLINT, Domain.create(ValueSet.ofRanges(Range.greaterThan(SMALLINT, 3L)), false)))); }
@Test void testMultipleCoercionsOnSymbolSide() { assertPredicateTranslates( comparison(GREATER_THAN, cast(cast(C_SMALLINT, REAL), DOUBLE), doubleLiteral(3.7)), withColumnDomains(ImmutableMap.of(C_SMALLINT, Domain.create(ValueSet.ofRanges(Range.greaterThan(SMALLINT, 3L)), false)))); }