Helper functions to check params

This commit is contained in:
Adam Guo 2025-03-04 16:18:12 +00:00
parent 437b2d22d7
commit 23e897c32e
2 changed files with 65 additions and 0 deletions

View file

@ -21,6 +21,7 @@
#include "catalog/pg_namespace_d.h"
#include "catalog/pg_trigger_d.h"
#include "commands/trigger.h"
#include "miscadmin.h"
#include "parser/analyze.h"
#include "parser/parser.h"
#include "parser/scansup.h"
@ -50,6 +51,8 @@ static void parseNameAndColumns(const char *string, List **names, List **colName
static void PgIvmObjectAccessHook(ObjectAccessType access, Oid classId,
Oid objectId, int subId, void *arg);
static bool check_string_in_guc_list(const char *str, const char *guc_var,
const char *guc_name);
/* SQL callable functions */
PG_FUNCTION_INFO_V1(create_immv);
@ -458,3 +461,63 @@ PgIvmFuncName(char *name)
{
return list_make2(makeString("pgivm"), makeString(name));
}
/*
* pgIvmIsInSharedPreloadLibraries
*
* Check if pg_ivm is in the shared_preload_libraries parameter.
*/
bool
pgIvmIsInSharedPreloadLibraries()
{
return check_string_in_guc_list("pg_ivm", shared_preload_libraries_string,
"shared_preload_libraries");
}
/*
* pgIvmIsInSessionPreloadLibraries
*
* Check if pg_ivm is in the session_preload_libraries parameter.
*/
bool
pgIvmIsInSessionPreloadLibraries()
{
return check_string_in_guc_list("pg_ivm", session_preload_libraries_string,
"session_preload_libraries");
}
/*
* check_string_in_guc_list
*
* Check if a string is contained in a GUC parameter consisting of a
* comma-separated list of fields.
*/
static bool
check_string_in_guc_list(const char *str, const char *guc_var,
const char *guc_name)
{
bool match = false;
char *guc_copy;
List *guc_list = NIL;
ListCell *lc;
guc_copy = pstrdup(guc_var);
if (!SplitGUCList(guc_copy, ',', &guc_list))
elog(ERROR, "could not parse %s", guc_name);
foreach(lc, guc_list)
{
char *guc_str = (char *) lfirst(lc);
if (strcmp(guc_str, str) == 0)
{
match = true;
break;
}
}
pfree(guc_copy);
list_free(guc_list);
return match;
}

View file

@ -34,6 +34,8 @@ extern Oid PgIvmImmvRelationId(void);
extern Oid PgIvmImmvPrimaryKeyIndexId(void);
extern bool isImmv(Oid immv_oid);
extern List *PgIvmFuncName(char *name);
extern bool pgIvmIsInSharedPreloadLibraries(void);
extern bool pgIvmIsInSessionPreloadLibraries(void);
/* createas.c */