From c12f5d23f0699e7335a102499f5a0432aa8f2cd8 Mon Sep 17 00:00:00 2001 From: jipeli <54889677+jipeli@users.noreply.github.com> Date: Mon, 22 Jan 2024 12:54:45 +0800 Subject: [PATCH] [improvement][headless] fix derived metric case parse error (#678) --- .../util/jsqlparser/ExpressionReplaceVisitor.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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();