@Override public <T> Boolean gt(BoundReference<T> ref, Literal<T> lit) { ByteBuffer upperBound = stats.get(ref.pos()).upperBound(); if (upperBound == null) { return ROWS_CANNOT_MATCH; // values are all null } T upper = Conversions.fromByteBuffer(ref.type(), upperBound); int cmp = lit.comparator().compare(upper, lit.value()); if (cmp <= 0) { return ROWS_CANNOT_MATCH; } return ROWS_MIGHT_MATCH; }
@Override public <T> Boolean lt(BoundReference<T> ref, Literal<T> lit) { ByteBuffer lowerBound = stats.get(ref.pos()).lowerBound(); if (lowerBound == null) { return ROWS_CANNOT_MATCH; // values are all null } T lower = Conversions.fromByteBuffer(ref.type(), lowerBound); int cmp = lit.comparator().compare(lower, lit.value()); if (cmp >= 0) { return ROWS_CANNOT_MATCH; } return ROWS_MIGHT_MATCH; }
@Override public <T> Boolean ltEq(BoundReference<T> ref, Literal<T> lit) { ByteBuffer lowerBound = stats.get(ref.pos()).lowerBound(); if (lowerBound == null) { return ROWS_CANNOT_MATCH; // values are all null } T lower = Conversions.fromByteBuffer(ref.type(), lowerBound); int cmp = lit.comparator().compare(lower, lit.value()); if (cmp > 0) { return ROWS_CANNOT_MATCH; } return ROWS_MIGHT_MATCH; }
@Override public <T> Boolean gtEq(BoundReference<T> ref, Literal<T> lit) { ByteBuffer upperBound = stats.get(ref.pos()).upperBound(); if (upperBound == null) { return ROWS_CANNOT_MATCH; // values are all null } T upper = Conversions.fromByteBuffer(ref.type(), upperBound); int cmp = lit.comparator().compare(upper, lit.value()); if (cmp < 0) { return ROWS_CANNOT_MATCH; } return ROWS_MIGHT_MATCH; }
@Override public <T> Boolean eq(BoundReference<T> ref, Literal<T> lit) { PartitionFieldSummary fieldStats = stats.get(ref.pos()); if (fieldStats.lowerBound() == null) { return ROWS_CANNOT_MATCH; // values are all null and literal cannot contain null } T lower = Conversions.fromByteBuffer(ref.type(), fieldStats.lowerBound()); int cmp = lit.comparator().compare(lower, lit.value()); if (cmp > 0) { return ROWS_CANNOT_MATCH; } T upper = Conversions.fromByteBuffer(ref.type(), fieldStats.upperBound()); cmp = lit.comparator().compare(upper, lit.value()); if (cmp < 0) { return ROWS_CANNOT_MATCH; } return ROWS_MIGHT_MATCH; }
private static boolean equals(Reference left, Reference right) { if (left instanceof NamedReference) { if (!(right instanceof NamedReference)) { return false; } NamedReference lref = (NamedReference) left; NamedReference rref = (NamedReference) right; return lref.name.equals(rref.name); } else if (left instanceof BoundReference) { if (!(right instanceof BoundReference)) { return false; } BoundReference lref = (BoundReference) left; BoundReference rref = (BoundReference) right; return ( lref.fieldId() == rref.fieldId() && lref.type().equals(rref.type()) ); } return false; } }
String path = schema.idToAlias(ref.fieldId()); switch (ref.type().typeId()) { case BOOLEAN: Operators.BooleanColumn col = FilterApi.booleanColumn(schema.idToAlias(ref.fieldId()));