[fix](Nereids) fold constant on BE could not process alias (#17259)
1. could not use static INSTANCE for FoldConstantOnBE rule, because it is stateful 2. if expression root is Alias, should use its child to do const collection
This commit is contained in:
@ -31,7 +31,7 @@ public class FoldConstantRule extends AbstractExpressionRewriteRule {
|
||||
@Override
|
||||
public Expression rewrite(Expression expr, ExpressionRewriteContext ctx) {
|
||||
if (ctx.connectContext != null && ctx.connectContext.getSessionVariable().isEnableFoldConstantByBe()) {
|
||||
return FoldConstantRuleOnBE.INSTANCE.rewrite(expr, ctx);
|
||||
return new FoldConstantRuleOnBE().rewrite(expr, ctx);
|
||||
}
|
||||
return FoldConstantRuleOnFE.INSTANCE.rewrite(expr, ctx);
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@ import org.apache.doris.common.util.VectorizedUtil;
|
||||
import org.apache.doris.nereids.glue.translator.ExpressionTranslator;
|
||||
import org.apache.doris.nereids.rules.expression.rewrite.AbstractExpressionRewriteRule;
|
||||
import org.apache.doris.nereids.rules.expression.rewrite.ExpressionRewriteContext;
|
||||
import org.apache.doris.nereids.trees.expressions.Alias;
|
||||
import org.apache.doris.nereids.trees.expressions.Between;
|
||||
import org.apache.doris.nereids.trees.expressions.Cast;
|
||||
import org.apache.doris.nereids.trees.expressions.Expression;
|
||||
@ -66,7 +67,6 @@ import java.util.concurrent.TimeUnit;
|
||||
* Constant evaluation of an expression.
|
||||
*/
|
||||
public class FoldConstantRuleOnBE extends AbstractExpressionRewriteRule {
|
||||
public static final FoldConstantRuleOnBE INSTANCE = new FoldConstantRuleOnBE();
|
||||
private static final Logger LOG = LogManager.getLogger(FoldConstantRuleOnBE.class);
|
||||
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
private final IdGenerator<ExprId> idGenerator = ExprId.createGenerator();
|
||||
@ -80,7 +80,11 @@ public class FoldConstantRuleOnBE extends AbstractExpressionRewriteRule {
|
||||
private Expression foldByBE(Expression root, ExpressionRewriteContext context) {
|
||||
Map<String, Expression> constMap = Maps.newHashMap();
|
||||
Map<String, TExpr> staleConstTExprMap = Maps.newHashMap();
|
||||
collectConst(root, constMap, staleConstTExprMap);
|
||||
Expression rootWithoutAlias = root;
|
||||
if (root instanceof Alias) {
|
||||
rootWithoutAlias = ((Alias) root).child();
|
||||
}
|
||||
collectConst(rootWithoutAlias, constMap, staleConstTExprMap);
|
||||
if (constMap.isEmpty()) {
|
||||
return root;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user