in wayang-api/wayang-api-sql/src/main/java/org/apache/wayang/api/sql/calcite/converter/functions/FilterEvaluateCondition.java [71:128]
public boolean eval(final Record record, final SqlKind kind, final RexNode leftOperand,
final RexNode rightOperand) {
if (leftOperand instanceof RexInputRef && rightOperand instanceof RexLiteral) {
final RexInputRef rexInputRef = (RexInputRef) leftOperand;
final int index = rexInputRef.getIndex();
final Object field = record.getField(index);
final RexLiteral rexLiteral = (RexLiteral) rightOperand;
switch (kind) {
case LIKE:
return like(field.toString(), rexLiteral.toString().replace("'", ""));
case GREATER_THAN:
return isGreaterThan(field, rexLiteral);
case LESS_THAN:
return isLessThan(field, rexLiteral);
case EQUALS:
return isEqualTo(field, rexLiteral.getValueAs(field.getClass()));
case NOT_EQUALS:
return !isEqualTo(field, rexLiteral.getValueAs(field.getClass()));
case GREATER_THAN_OR_EQUAL:
return isGreaterThan(field, rexLiteral) || isEqualTo(field, rexLiteral);
case LESS_THAN_OR_EQUAL:
return isLessThan(field, rexLiteral) || isEqualTo(field, rexLiteral);
default:
throw new IllegalStateException("Predicate not supported yet: " + kind);
}
} else if (leftOperand instanceof RexInputRef && rightOperand instanceof RexInputRef) {
final RexInputRef leftRexInputRef = (RexInputRef) leftOperand;
final int leftIndex = leftRexInputRef.getIndex();
final RexInputRef righRexInputRef = (RexInputRef) rightOperand;
final int rightIndex = righRexInputRef.getIndex();
switch (kind) {
case EQUALS:
return isEqualTo(record.getField(leftIndex), record.getField(rightIndex));
default:
throw new IllegalStateException("Predicate not supported yet, kind: " + kind + " left field: "
+ record.getField(leftIndex) + " right field: " + record.getField(rightIndex));
}
} else if (leftOperand instanceof RexInputRef && rightOperand == null) {
final RexInputRef leftRexInputRef = (RexInputRef) leftOperand;
final int leftIndex = leftRexInputRef.getIndex();
final Object leftField = record.getField(leftIndex);
switch (kind) {
case IS_NOT_NULL:
return !isEqualTo(leftField, null);
case IS_NULL:
return isEqualTo(leftField, null);
default:
throw new IllegalStateException(
"Predicate not supported yet, kind: " + kind + " left field: " + leftField);
}
} else {
throw new IllegalStateException("Predicate not supported with types yet, predicate: " + kind + ", type1: "
+ leftOperand + ", type2: " + rightOperand);
}
}