diff --git a/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/ExpressionReplaceVisitor.java b/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/ExpressionReplaceVisitor.java index 950fa5ad7..23044aa46 100644 --- a/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/ExpressionReplaceVisitor.java +++ b/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/ExpressionReplaceVisitor.java @@ -8,6 +8,7 @@ import net.sf.jsqlparser.expression.BinaryExpression; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.ExpressionVisitorAdapter; import net.sf.jsqlparser.expression.Function; +import net.sf.jsqlparser.expression.WhenClause; import net.sf.jsqlparser.schema.Column; public class ExpressionReplaceVisitor extends ExpressionVisitorAdapter { @@ -19,6 +20,20 @@ public class ExpressionReplaceVisitor extends ExpressionVisitorAdapter { this.fieldExprMap = fieldExprMap; } + public void visit(WhenClause expr) { + expr.getWhenExpression().accept(this); + if (expr.getThenExpression() instanceof Column) { + Column column = (Column) expr.getThenExpression(); + Expression expression = QueryExpressionReplaceVisitor.getExpression( + QueryExpressionReplaceVisitor.getReplaceExpr(column, fieldExprMap)); + if (Objects.nonNull(expression)) { + expr.setThenExpression(expression); + } + } else { + expr.getThenExpression().accept(this); + } + } + protected void visitBinaryExpression(BinaryExpression expr) { Expression left = expr.getLeftExpression(); Expression right = expr.getRightExpression();