@@ -236,6 +236,14 @@ sh_pow2(uint64 num)
236
236
return ((uint64 ) 1 ) << sh_log2 (num );
237
237
}
238
238
239
+ #ifdef FRONTEND
240
+ #define sh_error (...) pg_log_error(__VA_ARGS__)
241
+ #define sh_log (...) pg_log_info(__VA_ARGS__)
242
+ #else
243
+ #define sh_error (...) elog(ERROR, __VA_ARGS__)
244
+ #define sh_log (...) elog(LOG, __VA_ARGS__)
245
+ #endif
246
+
239
247
#endif
240
248
241
249
/*
@@ -258,8 +266,8 @@ SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint32 newsize)
258
266
* Verify that allocation of ->data is possible on this platform, without
259
267
* overflowing Size.
260
268
*/
261
- if ((((uint64 ) sizeof (SH_ELEMENT_TYPE )) * size ) >= MaxAllocHugeSize )
262
- elog ( ERROR , "hash table too large" );
269
+ if ((((uint64 ) sizeof (SH_ELEMENT_TYPE )) * size ) >= SIZE_MAX / 2 )
270
+ sh_error ( "hash table too large" );
263
271
264
272
/* now set size */
265
273
tb -> size = size ;
@@ -549,7 +557,7 @@ SH_INSERT_HASH_INTERNAL(SH_TYPE * tb, SH_KEY_TYPE key, uint32 hash, bool *found)
549
557
{
550
558
if (tb -> size == SH_MAX_SIZE )
551
559
{
552
- elog ( ERROR , "hash table size exceeded" );
560
+ sh_error ( "hash table size exceeded" );
553
561
}
554
562
555
563
/*
@@ -1001,7 +1009,7 @@ SH_STAT(SH_TYPE * tb)
1001
1009
avg_collisions = 0 ;
1002
1010
}
1003
1011
1004
- 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" ,
1012
+ 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" ,
1005
1013
tb -> size , tb -> members , fillfactor , total_chain_length , max_chain_length , avg_chain_length ,
1006
1014
total_collisions , max_collisions , avg_collisions );
1007
1015
}
0 commit comments