mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-13 21:17:08 +00:00
[improvement][headless] fix derived metric case parse error (#678)
This commit is contained in:
@@ -8,6 +8,7 @@ import net.sf.jsqlparser.expression.BinaryExpression;
|
|||||||
import net.sf.jsqlparser.expression.Expression;
|
import net.sf.jsqlparser.expression.Expression;
|
||||||
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
|
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
|
||||||
import net.sf.jsqlparser.expression.Function;
|
import net.sf.jsqlparser.expression.Function;
|
||||||
|
import net.sf.jsqlparser.expression.WhenClause;
|
||||||
import net.sf.jsqlparser.schema.Column;
|
import net.sf.jsqlparser.schema.Column;
|
||||||
|
|
||||||
public class ExpressionReplaceVisitor extends ExpressionVisitorAdapter {
|
public class ExpressionReplaceVisitor extends ExpressionVisitorAdapter {
|
||||||
@@ -19,6 +20,20 @@ public class ExpressionReplaceVisitor extends ExpressionVisitorAdapter {
|
|||||||
this.fieldExprMap = fieldExprMap;
|
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) {
|
protected void visitBinaryExpression(BinaryExpression expr) {
|
||||||
Expression left = expr.getLeftExpression();
|
Expression left = expr.getLeftExpression();
|
||||||
Expression right = expr.getRightExpression();
|
Expression right = expr.getRightExpression();
|
||||||
|
|||||||
Reference in New Issue
Block a user