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

maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit 7bc6fd48e67478c7084e19c866a267b68782a67a
Author: Haotian Chen <[email protected]>
AuthorDate: Fri Mar 10 16:59:39 2023 +0800

    Fix wrong number of maxAttrNum in TupleSplitState (#14927)
    
    we cannot get corrent number of projecting targets for executing TupleSplit 
Node
    if wrong maxAttrNum in TupleSplitState, that cause wrong results in 
multi-dqa sql.
    ```
    select count(distinct a), count(distinct b) from dqa_f4 group by c;
    ```
    For each splited tuple, we also need to project column `c` as group column 
besides
    distinct column `a` and `b`. As a result, toal maxAttrNum of TupleSplit is 
three instead of two,
    which also decided totals projection columns of Node Tuplesplit.
    To figure maxAttrNum correctly, we need to calculate again after we 
initiated all elements
    in TupleSplitState.
---
 src/backend/executor/nodeTupleSplit.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/backend/executor/nodeTupleSplit.c 
b/src/backend/executor/nodeTupleSplit.c
index 85a9f3ecab..638bf8e76e 100644
--- a/src/backend/executor/nodeTupleSplit.c
+++ b/src/backend/executor/nodeTupleSplit.c
@@ -103,8 +103,6 @@ ExecInitTupleSplit(TupleSplit *node, EState *estate, int 
eflags)
                i ++;
        }
 
-       tup_spl_state->maxAttrNum = maxAttrNum;
-
        /*
         * fetch group by expr bitmap set
         */
@@ -146,6 +144,15 @@ ExecInitTupleSplit(TupleSplit *node, EState *estate, int 
eflags)
                bms_free(orig_bms);
        }
 
+       /*
+        * Update maxAttrNum which is used to calculate projection number
+        * of ExecTupleSplit
+        */
+       int x = bms_prev_member(skip_split_bms, -1);
+       if (x > maxAttrNum)
+               maxAttrNum = x;
+       tup_spl_state->maxAttrNum = maxAttrNum;
+
        bms_free(skip_split_bms);
 
        return tup_spl_state;


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

Reply via email to