this.statement = null;
}
}
private Filter setFilter(SQLBinaryOpExpr condition, Filter filter, boolean and) throws IOException, SQLException {
HMapping mapping = this.getMapping();
if (condition.getOperator() == SQLBinaryOperator.BooleanAnd) {
filter = setFilter((SQLBinaryOpExpr) condition.getLeft(), filter, true);
filter = setFilter((SQLBinaryOpExpr) condition.getRight(), filter, true);
return filter;
} else if (condition.getOperator() == SQLBinaryOperator.BooleanOr) {
filter = setFilter((SQLBinaryOpExpr) condition.getLeft(), filter, false);
filter = setFilter((SQLBinaryOpExpr) condition.getRight(), filter, false);
return filter;
}
String fieldName = ((SQLIdentifierExpr) condition.getLeft()).getName();
Object value = SQLEvalVisitorUtils.eval(dbType, condition.getRight(), statement.getParameters());
byte[] bytes = mapping.toBytes(fieldName, value);
if (mapping.isRow(fieldName)) {
if (filter == null && condition.getOperator() == SQLBinaryOperator.GreaterThanOrEqual) {
scan.setStartRow(bytes);
return null;
} else if (filter == null && condition.getOperator() == SQLBinaryOperator.LessThan) {
scan.setStopRow(bytes);
return null;
} else {
CompareOp compareOp = toCompareOp(condition.getOperator());
RowFilter rowFilter = new RowFilter(compareOp, new BinaryComparator(bytes));
return setFilter(filter, rowFilter, and);
}
} else {
byte[] qualifier = mapping.getQualifier(fieldName);
byte[] family = mapping.getFamily(fieldName);
CompareOp compareOp = toCompareOp(condition.getOperator());
SingleColumnValueFilter columnFilter = new SingleColumnValueFilter(family, qualifier, compareOp, bytes);
return setFilter(filter, columnFilter, and);