From f61abbbb99e2a5965c8864144e332bf76eab7913 Mon Sep 17 00:00:00 2001
From: David Rowley <dgrowley@gmail.com>
Date: Thu, 6 Nov 2025 20:00:39 +1300
Subject: [PATCH v1 1/2] Get rid of long datatype in CATCACHE_STATS enabled
 builds

long is 32-bits on Windows 64 bit.  Switch to a datatype that's 64-bits
on all platforms.  While we're there, use an unsigned type as these
fields count things that have occurred, of which it's not possible to
have negative numbers of.
---
 src/backend/utils/cache/catcache.c | 20 ++++++++++----------
 src/include/utils/catcache.h       | 14 +++++++-------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 30ac1bd91be..7e201df0b8f 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -461,14 +461,14 @@ static void
 CatCachePrintStats(int code, Datum arg)
 {
 	slist_iter	iter;
-	long		cc_searches = 0;
-	long		cc_hits = 0;
-	long		cc_neg_hits = 0;
-	long		cc_newloads = 0;
-	long		cc_invals = 0;
-	long		cc_nlists = 0;
-	long		cc_lsearches = 0;
-	long		cc_lhits = 0;
+	uint64		cc_searches = 0;
+	uint64		cc_hits = 0;
+	uint64		cc_neg_hits = 0;
+	uint64		cc_newloads = 0;
+	uint64		cc_invals = 0;
+	uint64		cc_nlists = 0;
+	uint64		cc_lsearches = 0;
+	uint64		cc_lhits = 0;
 
 	slist_foreach(iter, &CacheHdr->ch_caches)
 	{
@@ -476,7 +476,7 @@ CatCachePrintStats(int code, Datum arg)
 
 		if (cache->cc_ntup == 0 && cache->cc_searches == 0)
 			continue;			/* don't print unused caches */
-		elog(DEBUG2, "catcache %s/%u: %d tup, %ld srch, %ld+%ld=%ld hits, %ld+%ld=%ld loads, %ld invals, %d lists, %ld lsrch, %ld lhits",
+		elog(DEBUG2, "catcache %s/%u: %d tup, %" PRIu64 " srch, %" PRIu64 "+%" PRIu64 "=%" PRIu64 " hits, %" PRIu64 "+%" PRIu64 "=%" PRIu64 " loads, %" PRIu64 " invals, %d lists, %" PRIu64 " lsrch, %" PRIu64 " lhits",
 			 cache->cc_relname,
 			 cache->cc_indexoid,
 			 cache->cc_ntup,
@@ -500,7 +500,7 @@ CatCachePrintStats(int code, Datum arg)
 		cc_lsearches += cache->cc_lsearches;
 		cc_lhits += cache->cc_lhits;
 	}
-	elog(DEBUG2, "catcache totals: %d tup, %ld srch, %ld+%ld=%ld hits, %ld+%ld=%ld loads, %ld invals, %ld lists, %ld lsrch, %ld lhits",
+	elog(DEBUG2, "catcache totals: %d tup, %" PRIu64 " srch, %" PRIu64 "+%" PRIu64 "=%" PRIu64 " hits, %" PRIu64 "+%" PRIu64 "=%" PRIu64 " loads, %" PRIu64 " invals, %" PRIu64 " lists, %" PRIu64 " lsrch, %" PRIu64 " lhits",
 		 CacheHdr->ch_ntup,
 		 cc_searches,
 		 cc_hits,
diff --git a/src/include/utils/catcache.h b/src/include/utils/catcache.h
index 00808e23f49..fdd733cf7d8 100644
--- a/src/include/utils/catcache.h
+++ b/src/include/utils/catcache.h
@@ -69,18 +69,18 @@ typedef struct catcache
 	 * doesn't break ABI for other modules
 	 */
 #ifdef CATCACHE_STATS
-	long		cc_searches;	/* total # searches against this cache */
-	long		cc_hits;		/* # of matches against existing entry */
-	long		cc_neg_hits;	/* # of matches against negative entry */
-	long		cc_newloads;	/* # of successful loads of new entry */
+	uint64		cc_searches;	/* total # searches against this cache */
+	uint64		cc_hits;		/* # of matches against existing entry */
+	uint64		cc_neg_hits;	/* # of matches against negative entry */
+	uint64		cc_newloads;	/* # of successful loads of new entry */
 
 	/*
 	 * cc_searches - (cc_hits + cc_neg_hits + cc_newloads) is number of failed
 	 * searches, each of which will result in loading a negative entry
 	 */
-	long		cc_invals;		/* # of entries invalidated from cache */
-	long		cc_lsearches;	/* total # list-searches */
-	long		cc_lhits;		/* # of matches against existing lists */
+	uint64		cc_invals;		/* # of entries invalidated from cache */
+	uint64		cc_lsearches;	/* total # list-searches */
+	uint64		cc_lhits;		/* # of matches against existing lists */
 #endif
 } CatCache;
 
-- 
2.43.0

