citus/src/backend/distributed/deparser/qualify_role_stmt.c

61 lines
1.6 KiB
C

/*-------------------------------------------------------------------------
*
* qualify_role_stmt.c
* Functions specialized in fully qualifying all role statements. These
* functions are dispatched from qualify.c
*
* Fully qualifying role statements consists of adding the current database
* name, session user, current use, and current configuration values.
*
* Goal would be that the deparser functions for these statements can
* serialize the statement without any external lookups.
*
* Copyright (c), Citus Data, Inc.
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#include "distributed/deparser.h"
#include "nodes/nodes.h"
#include "utils/guc.h"
static void QualifyVarSetCurrent(VariableSetStmt *setStmt);
/*
* QualifyAlterRoleSetStmt transforms a
* ALTER ROLE .. SET ..
* statement in place and makes the settings fully qualified.
*/
void
QualifyAlterRoleSetStmt(Node *node)
{
AlterRoleSetStmt *stmt = castNode(AlterRoleSetStmt, node);
VariableSetStmt *setStmt = stmt->setstmt;
if (setStmt->kind == VAR_SET_CURRENT)
{
QualifyVarSetCurrent(setStmt);
}
}
/*
* QualifyVarSetCurrent transforms a
* FROM CURRENT
* into a
* SET config_name TO 'config_value'
* VariableSetStmt in place and hence makes it fully qualified.
*/
static void
QualifyVarSetCurrent(VariableSetStmt *setStmt)
{
char *configurationName = setStmt->name;
char *configValue = GetConfigOptionByName(configurationName, NULL, false);
setStmt->kind = VAR_SET_VALUE;
setStmt->args = list_make1(MakeSetStatementArguments(configurationName, configValue));
}