diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index 8d27ea06ea..719bc72b67 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -843,12 +843,6 @@ public class FunctionCallExpr extends Expr { throw new AnalysisException( "COUNT must have DISTINCT for multiple arguments: " + this.toSql()); } - - for (Expr child : children) { - if (child.type.isOnlyMetricType() && !child.type.isComplexType()) { - throw new AnalysisException(Type.OnlyMetricTypeErrorMsg); - } - } return; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java index 3aded3a5d1..a82244f205 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java @@ -28,6 +28,7 @@ import org.apache.doris.common.ErrorReport; import org.apache.doris.common.UserException; import org.apache.doris.qe.ConnectContext; import org.apache.doris.rewrite.ExprRewriter; +import org.apache.doris.rewrite.mvrewrite.CountDistinctToBitmapOrHLLRule; import org.apache.doris.thrift.TQueryOptions; import com.google.common.base.Preconditions; @@ -275,12 +276,18 @@ public abstract class QueryStmt extends StatementBase implements Queriable { } protected Expr rewriteQueryExprByMvColumnExpr(Expr expr, Analyzer analyzer) throws AnalysisException { - if (analyzer == null || analyzer.getMVExprRewriter() == null || forbiddenMVRewrite) { + if (analyzer == null || analyzer.getMVExprRewriter() == null) { return expr; } - ExprRewriter rewriter = analyzer.getMVExprRewriter(); - rewriter.reset(); - rewriter.setInfoMVRewriter(disableTuplesMVRewriter, mvSMap, aliasSMap); + ExprRewriter rewriter; + if (forbiddenMVRewrite) { + rewriter = new ExprRewriter(Lists.newArrayList(CountDistinctToBitmapOrHLLRule.INSTANCE), + Lists.newArrayList()); + } else { + rewriter = analyzer.getMVExprRewriter(); + rewriter.reset(); + rewriter.setInfoMVRewriter(disableTuplesMVRewriter, mvSMap, aliasSMap); + } rewriter.setUpBottom(); Expr result = rewriter.rewrite(expr, analyzer); diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateMaterializedViewStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateMaterializedViewStmtTest.java index 8d5785173f..2692b35ab7 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateMaterializedViewStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateMaterializedViewStmtTest.java @@ -62,22 +62,6 @@ public class CreateMaterializedViewStmtTest { } - @Test - public void testFunctionColumnInSelectClause(@Injectable ArithmeticExpr arithmeticExpr) throws UserException { - SelectList selectList = new SelectList(); - SelectListItem selectListItem = new SelectListItem(arithmeticExpr, null); - selectList.addItem(selectListItem); - FromClause fromClause = new FromClause(); - SelectStmt selectStmt = new SelectStmt(selectList, fromClause, null, null, null, null, LimitElement.NO_LIMIT); - CreateMaterializedViewStmt createMaterializedViewStmt = new CreateMaterializedViewStmt("test", selectStmt, null); - try { - createMaterializedViewStmt.analyze(analyzer); - Assert.fail(); - } catch (UserException e) { - System.out.print(e.getMessage()); - } - } - @Disabled public void testCountDistinct(@Injectable SlotRef slotRef, @Injectable ArithmeticExpr arithmeticExpr, @Injectable SelectStmt selectStmt, @Injectable Column column, diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java index fa7fba5748..c39724efb4 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java @@ -458,7 +458,7 @@ public class QueryPlanTest extends TestWithFeService { assertSQLPlanOrErrorMsgContains( "select count(id2) from test.bitmap_table;", - Type.OnlyMetricTypeErrorMsg + "No matching function with signature" ); assertSQLPlanOrErrorMsgContains( @@ -507,7 +507,7 @@ public class QueryPlanTest extends TestWithFeService { assertSQLPlanOrErrorMsgContains( "select count(id2) from test.hll_table;", - Type.OnlyMetricTypeErrorMsg + "No matching function with signature" ); assertSQLPlanOrErrorMsgContains( @@ -650,7 +650,7 @@ public class QueryPlanTest extends TestWithFeService { ConnectContext.get().getSessionVariable().setRewriteCountDistinct(false); sql = "select /*+ SET_VAR(enable_nereids_planner=false) */ count(distinct id2) from test.bitmap_table"; explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains(Type.OnlyMetricTypeErrorMsg)); + Assert.assertTrue(explainString.contains("No matching function with signature")); } @Test