From 3efa06e63e5724772a529a5bd6cf48c6db3eef31 Mon Sep 17 00:00:00 2001 From: Calvin Kirs Date: Wed, 16 Aug 2023 11:49:04 +0800 Subject: [PATCH] [Fix](View)varchar type conversion error (#22987) --- .../org/apache/doris/catalog/ScalarType.java | 2 +- .../doris/planner/TableFunctionPlanTest.java | 24 +++++++++---------- regression-test/data/view_p0/view_p0.out | 3 +++ regression-test/suites/view_p0/view_p0.groovy | 17 +++++++++++++ 4 files changed, 33 insertions(+), 13 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 ceffd27fe9..17c8eca69c 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 @@ -575,7 +575,7 @@ public class ScalarType extends Type { break; case VARCHAR: if (isWildcardVarchar()) { - stringBuilder.append("varchar(*)"); + stringBuilder.append("varchar"); } else if (Strings.isNullOrEmpty(lenStr)) { stringBuilder.append("varchar").append("(").append(len).append(")"); } else { 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 bb821bf77f..b1c26ccdfd 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=16}")); - Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, 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=16}")); - Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, 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=16}")); - Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, 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=16}")); - Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, 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=16}")); - Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, 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=16}")); - Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e2, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e2, colUniqueId=-1, type=varchar")); // lateral view 1 tuple Assert.assertTrue(explainString.contains("TupleDescriptor{id=2, tbl=tmp1, byteSize=16}")); - Assert.assertTrue(explainString.contains("SlotDescriptor{id=2, col=e1, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=2, col=e1, colUniqueId=-1, type=varchar")); } // test explode_split function @@ -203,7 +203,7 @@ public class TableFunctionPlanTest { String sql = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where explode_split(k2, \",\");"; String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(ctx, sql); Assert.assertTrue( - explainString.contains("No matching function with signature: explode_split(varchar(1), varchar(*)).")); + explainString.contains("No matching function with signature: explode_split(varchar(1), varchar).")); } // test projection @@ -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, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=2, col=e1, colUniqueId=-1, 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, colUniqueId=-1, type=varchar(*)")); + Assert.assertTrue(explainString.contains("SlotDescriptor{id=3, col=e1, colUniqueId=-1, type=varchar")); } /* @@ -412,10 +412,10 @@ public class TableFunctionPlanTest { "SlotDescriptor{id=2,col=k1,colUniqueId=0,type=int" )); Assert.assertTrue(formatString.contains( - "SlotDescriptor{id=3,col=null,colUniqueId=null,type=varchar(*)" + "SlotDescriptor{id=3,col=null,colUniqueId=null,type=varchar" )); Assert.assertTrue(formatString.contains( - "SlotDescriptor{id=6,col=e1,colUniqueId=-1,type=varchar(*)" + "SlotDescriptor{id=6,col=e1,colUniqueId=-1,type=varchar" )); } diff --git a/regression-test/data/view_p0/view_p0.out b/regression-test/data/view_p0/view_p0.out index 98e3c1adce..1593deb5d1 100644 --- a/regression-test/data/view_p0/view_p0.out +++ b/regression-test/data/view_p0/view_p0.out @@ -2,3 +2,6 @@ -- !sql -- 1 4x0fdjDNBZAJxCD7qm/EHg== +-- !sql -- +1 + diff --git a/regression-test/suites/view_p0/view_p0.groovy b/regression-test/suites/view_p0/view_p0.groovy index 73f5d7a246..df65e24212 100644 --- a/regression-test/suites/view_p0/view_p0.groovy +++ b/regression-test/suites/view_p0/view_p0.groovy @@ -21,4 +21,21 @@ suite("view_p0") { 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;" + }