[improvement][headless] fix derived metric case parse error (#678)

This commit is contained in:
jipeli
2024-01-22 12:54:45 +08:00
committed by GitHub
parent 7ec77c7d23
commit c12f5d23f0

View File

@@ -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();