Use int64 instead of long in incremental sort code
authorDavid Rowley <drowley@postgresql.org>
Sun, 2 Aug 2020 02:24:46 +0000 (14:24 +1200)
committerDavid Rowley <drowley@postgresql.org>
Sun, 2 Aug 2020 02:24:46 +0000 (14:24 +1200)
Windows 64bit has 4-byte long values which is not suitable for tracking
disk space usage in the incremental sort code. Let's just make all these
fields int64s.

Author: James Coleman
Discussion: https://postgr.es/m/CAApHDvpky%2BUhof8mryPf5i%3D6e6fib2dxHqBrhp0Qhu0NeBhLJw%40mail.gmail.com
Backpatch-through: 13, where the incremental sort code was added

src/backend/commands/explain.c
src/include/nodes/execnodes.h
src/include/utils/tuplesort.h

index 54e3797a15b6260fcfb776325dfb434566d71476..1e565fd3375523e0680ed55b497d152d5fdfed8f 100644 (file)
@@ -2676,7 +2676,7 @@ show_sort_info(SortState *sortstate, ExplainState *es)
        TuplesortInstrumentation stats;
        const char *sortMethod;
        const char *spaceType;
-       long        spaceUsed;
+       int64       spaceUsed;
 
        tuplesort_get_stats(state, &stats);
        sortMethod = tuplesort_method_name(stats.sortMethod);
@@ -2686,7 +2686,7 @@ show_sort_info(SortState *sortstate, ExplainState *es)
        if (es->format == EXPLAIN_FORMAT_TEXT)
        {
            ExplainIndentText(es);
-           appendStringInfo(es->str, "Sort Method: %s  %s: %ldkB\n",
+           appendStringInfo(es->str, "Sort Method: %s  %s: " INT64_FORMAT "kB\n",
                             sortMethod, spaceType, spaceUsed);
        }
        else
@@ -2715,7 +2715,7 @@ show_sort_info(SortState *sortstate, ExplainState *es)
            TuplesortInstrumentation *sinstrument;
            const char *sortMethod;
            const char *spaceType;
-           long        spaceUsed;
+           int64       spaceUsed;
 
            sinstrument = &sortstate->shared_info->sinstrument[n];
            if (sinstrument->sortMethod == SORT_TYPE_STILL_IN_PROGRESS)
@@ -2731,7 +2731,7 @@ show_sort_info(SortState *sortstate, ExplainState *es)
            {
                ExplainIndentText(es);
                appendStringInfo(es->str,
-                                "Sort Method: %s  %s: %ldkB\n",
+                                "Sort Method: %s  %s: " INT64_FORMAT "kB\n",
                                 sortMethod, spaceType, spaceUsed);
            }
            else
@@ -2795,23 +2795,23 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo,
 
        if (groupInfo->maxMemorySpaceUsed > 0)
        {
-           long        avgSpace = groupInfo->totalMemorySpaceUsed / groupInfo->groupCount;
+           int64       avgSpace = groupInfo->totalMemorySpaceUsed / groupInfo->groupCount;
            const char *spaceTypeName;
 
            spaceTypeName = tuplesort_space_type_name(SORT_SPACE_TYPE_MEMORY);
-           appendStringInfo(es->str, "  Average %s: %ldkB  Peak %s: %ldkB",
+           appendStringInfo(es->str, "  Average %s: " INT64_FORMAT "kB  Peak %s: " INT64_FORMAT "kB",
                             spaceTypeName, avgSpace,
                             spaceTypeName, groupInfo->maxMemorySpaceUsed);
        }
 
        if (groupInfo->maxDiskSpaceUsed > 0)
        {
-           long        avgSpace = groupInfo->totalDiskSpaceUsed / groupInfo->groupCount;
+           int64       avgSpace = groupInfo->totalDiskSpaceUsed / groupInfo->groupCount;
 
            const char *spaceTypeName;
 
            spaceTypeName = tuplesort_space_type_name(SORT_SPACE_TYPE_DISK);
-           appendStringInfo(es->str, "  Average %s: %ldkB  Peak %s: %ldkB",
+           appendStringInfo(es->str, "  Average %s: " INT64_FORMAT "kB  Peak %s: " INT64_FORMAT "kB",
                             spaceTypeName, avgSpace,
                             spaceTypeName, groupInfo->maxDiskSpaceUsed);
        }
@@ -2829,7 +2829,7 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo,
 
        if (groupInfo->maxMemorySpaceUsed > 0)
        {
-           long        avgSpace = groupInfo->totalMemorySpaceUsed / groupInfo->groupCount;
+           int64       avgSpace = groupInfo->totalMemorySpaceUsed / groupInfo->groupCount;
            const char *spaceTypeName;
            StringInfoData memoryName;
 
@@ -2846,7 +2846,7 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo,
        }
        if (groupInfo->maxDiskSpaceUsed > 0)
        {
-           long        avgSpace = groupInfo->totalDiskSpaceUsed / groupInfo->groupCount;
+           int64       avgSpace = groupInfo->totalDiskSpaceUsed / groupInfo->groupCount;
            const char *spaceTypeName;
            StringInfoData diskName;
 
index 6f96b31fb438303f74911706f9a37f9b0196e9c6..cf832d7f909754b3e4a529ba004262dda6140518 100644 (file)
@@ -2032,10 +2032,10 @@ typedef struct SortState
 typedef struct IncrementalSortGroupInfo
 {
    int64       groupCount;
-   long        maxDiskSpaceUsed;
-   long        totalDiskSpaceUsed;
-   long        maxMemorySpaceUsed;
-   long        totalMemorySpaceUsed;
+   int64       maxDiskSpaceUsed;
+   int64       totalDiskSpaceUsed;
+   int64       maxMemorySpaceUsed;
+   int64       totalMemorySpaceUsed;
    bits32      sortMethods;    /* bitmask of TuplesortMethod */
 } IncrementalSortGroupInfo;
 
index d992b4875a5e85095140a1201a612904c199442a..9e76666fe9483701e7cfb0acf0c0fabd06b7f720 100644 (file)
@@ -90,7 +90,7 @@ typedef struct TuplesortInstrumentation
 {
    TuplesortMethod sortMethod; /* sort algorithm used */
    TuplesortSpaceType spaceType;   /* type of space spaceUsed represents */
-   long        spaceUsed;      /* space consumption, in kB */
+   int64       spaceUsed;      /* space consumption, in kB */
 } TuplesortInstrumentation;