private String generateWhereClause(List<Filter> pushed) {
List<String> filterStr = Lists.newArrayList();
for (Filter filter : pushed) {
if (filter instanceof IsNotNull) {
filterStr.add(String.format("isnotnull(\"%s\")", ((IsNotNull) filter).attribute()));
} else if (filter instanceof EqualTo) {
filterStr.add(String.format("\"%s\" = %s", ((EqualTo) filter).attribute(), valueToString(((EqualTo) filter).value())));
} else if (filter instanceof GreaterThan) {
filterStr.add(String.format("\"%s\" > %s", ((GreaterThan) filter).attribute(), valueToString(((GreaterThan) filter).value())));
} else if (filter instanceof GreaterThanOrEqual) {
filterStr.add(String.format("\"%s\" <= %s", ((GreaterThanOrEqual) filter).attribute(), valueToString(((GreaterThanOrEqual) filter).value())));
} else if (filter instanceof LessThan) {
filterStr.add(String.format("\"%s\" < %s", ((LessThan) filter).attribute(), valueToString(((LessThan) filter).value())));
} else if (filter instanceof LessThanOrEqual) {
filterStr.add(String.format("\"%s\" <= %s", ((LessThanOrEqual) filter).attribute(), valueToString(((LessThanOrEqual) filter).value())));
}
//todo fill out rest of Filter types
}
return WHERE_JOINER.join(filterStr);
}
private boolean canBePushed(Filter filter) {
if (filter instanceof IsNotNull) {
return true;
} else if (filter instanceof EqualTo) {
return true;
}
if (filter instanceof GreaterThan) {
return true;
}
if (filter instanceof GreaterThanOrEqual) {
return true;
}
if (filter instanceof LessThan) {
return true;
}
if (filter instanceof LessThanOrEqual) {
return true;
}
LOGGER.error("Cant push filter of type " + filter.toString());
return false;
}