mirror of https://github.com/citusdata/citus.git
61 lines
1.6 KiB
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));
|
|
}
|