/** * Creates a new {@code IS NULL} predicate. * * @param column the column that the predicate applies to * @return an {@code IS NULL} predicate */ public static KuduPredicate newIsNullPredicate(ColumnSchema column) { if (!column.isNullable()) { return none(column); } return new KuduPredicate(PredicateType.IS_NULL, column, null, null); }
/** * Builds an IN list predicate from a collection of raw values. The collection * must be sorted and deduplicated. * * @param column the column * @param values the IN list values * @return an IN list predicate */ private static KuduPredicate buildInList(ColumnSchema column, Collection<byte[]> values) { // IN (true, false) predicates can be simplified to IS NOT NULL. if (column.getType().getDataType(column.getTypeAttributes()) == Common.DataType.BOOL && values.size() > 1) { return newIsNotNullPredicate(column); } switch (values.size()) { case 0: return KuduPredicate.none(column); case 1: return new KuduPredicate(PredicateType.EQUALITY, column, values.iterator().next(), null); default: return new KuduPredicate(column, values.toArray(new byte[values.size()][])); } }
case LESS: if (value.length == 0) { return none(column);
case LESS: if (bytes.length == 0) { return none(column);
return type == PredicateType.IS_NULL ? none(column) : this; return type == PredicateType.IS_NULL ? this : none(column); case NONE: return this; case IS_NOT_NULL: return other; case IS_NULL: return none(column); case EQUALITY: { if (other.type == PredicateType.EQUALITY) { if (compare(column, lower, other.lower) != 0) { return none(this.column); } else { return this; return this; } else { return none(this.column); (upper != null && compare(column, upper, other.upper) <= 0) ? upper : other.upper; if (newLower != null && newUpper != null && compare(column, newLower, newUpper) >= 0) { return none(column); } else { if (newLower != null && newUpper != null && areConsecutive(newLower, newUpper)) { return other; } else { return none(column);
return none(column);
@Test public void testLess() { Assert.assertEquals(KuduPredicate.newComparisonPredicate(byteCol, LESS, Byte.MIN_VALUE), KuduPredicate.none(byteCol)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(shortCol, LESS, Short.MIN_VALUE), KuduPredicate.none(shortCol)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(intCol, LESS, Integer.MIN_VALUE), KuduPredicate.none(intCol)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(longCol, LESS, Long.MIN_VALUE), KuduPredicate.none(longCol)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(floatCol, LESS, Float.NEGATIVE_INFINITY), KuduPredicate.none(floatCol)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(doubleCol, LESS, Double.NEGATIVE_INFINITY), KuduPredicate.none(doubleCol)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(decimal32Col, LESS, DecimalUtil.minValue(DecimalUtil.MAX_DECIMAL32_PRECISION, 2)), KuduPredicate.none(decimal32Col)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(decimal64Col, LESS, DecimalUtil.minValue(DecimalUtil.MAX_DECIMAL64_PRECISION, 2)), KuduPredicate.none(decimal64Col)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(decimal128Col, LESS, DecimalUtil.minValue(DecimalUtil.MAX_DECIMAL128_PRECISION, 2)), KuduPredicate.none(decimal128Col)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(stringCol, LESS, ""), KuduPredicate.none(stringCol)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(binaryCol, LESS, new byte[] {}), KuduPredicate.none(binaryCol)); }
KuduPredicate.newComparisonPredicate(binaryCol, GREATER, new byte[] { (byte) 10 })); Assert.assertEquals(KuduPredicate.none(byteCol), KuduPredicate.newComparisonPredicate(byteCol, GREATER, Byte.MAX_VALUE)); Assert.assertEquals(KuduPredicate.none(shortCol), KuduPredicate.newComparisonPredicate(shortCol, GREATER, Short.MAX_VALUE)); Assert.assertEquals(KuduPredicate.none(intCol), KuduPredicate.newComparisonPredicate(intCol, GREATER, Integer.MAX_VALUE)); Assert.assertEquals(KuduPredicate.none(longCol), KuduPredicate.newComparisonPredicate(longCol, GREATER, Long.MAX_VALUE)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(floatCol, GREATER_EQUAL, Float.POSITIVE_INFINITY), KuduPredicate.newComparisonPredicate(floatCol, GREATER, Float.MAX_VALUE)); Assert.assertEquals(KuduPredicate.none(floatCol), KuduPredicate.newComparisonPredicate(floatCol, GREATER, Float.POSITIVE_INFINITY)); Assert.assertEquals(KuduPredicate.newComparisonPredicate(doubleCol, GREATER_EQUAL, Double.POSITIVE_INFINITY), KuduPredicate.newComparisonPredicate(doubleCol, GREATER, Double.MAX_VALUE)); Assert.assertEquals(KuduPredicate.none(doubleCol), KuduPredicate.newComparisonPredicate(doubleCol, GREATER, Double.POSITIVE_INFINITY));
KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol)); KuduPredicate.none(intCol));
KuduPredicate.newComparisonPredicate(boolCol, EQUAL, false)); Assert.assertEquals(KuduPredicate.none(boolCol), KuduPredicate.newComparisonPredicate(boolCol, LESS, false)); KuduPredicate.newComparisonPredicate(boolCol, GREATER_EQUAL, true)); Assert.assertEquals(KuduPredicate.none(boolCol), KuduPredicate.newComparisonPredicate(boolCol, GREATER, true)); Assert.assertEquals(KuduPredicate.none(boolCol), boolInList());