public static Expression convert()

in seatunnel-connectors-v2/connector-iceberg/src/main/java/org/apache/seatunnel/connectors/seatunnel/iceberg/utils/ExpressionUtils.java [110:251]


    public static Expression convert(
            net.sf.jsqlparser.expression.Expression condition, org.apache.iceberg.Schema schema) {
        if (condition == null) {
            return Expressions.alwaysTrue();
        }

        if (condition instanceof AndExpression) {
            return Expressions.and(
                    convert(((AndExpression) condition).getLeftExpression(), schema),
                    convert(((AndExpression) condition).getRightExpression(), schema));
        }
        if (condition instanceof OrExpression) {
            return Expressions.or(
                    convert(((OrExpression) condition).getLeftExpression(), schema),
                    convert(((OrExpression) condition).getRightExpression(), schema));
        }
        if (condition instanceof Parenthesis) {
            return convert(((Parenthesis) condition).getExpression(), schema);
        }

        if (condition instanceof EqualsTo) {
            EqualsTo equalsTo = (EqualsTo) condition;
            Column column = (Column) equalsTo.getLeftExpression();
            Object value =
                    schema == null
                            ? convertValueExpression(equalsTo.getRightExpression())
                            : convertValueExpression(
                                    equalsTo.getRightExpression(),
                                    schema.findField(column.getColumnName()));
            return Expressions.equal(column.getColumnName(), value);
        }
        if (condition instanceof NotEqualsTo) {
            NotEqualsTo notEqualsTo = (NotEqualsTo) condition;
            Column column = (Column) notEqualsTo.getLeftExpression();
            Object value =
                    schema == null
                            ? convertValueExpression(notEqualsTo.getRightExpression())
                            : convertValueExpression(
                                    notEqualsTo.getRightExpression(),
                                    schema.findField(column.getColumnName()));
            return Expressions.notEqual(column.getColumnName(), value);
        }
        if (condition instanceof NotExpression) {
            NotExpression expr = (NotExpression) condition;
            return Expressions.not(convert(expr.getExpression(), null));
        }
        if (condition instanceof GreaterThan) {
            GreaterThan greaterThan = (GreaterThan) condition;
            Column column = (Column) greaterThan.getLeftExpression();
            Object value =
                    schema == null
                            ? convertValueExpression(greaterThan.getRightExpression())
                            : convertValueExpression(
                                    greaterThan.getRightExpression(),
                                    schema.findField(column.getColumnName()));
            return Expressions.greaterThan(column.getColumnName(), value);
        }
        if (condition instanceof GreaterThanEquals) {
            GreaterThanEquals greaterThanEquals = (GreaterThanEquals) condition;
            Column column = (Column) greaterThanEquals.getLeftExpression();
            Object value =
                    schema == null
                            ? convertValueExpression(greaterThanEquals.getRightExpression())
                            : convertValueExpression(
                                    greaterThanEquals.getRightExpression(),
                                    schema.findField(column.getColumnName()));
            return Expressions.greaterThanOrEqual(column.getColumnName(), value);
        }
        if (condition instanceof MinorThan) {
            MinorThan minorThan = (MinorThan) condition;
            Column column = (Column) minorThan.getLeftExpression();
            Object value =
                    schema == null
                            ? convertValueExpression(minorThan.getRightExpression())
                            : convertValueExpression(
                                    minorThan.getRightExpression(),
                                    schema.findField(column.getColumnName()));
            return Expressions.lessThan(column.getColumnName(), value);
        }
        if (condition instanceof MinorThanEquals) {
            MinorThanEquals minorThanEquals = (MinorThanEquals) condition;
            Column column = (Column) minorThanEquals.getLeftExpression();
            Object value =
                    schema == null
                            ? convertValueExpression(minorThanEquals.getRightExpression())
                            : convertValueExpression(
                                    minorThanEquals.getRightExpression(),
                                    schema.findField(column.getColumnName()));
            return Expressions.lessThanOrEqual(column.getColumnName(), value);
        }
        if (condition instanceof IsNullExpression) {
            IsNullExpression isNullExpression = (IsNullExpression) condition;
            Column column = (Column) isNullExpression.getLeftExpression();
            if (isNullExpression.isNot()) {
                return Expressions.notNull(column.getColumnName());
            }
            return Expressions.isNull(column.getColumnName());
        }
        if (condition instanceof InExpression) {
            InExpression inExpression = (InExpression) condition;
            Column column = (Column) inExpression.getLeftExpression();
            ExpressionList<net.sf.jsqlparser.expression.Expression> itemsList =
                    (ExpressionList) inExpression.getRightExpression();
            List<Object> values =
                    itemsList.getExpressions().stream()
                            .map(
                                    e ->
                                            schema == null
                                                    ? convertValueExpression(e)
                                                    : convertValueExpression(
                                                            e,
                                                            schema.findField(
                                                                    column.getColumnName())))
                            .collect(Collectors.toList());
            if (inExpression.isNot()) {
                return Expressions.notIn(column.getColumnName(), values);
            }
            return Expressions.in(column.getColumnName(), values);
        }
        if (condition instanceof IsBooleanExpression) {
            IsBooleanExpression booleanExpression = (IsBooleanExpression) condition;
            Column column = (Column) booleanExpression.getLeftExpression();
            if (booleanExpression.isNot()) {
                return Expressions.notEqual(column.getColumnName(), booleanExpression.isTrue());
            }
            return Expressions.equal(column.getColumnName(), booleanExpression.isTrue());
        }
        if (condition instanceof LikeExpression) {
            LikeExpression expr = (LikeExpression) condition;
            String columnName = ((Column) expr.getLeftExpression()).getColumnName();
            String value = ((StringValue) expr.getRightExpression()).getValue();
            LikeExpression.KeyWord keyWord = expr.getLikeKeyWord();
            if (keyWord == LikeExpression.KeyWord.LIKE) {
                return Expressions.startsWith(columnName, value);
            } else {
                throw new UnsupportedOperationException("Unsupported like keyword: " + keyWord);
            }
        }

        throw new UnsupportedOperationException(
                "Unsupported condition: " + condition.getClass().getName());
    }