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 2894903e37 [1.2-its](View)Fix View can't create (#23517)
2894903e37 is described below

commit 2894903e37a66942bcbdd7298741d116bc909700
Author: Calvin Kirs <[email protected]>
AuthorDate: Sun Aug 27 22:26:50 2023 +0800

    [1.2-its](View)Fix View can't create (#23517)
    
    Cherry Pick #22987 #23093
---
 .../java/org/apache/doris/catalog/ScalarType.java  |   2 +-
 fe/fe-core/src/main/cup/sql_parser.cup             |   6 +-
 .../doris/planner/TableFunctionPlanTest.java       |  22 ++--
 regression-test/data/view_p0/view_p0.out           |  13 +++
 regression-test/suites/view_p0/view_p0.grovvy      | 116 +++++++++++++++++++++
 5 files changed, 144 insertions(+), 15 deletions(-)

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 d4b148baf8..4fc74f3cb9 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
@@ -521,7 +521,7 @@ public class ScalarType extends Type {
             return "TIMEV2(" + scale + ")";
         } else if (type == PrimitiveType.VARCHAR) {
             if (isWildcardVarchar()) {
-                return "VARCHAR(*)";
+                return "VARCHAR";
             }
             return "VARCHAR(" + len + ")";
         } else if (type == PrimitiveType.STRING) {
diff --git a/fe/fe-core/src/main/cup/sql_parser.cup 
b/fe/fe-core/src/main/cup/sql_parser.cup
index d82d0ba224..a15c09a0d0 100644
--- a/fe/fe-core/src/main/cup/sql_parser.cup
+++ b/fe/fe-core/src/main/cup/sql_parser.cup
@@ -6247,7 +6247,7 @@ column_subscript ::=
   {: ArrayList<Expr> list = new ArrayList<Expr>();
      list.add(e);
      list.add(index);
-     RESULT = new FunctionCallExpr("%element_extract%", list);
+     RESULT = new FunctionCallExpr("element_at", list);
   :}
   ;
 
@@ -6256,14 +6256,14 @@ column_slice ::=
   {: ArrayList<Expr> list = new ArrayList<Expr>();
        list.add(e);
        list.add(offset);
-       RESULT = new FunctionCallExpr("%element_slice%", list);
+       RESULT = new FunctionCallExpr("array_slice", list);
   :}
   | expr:e LBRACKET expr:offset COLON expr:length RBRACKET
   {: ArrayList<Expr> list = new ArrayList<Expr>();
      list.add(e);
      list.add(offset);
      list.add(length);
-     RESULT = new FunctionCallExpr("%element_slice%", list);
+     RESULT = new FunctionCallExpr("array_slice", list);
   :}
   ;
 
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java
index 029b5c39b1..20d549b163 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java
@@ -79,7 +79,7 @@ public class TableFunctionPlanTest {
                 explainString.contains("table function: 
explode_split(`default_cluster:db1`.`tbl1`.`k2`, ',')"));
         Assert.assertTrue(explainString.contains("tuple ids: 0 1"));
         Assert.assertTrue(explainString.contains("TupleDescriptor{id=1, 
tbl=tmp, byteSize=32}"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=varchar"));
     }
 
     /* Case2 without output explode column
@@ -95,7 +95,7 @@ public class TableFunctionPlanTest {
                 explainString.contains("table function: 
explode_split(`default_cluster:db1`.`tbl1`.`k2`, ',')"));
         Assert.assertTrue(explainString.contains("tuple ids: 0 1"));
         Assert.assertTrue(explainString.contains("TupleDescriptor{id=1, 
tbl=tmp, byteSize=32}"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=varchar"));
     }
 
     /* Case3 group by explode column
@@ -116,7 +116,7 @@ public class TableFunctionPlanTest {
                 explainString.contains("table function: 
explode_split(`default_cluster:db1`.`tbl1`.`k2`, ',')"));
         Assert.assertTrue(explainString.contains("tuple ids: 0 1"));
         Assert.assertTrue(explainString.contains("TupleDescriptor{id=1, 
tbl=tmp, byteSize=32}"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=varchar"));
         // group by tuple
         Assert.assertTrue(explainString.contains("TupleDescriptor{id=2, 
tbl=null, byteSize=32}"));
     }
@@ -135,7 +135,7 @@ public class TableFunctionPlanTest {
         Assert.assertTrue(explainString.contains("PREDICATES: `e1` = '1'"));
         Assert.assertTrue(explainString.contains("tuple ids: 0 1"));
         Assert.assertTrue(explainString.contains("TupleDescriptor{id=1, 
tbl=tmp, byteSize=32}"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=VARCHAR"));
     }
 
     /* Case5 where normal column
@@ -151,7 +151,7 @@ public class TableFunctionPlanTest {
                 explainString.contains("table function: 
explode_split(`default_cluster:db1`.`tbl1`.`k2`, ',')"));
         Assert.assertTrue(explainString.contains("tuple ids: 0 1"));
         Assert.assertTrue(explainString.contains("TupleDescriptor{id=1, 
tbl=tmp, byteSize=32}"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, 
type=varchar"));
         
Assert.assertTrue(UtFrameUtils.checkPlanResultContainsNode(explainString, 0, 
"OlapScanNode"));
         Assert.assertTrue(explainString.contains("PREDICATES: `k1` = 1"));
     }
@@ -171,10 +171,10 @@ public class TableFunctionPlanTest {
         Assert.assertTrue(explainString.contains("lateral view tuple id: 1 
2"));
         // lateral view 2 tuple
         Assert.assertTrue(explainString.contains("TupleDescriptor{id=1, 
tbl=tmp2, byteSize=32}"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e2, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e2, 
type=varchar"));
         // lateral view 1 tuple
         Assert.assertTrue(explainString.contains("TupleDescriptor{id=2, 
tbl=tmp1, byteSize=32}"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=2, col=e1, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=2, col=e1, 
type=varchar"));
     }
 
     // test explode_split function
@@ -368,7 +368,7 @@ public class TableFunctionPlanTest {
         Assert.assertTrue(explainString.contains("lateral view tuple id: 2"));
         Assert.assertTrue(explainString.contains("output slot id: 2"));
         Assert.assertTrue(explainString.contains("tuple ids: 0 2"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=2, col=e1, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=2, col=e1, 
type=varchar"));
     }
 
     /*
@@ -384,7 +384,7 @@ public class TableFunctionPlanTest {
         Assert.assertTrue(explainString.contains("lateral view tuple id: 3"));
         Assert.assertTrue(explainString.contains("output slot id: 3"));
         Assert.assertTrue(explainString.contains("tuple ids: 1 3"));
-        Assert.assertTrue(explainString.contains("SlotDescriptor{id=3, col=e1, 
type=VARCHAR(*)"));
+        Assert.assertTrue(explainString.contains("SlotDescriptor{id=3, col=e1, 
type=varchar"));
     }
 
     /*
@@ -412,10 +412,10 @@ public class TableFunctionPlanTest {
                 "SlotDescriptor{id=2,col=null,type=INT"
         ));
         Assert.assertTrue(formatString.contains(
-                "SlotDescriptor{id=3,col=null,type=VARCHAR(*)"
+                "SlotDescriptor{id=3,col=null,type=varchar"
         ));
         Assert.assertTrue(formatString.contains(
-                "SlotDescriptor{id=6,col=e1,type=VARCHAR(*)"
+                "SlotDescriptor{id=6,col=e1,type=varchar"
         ));
     }
 
diff --git a/regression-test/data/view_p0/view_p0.out 
b/regression-test/data/view_p0/view_p0.out
new file mode 100644
index 0000000000..abb7bba2bf
--- /dev/null
+++ b/regression-test/data/view_p0/view_p0.out
@@ -0,0 +1,13 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !sql --
+1      4x0fdjDNBZAJxCD7qm/EHg==
+
+-- !sql --
+1
+
+-- !sql --
+1
+
+-- !sql --
+1      2023-08-01      DORID_FIELD1    DORID_FIELD2    ["cat", "dog"]  cat
+1      2023-08-01      DORID_FIELD1    DORID_FIELD2    ["cat", "dog"]  dog
\ No newline at end of file
diff --git a/regression-test/suites/view_p0/view_p0.grovvy 
b/regression-test/suites/view_p0/view_p0.grovvy
new file mode 100644
index 0000000000..8c9e458649
--- /dev/null
+++ b/regression-test/suites/view_p0/view_p0.grovvy
@@ -0,0 +1,116 @@
+// 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("view_p0") {
+    sql """DROP VIEW IF EXISTS test_view"""
+    sql """ 
+        create view test_view as select 
1,to_base64(AES_ENCRYPT('doris','doris')); 
+    """
+    qt_sql "select * from test_view;"
+    
+    sql """DROP TABLE IF EXISTS test_view_table"""
+    
+    sql """ 
+        create table test_view_table (id int) distributed by hash(id) 
properties('replication_num'='1');
+    """
+    
+    sql """insert into test_view_table values(1);"""
+    
+    sql """DROP VIEW IF EXISTS test_varchar_view"""
+    
+    sql """ 
+        create view test_varchar_view (id) as  SELECT GROUP_CONCAT(cast( id as 
varchar)) from test_view_table; 
+    """
+    
+    qt_sql "select * from test_varchar_view;"
+    qt_sql "select cast( id as varchar(*)) from test_view_table;"
+    
+    // array view
+    sql """DROP TABLE IF EXISTS test_array_tbl_1"""
+    
+    sql """ 
+           CREATE TABLE `test_array_tbl_1` (
+             `id` int(11) NULL COMMENT "",
+             `field1` DATEV2,
+             `field2` varchar(1000),
+             `field3` varchar(1000),
+              `field4` ARRAY<STRING>,
+              `field5` ARRAY<STRING>
+            ) ENGINE=OLAP
+            DUPLICATE KEY(`id`)
+            COMMENT "OLAP"
+            DISTRIBUTED BY HASH(`id`) BUCKETS 1
+            PROPERTIES (
+            "replication_allocation" = "tag.location.default: 1",
+            "in_memory" = "false",
+            "storage_format" = "V2"
+            );
+    """
+    
+    sql """DROP TABLE IF EXISTS test_array_tbl_2"""
+    sql """ 
+           CREATE TABLE `test_array_tbl_2` (
+             `id` int(11) NULL COMMENT "",
+             `field1` DATEV2,
+             `field2` varchar(1000),
+             `field3` varchar(1000),
+              `field4` ARRAY<STRING>,
+              `field5` ARRAY<STRING>
+            ) ENGINE=OLAP
+            DUPLICATE KEY(`id`)
+            COMMENT "OLAP"
+            DISTRIBUTED BY HASH(`id`) BUCKETS 1
+            PROPERTIES (
+            "replication_allocation" = "tag.location.default: 1",
+            "in_memory" = "false",
+            "storage_format" = "V2"
+            );
+    """
+    sql """INSERT into test_array_tbl_1 
values(1,'2023-08-01',"DORID_FIELD1","DORID_FIELD2",["cat","dog"],["cat","dog"])"""
+    
+    sql """INSERT into test_array_tbl_2 
values(1,'2023-08-01',"DORID_FIELD1","DORID_FIELD2",["cat","dog"],["cat","dog"])"""
+    
+    sql """DROP VIEW IF EXISTS test_element_at_view"""
+    
+    sql """ 
+        CREATE VIEW test_element_at_view AS
+        SELECT id, dm, pn, field3, ms, ek[sm] AS ek
+        FROM
+        (
+            SELECT
+                id, dm, pn, field3, ek, ms, tmp,
+                SUM(tmp) OVER (PARTITION BY id, dm, pn, field3 ORDER BY id 
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS sm
+            FROM
+            (
+                SELECT
+                    a.id AS id,
+                    a.field1 AS dm,
+                    a.field2 AS pn,
+                    field3,
+                    field4 AS ek,
+                    field5 AS ms,
+                    1 AS tmp
+                FROM
+                (
+                    SELECT * FROM test_array_tbl_1 LATERAL VIEW 
explode(field4) test_array_tbl_2 AS mension
+                ) a
+            ) b
+        ) c;
+    """
+    qt_sql "select * from test_element_at_view;"
+    
+}
\ No newline at end of file


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

Reply via email to