in ext/pg_query/pg_query_deparse.c [6444:6500]
static void deparseVacuumStmt(StringInfo str, VacuumStmt *vacuum_stmt)
{
ListCell *lc = NULL;
ListCell *lc2 = NULL;
if (vacuum_stmt->is_vacuumcmd)
appendStringInfoString(str, "VACUUM ");
else
appendStringInfoString(str, "ANALYZE ");
if (list_length(vacuum_stmt->options) > 0)
{
appendStringInfoChar(str, '(');
foreach(lc, vacuum_stmt->options)
{
DefElem *def_elem = castNode(DefElem, lfirst(lc));
deparseGenericDefElemName(str, def_elem->defname);
if (def_elem->arg != NULL)
{
appendStringInfoChar(str, ' ');
if (IsA(def_elem->arg, Integer) || IsA(def_elem->arg, Float))
deparseNumericOnly(str, (Value *) def_elem->arg);
else if (IsA(def_elem->arg, String))
deparseOptBooleanOrString(str, strVal(def_elem->arg));
else
Assert(false);
}
if (lnext(vacuum_stmt->options, lc))
appendStringInfoString(str, ", ");
}
appendStringInfoString(str, ") ");
}
foreach(lc, vacuum_stmt->rels)
{
Assert(IsA(lfirst(lc), VacuumRelation));
VacuumRelation *rel = castNode(VacuumRelation, lfirst(lc));
deparseRangeVar(str, rel->relation, DEPARSE_NODE_CONTEXT_NONE);
if (list_length(rel->va_cols) > 0)
{
appendStringInfoChar(str, '(');
foreach(lc2, rel->va_cols)
{
appendStringInfoString(str, quote_identifier(strVal(lfirst(lc2))));
if (lnext(rel->va_cols, lc2))
appendStringInfoString(str, ", ");
}
appendStringInfoChar(str, ')');
}
if (lnext(vacuum_stmt->rels, lc))
appendStringInfoString(str, ", ");
}
removeTrailingSpace(str);
}