public boolean eval()

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);
        }
    }