diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java index d2994393e38cc0..cd635649fd1a68 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java +++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java @@ -613,7 +613,7 @@ public String toSql(int depth) { StringBuilder stringBuilder = new StringBuilder(); switch (type) { case CHAR: - if (isWildcardVarchar()) { + if (isWildcardChar()) { stringBuilder.append("character"); } else if (Strings.isNullOrEmpty(lenStr)) { stringBuilder.append("char").append("(").append(len).append(")"); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index 01351eed6f778b..b3ced6d92cdc6d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -532,8 +532,14 @@ public void analyze(Analyzer analyzer) throws UserException { // remove excepted columns resultExprs.removeIf(expr -> exceptCols.contains(expr.toColumnLabel())); colLabels.removeIf(exceptCols::contains); + if (needToSql) { + originalExpr = Expr.cloneList(resultExprs); + } } else { + if (needToSql) { + originalExpr = new ArrayList<>(); + } for (SelectListItem item : selectList.getItems()) { if (item.isStar()) { TableName tblName = item.getTblName(); @@ -543,6 +549,11 @@ public void analyze(Analyzer analyzer) throws UserException { expandStar(analyzer, tblName); } } else { + // save originalExpr before being analyzed + // because analyze may change the expr by adding cast or some other stuff + if (needToSql) { + originalExpr.add(item.getExpr().clone()); + } // Analyze the resultExpr before generating a label to ensure enforcement // of expr child and depth limits (toColumn() label may call toSql()). item.getExpr().analyze(analyzer); @@ -603,10 +614,6 @@ public void analyze(Analyzer analyzer) throws UserException { colLabels.add("col_" + colLabels.size()); } } - // analyze valueList if exists - if (needToSql) { - originalExpr = Expr.cloneList(resultExprs); - } // analyze selectListExprs Expr.analyze(resultExprs, analyzer); @@ -1208,6 +1215,9 @@ private void expandStar(TableName tblName, TupleDescriptor desc) throws Analysis slot.setTable(desc.getTable()); slot.setTupleId(desc.getId()); resultExprs.add(rewriteQueryExprByMvColumnExpr(slot, analyzer)); + if (needToSql) { + originalExpr.add(slot); + } colLabels.add(col.getName()); } } @@ -2458,6 +2468,9 @@ public void substituteSelectList(Analyzer analyzer, List newColLabels) tblRef.analyze(analyzer); leftTblRef = tblRef; } + if (needToSql) { + originalExpr = new ArrayList<>(); + } // populate selectListExprs, aliasSMap, and colNames for (SelectListItem item : selectList.getItems()) { if (item.isStar()) { @@ -2468,6 +2481,11 @@ public void substituteSelectList(Analyzer analyzer, List newColLabels) expandStar(analyzer, tblName); } } else { + if (needToSql) { + // save originalExpr before being analyzed + // because analyze may change the expr by adding cast or some other stuff + originalExpr.add(item.getExpr().clone()); + } // to make sure the sortinfo's AnalyticExpr and resultExprs's AnalyticExpr analytic once if (item.getExpr() instanceof AnalyticExpr) { item.getExpr().analyze(analyzer); @@ -2481,9 +2499,7 @@ public void substituteSelectList(Analyzer analyzer, List newColLabels) resultExprs.add(rewriteQueryExprByMvColumnExpr(item.getExpr(), analyzer)); } } - if (needToSql) { - originalExpr = Expr.cloneList(resultExprs); - } + // substitute group by if (groupByClause != null) { boolean aliasFirst = false; diff --git a/regression-test/suites/view_p0/view_p0.groovy b/regression-test/suites/view_p0/view_p0.groovy index a1df7e07cf4d20..79644fa73deb41 100644 --- a/regression-test/suites/view_p0/view_p0.groovy +++ b/regression-test/suites/view_p0/view_p0.groovy @@ -136,4 +136,32 @@ suite("view_p0") { sql """CREATE VIEW IF NOT EXISTS `test_view_abc`(`a`) AS WITH T1 AS (SELECT 1 AS 'a'), T2 AS (SELECT 2 AS 'a') SELECT T1.a FROM T1 UNION ALL SELECT T2.a FROM T2;""" sql "drop view if exists test_view_abc;" + + sql """DROP TABLE IF EXISTS test_view_table2""" + + sql """ + CREATE TABLE test_view_table2 ( + c_date varchar(50) + ) + ENGINE=OLAP + UNIQUE KEY(`c_date`) + distributed by hash(c_date) properties('replication_num'='1'); + """ + + sql """ drop view if exists test_view_table2_view;""" + sql """CREATE VIEW `test_view_table2_view` + AS + SELECT + date_format(c_date,'%Y-%m-%d') AS `CREATE_DATE` + FROM + test_view_table2 + GROUP BY + date_format(c_date, '%Y-%m-%d'); + """ + sql """set enable_nereids_planner=false;""" + sql """select * from test_view_table2_view;""" + sql """set enable_nereids_planner=true;""" + sql """select * from test_view_table2_view;""" + sql """ drop view if exists test_view_table2_view;""" + sql """DROP TABLE IF EXISTS test_view_table2""" }