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]