This is an automated email from the ASF dual-hosted git repository.
xuyang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 73f7979b73 [fix](struct-type) forbid struct-type to be distributed
key/aggregation key and add more tests (#16626)
73f7979b73 is described below
commit 73f7979b73b5cad140fbe6e9d28f05b62f77ac5d
Author: xy720 <[email protected]>
AuthorDate: Sun Feb 19 15:16:36 2023 +0800
[fix](struct-type) forbid struct-type to be distributed key/aggregation key
and add more tests (#16626)
This commits forbid struct and map type to be distributed key/aggregation
key.
The sql such as:
select distinct stuct_col from struct_table
will report an error.
---
.../main/java/org/apache/doris/catalog/Type.java | 9 +++++----
.../org/apache/doris/analysis/CreateTableStmt.java | 2 +-
.../doris/analysis/HashDistributionDesc.java | 6 ++++++
.../analysis/CheckExpressionLegalityTest.java | 2 +-
.../aggregate_group_by_metric_type.groovy | 22 ++++++++++++++++++++++
5 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java
b/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java
index 56fbb20a1e..61e22fb32a 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java
@@ -382,12 +382,13 @@ public abstract class Type {
// 3. don't support group by
// 4. don't support index
public boolean isOnlyMetricType() {
- return isObjectStored() || isArrayType();
+ return isObjectStored() || isComplexType();
}
public static final String OnlyMetricTypeErrorMsg =
- "Doris hll, bitmap and array column must use with specific
function, and don't support filter or group by."
- + "please run 'help hll' or 'help bitmap' or 'help array'
in your mysql client.";
+ "Doris hll, bitmap, array, map, struct column must use with
specific function, and don't"
+ + " support filter or group by. please run 'help hll' or
'help bitmap' or 'help array'"
+ + " or 'help map' or 'help struct' in your mysql client.";
public boolean isHllType() {
return isScalarType(PrimitiveType.HLL);
@@ -480,7 +481,7 @@ public abstract class Type {
}
public boolean isCollectionType() {
- return isMapType() || isArrayType() || isMultiRowType() ||
isStructType();
+ return isMapType() || isArrayType() || isMultiRowType();
}
public boolean isMapType() {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
index dc699cde00..9a727e5de0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
@@ -372,7 +372,7 @@ public class CreateTableStmt extends DdlStmt {
if (columnDef.getType().getPrimitiveType() ==
PrimitiveType.JSONB) {
break;
}
- if (columnDef.getType().isCollectionType()) {
+ if (columnDef.getType().isComplexType()) {
break;
}
if (columnDef.getType().getPrimitiveType() ==
PrimitiveType.VARCHAR) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
index 8b312a6ba7..d54049f793 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
@@ -120,6 +120,12 @@ public class HashDistributionDesc extends DistributionDesc
{
} else if (column.getType().isArrayType()) {
throw new DdlException("Array Type should not be used
in distribution column["
+ column.getName() + "].");
+ } else if (column.getType().isMapType()) {
+ throw new DdlException("Map Type should not be used in
distribution column["
+ + column.getName() + "].");
+ } else if (column.getType().isStructType()) {
+ throw new DdlException("Struct Type should not be used
in distribution column["
+ + column.getName() + "].");
} else if (column.getType().isFloatingPointType()) {
throw new DdlException("Floating point type should not
be used in distribution column["
+ column.getName() + "].");
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/CheckExpressionLegalityTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/CheckExpressionLegalityTest.java
index 5d0ab86ff6..553ee35e44 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/CheckExpressionLegalityTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/CheckExpressionLegalityTest.java
@@ -65,7 +65,7 @@ public class CheckExpressionLegalityTest implements
PatternMatchSupported {
));
ExceptionChecker.expectThrowsWithMsg(AnalysisException.class,
- "Doris hll, bitmap and array column must use with specific
function", () ->
+ "Doris hll, bitmap, array, map, struct column must use with
specific function", () ->
PlanChecker.from(connectContext)
.analyze("select count(distinct id) from
(select to_bitmap(1) id) tbl")
.applyBottomUp(new
ExpressionRewrite(CheckLegalityAfterRewrite.INSTANCE))
diff --git
a/regression-test/suites/query_p0/aggregate/aggregate_group_by_metric_type.groovy
b/regression-test/suites/query_p0/aggregate/aggregate_group_by_metric_type.groovy
index 31b8ef9fae..ee6ccf63a3 100644
---
a/regression-test/suites/query_p0/aggregate/aggregate_group_by_metric_type.groovy
+++
b/regression-test/suites/query_p0/aggregate/aggregate_group_by_metric_type.groovy
@@ -108,4 +108,26 @@ suite("aggregate_group_by_metric_type") {
sql 'set enable_nereids_planner=false'
sql "DROP TABLE test_group_by_array"
+
+ sql "DROP TABLE IF EXISTS test_group_by_struct"
+ sql "ADMIN SET FRONTEND CONFIG ('enable_struct_type' = 'true')"
+ sql """
+ CREATE TABLE IF NOT EXISTS test_group_by_struct (id int, s_struct
struct<f1:tinyint, f2:char(5)>) ENGINE=OLAP DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1 properties("replication_num" =
"1");
+ """
+
+ sql "insert into test_group_by_struct values(1, {1, 'a'})"
+
+ test {
+ sql "select distinct s_struct from test_group_by_struct"
+ exception "${error_msg}"
+ }
+ test {
+ sql "select s_struct from test_group_by_struct order by s_struct"
+ exception "${error_msg}"
+ }
+ test {
+ sql "select s_struct,count(*) from test_group_by_struct group by
s_struct"
+ exception "${error_msg}"
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]