static void deparseVacuumStmt()

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);
}