From c1c12e9c89e12377facc574e036eb2e330e0a0e9 Mon Sep 17 00:00:00 2001 From: LiBinfeng <1204975323@qq.com> Date: Tue, 8 Oct 2024 15:00:50 +0800 Subject: [PATCH 1/2] [Fix](Nereids) ignore match expression logging warning message --- .../expression/rules/FoldConstantRuleOnBE.java | 2 +- .../glue/translator/ExpressionTranslatorTest.java | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java index 810d281ac579ac..5c3c8f5512d90f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java @@ -192,7 +192,7 @@ private static Expression replace( private static void collectConst(Expression expr, Map constMap, Map tExprMap, IdGenerator idGenerator) { - if (expr.isConstant() && !shouldSkipFold(expr)) { + if (expr.isConstant() && !expr.anyMatch(e -> shouldSkipFold((Expression) e))) { String id = idGenerator.getNextId().toString(); constMap.put(id, expr); Expr staleExpr; diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/glue/translator/ExpressionTranslatorTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/glue/translator/ExpressionTranslatorTest.java index cdea9eea5d3162..ccfbce80589832 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/glue/translator/ExpressionTranslatorTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/glue/translator/ExpressionTranslatorTest.java @@ -23,9 +23,12 @@ import org.apache.doris.analysis.IntLiteral; import org.apache.doris.catalog.Function.NullableMode; import org.apache.doris.catalog.Type; -import org.apache.doris.common.AnalysisException; +import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.trees.expressions.BitNot; +import org.apache.doris.nereids.trees.expressions.MatchAny; import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral; +import org.apache.doris.nereids.trees.expressions.literal.NullLiteral; +import org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -33,7 +36,7 @@ public class ExpressionTranslatorTest { @Test - public void testUnaryArithmetic() throws AnalysisException { + public void testUnaryArithmetic() throws Exception { BitNot bitNot = new BitNot(new IntegerLiteral(1)); ExpressionTranslator translator = ExpressionTranslator.INSTANCE; Expr actual = translator.visitUnaryArithmetic(bitNot, null); @@ -41,4 +44,11 @@ public void testUnaryArithmetic() throws AnalysisException { new IntLiteral(1, Type.INT), null, Type.INT, NullableMode.DEPEND_ON_ARGUMENT); Assertions.assertEquals(actual, expected); } + + @Test + public void testMatch() { + MatchAny matchAny = new MatchAny(new VarcharLiteral("collections"), new NullLiteral()); + ExpressionTranslator translator = ExpressionTranslator.INSTANCE; + Assertions.assertThrows(AnalysisException.class, () -> translator.visitMatch(matchAny, null)); + } } From 096c230ddfabf078d6ad35e276405178e33da579 Mon Sep 17 00:00:00 2001 From: LiBinfeng <1204975323@qq.com> Date: Mon, 14 Oct 2024 16:00:02 +0800 Subject: [PATCH 2/2] fix p0 --- .../rules/expression/rules/FoldConstantRuleOnBE.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java index 5c3c8f5512d90f..fc6112834a0ca1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java @@ -192,7 +192,7 @@ private static Expression replace( private static void collectConst(Expression expr, Map constMap, Map tExprMap, IdGenerator idGenerator) { - if (expr.isConstant() && !expr.anyMatch(e -> shouldSkipFold((Expression) e))) { + if (expr.isConstant() && !expr.isLiteral() && !expr.anyMatch(e -> shouldSkipFold((Expression) e))) { String id = idGenerator.getNextId().toString(); constMap.put(id, expr); Expr staleExpr; @@ -218,11 +218,6 @@ private static void collectConst(Expression expr, Map constM // Some expressions should not do constant folding private static boolean shouldSkipFold(Expression expr) { - // Skip literal expr - if (expr.isLiteral()) { - return true; - } - // Frontend can not represent those types if (expr.getDataType().isAggStateType() || expr.getDataType().isObjectType() || expr.getDataType().isVariantType() || expr.getDataType().isTimeLikeType()