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

panxiaolei 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 9f4170cfa5e [Bug](materialized-view) fix result is nulable have wrong 
value on multi_distinct_sum (#36766)
9f4170cfa5e is described below

commit 9f4170cfa5e95cd4181a88d10950145baaae43fe
Author: Pxl <pxl...@qq.com>
AuthorDate: Wed Jun 26 10:25:48 2024 +0800

    [Bug](materialized-view) fix result is nulable have wrong value on 
multi_distinct_sum (#36766)
    
    ## Proposed changes
    fix result is nulable have wrong value on multi_distinct_sum
---
 .../main/java/org/apache/doris/catalog/AggStateType.java  |  8 ++++++--
 .../java/org/apache/doris/catalog/AggregateFunction.java  | 15 +++++++--------
 .../agg_state/nereids/test_agg_state_nereids.out          |  2 +-
 .../data/datatype_p0/agg_state/test_agg_state.out         |  2 +-
 .../agg_state/diffrent_serialize/diffrent_serialize.out   | 14 ++++++++++++++
 .../datatype_p0/agg_state/max/test_agg_state_max.groovy   |  2 +-
 .../diffrent_serialize/diffrent_serialize.groovy          | 15 +++++++++++++++
 7 files changed, 45 insertions(+), 13 deletions(-)

diff --git 
a/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java
index 296677da836..49538b66973 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java
@@ -77,7 +77,7 @@ public class AggStateType extends Type {
     @Override
     public String toSql(int depth) {
         StringBuilder stringBuilder = new StringBuilder();
-        stringBuilder.append("AGG_STATE<").append(functionName).append("(");
+        
stringBuilder.append("AGG_STATE<arguments=").append(functionName).append("(");
         for (int i = 0; i < subTypes.size(); i++) {
             if (i > 0) {
                 stringBuilder.append(", ");
@@ -87,7 +87,11 @@ public class AggStateType extends Type {
                 stringBuilder.append(" NULL");
             }
         }
-        stringBuilder.append(")>");
+        stringBuilder.append("), function_name=");
+        stringBuilder.append(functionName);
+        stringBuilder.append(", result_is_nullable=");
+        stringBuilder.append(resultIsNullable);
+        stringBuilder.append(">");
         return stringBuilder.toString();
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
index 69cb96883e6..8dccb34a248 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
@@ -47,16 +47,15 @@ public class AggregateFunction extends Function {
     private static final Logger LOG = 
LogManager.getLogger(AggregateFunction.class);
 
     public static ImmutableSet<String> 
NOT_NULLABLE_AGGREGATE_FUNCTION_NAME_SET = ImmutableSet.of("row_number", "rank",
-            "dense_rank", "multi_distinct_count", "multi_distinct_sum", 
FunctionSet.HLL_UNION_AGG,
-            FunctionSet.HLL_UNION, FunctionSet.HLL_RAW_AGG, 
FunctionSet.BITMAP_UNION, FunctionSet.BITMAP_INTERSECT,
+            "dense_rank", "multi_distinct_count", FunctionSet.HLL_UNION_AGG, 
FunctionSet.HLL_UNION,
+            FunctionSet.HLL_RAW_AGG, FunctionSet.BITMAP_UNION, 
FunctionSet.BITMAP_INTERSECT,
             FunctionSet.ORTHOGONAL_BITMAP_INTERSECT, 
FunctionSet.ORTHOGONAL_BITMAP_INTERSECT_COUNT,
             FunctionSet.ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT, 
FunctionSet.ORTHOGONAL_BITMAP_EXPR_CALCULATE,
-            FunctionSet.INTERSECT_COUNT, 
FunctionSet.ORTHOGONAL_BITMAP_UNION_COUNT,
-            FunctionSet.COUNT, "approx_count_distinct", "ndv", 
FunctionSet.BITMAP_UNION_INT,
-            FunctionSet.BITMAP_UNION_COUNT, "ndv_no_finalize", 
FunctionSet.WINDOW_FUNNEL, FunctionSet.RETENTION,
-            FunctionSet.SEQUENCE_MATCH, FunctionSet.SEQUENCE_COUNT, 
FunctionSet.MAP_AGG, FunctionSet.BITMAP_AGG,
-            FunctionSet.ARRAY_AGG, FunctionSet.COLLECT_LIST, 
FunctionSet.COLLECT_SET,
-            FunctionSet.GROUP_ARRAY_INTERSECT);
+            FunctionSet.INTERSECT_COUNT, 
FunctionSet.ORTHOGONAL_BITMAP_UNION_COUNT, FunctionSet.COUNT,
+            "approx_count_distinct", "ndv", FunctionSet.BITMAP_UNION_INT, 
FunctionSet.BITMAP_UNION_COUNT,
+            "ndv_no_finalize", FunctionSet.WINDOW_FUNNEL, 
FunctionSet.RETENTION, FunctionSet.SEQUENCE_MATCH,
+            FunctionSet.SEQUENCE_COUNT, FunctionSet.MAP_AGG, 
FunctionSet.BITMAP_AGG, FunctionSet.ARRAY_AGG,
+            FunctionSet.COLLECT_LIST, FunctionSet.COLLECT_SET, 
FunctionSet.GROUP_ARRAY_INTERSECT);
 
     public static ImmutableSet<String> 
ALWAYS_NULLABLE_AGGREGATE_FUNCTION_NAME_SET =
             ImmutableSet.of("stddev_samp", "variance_samp", "var_samp", 
"percentile_approx", "first_value",
diff --git 
a/regression-test/data/datatype_p0/agg_state/nereids/test_agg_state_nereids.out 
b/regression-test/data/datatype_p0/agg_state/nereids/test_agg_state_nereids.out
index 8cdb1b8a59d..3acebc4b1a9 100644
--- 
a/regression-test/data/datatype_p0/agg_state/nereids/test_agg_state_nereids.out
+++ 
b/regression-test/data/datatype_p0/agg_state/nereids/test_agg_state_nereids.out
@@ -16,7 +16,7 @@
 
 -- !desc --
 k1     INT     Yes     true    \N      
-k2     AGG_STATE<max_by(INT, INT NULL)>        No      false   \N      GENERIC
+k2     AGG_STATE<arguments=max_by(INT, INT NULL), function_name=max_by, 
result_is_nullable=true>       No      false   \N      GENERIC
 
 -- !length1 --
 1      11
diff --git a/regression-test/data/datatype_p0/agg_state/test_agg_state.out 
b/regression-test/data/datatype_p0/agg_state/test_agg_state.out
index 0e1e5b6ed91..62deb001ab7 100644
--- a/regression-test/data/datatype_p0/agg_state/test_agg_state.out
+++ b/regression-test/data/datatype_p0/agg_state/test_agg_state.out
@@ -16,7 +16,7 @@
 
 -- !desc --
 k1     INT     Yes     true    \N      
-k2     AGG_STATE<max_by(INT, INT NULL)>        No      false   \N      GENERIC
+k2     AGG_STATE<arguments=max_by(INT, INT NULL), function_name=max_by, 
result_is_nullable=true>       No      false   \N      GENERIC
 
 -- !length1 --
 1      11
diff --git 
a/regression-test/data/mv_p0/agg_state/diffrent_serialize/diffrent_serialize.out
 
b/regression-test/data/mv_p0/agg_state/diffrent_serialize/diffrent_serialize.out
index 87d4d391e55..5f569bbbae4 100644
--- 
a/regression-test/data/mv_p0/agg_state/diffrent_serialize/diffrent_serialize.out
+++ 
b/regression-test/data/mv_p0/agg_state/diffrent_serialize/diffrent_serialize.out
@@ -27,3 +27,17 @@
 2      1
 3      1
 
+-- !select_mv --
+\N     \N
+-4     -4
+1      1
+2      2
+3      \N
+
+-- !select_mv --
+\N     d
+-4     d
+1      a
+2      b
+3      c
+
diff --git 
a/regression-test/suites/datatype_p0/agg_state/max/test_agg_state_max.groovy 
b/regression-test/suites/datatype_p0/agg_state/max/test_agg_state_max.groovy
index 4b8f07284ee..7f48df72a7e 100644
--- a/regression-test/suites/datatype_p0/agg_state/max/test_agg_state_max.groovy
+++ b/regression-test/suites/datatype_p0/agg_state/max/test_agg_state_max.groovy
@@ -30,7 +30,7 @@ suite("test_agg_state_max") {
 
     test {
         sql "insert into a_table values(100,max_state(null));"
-        exception "can not cast from origin type AGG_STATE<max(NULL_TYPE 
NULL)> to target type=AGG_STATE<max(INT)>"
+        exception "can not cast from origin type AGG_STATE"
     }
 
     sql """insert into a_table
diff --git 
a/regression-test/suites/mv_p0/agg_state/diffrent_serialize/diffrent_serialize.groovy
 
b/regression-test/suites/mv_p0/agg_state/diffrent_serialize/diffrent_serialize.groovy
index 9117615e28e..36bec9d30e2 100644
--- 
a/regression-test/suites/mv_p0/agg_state/diffrent_serialize/diffrent_serialize.groovy
+++ 
b/regression-test/suites/mv_p0/agg_state/diffrent_serialize/diffrent_serialize.groovy
@@ -39,6 +39,8 @@ suite ("diffrent_serialize") {
 
     createMV("create materialized view mv1_1 as select 
k1,bitmap_intersect(to_bitmap(k2)) from d_table group by k1;")
     createMV("create materialized view mv1 as select k1,bitmap_agg(k2) from 
d_table group by k1;")
+    createMV("create materialized view mv1_2 as select k1, 
multi_distinct_group_concat(k4) from d_table group by k1 order by k1;")
+    createMV("create materialized view mv1_3 as select k1, 
multi_distinct_sum(k3) from d_table group by k1 order by k1;")
     /*
     createMV("create materialized view mv2 as select k1,map_agg(k2,k3) from 
d_table group by k1;")
     createMV("create materialized view mv3 as select k1,array_agg(k2) from 
d_table group by k1;")
@@ -72,6 +74,19 @@ suite ("diffrent_serialize") {
     }
     qt_select_mv "select k1,bitmap_count(bitmap_agg(k2)) from d_table group by 
k1 order by 1;"
 
+    explain {
+        sql("select k1, multi_distinct_sum(k3) from d_table group by k1 order 
by k1;")
+        contains "(mv1_3)"
+    }
+    qt_select_mv "select k1, multi_distinct_sum(k3) from d_table group by k1 
order by k1;"
+
+    explain {
+        sql("select k1, multi_distinct_group_concat(k4) from d_table group by 
k1 order by k1;")
+        contains "(mv1_2)"
+    }
+    qt_select_mv "select k1, multi_distinct_group_concat(k4) from d_table 
group by k1 order by k1;"
+
+
 /*
     explain {
         sql("select k1,map_agg(k2,k3) from d_table group by k1 order by 1;")


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to