This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new b07ea89aaee branch-2.1: [Fix](nereids) fix create view and alter view 
using old parser checking #43263 (#44456)
b07ea89aaee is described below

commit b07ea89aaee20e2264455827c92a7261cceb2187
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Nov 27 20:12:12 2024 +0800

    branch-2.1: [Fix](nereids) fix create view and alter view using old parser 
checking #43263 (#44456)
    
    Cherry-picked from #43263
    
    Co-authored-by: feiniaofeiafei <[email protected]>
---
 .../main/java/org/apache/doris/alter/Alter.java    |   5 -
 .../org/apache/doris/analysis/BaseViewStmt.java    |  26 ++
 .../main/java/org/apache/doris/catalog/Env.java    |   7 -
 .../trees/plans/commands/info/AlterViewInfo.java   |  14 +-
 .../trees/plans/commands/info/BaseViewInfo.java    |   4 +
 .../trees/plans/commands/info/CreateViewInfo.java  |  11 +-
 .../create_view_nereids/create_view_use_mv.out     |  15 +
 .../test_create_view_nereids.out                   | 397 +++++++++++++++++++++
 .../data/ddl_p0/test_create_view_nereids.out       | 397 ---------------------
 .../create_view_nereids/create_view_use_mv.groovy  |  95 +++++
 .../test_create_view_nereids.groovy                |   0
 11 files changed, 548 insertions(+), 423 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
index b7801cc3ba9..5c0390e84e0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
@@ -666,11 +666,6 @@ public class Alter {
             view.writeLockOrDdlException();
             try {
                 view.setInlineViewDefWithSqlMode(inlineViewDef, sqlMode);
-                try {
-                    view.init();
-                } catch (UserException e) {
-                    throw new DdlException("failed to init view stmt, reason=" 
+ e.getMessage());
-                }
                 view.setNewFullSchema(newFullSchema);
                 String viewName = view.getName();
                 db.unregisterTable(viewName);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/BaseViewStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/BaseViewStmt.java
index e265703128d..d33c234af11 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BaseViewStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BaseViewStmt.java
@@ -21,20 +21,24 @@ import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.UserException;
+import org.apache.doris.common.util.SqlParserUtils;
 import org.apache.doris.common.util.ToSqlContext;
 import org.apache.doris.datasource.InternalCatalog;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.qe.ConnectContext;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.io.StringReader;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -147,6 +151,7 @@ public class BaseViewStmt extends DdlStmt {
                 // we don't need the slot id info, so using ToSqlContext to 
remove it.
                 toSqlContext.setNeedSlotRefId(false);
                 inlineViewDef = viewDefStmt.toSql();
+                checkInlineViewDef();
             }
             return;
         }
@@ -161,6 +166,7 @@ public class BaseViewStmt extends DdlStmt {
             // we don't need the slot id info, so using ToSqlContext to remove 
it.
             toSqlContext.setNeedSlotRefId(false);
             inlineViewDef = cloneStmt.toSql();
+            checkInlineViewDef();
         }
     }
 
@@ -172,4 +178,24 @@ public class BaseViewStmt extends DdlStmt {
             throw new AnalysisException("Not support OUTFILE clause in CREATE 
VIEW statement");
         }
     }
+
+    private void checkInlineViewDef() throws UserException {
+        Preconditions.checkNotNull(inlineViewDef);
+        SqlScanner input = new SqlScanner(new StringReader(inlineViewDef),
+                ConnectContext.get().getSessionVariable().getSqlMode());
+        SqlParser parser = new SqlParser(input);
+        ParseNode node;
+        try {
+            node = SqlParserUtils.getFirstStmt(parser);
+        } catch (Exception e) {
+            throw new DdlException(
+                    String.format("Failed to parse view-definition statement 
of view: %s, stmt is %s, reason is %s",
+                            tableName, inlineViewDef, e.getMessage()));
+        }
+        // Make sure the view definition parses to a query statement.
+        if (!(node instanceof QueryStmt)) {
+            throw new DdlException(String.format("View definition of %s "
+                    + "is not a query statement", tableName));
+        }
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index de76d445ca7..a0624c407ae 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -5358,13 +5358,6 @@ public class Env {
             newView.setComment(stmt.getComment());
             newView.setInlineViewDefWithSqlMode(stmt.getInlineViewDef(),
                     ConnectContext.get().getSessionVariable().getSqlMode());
-            // init here in case the stmt string from view.toSql() has some 
syntax error.
-            try {
-                newView.init();
-            } catch (UserException e) {
-                throw new DdlException("failed to init view stmt, reason=" + 
e.getMessage());
-            }
-
             if (!((Database) db).createTableWithLock(newView, false, 
stmt.isSetIfNotExists()).first) {
                 throw new DdlException("Failed to create view[" + tableName + 
"].");
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
index b5e47bc0770..f065e292e82 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
@@ -77,18 +77,16 @@ public class AlterViewInfo extends BaseViewInfo {
 
     /**translateToLegacyStmt*/
     public AlterViewStmt translateToLegacyStmt(ConnectContext ctx) {
-        List<ColWithComment> cols = Lists.newArrayList();
-        for (SimpleColumnDefinition def : simpleColumnDefinitions) {
-            cols.add(def.translateToColWithComment());
-        }
-        AlterViewStmt alterViewStmt = new 
AlterViewStmt(viewName.transferToTableName(), cols,
-                null);
         // expand star(*) in project list and replace table name with qualifier
         String rewrittenSql = 
rewriteSql(ctx.getStatementContext().getIndexInSqlToString(), querySql);
-
         // rewrite project alias
         rewrittenSql = rewriteProjectsToUserDefineAlias(rewrittenSql);
-
+        checkViewSql(rewrittenSql);
+        List<ColWithComment> cols = Lists.newArrayList();
+        for (SimpleColumnDefinition def : simpleColumnDefinitions) {
+            cols.add(def.translateToColWithComment());
+        }
+        AlterViewStmt alterViewStmt = new 
AlterViewStmt(viewName.transferToTableName(), cols, null);
         alterViewStmt.setInlineViewDef(rewrittenSql);
         alterViewStmt.setFinalColumns(finalCols);
         return alterViewStmt;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BaseViewInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BaseViewInfo.java
index b8332a256ef..ad8870fb367 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BaseViewInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BaseViewInfo.java
@@ -428,4 +428,8 @@ public class BaseViewInfo {
             return null;
         }
     }
+
+    protected void checkViewSql(String viewSql) {
+        new NereidsParser().parseSingle(viewSql);
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
index 93c287885ec..c9253b224af 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
@@ -72,18 +72,17 @@ public class CreateViewInfo extends BaseViewInfo {
 
     /**translateToLegacyStmt*/
     public CreateViewStmt translateToLegacyStmt(ConnectContext ctx) {
+        // expand star(*) in project list and replace table name with qualifier
+        String rewrittenSql = 
rewriteSql(ctx.getStatementContext().getIndexInSqlToString(), querySql);
+        // rewrite project alias
+        rewrittenSql = rewriteProjectsToUserDefineAlias(rewrittenSql);
+        checkViewSql(rewrittenSql);
         List<ColWithComment> cols = Lists.newArrayList();
         for (SimpleColumnDefinition def : simpleColumnDefinitions) {
             cols.add(def.translateToColWithComment());
         }
         CreateViewStmt createViewStmt = new CreateViewStmt(ifNotExists, 
orReplace, viewName.transferToTableName(), cols,
                 comment, null);
-        // expand star(*) in project list and replace table name with qualifier
-        String rewrittenSql = 
rewriteSql(ctx.getStatementContext().getIndexInSqlToString(), querySql);
-
-        // rewrite project alias
-        rewrittenSql = rewriteProjectsToUserDefineAlias(rewrittenSql);
-
         createViewStmt.setInlineViewDef(rewrittenSql);
         createViewStmt.setFinalColumns(finalCols);
         return createViewStmt;
diff --git 
a/regression-test/data/ddl_p0/create_view_nereids/create_view_use_mv.out 
b/regression-test/data/ddl_p0/create_view_nereids/create_view_use_mv.out
new file mode 100644
index 00000000000..c4df7484022
--- /dev/null
+++ b/regression-test/data/ddl_p0/create_view_nereids/create_view_use_mv.out
@@ -0,0 +1,15 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !create_view_from_mv --
+\N     99.50   99.50   99.50   1       \N      \N      \N      \N      1       
\N      \N
+1      208.70  109.20  99.50   3       1       3       1       1       3       
\N      \N
+2      218.40  109.20  109.20  2       2       2       2       2       1       
\N      \N
+3      298.50  99.50   99.50   3       3       6       3       3       2       
\N      \N
+4      99.50   99.50   99.50   1       \N      4       4       4       1       
\N      \N
+
+-- !alter_view_from_mv --
+\N     99.50   99.50   99.50   1       \N      \N      \N      \N      1       
\N      \N
+1      208.70  109.20  99.50   3       1       3       1       1       3       
\N      \N
+2      218.40  109.20  109.20  2       2       2       2       2       1       
\N      \N
+3      298.50  99.50   99.50   3       3       6       3       3       2       
\N      \N
+4      99.50   99.50   99.50   1       \N      4       4       4       1       
\N      \N
+
diff --git 
a/regression-test/data/ddl_p0/create_view_nereids/test_create_view_nereids.out 
b/regression-test/data/ddl_p0/create_view_nereids/test_create_view_nereids.out
new file mode 100644
index 00000000000..5bdfe66d5aa
--- /dev/null
+++ 
b/regression-test/data/ddl_p0/create_view_nereids/test_create_view_nereids.out
@@ -0,0 +1,397 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !test_view_1 --
+1      [1, 2, 3]
+2      [10, -2, 8]
+3      [-1, 20, 0]
+
+-- !test_view_2 --
+1      [1, 2, 3]       [1, 1, 1]
+2      [10, -2, 8]     [1, 0, 1]
+3      [-1, 20, 0]     [0, 1, 0]
+
+-- !test_view_3 --
+1      [1, 2, 3]       [1, 2, 3]       [1, 2, 3]
+2      [10, -2, 8]     [10, 8] [10, 8]
+3      [-1, 20, 0]     [20]    [20]
+
+-- !test_view_4 --
+1      [1, 2, 3]       [1, 2, 3]       [1, 2, 3]
+2      [10, -2, 8]     [10, 8] [10, 8]
+3      [-1, 20, 0]     [20]    [20]
+
+-- !test_view_5 --
+1      [1, 2, 3]       [1, 1, 1]
+2      [10, -2, 8]     [1, 0, 1]
+3      [-1, 20, 0]     [0, 1, 0]
+
+-- !test_view_6 --
+v1     CREATE VIEW `v1` AS SELECT\n      
`internal`.`regression_test_ddl_p0_create_view_nereids`.`view_column_name_test_nereids`.`error_code`,
 \n      1, \n      'string', \n      now(), \n      
dayofyear(`internal`.`regression_test_ddl_p0_create_view_nereids`.`view_column_name_test_nereids`.`op_time`),
 \n      cast 
(`internal`.`regression_test_ddl_p0_create_view_nereids`.`view_column_name_test_nereids`.`source`
 AS BIGINT), \n      
min(`internal`.`regression_test_ddl_p0_create_view_nereids`. [...]
+
+-- !test_with_as --
+1      1       2
+1      1       4
+1      3       6
+2      1       3
+2      1       4
+2      1       7
+2      3       5
+2      3       9
+2      4       2
+3      2       8
+3      5       \N
+3      5       6
+3      5       6
+3      5       8
+4      5       6
+6      \N      6
+6      7       1
+
+-- !test_with_as_sql --
+test_view_with_as      CREATE VIEW `test_view_with_as` AS (\n            with 
`t1` as (select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`pk`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b` 
from `internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`),  
`t2` as (select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`pk` 
[...]
+
+-- !test_union --
+1      1       2
+1      1       2
+1      1       4
+1      1       4
+1      3       6
+1      3       6
+2      1       3
+2      1       3
+2      1       4
+2      1       4
+2      1       7
+2      1       7
+2      3       5
+2      3       5
+2      3       9
+2      3       9
+2      4       2
+2      4       2
+3      2       8
+3      2       8
+3      5       \N
+3      5       \N
+3      5       6
+3      5       6
+3      5       6
+3      5       6
+3      5       8
+3      5       8
+4      5       6
+4      5       6
+6      \N      6
+6      \N      6
+6      7       1
+6      7       1
+
+-- !test_union_sql --
+test_view_union        CREATE VIEW `test_view_union` AS (select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`pk` AS 
`c1`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a` AS 
`c2`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b` AS 
`c3` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view` Union 
all SELECT 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`pk`, 
`interna [...]
+
+-- !test_count_star --
+17
+
+-- !test_count_star_sql --
+test_view_count_star   CREATE VIEW `test_view_count_star` AS (select count(*) 
AS `c1` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view` having 
count(*) > 0);       utf8mb4 utf8mb4_0900_bin
+
+-- !test_expression --
+\N     \N      6
+2      4       2
+2      4       3
+2      4       4
+2      4       4
+2      4       7
+3      5       8
+4      6       5
+4      6       6
+4      6       9
+5      7       2
+6      8       \N
+6      8       6
+6      8       6
+6      8       6
+6      8       8
+8      10      1
+
+-- !test_expression_sql --
+test_view_expression   CREATE VIEW `test_view_expression` AS (select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`+1 
AS `c1`, 
abs(`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`)+2+1
 AS `c2`, 
cast(`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b`
 as varchar(10)) AS `c3` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`);      
utf8mb4 utf8mb4_0900_bin
+
+-- !test_alias --
+\N     \N      6
+2      4       2
+2      4       3
+2      4       4
+2      4       4
+2      4       7
+3      5       8
+4      6       5
+4      6       6
+4      6       9
+5      7       2
+6      8       \N
+6      8       6
+6      8       6
+6      8       6
+6      8       8
+8      10      1
+
+-- !test_alias_sql --
+test_view_alias        CREATE VIEW `test_view_alias` AS (\n        select 
`t`.`c8` AS `c1`, `t`.`c2` AS `c2`, `t`.`c1` AS `c3` from (select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`+1 
`c8`,abs(`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`)+2+1
 as `c2`, 
cast(`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b`
 as varchar(10)) as `c1` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`) [...]
+
+-- !test_star_except --
+\N     6
+1      2
+1      3
+1      4
+1      4
+1      7
+2      8
+3      5
+3      6
+3      9
+4      2
+5      \N
+5      6
+5      6
+5      6
+5      8
+7      1
+
+-- !test_star_except_sql --
+test_view_star_except  CREATE VIEW `test_view_star_except` AS select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b` 
from `internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`;   
 utf8mb4 utf8mb4_0900_bin
+
+-- !test_create_view_from_view --
+1      1       2
+1      1       4
+1      3       6
+2      1       3
+2      1       4
+2      1       7
+2      3       5
+2      3       9
+2      4       2
+3      2       8
+3      5       \N
+3      5       6
+3      5       6
+3      5       8
+4      5       6
+6      \N      6
+6      7       1
+
+-- !test_create_view_from_view_sql --
+test_view_from_view    CREATE VIEW `test_view_from_view` AS select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`test_view_with_as`.`pk`
 AS `c1`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`test_view_with_as`.`a` 
AS `c2`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`test_view_with_as`.`b` 
AS `c3` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`test_view_with_as`;    
    utf8mb4 utf8mb4_0900_bin
+
+-- !test_backquote_in_view_define --
+\N     6
+1      2
+1      3
+1      4
+1      4
+1      7
+2      8
+3      5
+3      6
+3      9
+4      2
+5      \N
+5      6
+5      6
+5      6
+5      8
+7      1
+
+-- !test_backquote_in_view_define_sql --
+test_backquote_in_view_define  CREATE VIEW `test_backquote_in_view_define` AS 
select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a` AS 
`abc`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b` AS 
`c2` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`;   
utf8mb4 utf8mb4_0900_bin
+
+-- !test_backquote_in_table_alias --
+\N     6
+1      2
+1      3
+1      4
+1      4
+1      7
+2      8
+3      5
+3      6
+3      9
+4      2
+5      \N
+5      6
+5      6
+5      6
+5      8
+7      1
+
+-- !test_backquote_in_table_alias_sql --
+test_backquote_in_table_alias  CREATE VIEW `test_backquote_in_table_alias` AS 
select `internal`.`regression_test_ddl_p0_create_view_nereids`.`ab``c`.`a` AS 
`c1`, `internal`.`regression_test_ddl_p0_create_view_nereids`.`ab``c`.`b` AS 
`c2` from (select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`,`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b`
 from `internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`) 
`ab``c`;      utf [...]
+
+-- !test_invalid_column_name_in_table --
+\N     6
+1      2
+1      3
+1      4
+1      4
+1      7
+2      8
+3      5
+3      6
+3      9
+4      2
+5      \N
+5      6
+5      6
+5      6
+5      8
+7      1
+
+-- !test_invalid_column_name_in_table_define_sql --
+test_invalid_column_name_in_table      CREATE VIEW 
`test_invalid_column_name_in_table` AS select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a` 
,`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b` 
from `internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`;   
     utf8mb4 utf8mb4_0900_bin
+
+-- !test_generate --
+1      10      A       30
+1      10      A       60
+2      20      B       30
+2      20      B       60
+3      30      C       30
+3      30      C       60
+4      40      D       30
+4      40      D       60
+
+-- !test_generate_sql --
+test_view_generate     CREATE VIEW `test_view_generate` AS select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`,
 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`value1`,
 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`value2`,
 `t1`.`age` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1` 
lateral view EXPLODE(ARRAY(30,60)) `t1` as `age`;      utf8mb4 utf8mb4_0900_bin
+
+-- !test_generate_with_column --
+1      10      A       0
+2      20      B       0
+2      20      B       1
+3      30      C       0
+3      30      C       1
+3      30      C       2
+4      40      D       0
+4      40      D       1
+4      40      D       2
+4      40      D       3
+
+-- !test_generate_with_column_sql --
+test_view_generate_with_column CREATE VIEW `test_view_generate_with_column` AS 
select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`,
 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`value1`,
 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`value2`,
 `t1`.`age` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1` 
lateral view EXPLODE_numbers(`internal`.`regression_test [...]
+
+-- !test_col_alias --
+1      10
+2      20
+3      30
+4      40
+
+-- !test_col_alias_sql --
+test_view_col_alias    CREATE VIEW `test_view_col_alias` AS select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`
 as `c1`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`value1`
 as `c2` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`; 
utf8mb4 utf8mb4_0900_bin
+
+-- !test_col_alias_with_specific_name --
+1      10
+2      20
+3      30
+4      40
+
+-- !test_col_alias_with_specific_name_sql --
+test_view_col_alias_specific_name      CREATE VIEW 
`test_view_col_alias_specific_name` AS select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`
 AS `col1`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`value1`
 AS `col2` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`;   
    utf8mb4 utf8mb4_0900_bin
+
+-- !test_table_alias --
+1      10
+2      20
+3      30
+4      40
+
+-- !test_table_alias_sql --
+test_view_table_alias  CREATE VIEW `test_view_table_alias` AS select `t`.`c1`, 
`t`.`c2` from (\n            select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`
 as `c1`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`value1`
 as `c2` from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1` 
limit 10) as `t`;        utf8mb4 utf8mb4_0900_bin
+
+-- !test_join_table_alias --
+1      10
+2      20
+3      30
+4      40
+
+-- !test_join_table_alias_sql --
+test_view_join_table_alias     CREATE VIEW `test_view_join_table_alias` AS 
select `t`.`c1`, `t`.`c2` from (\n            select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`t1`.`id` as `c1`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`t1`.`value1` as `c2` 
from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1` 
`t1` inner join 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table2` 
`t2` on `internal`.`regression_test_ddl_ [...]
+
+-- !test_alias_udf --
+1****1 1
+2****2 2
+3****3 3
+4****4 4
+
+-- !test_alias_udf_sql --
+test_view_alias_udf    CREATE VIEW `test_view_alias_udf` AS (select 
`regression_test_ddl_p0_create_view_nereids`.`alias_function_create_view_test`(`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`)
 as 
`c1`,abs(`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`)
 from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`);  
     utf8mb4 utf8mb4_0900_bin
+
+-- !test_alias_with_db_udf --
+1****1 1
+2****2 2
+3****3 3
+4****4 4
+
+-- !test_alias_with_db_udf_sql --
+test_view_alias_udf_with_db    CREATE VIEW `test_view_alias_udf_with_db` AS 
(select 
`regression_test_ddl_p0_create_view_nereids`.`alias_function_create_view_test`(`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`)
 as 
`c1`,abs(`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`)
 from 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`);  
     utf8mb4 utf8mb4_0900_bin
+
+-- !test_udf_sql --
+test_view_udf  CREATE VIEW `test_view_udf` AS (select 
`regression_test_ddl_p0_create_view_nereids`.`alias_function_create_view_test`(`internal`.`regression_test_ddl_p0_create_view_nereids`.`create_view_table1`.`id`)
 as `c1`, 
`regression_test_ddl_p0_create_view_nereids`.`java_udf_create_view_test`('2011-01-01','2011-01-02'),\n
        
`regression_test_ddl_p0_create_view_nereids`.`java_udf_create_view_test`('2011-01-01','2011-01-03')
 from `internal`.`regression_test_ddl_p0_create_view_nereid [...]
+
+-- !test_udf --
+1****1 false   false
+2****2 false   false
+3****3 false   false
+4****4 false   false
+
+-- !test_with_as_with_columns --
+1      1       2
+1      1       4
+1      3       6
+2      1       3
+2      1       4
+2      1       7
+2      3       5
+2      3       9
+2      4       2
+3      2       8
+3      5       \N
+3      5       6
+3      5       6
+3      5       8
+4      5       6
+6      \N      6
+6      7       1
+
+-- !test_with_as_with_columns_sql --
+test_view_with_as_with_columns CREATE VIEW `test_view_with_as_with_columns` AS 
(\n            with `t1`(`c1`,`c2`,`c3`) as (select 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`pk`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`b` 
from `internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`),  
`t2` as (select `internal`.`regression_test_ddl_p0 [...]
+
+-- !test_having --
+2      2
+3      3
+4      2
+4      4
+5      5
+6      3
+7      7
+8      4
+9      3
+10     5
+14     7
+15     5
+
+-- !test_having_sql --
+test_having    CREATE VIEW `test_having` AS select 
sum(`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a`)
 over(partition by 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a` 
order by 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`pk`) 
as `c1` , 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view`.`a` 
from `internal`.`regression_test_ddl_p0_create_view_nereids`.`mal_test_view` 
group by grouping s [...]
+
+-- !complicated_view1 --
+1      100     1
+2      200     1
+
+-- !complicated_view1_sql --
+test_view_complicated  CREATE VIEW `test_view_complicated` AS SELECT 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`t`.`id`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`t`.`value3`, 
`t`.`row_num` FROM (\n        SELECT 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`t1`.`id`, 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`tt`.`value3`, 
ROW_NUMBER() OVER (PARTITION BY 
`internal`.`regression_test_ddl_p0_create_view_nereids`.`t1`.`id` ORDER BY 
`inter [...]
+
+-- !nullable --
+1      小区A     10      1       2024-09-01T09:00        2024-09-01T10:00
+2      小区B     11      1       2024-09-01T09:00        2024-09-01T10:00
+3      小区C     \N      1       2024-09-01T09:00        2024-09-01T10:00
+
+-- !nullable_view_with_cols --
+1      小区A     10      1       2024-09-01T09:00        2024-09-01T10:00
+2      小区B     11      1       2024-09-01T09:00        2024-09-01T10:00
+3      小区C     \N      1       2024-09-01T09:00        2024-09-01T10:00
+
diff --git a/regression-test/data/ddl_p0/test_create_view_nereids.out 
b/regression-test/data/ddl_p0/test_create_view_nereids.out
deleted file mode 100644
index 1b2ba19d937..00000000000
--- a/regression-test/data/ddl_p0/test_create_view_nereids.out
+++ /dev/null
@@ -1,397 +0,0 @@
--- This file is automatically generated. You should know what you did if you 
want to edit this
--- !test_view_1 --
-1      [1, 2, 3]
-2      [10, -2, 8]
-3      [-1, 20, 0]
-
--- !test_view_2 --
-1      [1, 2, 3]       [1, 1, 1]
-2      [10, -2, 8]     [1, 0, 1]
-3      [-1, 20, 0]     [0, 1, 0]
-
--- !test_view_3 --
-1      [1, 2, 3]       [1, 2, 3]       [1, 2, 3]
-2      [10, -2, 8]     [10, 8] [10, 8]
-3      [-1, 20, 0]     [20]    [20]
-
--- !test_view_4 --
-1      [1, 2, 3]       [1, 2, 3]       [1, 2, 3]
-2      [10, -2, 8]     [10, 8] [10, 8]
-3      [-1, 20, 0]     [20]    [20]
-
--- !test_view_5 --
-1      [1, 2, 3]       [1, 1, 1]
-2      [10, -2, 8]     [1, 0, 1]
-3      [-1, 20, 0]     [0, 1, 0]
-
--- !test_view_6 --
-v1     CREATE VIEW `v1` AS SELECT\n      
`internal`.`regression_test_ddl_p0`.`view_column_name_test_nereids`.`error_code`,
 \n      1, \n      'string', \n      now(), \n      
dayofyear(`internal`.`regression_test_ddl_p0`.`view_column_name_test_nereids`.`op_time`),
 \n      cast 
(`internal`.`regression_test_ddl_p0`.`view_column_name_test_nereids`.`source` 
AS BIGINT), \n      
min(`internal`.`regression_test_ddl_p0`.`view_column_name_test_nereids`.`timestamp`)
 OVER (\n        ORDER BY \n         [...]
-
--- !test_with_as --
-1      1       2
-1      1       4
-1      3       6
-2      1       3
-2      1       4
-2      1       7
-2      3       5
-2      3       9
-2      4       2
-3      2       8
-3      5       \N
-3      5       6
-3      5       6
-3      5       8
-4      5       6
-6      \N      6
-6      7       1
-
--- !test_with_as_sql --
-test_view_with_as      CREATE VIEW `test_view_with_as` AS (\n            with 
`t1` as (select `internal`.`regression_test_ddl_p0`.`mal_test_view`.`pk`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b` from 
`internal`.`regression_test_ddl_p0`.`mal_test_view`),  `t2` as (select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`pk`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`, 
`internal`.`regression_test_ddl_p0`.`mal_ [...]
-
--- !test_union --
-1      1       2
-1      1       2
-1      1       4
-1      1       4
-1      3       6
-1      3       6
-2      1       3
-2      1       3
-2      1       4
-2      1       4
-2      1       7
-2      1       7
-2      3       5
-2      3       5
-2      3       9
-2      3       9
-2      4       2
-2      4       2
-3      2       8
-3      2       8
-3      5       \N
-3      5       \N
-3      5       6
-3      5       6
-3      5       6
-3      5       6
-3      5       8
-3      5       8
-4      5       6
-4      5       6
-6      \N      6
-6      \N      6
-6      7       1
-6      7       1
-
--- !test_union_sql --
-test_view_union        CREATE VIEW `test_view_union` AS (select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`pk` AS `c1`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a` AS `c2`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b` AS `c3` from 
`internal`.`regression_test_ddl_p0`.`mal_test_view` Union all SELECT 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`pk`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view` [...]
-
--- !test_count_star --
-17
-
--- !test_count_star_sql --
-test_view_count_star   CREATE VIEW `test_view_count_star` AS (select count(*) 
AS `c1` from `internal`.`regression_test_ddl_p0`.`mal_test_view` having 
count(*) > 0);   utf8mb4 utf8mb4_0900_bin
-
--- !test_expression --
-\N     \N      6
-2      4       2
-2      4       3
-2      4       4
-2      4       4
-2      4       7
-3      5       8
-4      6       5
-4      6       6
-4      6       9
-5      7       2
-6      8       \N
-6      8       6
-6      8       6
-6      8       6
-6      8       8
-8      10      1
-
--- !test_expression_sql --
-test_view_expression   CREATE VIEW `test_view_expression` AS (select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`+1 AS `c1`, 
abs(`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`)+2+1 AS `c2`, 
cast(`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b` as varchar(10)) AS 
`c3` from `internal`.`regression_test_ddl_p0`.`mal_test_view`);      utf8mb4 
utf8mb4_0900_bin
-
--- !test_alias --
-\N     \N      6
-2      4       2
-2      4       3
-2      4       4
-2      4       4
-2      4       7
-3      5       8
-4      6       5
-4      6       6
-4      6       9
-5      7       2
-6      8       \N
-6      8       6
-6      8       6
-6      8       6
-6      8       8
-8      10      1
-
--- !test_alias_sql --
-test_view_alias        CREATE VIEW `test_view_alias` AS (\n        select 
`t`.`c8` AS `c1`, `t`.`c2` AS `c2`, `t`.`c1` AS `c3` from (select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`+1 
`c8`,abs(`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`)+2+1 as `c2`, 
cast(`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b` as varchar(10)) as 
`c1` from `internal`.`regression_test_ddl_p0`.`mal_test_view`) `t`);      
utf8mb4 utf8mb4_0900_bin
-
--- !test_star_except --
-\N     6
-1      2
-1      3
-1      4
-1      4
-1      7
-2      8
-3      5
-3      6
-3      9
-4      2
-5      \N
-5      6
-5      6
-5      6
-5      8
-7      1
-
--- !test_star_except_sql --
-test_view_star_except  CREATE VIEW `test_view_star_except` AS select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b` from 
`internal`.`regression_test_ddl_p0`.`mal_test_view`;        utf8mb4 
utf8mb4_0900_bin
-
--- !test_create_view_from_view --
-1      1       2
-1      1       4
-1      3       6
-2      1       3
-2      1       4
-2      1       7
-2      3       5
-2      3       9
-2      4       2
-3      2       8
-3      5       \N
-3      5       6
-3      5       6
-3      5       8
-4      5       6
-6      \N      6
-6      7       1
-
--- !test_create_view_from_view_sql --
-test_view_from_view    CREATE VIEW `test_view_from_view` AS select 
`internal`.`regression_test_ddl_p0`.`test_view_with_as`.`pk` AS `c1`, 
`internal`.`regression_test_ddl_p0`.`test_view_with_as`.`a` AS `c2`, 
`internal`.`regression_test_ddl_p0`.`test_view_with_as`.`b` AS `c3` from 
`internal`.`regression_test_ddl_p0`.`test_view_with_as`;        utf8mb4 
utf8mb4_0900_bin
-
--- !test_backquote_in_view_define --
-\N     6
-1      2
-1      3
-1      4
-1      4
-1      7
-2      8
-3      5
-3      6
-3      9
-4      2
-5      \N
-5      6
-5      6
-5      6
-5      8
-7      1
-
--- !test_backquote_in_view_define_sql --
-test_backquote_in_view_define  CREATE VIEW `test_backquote_in_view_define` AS 
select `internal`.`regression_test_ddl_p0`.`mal_test_view`.`a` AS `abc`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b` AS `c2` from 
`internal`.`regression_test_ddl_p0`.`mal_test_view`;       utf8mb4 
utf8mb4_0900_bin
-
--- !test_backquote_in_table_alias --
-\N     6
-1      2
-1      3
-1      4
-1      4
-1      7
-2      8
-3      5
-3      6
-3      9
-4      2
-5      \N
-5      6
-5      6
-5      6
-5      8
-7      1
-
--- !test_backquote_in_table_alias_sql --
-test_backquote_in_table_alias  CREATE VIEW `test_backquote_in_table_alias` AS 
select `internal`.`regression_test_ddl_p0`.`ab``c`.`a` AS `c1`, 
`internal`.`regression_test_ddl_p0`.`ab``c`.`b` AS `c2` from (select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`,`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b`
 from `internal`.`regression_test_ddl_p0`.`mal_test_view`) `ab``c`;  utf8mb4 
utf8mb4_0900_bin
-
--- !test_invalid_column_name_in_table --
-\N     6
-1      2
-1      3
-1      4
-1      4
-1      7
-2      8
-3      5
-3      6
-3      9
-4      2
-5      \N
-5      6
-5      6
-5      6
-5      8
-7      1
-
--- !test_invalid_column_name_in_table_define_sql --
-test_invalid_column_name_in_table      CREATE VIEW 
`test_invalid_column_name_in_table` AS select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a` 
,`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b` from 
`internal`.`regression_test_ddl_p0`.`mal_test_view`;    utf8mb4 utf8mb4_0900_bin
-
--- !test_generate --
-1      10      A       30
-1      10      A       60
-2      20      B       30
-2      20      B       60
-3      30      C       30
-3      30      C       60
-4      40      D       30
-4      40      D       60
-
--- !test_generate_sql --
-test_view_generate     CREATE VIEW `test_view_generate` AS select 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id`, 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`value1`, 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`value2`, `t1`.`age` 
from `internal`.`regression_test_ddl_p0`.`create_view_table1` lateral view 
EXPLODE(ARRAY(30,60)) `t1` as `age`;      utf8mb4 utf8mb4_0900_bin
-
--- !test_generate_with_column --
-1      10      A       0
-2      20      B       0
-2      20      B       1
-3      30      C       0
-3      30      C       1
-3      30      C       2
-4      40      D       0
-4      40      D       1
-4      40      D       2
-4      40      D       3
-
--- !test_generate_with_column_sql --
-test_view_generate_with_column CREATE VIEW `test_view_generate_with_column` AS 
select `internal`.`regression_test_ddl_p0`.`create_view_table1`.`id`, 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`value1`, 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`value2`, `t1`.`age` 
from `internal`.`regression_test_ddl_p0`.`create_view_table1` lateral view 
EXPLODE_numbers(`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id`) 
`t1` as `age`; utf8mb4 utf8mb4_0900_bin
-
--- !test_col_alias --
-1      10
-2      20
-3      30
-4      40
-
--- !test_col_alias_sql --
-test_view_col_alias    CREATE VIEW `test_view_col_alias` AS select 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id` as `c1`, 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`value1` as `c2` from 
`internal`.`regression_test_ddl_p0`.`create_view_table1`;     utf8mb4 
utf8mb4_0900_bin
-
--- !test_col_alias_with_specific_name --
-1      10
-2      20
-3      30
-4      40
-
--- !test_col_alias_with_specific_name_sql --
-test_view_col_alias_specific_name      CREATE VIEW 
`test_view_col_alias_specific_name` AS select 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id` AS `col1`, 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`value1` AS `col2` 
from `internal`.`regression_test_ddl_p0`.`create_view_table1`;   utf8mb4 
utf8mb4_0900_bin
-
--- !test_table_alias --
-1      10
-2      20
-3      30
-4      40
-
--- !test_table_alias_sql --
-test_view_table_alias  CREATE VIEW `test_view_table_alias` AS select `t`.`c1`, 
`t`.`c2` from (\n            select 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id` as `c1`, 
`internal`.`regression_test_ddl_p0`.`create_view_table1`.`value1` as `c2` from 
`internal`.`regression_test_ddl_p0`.`create_view_table1` limit 10) as `t`;    
utf8mb4 utf8mb4_0900_bin
-
--- !test_join_table_alias --
-1      10
-2      20
-3      30
-4      40
-
--- !test_join_table_alias_sql --
-test_view_join_table_alias     CREATE VIEW `test_view_join_table_alias` AS 
select `t`.`c1`, `t`.`c2` from (\n            select 
`internal`.`regression_test_ddl_p0`.`t1`.`id` as `c1`, 
`internal`.`regression_test_ddl_p0`.`t1`.`value1` as `c2` from 
`internal`.`regression_test_ddl_p0`.`create_view_table1` `t1` inner join 
`internal`.`regression_test_ddl_p0`.`create_view_table2` `t2` on 
`internal`.`regression_test_ddl_p0`.`t1`.`id`=`internal`.`regression_test_ddl_p0`.`t2`.`id`
 limit 10) as `t`;  ut [...]
-
--- !test_alias_udf --
-1****1 1
-2****2 2
-3****3 3
-4****4 4
-
--- !test_alias_udf_sql --
-test_view_alias_udf    CREATE VIEW `test_view_alias_udf` AS (select 
`regression_test_ddl_p0`.`alias_function_create_view_test`(`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id`)
 as `c1`,abs(`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id`) 
from `internal`.`regression_test_ddl_p0`.`create_view_table1`);       utf8mb4 
utf8mb4_0900_bin
-
--- !test_alias_with_db_udf --
-1****1 1
-2****2 2
-3****3 3
-4****4 4
-
--- !test_alias_with_db_udf_sql --
-test_view_alias_udf_with_db    CREATE VIEW `test_view_alias_udf_with_db` AS 
(select 
`regression_test_ddl_p0`.`alias_function_create_view_test`(`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id`)
 as `c1`,abs(`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id`) 
from `internal`.`regression_test_ddl_p0`.`create_view_table1`);       utf8mb4 
utf8mb4_0900_bin
-
--- !test_udf_sql --
-test_view_udf  CREATE VIEW `test_view_udf` AS (select 
`regression_test_ddl_p0`.`alias_function_create_view_test`(`internal`.`regression_test_ddl_p0`.`create_view_table1`.`id`)
 as `c1`, 
`regression_test_ddl_p0`.`java_udf_create_view_test`('2011-01-01','2011-01-02'),\n
        
`regression_test_ddl_p0`.`java_udf_create_view_test`('2011-01-01','2011-01-03') 
from `internal`.`regression_test_ddl_p0`.`create_view_table1`);     utf8mb4 
utf8mb4_0900_bin
-
--- !test_udf --
-1****1 false   false
-2****2 false   false
-3****3 false   false
-4****4 false   false
-
--- !test_with_as_with_columns --
-1      1       2
-1      1       4
-1      3       6
-2      1       3
-2      1       4
-2      1       7
-2      3       5
-2      3       9
-2      4       2
-3      2       8
-3      5       \N
-3      5       6
-3      5       6
-3      5       8
-4      5       6
-6      \N      6
-6      7       1
-
--- !test_with_as_with_columns_sql --
-test_view_with_as_with_columns CREATE VIEW `test_view_with_as_with_columns` AS 
(\n            with `t1`(`c1`,`c2`,`c3`) as (select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`pk`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`b` from 
`internal`.`regression_test_ddl_p0`.`mal_test_view`),  `t2` as (select 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`pk`, 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`, [...]
-
--- !test_having --
-2      2
-3      3
-4      2
-4      4
-5      5
-6      3
-7      7
-8      4
-9      3
-10     5
-14     7
-15     5
-
--- !test_having_sql --
-test_having    CREATE VIEW `test_having` AS select 
sum(`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`) over(partition by 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a` order by 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`pk`) as `c1` , 
`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a` from 
`internal`.`regression_test_ddl_p0`.`mal_test_view` group by grouping 
sets((`internal`.`regression_test_ddl_p0`.`mal_test_view`.`a`),(`internal`.`regression_test_ddl_p0`.`
 [...]
-
--- !complicated_view1 --
-1      100     1
-2      200     1
-
--- !complicated_view1_sql --
-test_view_complicated  CREATE VIEW `test_view_complicated` AS SELECT 
`internal`.`regression_test_ddl_p0`.`t`.`id`, 
`internal`.`regression_test_ddl_p0`.`t`.`value3`, `t`.`row_num` FROM (\n        
SELECT `internal`.`regression_test_ddl_p0`.`t1`.`id`, 
`internal`.`regression_test_ddl_p0`.`tt`.`value3`, ROW_NUMBER() OVER (PARTITION 
BY `internal`.`regression_test_ddl_p0`.`t1`.`id` ORDER BY 
`internal`.`regression_test_ddl_p0`.`tt`.`value3` DESC) as `row_num`\n    FROM 
(SELECT `internal`.`regress [...]
-
--- !nullable --
-1      小区A     10      1       2024-09-01T09:00        2024-09-01T10:00
-2      小区B     11      1       2024-09-01T09:00        2024-09-01T10:00
-3      小区C     \N      1       2024-09-01T09:00        2024-09-01T10:00
-
--- !nullable_view_with_cols --
-1      小区A     10      1       2024-09-01T09:00        2024-09-01T10:00
-2      小区B     11      1       2024-09-01T09:00        2024-09-01T10:00
-3      小区C     \N      1       2024-09-01T09:00        2024-09-01T10:00
-
diff --git 
a/regression-test/suites/ddl_p0/create_view_nereids/create_view_use_mv.groovy 
b/regression-test/suites/ddl_p0/create_view_nereids/create_view_use_mv.groovy
new file mode 100644
index 00000000000..295b195aa58
--- /dev/null
+++ 
b/regression-test/suites/ddl_p0/create_view_nereids/create_view_use_mv.groovy
@@ -0,0 +1,95 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("create_view_use_mv") {
+    sql "drop table if exists orders"
+    sql """create table orders ( o_orderkey bigint null, o_custkey int null, 
o_orderstatus varchar(1) null,
+            o_totalprice decimal(15,2) null, o_orderpriority varchar(15) null, 
o_clerk varchar(15) null, o_shippriority int null,
+            o_comment varchar(79) null, o_orderdate date not null) engine=olap 
duplicate key(o_orderkey,o_custkey)
+    comment 'olap' distributed by hash(o_orderkey) buckets 96 
properties("replication_num"="1")"""
+
+    sql "drop table if exists lineitem"
+    sql """create table lineitem (
+            l_orderkey bigint null, l_linenumber int null, l_partkey int null, 
l_suppkey int null, l_quantity decimal(15,2) null,l_extendedprice decimal(15,2) 
null,
+            l_discount decimal(15,2) null, l_tax decimal(15,2) null, 
l_returnflag varchar(1) null, l_linestatus varchar(1) null, l_commitdate date 
null, l_receiptdate date null,
+            l_shipnstruct varchar(25) null, l_shipmode varchar(10) null, 
l_comment varchar(44) null,l_shipdate date not null) engine=olap
+    duplicate key(l_orderkey, l_linenumber,l_partkey, l_suppkey)
+    distributed by hash(l_orderkey) buckets 96
+    properties("replication_num"="1");"""
+
+    sql """insert into orders values (null, 1, 'k', 99.5, 'a', 'b', 1, 'yy', 
'2023-10-17'),(1, null, 'o', 109.2, 'c','d',2, 'mm', '2023-10-17'),
+    (3, 3, null, 99.5, 'a', 'b', 1, 'yy', '2023-10-19'),
+    (1, 2, 'o', null, 'a', 'b', 1, 'yy', '2023-10-20'),
+    (2, 3, 'k', 109.2, null,'d',2, 'mm', '2023-10-21'),
+    (3, 1, 'k', 99.5, 'a', null, 1, 'yy', '2023-10-22'),
+    (1, 3, 'o', 99.5, 'a', 'b', null, 'yy', '2023-10-19'),
+    (2, 1, 'o', 109.2, 'c','d',2, null, '2023-10-18'),
+    (3, 2, 'k', 99.5, 'a', 'b', 1, 'yy', '2023-10-17'),
+    (4, 5, 'k', 99.5, 'a', 'b', 1, 'yy', '2023-10-19');"""
+
+    sql """insert into lineitem values(null, 1, 2, 3, 5.5, 6.5, 7.5, 8.5, 'o', 
'k', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy', '2023-10-17'),(1, null, 
3, 1, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-18', '2023-10-18', 'a', 'b', 
'yyyyyyyyy', '2023-10-17'),
+    (3, 3, null, 2, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-10-19', '2023-10-19', 
'c', 'd', 'xxxxxxxxx', '2023-10-19'),
+    (1, 2, 3, null, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', 
'a', 'b', 'yyyyyyyyy', '2023-10-17'),
+    (2, 3, 2, 1, 5.5, 6.5, 7.5, 8.5, 'o', 'k', null, '2023-10-18', 'a', 'b', 
'yyyyyyyyy', '2023-10-18'),
+    (3, 1, 1, 2, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-10-19', null, 'c', 'd', 
'xxxxxxxxx', '2023-10-19'),
+    (1, 3, 2, 2, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', 
'a', 'b', 'yyyyyyyyy', '2023-10-17');"""
+
+    createMV("""
+    CREATE MATERIALIZED VIEW t_mv_mv AS select
+    o_orderkey,
+    sum(o_totalprice) as sum_total,
+    max(o_totalprice) as max_total,
+    min(o_totalprice) as min_total,
+    count(*) as count_all,
+    bitmap_union(to_bitmap(case when o_shippriority > 1 and o_orderkey IN (1, 
3) then o_custkey else null end)) cnt_1,
+    bitmap_union(to_bitmap(case when o_shippriority > 2 and o_orderkey IN (2) 
then o_custkey else null end)) as cnt_2
+    from orders group by o_orderkey
+    """)
+
+    sql "drop view if exists t_mv_v_view"
+    sql """CREATE VIEW t_mv_v_view (k1, k2, k3, k4, k5, k6, v1, v2, v3, v4, 
v5, v6) as
+            select `mv_o_orderkey` as k1, `mva_SUM__``o_totalprice``` as k2, 
`mva_MAX__``o_totalprice``` as k3,
+    `mva_MIN__``o_totalprice``` as k4, `mva_SUM__CASE WHEN 1 IS NULL THEN 0 
ELSE 1 END` as k5, l_orderkey,
+    sum(`mv_o_orderkey`) as sum_total,
+    max(`mv_o_orderkey`) as max_total,
+    min(`mv_o_orderkey`) as min_total,
+    count(`mva_SUM__``o_totalprice```) as count_all,
+    bitmap_union(to_bitmap(case when mv_o_orderkey > 1 then 
`mva_SUM__``o_totalprice``` else null end)) cnt_1,
+    bitmap_union(to_bitmap(case when mv_o_orderkey > 2 then 
`mva_MAX__``o_totalprice``` else null end)) as cnt_2
+    from orders index t_mv_mv
+    left join lineitem on lineitem.l_orderkey = orders.mv_o_orderkey
+    group by
+    k1, k2, k3, k4, k5, l_orderkey, mv_o_orderkey"""
+    qt_create_view_from_mv "select * from t_mv_v_view order by 1"
+
+    sql "drop view if exists v_for_alter"
+    sql "CREATE VIEW v_for_alter AS SELECT * FROM orders"
+    sql """ALTER VIEW v_for_alter as
+            select `mv_o_orderkey` as k1, `mva_SUM__``o_totalprice``` as k2, 
`mva_MAX__``o_totalprice``` as k3,
+    `mva_MIN__``o_totalprice``` as k4, `mva_SUM__CASE WHEN 1 IS NULL THEN 0 
ELSE 1 END` as k5, l_orderkey,
+    sum(`mv_o_orderkey`) as sum_total,
+    max(`mv_o_orderkey`) as max_total,
+    min(`mv_o_orderkey`) as min_total,
+    count(`mva_SUM__``o_totalprice```) as count_all,
+    bitmap_union(to_bitmap(case when mv_o_orderkey > 1 then 
`mva_SUM__``o_totalprice``` else null end)) cnt_1,
+    bitmap_union(to_bitmap(case when mv_o_orderkey > 2 then 
`mva_MAX__``o_totalprice``` else null end)) as cnt_2
+    from orders index t_mv_mv
+    left join lineitem on lineitem.l_orderkey = orders.mv_o_orderkey
+    group by
+    k1, k2, k3, k4, k5, l_orderkey, mv_o_orderkey"""
+    qt_alter_view_from_mv "select * from v_for_alter order by 1"
+}
\ No newline at end of file
diff --git a/regression-test/suites/ddl_p0/test_create_view_nereids.groovy 
b/regression-test/suites/ddl_p0/create_view_nereids/test_create_view_nereids.groovy
similarity index 100%
rename from regression-test/suites/ddl_p0/test_create_view_nereids.groovy
rename to 
regression-test/suites/ddl_p0/create_view_nereids/test_create_view_nereids.groovy


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to