mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
injection_points: Add injection_points_list()
This function can be used to retrieve the information about all the
injection points attached to a cluster, providing coverage for
InjectionPointList() introduced in 7b2eb72b1b.
The original proposal turned around a system function, but that would
not be backpatchable to stable branches. It was also a bit weird to
have a system function that fails depending on if the build allows
injection points or not.
Reviewed-by: Aleksander Alekseev <aleksander@timescale.com>
Reviewed-by: Rahila Syed <rahilasyed90@gmail.com>
Discussion: https://postgr.es/m/Z_xYkA21KyLEHvWR@paquier.xyz
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
#include "postgres.h"
|
||||
|
||||
#include "fmgr.h"
|
||||
#include "funcapi.h"
|
||||
#include "injection_stats.h"
|
||||
#include "miscadmin.h"
|
||||
#include "nodes/pg_list.h"
|
||||
@@ -545,6 +546,44 @@ injection_points_detach(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
|
||||
/*
|
||||
* SQL function for listing all the injection points attached.
|
||||
*/
|
||||
PG_FUNCTION_INFO_V1(injection_points_list);
|
||||
Datum
|
||||
injection_points_list(PG_FUNCTION_ARGS)
|
||||
{
|
||||
#define NUM_INJECTION_POINTS_LIST 3
|
||||
ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo;
|
||||
List *inj_points;
|
||||
ListCell *lc;
|
||||
|
||||
/* Build a tuplestore to return our results in */
|
||||
InitMaterializedSRF(fcinfo, 0);
|
||||
|
||||
inj_points = InjectionPointList();
|
||||
|
||||
foreach(lc, inj_points)
|
||||
{
|
||||
Datum values[NUM_INJECTION_POINTS_LIST];
|
||||
bool nulls[NUM_INJECTION_POINTS_LIST];
|
||||
InjectionPointData *inj_point = lfirst(lc);
|
||||
|
||||
memset(values, 0, sizeof(values));
|
||||
memset(nulls, 0, sizeof(nulls));
|
||||
|
||||
values[0] = PointerGetDatum(cstring_to_text(inj_point->name));
|
||||
values[1] = PointerGetDatum(cstring_to_text(inj_point->library));
|
||||
values[2] = PointerGetDatum(cstring_to_text(inj_point->function));
|
||||
|
||||
/* shove row into tuplestore */
|
||||
tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls);
|
||||
}
|
||||
|
||||
return (Datum) 0;
|
||||
#undef NUM_INJECTION_POINTS_LIST
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_PG_init(void)
|
||||
|
||||
Reference in New Issue
Block a user