@@ -40,7 +40,16 @@ int plpgsql_check_mode = PLPGSQL_CHECK_MODE_BY_FUNCTION;
4040
4141typedef struct plpgsql_hashent
4242{
43+ #if PG_VERSION_NUM >= 180000
44+
45+ CachedFunctionHashKey key ;
46+
47+ #else
48+
4349 PLpgSQL_func_hashkey key ;
50+
51+ #endif
52+
4453 TransactionId fn_xmin ;
4554 ItemPointerData fn_tid ;
4655 bool is_checked ;
@@ -210,8 +219,16 @@ plpgsql_check_function_internal(plpgsql_check_result_info *ri,
210219 * Mark the function as busy, ensure higher than zero usage. There is no
211220 * reason for protection function against delete, but I afraid of asserts.
212221 */
222+ #if PG_VERSION_NUM >= 180000
223+
224+ function -> cfunc .use_count ++ ;
225+
226+ #else
227+
213228 function -> use_count ++ ;
214229
230+ #endif
231+
215232 /* Create a fake runtime environment and process check */
216233 switch (cinfo -> trigtype )
217234 {
@@ -229,7 +246,16 @@ plpgsql_check_function_internal(plpgsql_check_result_info *ri,
229246 }
230247
231248 function -> cur_estate = cur_estate ;
249+
250+ #if PG_VERSION_NUM >= 180000
251+
252+ function -> cfunc .use_count -- ;
253+
254+ #else
255+
232256 function -> use_count -- ;
257+
258+ #endif
233259 }
234260 else
235261 elog (NOTICE , "plpgsql_check is disabled" );
@@ -268,7 +294,17 @@ plpgsql_check_function_internal(plpgsql_check_result_info *ri,
268294 if (function )
269295 {
270296 function -> cur_estate = cur_estate ;
297+
298+ #if PG_VERSION_NUM >= 180000
299+
300+ function -> cfunc .use_count -- ;
301+
302+ #else
303+
271304 function -> use_count -- ;
305+
306+ #endif
307+
272308 release_exprs (cstate .exprs );
273309 }
274310
@@ -1320,7 +1356,17 @@ plpgsql_check_HashTableInit(void)
13201356 Assert (plpgsql_check_HashTable == NULL );
13211357
13221358 memset (& ctl , 0 , sizeof (ctl ));
1359+
1360+ #if PG_VERSION_NUM >= 180000
1361+
1362+ ctl .keysize = sizeof (CachedFunctionHashKey );
1363+
1364+ #else
1365+
13231366 ctl .keysize = sizeof (PLpgSQL_func_hashkey );
1367+
1368+ #endif
1369+
13241370 ctl .entrysize = sizeof (plpgsql_check_HashEnt );
13251371 plpgsql_check_HashTable = hash_create ("plpgsql_check function cache" ,
13261372 FUNCS_PER_USER ,
@@ -1337,6 +1383,22 @@ plpgsql_check_is_checked(PLpgSQL_function *func)
13371383{
13381384 plpgsql_check_HashEnt * hentry ;
13391385
1386+ #if PG_VERSION_NUM >= 180000
1387+
1388+ if (!func -> cfunc .fn_hashkey )
1389+ return false;
1390+
1391+ hentry = (plpgsql_check_HashEnt * ) hash_search (plpgsql_check_HashTable ,
1392+ (void * ) func -> cfunc .fn_hashkey ,
1393+ HASH_FIND ,
1394+ NULL );
1395+
1396+ if (hentry != NULL && hentry -> fn_xmin == func -> cfunc .fn_xmin &&
1397+ ItemPointerEquals (& hentry -> fn_tid , & func -> cfunc .fn_tid ))
1398+ return hentry -> is_checked ;
1399+
1400+ #else
1401+
13401402 if (!func -> fn_hashkey )
13411403 return false;
13421404
@@ -1349,6 +1411,8 @@ plpgsql_check_is_checked(PLpgSQL_function *func)
13491411 ItemPointerEquals (& hentry -> fn_tid , & func -> fn_tid ))
13501412 return hentry -> is_checked ;
13511413
1414+ #endif
1415+
13521416 return false;
13531417}
13541418
@@ -1365,6 +1429,18 @@ plpgsql_check_mark_as_checked(PLpgSQL_function *func)
13651429 plpgsql_check_HashEnt * hentry ;
13661430 bool found ;
13671431
1432+ #if PG_VERSION_NUM >= 180000
1433+
1434+ hentry = (plpgsql_check_HashEnt * ) hash_search (plpgsql_check_HashTable ,
1435+ (void * ) func -> cfunc .fn_hashkey ,
1436+ HASH_ENTER ,
1437+ & found );
1438+
1439+ hentry -> fn_xmin = func -> cfunc .fn_xmin ;
1440+ hentry -> fn_tid = func -> cfunc .fn_tid ;
1441+
1442+ #else
1443+
13681444 hentry = (plpgsql_check_HashEnt * ) hash_search (plpgsql_check_HashTable ,
13691445 (void * ) func -> fn_hashkey ,
13701446 HASH_ENTER ,
@@ -1373,6 +1449,7 @@ plpgsql_check_mark_as_checked(PLpgSQL_function *func)
13731449 hentry -> fn_xmin = func -> fn_xmin ;
13741450 hentry -> fn_tid = func -> fn_tid ;
13751451
1452+ #endif
13761453 hentry -> is_checked = true;
13771454 }
13781455}
0 commit comments