This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 87c7bac4d5d7e49d7c18ef60f0d5d0902695e8b3
Author: Pxl <[email protected]>
AuthorDate: Tue Oct 24 17:06:45 2023 +0800

    [Bug](materialized-view) add limit for group by with float/double on create 
mv (#25823)
    
    doris do not support float/double key type on storage engine.
---
 .../doris/alter/MaterializedViewHandler.java       | 25 ++++++++++++++++------
 .../data/mv_p0/group_check/group_check.out         |  8 +++----
 .../suites/mv_p0/group_check/group_check.groovy    | 21 +++++++++++++-----
 3 files changed, 38 insertions(+), 16 deletions(-)

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 bf79c8a7359..d75327a6261 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<MVColumnItem> 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 94203dd936e..80a1b870359 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 91011d51811..dddacbb7efb 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,"
+    }
 }


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

Reply via email to