This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch dev-1.0.1 in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit 9a7d70b2f097d0c29ba85dca18f72018503cf71a Author: Kikyou1997 <33112463+kikyou1...@users.noreply.github.com> AuthorDate: Thu Jun 2 23:43:13 2022 +0800 [fix] fix invalid SQL rewrite for field in materialized view (#9877) --- .../apache/doris/rewrite/mvrewrite/CountFieldToSum.java | 16 +++++++++------- .../doris/planner/MaterializedViewFunctionTest.java | 10 ++++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/rewrite/mvrewrite/CountFieldToSum.java b/fe/fe-core/src/main/java/org/apache/doris/rewrite/mvrewrite/CountFieldToSum.java index ec3ce7e670..0b06cd52eb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/rewrite/mvrewrite/CountFieldToSum.java +++ b/fe/fe-core/src/main/java/org/apache/doris/rewrite/mvrewrite/CountFieldToSum.java @@ -22,7 +22,6 @@ import org.apache.doris.analysis.CreateMaterializedViewStmt; import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.FunctionCallExpr; import org.apache.doris.analysis.SlotRef; -import org.apache.doris.analysis.TableName; import org.apache.doris.catalog.Column; import org.apache.doris.catalog.FunctionSet; import org.apache.doris.catalog.OlapTable; @@ -81,15 +80,18 @@ public class CountFieldToSum implements ExprRewriteRule { } // rewrite expr - return rewriteExpr(fnChild0, mvColumn, analyzer); + return rewriteExpr(mvColumn, analyzer); } - private Expr rewriteExpr(SlotRef queryColumnSlotRef, Column mvColumn, Analyzer analyzer) { + private Expr rewriteExpr(Column mvColumn, Analyzer analyzer) { Preconditions.checkNotNull(mvColumn); - Preconditions.checkNotNull(queryColumnSlotRef); - TableName tableName = queryColumnSlotRef.getTableName(); - Preconditions.checkNotNull(tableName); - SlotRef mvSlotRef = new SlotRef(tableName, mvColumn.getName()); + // Notice that we shouldn't set table name field of mvSlotRef here, for we will analyze the new mvSlotRef + // later, if the table name was set here, the Analyzer::registerColumnRef would invoke + // Analyzer::resolveColumnRef(TableName, String) which only try to find the column from the tupleByAlias, + // as at the most time the alias is not equal with the origin table name, so it would cause the unexpected + // exception to Unknown column, because we can't find an alias which named as origin table name that has + // required column. + SlotRef mvSlotRef = new SlotRef(null, mvColumn.getName()); List<Expr> newFnParams = Lists.newArrayList(); newFnParams.add(mvSlotRef); FunctionCallExpr result = new FunctionCallExpr("sum", newFnParams); diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java index a980ff9a67..1e34a47b84 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java @@ -850,4 +850,14 @@ public class MaterializedViewFunctionTest { dorisAssert.query(query).explainContains("mv"); dorisAssert.dropTable("agg_table", true); } + + @Test + public void testSelectMVWithTableAlias() throws Exception { + String createUserTagMVSql = "create materialized view " + USER_TAG_MV_NAME + " as select user_id, " + + "count(tag_id) from " + USER_TAG_TABLE_NAME + " group by user_id;"; + dorisAssert.withMaterializedView(createUserTagMVSql); + String query = "select count(tag_id) from " + USER_TAG_TABLE_NAME + " t ;"; + String mvColumnName = CreateMaterializedViewStmt.mvColumnBuilder(FunctionSet.COUNT, "tag_id"); + dorisAssert.query(query).explainContains(USER_TAG_MV_NAME, mvColumnName); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org