From 7f39b2220b309defa31e4333d0a0c56eb0ee72a4 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Tue, 10 Dec 2019 11:32:40 -0500
Subject: [PATCH 2/2] simplehash: Allow use in frontend code.

When compiled with FRONTEND defined, use pg_log_error and
pg_log_info in place of elog(ERROR, ...) and elog(LOG, ...).
---
 src/include/lib/simplehash.h | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/include/lib/simplehash.h b/src/include/lib/simplehash.h
index 403837a407..5a6783f653 100644
--- a/src/include/lib/simplehash.h
+++ b/src/include/lib/simplehash.h
@@ -236,6 +236,14 @@ sh_pow2(uint64 num)
 	return ((uint64) 1) << sh_log2(num);
 }
 
+#ifdef FRONTEND
+#define sh_error(...) pg_log_error(__VA_ARGS__)
+#define sh_log(...) pg_log_info(__VA_ARGS__)
+#else
+#define sh_error(...) elog(ERROR, __VA_ARGS__)
+#define sh_log(...) elog(LOG, __VA_ARGS__)
+#endif
+
 #endif
 
 /*
@@ -258,8 +266,8 @@ SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint32 newsize)
 	 * Verify that allocation of ->data is possible on this platform, without
 	 * overflowing Size.
 	 */
-	if ((((uint64) sizeof(SH_ELEMENT_TYPE)) * size) >= MaxAllocHugeSize)
-		elog(ERROR, "hash table too large");
+	if ((((uint64) sizeof(SH_ELEMENT_TYPE)) * size) >= SIZE_MAX / 2)
+		sh_error("hash table too large");
 
 	/* now set size */
 	tb->size = size;
@@ -549,7 +557,7 @@ restart:
 	{
 		if (tb->size == SH_MAX_SIZE)
 		{
-			elog(ERROR, "hash table size exceeded");
+			sh_error("hash table size exceeded");
 		}
 
 		/*
@@ -1001,7 +1009,7 @@ SH_STAT(SH_TYPE * tb)
 		avg_collisions = 0;
 	}
 
-	elog(LOG, "size: " UINT64_FORMAT ", members: %u, filled: %f, total chain: %u, max chain: %u, avg chain: %f, total_collisions: %u, max_collisions: %i, avg_collisions: %f",
+	sh_log("size: " UINT64_FORMAT ", members: %u, filled: %f, total chain: %u, max chain: %u, avg chain: %f, total_collisions: %u, max_collisions: %i, avg_collisions: %f",
 		 tb->size, tb->members, fillfactor, total_chain_length, max_chain_length, avg_chain_length,
 		 total_collisions, max_collisions, avg_collisions);
 }
-- 
2.17.2 (Apple Git-113)

