diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index 028c5b71c27..2bf2785f5ec 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -2760,10 +2760,11 @@ normalize_datum(Datum orig, SortSupport ssup) * DEALINGS IN THE SOFTWARE. */ static void -radix_sort_tuple(SortTuple *begin, size_t n_elems, int level, Tuplesortstate *state) +radix_sort_tuple(SortTuple *begin, size_t n_elems, int level, Tuplesortstate *state, + RadixPartitionInfo * partitions, uint8_t *remaining_partitions) { - RadixPartitionInfo partitions[256] = {0}; - uint8_t remaining_partitions[256] = {0}; + /* RadixPartitionInfo partitions[256] = {0}; */ + /* uint8_t remaining_partitions[256] = {0}; */ size_t total = 0; int num_partitions = 0; int num_remaining; @@ -2771,6 +2772,9 @@ radix_sort_tuple(SortTuple *begin, size_t n_elems, int level, Tuplesortstate *st size_t start_offset = 0; SortTuple *partition_begin = begin; + memset(partitions, 0, sizeof(RadixPartitionInfo) * 256); + memset(remaining_partitions, 0, sizeof(uint8_t) * 256); + /* count number of occurrences of each byte */ for (SortTuple *tup = begin; tup < begin + n_elems; tup++) { @@ -2881,7 +2885,9 @@ radix_sort_tuple(SortTuple *begin, size_t n_elems, int level, Tuplesortstate *st radix_sort_tuple(partition_begin, num_elements, level + 1, - state); + state, + partitions, + remaining_partitions); } } else if (state->base.onlyKey == NULL) @@ -3019,10 +3025,15 @@ sort_byvalue_datum(Tuplesortstate *state) } else { + RadixPartitionInfo partitions[256]; + uint8_t remaining_partitions[256]; + radix_sort_tuple(not_null_start, not_null_count, 0, - state); + state, + partitions, + remaining_partitions); } } }