From f248a7f9ca8c85426f89de29caac0135b374c107 Mon Sep 17 00:00:00 2001
From: Stepan Neretin <sndcppg@gmail.com>
Date: Sun, 8 Sep 2024 15:44:07 +0700
Subject: [PATCH v2 06/10] Optimize int16 Array Sorting in CreateStatistics

Optimized the sorting of int16 arrays in the CreateStatistics function by replacing qsort with the custom sort_int_16_arr function generated via the template-based sorting mechanism.

Changes:
- Introduced a new sort_int_16_arr function using the sorting template.
- Defined macros ST_SORT, ST_ELEMENT_TYPE, ST_COMPARE, ST_SCOPE, and ST_DEFINE for sort_int_16_arr.
- Replaced qsort(attnums, nattnums, sizeof(int16), compare_int16) with sort_int_16_arr(attnums, nattnums).
---
 src/backend/commands/statscmds.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c
index 1db3ef69d2..23952e83fd 100644
--- a/src/backend/commands/statscmds.c
+++ b/src/backend/commands/statscmds.c
@@ -55,6 +55,13 @@ compare_int16(const void *a, const void *b)
 	return (av - bv);
 }
 
+#define ST_SORT sort_int_16_arr
+#define ST_ELEMENT_TYPE int16
+#define ST_COMPARE(a, b) compare_int16(a, b)
+#define ST_SCOPE static
+#define ST_DEFINE
+#include <lib/sort_template.h>
+
 /*
  *		CREATE STATISTICS
  */
@@ -404,7 +411,7 @@ CreateStatistics(CreateStatsStmt *stmt)
 	 * it does not hurt (it does not matter for the contents, unlike for
 	 * indexes, for example).
 	 */
-	qsort(attnums, nattnums, sizeof(int16), compare_int16);
+	sort_int_16_arr(attnums, nattnums);
 
 	/*
 	 * Check for duplicates in the list of columns. The attnums are sorted so
-- 
2.43.0

