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

morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
     new 651eeb173b [Fix](Create View) support create view from tvf (#18087)
651eeb173b is described below

commit 651eeb173b26561fd0b70703a38ff0be03a9c95e
Author: Tiewei Fang <[email protected]>
AuthorDate: Tue Mar 28 15:07:32 2023 +0800

    [Fix](Create View) support create view from tvf (#18087)
    
    Support create view as select * from tvf()
---
 .../doris/analysis/TableValuedFunctionRef.java     |  24 +++++
 .../test_create_view_from_tvf.out                  |  87 +++++++++++++++++
 .../test_create_view_from_tvf.groovy               | 108 +++++++++++++++++++++
 3 files changed, 219 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java
 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java
index 4871baf889..294e18665d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java
@@ -24,6 +24,7 @@ import org.apache.doris.planner.ScanNode;
 import org.apache.doris.tablefunction.TableValuedFunctionIf;
 
 import java.util.Map;
+import java.util.stream.Collectors;
 
 public class TableValuedFunctionRef extends TableRef {
 
@@ -64,6 +65,29 @@ public class TableValuedFunctionRef extends TableRef {
         return result;
     }
 
+    @Override
+    protected String tableNameToSql() {
+        String aliasSql = null;
+        String alias = getExplicitAlias();
+        if (alias != null) {
+            aliasSql = ToSqlUtils.getIdentSql(alias);
+        }
+
+        // set tableName
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(funcName);
+        stringBuilder.append('(');
+        String paramsString  = params.entrySet().stream().map(kv -> "\"" + 
kv.getKey() + "\""
+                        + " = " + "\"" + kv.getValue() + "\"")
+                        .collect(Collectors.joining(","));
+        stringBuilder.append(paramsString);
+        stringBuilder.append(')');
+
+        // set alias
+        stringBuilder.append((aliasSql != null) ? " " + aliasSql : "");
+        return stringBuilder.toString();
+    }
+
     /**
      * Register this table ref and then analyze the Join clause.
      */
diff --git 
a/regression-test/data/correctness_p0/table_valued_function/test_create_view_from_tvf.out
 
b/regression-test/data/correctness_p0/table_valued_function/test_create_view_from_tvf.out
new file mode 100644
index 0000000000..b0b9a04193
--- /dev/null
+++ 
b/regression-test/data/correctness_p0/table_valued_function/test_create_view_from_tvf.out
@@ -0,0 +1,87 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !view1 --
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+
+-- !view2 --
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+
+-- !count --
+100
+
+-- !inner_join --
+0      0
+1      1
+2      2
+3      3
+4      4
+5      5
+6      6
+7      7
+8      8
+9      9
+
+-- !left_join --
+0      0
+1      1
+2      2
+3      3
+4      4
+5      \N
+6      \N
+7      \N
+8      \N
+9      \N
+
+-- !where_equal --
+1
+3
+5
+7
+9
+
+-- !where_lt --
+0
+1
+2
+3
+4
+5
+6
+7
+
+-- !join_where --
+5      5
+6      6
+7      7
+8      8
+9      9
+
+-- !groupby --
+4
+5
+6
+7
+8
+9
+
+-- !subquery1 --
+1
+
diff --git 
a/regression-test/suites/correctness_p0/table_valued_function/test_create_view_from_tvf.groovy
 
b/regression-test/suites/correctness_p0/table_valued_function/test_create_view_from_tvf.groovy
new file mode 100644
index 0000000000..c98cfb328e
--- /dev/null
+++ 
b/regression-test/suites/correctness_p0/table_valued_function/test_create_view_from_tvf.groovy
@@ -0,0 +1,108 @@
+// 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("test_create_view_from_tvf") {
+    String testViewName = "test_view_from_number"
+
+    def create_view = {createViewSql -> 
+       sql """ drop view if exists ${testViewName} """
+       sql createViewSql
+    }
+
+    def sql1 =  """ CREATE VIEW ${testViewName}
+                    (
+                        k1 COMMENT "number"
+                    )
+                    COMMENT "my first view"
+                    AS
+                    SELECT number as k1 FROM numbers("number" = "10");
+                """
+    create_view(sql1)
+    order_qt_view1 """ select * from ${testViewName} """
+
+
+    def sql2 =  """ CREATE VIEW ${testViewName}
+                    AS
+                    SELECT * FROM numbers("number" = "10");
+                """
+    create_view(sql2)
+    order_qt_view2 """ select * from ${testViewName} """
+
+    def sql_count =  """ CREATE VIEW ${testViewName}
+                        AS
+                        select count(*) from numbers("number" = "100");
+                     """
+    create_view(sql_count)
+    order_qt_count """ select * from ${testViewName} """
+
+    def sql_inner_join =  """ CREATE VIEW ${testViewName}
+                            AS
+                            select a.number as num1, b.number as num2
+                            from numbers("number" = "10") a inner join 
numbers("number" = "10") b 
+                            on a.number=b.number;
+                        """
+    create_view(sql_inner_join)
+    order_qt_inner_join """ select * from ${testViewName} """
+
+    def sql_left_join = """ CREATE VIEW ${testViewName}
+                            AS
+                            select a.number as num1, b.number as num2
+                            from numbers("number" = "10") a left join 
numbers("number" = "5") b 
+                            on a.number=b.number order by num1;
+                        """
+    create_view(sql_left_join)
+    order_qt_left_join """ select * from ${testViewName} """
+
+    def sql_where_equal = """ CREATE VIEW ${testViewName}
+                              AS
+                              select * from numbers("number" = "10") where 
number%2 = 1;
+                          """
+    create_view(sql_where_equal)
+    order_qt_where_equal """ select * from ${testViewName} """
+
+    def sql_where_lt = """ CREATE VIEW ${testViewName}
+                           AS
+                           select * from numbers("number" = "10") where 
number+1 < 9;
+                       """
+    create_view(sql_where_lt)
+    order_qt_where_lt """ select * from ${testViewName} """
+
+    def sql_join_where  = """ CREATE VIEW ${testViewName}
+                           AS
+                           select a.number as num1, b.number as num2
+                           from numbers("number" = "10") a inner join 
numbers("number" = "10") b 
+                           on a.number=b.number where a.number>4;
+                       """
+    create_view(sql_join_where)
+    order_qt_join_where """ select * from ${testViewName} """
+
+    def sql_groupby  = """ CREATE VIEW ${testViewName}
+                            AS
+                            select number from numbers("number" = "10") where 
number>=4 group by number order by number;
+                       """
+    create_view(sql_groupby)
+    order_qt_groupby """ select * from ${testViewName} """
+
+    def sql_subquery1  = """ CREATE VIEW ${testViewName}
+                            AS
+                            select * from numbers("number" = "10") where 
number = (select number from numbers("number" = "10") where number=1);
+                       """
+    create_view(sql_subquery1)
+    order_qt_subquery1 """ select * from ${testViewName} """
+     
+ }
+ 
\ No newline at end of file


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

Reply via email to