@Override
public KeyRange getKeyRange(CompareOp op, Expression rhs) {
byte[] lowerRange = KeyRange.UNBOUND;
byte[] upperRange = KeyRange.UNBOUND;
boolean lowerInclusive = true;
PDataType type = getColumn().getDataType();
switch (op) {
case EQUAL:
lowerRange = evaluateExpression(rhs);
upperRange = ByteUtil.nextKey(lowerRange);
break;
case GREATER:
lowerRange = ByteUtil.nextKey(evaluateExpression(rhs));
break;
case LESS_OR_EQUAL:
upperRange = ByteUtil.nextKey(evaluateExpression(rhs));
lowerInclusive = false;
break;
default:
return childPart.getKeyRange(op, rhs);
}
Integer length = getColumn().getMaxLength();
if (type.isFixedWidth() && length != null) {
if (lowerRange != KeyRange.UNBOUND) {
lowerRange = StringUtil.padChar(lowerRange, length);
}
if (upperRange != KeyRange.UNBOUND) {
upperRange = StringUtil.padChar(upperRange, length);