diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java index bf79c8a735..d75327a626 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java @@ -475,6 +475,7 @@ public class MaterializedViewHandler extends AlterHandler { // 2. all slot's isKey same with mv column // c. Duplicate table: // 1. Columns resolved by semantics are legal + // 2. Key column not allow float/double type. // update mv columns List mvColumnItemList = addMVClause.getMVColumnItemList(); @@ -555,6 +556,13 @@ public class MaterializedViewHandler extends AlterHandler { } } + for (Column column : newMVColumns) { + // check c.2 + if (column.isKey() && column.getType().isFloatingPointType()) { + throw new DdlException("Do not support float/double type on key column, you can change it to decimal"); + } + } + if (newMVColumns.size() == olapTable.getBaseSchema().size() && !addMVClause.isReplay()) { boolean allKeysMatch = true; for (int i = 0; i < newMVColumns.size(); i++) { @@ -648,7 +656,7 @@ public class MaterializedViewHandler extends AlterHandler { for (Column column : olapTable.getSchemaByIndexId(baseIndexId, true)) { baseColumnNameToColumn.put(column.getName(), column); } - LOG.debug("baseSchema:{}", olapTable.getSchemaByIndexId(baseIndexId, true)); + if (keysType.isAggregationFamily()) { int keysNumOfRollup = 0; for (String columnName : rollupColumnNames) { @@ -660,6 +668,10 @@ public class MaterializedViewHandler extends AlterHandler { throw new DdlException("Invalid column order. value should be after key"); } if (baseColumn.isKey()) { + if (baseColumn.getType().isFloatingPointType()) { + throw new DdlException( + "Do not support float/double type on group by, you can change it to decimal"); + } keysNumOfRollup += 1; hasKey = true; } else { @@ -739,21 +751,20 @@ public class MaterializedViewHandler extends AlterHandler { keySizeByte += column.getType().getIndexSize(); if (theBeginIndexOfValue + 1 > FeConstants.shortkey_max_column_count || keySizeByte > FeConstants.shortkey_maxsize_bytes) { - if (theBeginIndexOfValue == 0 && column.getType().getPrimitiveType().isCharFamily()) { - column.setIsKey(true); - theBeginIndexOfValue++; + if (theBeginIndexOfValue != 0 || !column.getType().getPrimitiveType().isCharFamily()) { + break; } - break; } if (column.getType().isFloatingPointType()) { break; } + + column.setIsKey(true); + if (column.getType().getPrimitiveType() == PrimitiveType.VARCHAR) { - column.setIsKey(true); theBeginIndexOfValue++; break; } - column.setIsKey(true); } if (theBeginIndexOfValue == 0) { throw new DdlException("The first column could not be float or double"); diff --git a/regression-test/data/mv_p0/group_check/group_check.out b/regression-test/data/mv_p0/group_check/group_check.out index 94203dd936..80a1b87035 100644 --- a/regression-test/data/mv_p0/group_check/group_check.out +++ b/regression-test/data/mv_p0/group_check/group_check.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select_star -- --4 -4 -4 d -1 1 1 a -2 2 2 b -3 -3 \N c +-4 -4 -4 d 4.4 +1 1 1 a 1.1 +2 2 2 b 2.2 +3 -3 \N c 3.3 diff --git a/regression-test/suites/mv_p0/group_check/group_check.groovy b/regression-test/suites/mv_p0/group_check/group_check.groovy index 91011d5181..dddacbb7ef 100644 --- a/regression-test/suites/mv_p0/group_check/group_check.groovy +++ b/regression-test/suites/mv_p0/group_check/group_check.groovy @@ -26,16 +26,17 @@ suite ("group_check") { k1 int null, k2 int not null, k3 bigint null, - k4 varchar(100) null + k4 varchar(100) null, + k5 double ) duplicate key (k1,k2,k3) distributed BY hash(k1) buckets 3 properties("replication_num" = "1"); """ - sql "insert into d_table select 1,1,1,'a';" - sql "insert into d_table select 2,2,2,'b';" - sql "insert into d_table select 3,-3,null,'c';" + sql "insert into d_table select 1,1,1,'a',1.1;" + sql "insert into d_table select 2,2,2,'b',2.2;" + sql "insert into d_table select 3,-3,null,'c',3.3;" test { sql "create materialized view kgroup as select sum(k3) from d_table group by k1,k2;" @@ -55,7 +56,17 @@ suite ("group_check") { createMV ("create materialized view kgroup as select k1,k2,sum(k3) from d_table group by k1,k2;") - sql "insert into d_table select -4,-4,-4,'d';" + sql "insert into d_table select -4,-4,-4,'d',4.4;" qt_select_star "select * from d_table order by k1;" + + test { + sql "create materialized view kgroup as select k5 from d_table group by k5;" + exception "errCode = 2," + } + + test { + sql "create materialized view kgroup as select k1,k5 from d_table group by k1,k5;" + exception "errCode = 2," + } }