tuplesort_chaoli.diff
application/octet-stream
Filename: tuplesort_chaoli.diff
Type: application/octet-stream
Part: 0
Message:
Re: tuple radix sort
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/utils/sort/tuplesort.c | 16 | 5 |
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);
}
}
}