in ext/pg_query/pg_query_deparse.c [6350:6411]
static void deparseVariableSetStmt(StringInfo str, VariableSetStmt* variable_set_stmt)
{
ListCell *lc;
switch (variable_set_stmt->kind)
{
case VAR_SET_VALUE: /* SET var = value */
appendStringInfoString(str, "SET ");
if (variable_set_stmt->is_local)
appendStringInfoString(str, "LOCAL ");
deparseVarName(str, variable_set_stmt->name);
appendStringInfoString(str, " TO ");
deparseVarList(str, variable_set_stmt->args);
break;
case VAR_SET_DEFAULT: /* SET var TO DEFAULT */
appendStringInfoString(str, "SET ");
if (variable_set_stmt->is_local)
appendStringInfoString(str, "LOCAL ");
deparseVarName(str, variable_set_stmt->name);
appendStringInfoString(str, " TO DEFAULT");
break;
case VAR_SET_CURRENT: /* SET var FROM CURRENT */
appendStringInfoString(str, "SET ");
if (variable_set_stmt->is_local)
appendStringInfoString(str, "LOCAL ");
deparseVarName(str, variable_set_stmt->name);
appendStringInfoString(str, " FROM CURRENT");
break;
case VAR_SET_MULTI: /* special case for SET TRANSACTION ... */
Assert(variable_set_stmt->name != NULL);
appendStringInfoString(str, "SET ");
if (variable_set_stmt->is_local)
appendStringInfoString(str, "LOCAL ");
if (strcmp(variable_set_stmt->name, "TRANSACTION") == 0)
{
appendStringInfoString(str, "TRANSACTION ");
deparseTransactionModeList(str, variable_set_stmt->args);
}
else if (strcmp(variable_set_stmt->name, "SESSION CHARACTERISTICS") == 0)
{
appendStringInfoString(str, "SESSION CHARACTERISTICS AS TRANSACTION ");
deparseTransactionModeList(str, variable_set_stmt->args);
}
else if (strcmp(variable_set_stmt->name, "TRANSACTION SNAPSHOT") == 0)
{
appendStringInfoString(str, "TRANSACTION SNAPSHOT ");
deparseStringLiteral(str, strVal(&castNode(A_Const, linitial(variable_set_stmt->args))->val));
}
else
{
Assert(false);
}
break;
case VAR_RESET: /* RESET var */
appendStringInfoString(str, "RESET ");
deparseVarName(str, variable_set_stmt->name);
break;
case VAR_RESET_ALL: /* RESET ALL */
appendStringInfoString(str, "RESET ALL");
break;
}
}