From 9290693b090ec69bf837f2a2f53e1f1663bdc8ef Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Mon, 17 Aug 2020 20:59:32 +1200 Subject: [PATCH v2 2/5] Use sort_template.h for compactify_tuples(). Since compactify_tuples() is called often, a specialized sort function for sorting tuple offsets can give measurable speed-up. Discussion: https://postgr.es/m/CA%2BhUKGKMQFVpjr106gRhwk6R-nXv0qOcTreZuQzxgpHESAL6dw%40mail.gmail.com --- src/backend/storage/page/bufpage.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index d708117a40..f81fa8cf3d 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -421,13 +421,13 @@ typedef struct itemIdSortData } itemIdSortData; typedef itemIdSortData *itemIdSort; -static int -itemoffcompare(const void *itemidp1, const void *itemidp2) -{ - /* Sort in decreasing itemoff order */ - return ((itemIdSort) itemidp2)->itemoff - - ((itemIdSort) itemidp1)->itemoff; -} +/* Create a specialized sort function for descending offset order. */ +#define ST_SORT qsort_itemoff +#define ST_ELEMENT_TYPE itemIdSortData +#define ST_COMPARE(a, b) ((b)->itemoff - (a)->itemoff) +#define ST_SCOPE static +#define ST_DEFINE +#include "lib/sort_template.h" /* * After removing or marking some line pointers unused, move the tuples to @@ -441,8 +441,7 @@ compactify_tuples(itemIdSort itemidbase, int nitems, Page page) int i; /* sort itemIdSortData array into decreasing itemoff order */ - qsort((char *) itemidbase, nitems, sizeof(itemIdSortData), - itemoffcompare); + qsort_itemoff(itemidbase, nitems); upper = phdr->pd_special; for (i = 0; i < nitems; i++) -- 2.20.1