Commit da41d710 authored by Robert Haas's avatar Robert Haas

simplehash: Allow for use in frontend code.

Commit 48995040 removed the largest
barrier to use of simplehash in frontend code, but there's one more
problem: it uses elog(ERROR, ...) or elog(LOG, ...) in a couple of
places. Work around that by changing those to pg_log_error() and
pg_log_info() when FRONTEND is defined.

Patch by me, reviewed by Andres Freund.

Discussion: http://postgr.es/m/CA+Tgmob8oyh02NrZW=xCScB+5GyJ-jVowE3+TWTUmPF=FsGWTA@mail.gmail.com
parent 48995040
...@@ -236,6 +236,14 @@ sh_pow2(uint64 num) ...@@ -236,6 +236,14 @@ sh_pow2(uint64 num)
return ((uint64) 1) << sh_log2(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 #endif
/* /*
...@@ -258,8 +266,8 @@ SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint32 newsize) ...@@ -258,8 +266,8 @@ SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint32 newsize)
* Verify that allocation of ->data is possible on this platform, without * Verify that allocation of ->data is possible on this platform, without
* overflowing Size. * overflowing Size.
*/ */
if ((((uint64) sizeof(SH_ELEMENT_TYPE)) * size) >= MaxAllocHugeSize) if ((((uint64) sizeof(SH_ELEMENT_TYPE)) * size) >= SIZE_MAX / 2)
elog(ERROR, "hash table too large"); sh_error("hash table too large");
/* now set size */ /* now set size */
tb->size = size; tb->size = size;
...@@ -549,7 +557,7 @@ restart: ...@@ -549,7 +557,7 @@ restart:
{ {
if (tb->size == SH_MAX_SIZE) 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) ...@@ -1001,7 +1009,7 @@ SH_STAT(SH_TYPE * tb)
avg_collisions = 0; 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, tb->size, tb->members, fillfactor, total_chain_length, max_chain_length, avg_chain_length,
total_collisions, max_collisions, avg_collisions); total_collisions, max_collisions, avg_collisions);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment