in ext/pg_query/pg_query_deparse.c [5140:5385]
static void deparseDropStmt(StringInfo str, DropStmt *drop_stmt)
{
ListCell *lc;
List *l;
appendStringInfoString(str, "DROP ");
switch (drop_stmt->removeType)
{
case OBJECT_ACCESS_METHOD:
appendStringInfoString(str, "ACCESS METHOD ");
break;
case OBJECT_AGGREGATE:
appendStringInfoString(str, "AGGREGATE ");
break;
case OBJECT_CAST:
appendStringInfoString(str, "CAST ");
break;
case OBJECT_COLLATION:
appendStringInfoString(str, "COLLATION ");
break;
case OBJECT_CONVERSION:
appendStringInfoString(str, "CONVERSION ");
break;
case OBJECT_DOMAIN:
appendStringInfoString(str, "DOMAIN ");
break;
case OBJECT_EVENT_TRIGGER:
appendStringInfoString(str, "EVENT TRIGGER ");
break;
case OBJECT_EXTENSION:
appendStringInfoString(str, "EXTENSION ");
break;
case OBJECT_FDW:
appendStringInfoString(str, "FOREIGN DATA WRAPPER ");
break;
case OBJECT_FOREIGN_SERVER:
appendStringInfoString(str, "SERVER ");
break;
case OBJECT_FOREIGN_TABLE:
appendStringInfoString(str, "FOREIGN TABLE ");
break;
case OBJECT_FUNCTION:
appendStringInfoString(str, "FUNCTION ");
break;
case OBJECT_INDEX:
appendStringInfoString(str, "INDEX ");
break;
case OBJECT_LANGUAGE:
appendStringInfoString(str, "LANGUAGE ");
break;
case OBJECT_MATVIEW:
appendStringInfoString(str, "MATERIALIZED VIEW ");
break;
case OBJECT_OPCLASS:
appendStringInfoString(str, "OPERATOR CLASS ");
break;
case OBJECT_OPERATOR:
appendStringInfoString(str, "OPERATOR ");
break;
case OBJECT_OPFAMILY:
appendStringInfoString(str, "OPERATOR FAMILY ");
break;
case OBJECT_POLICY:
appendStringInfoString(str, "POLICY ");
break;
case OBJECT_PROCEDURE:
appendStringInfoString(str, "PROCEDURE ");
break;
case OBJECT_PUBLICATION:
appendStringInfoString(str, "PUBLICATION ");
break;
case OBJECT_ROUTINE:
appendStringInfoString(str, "ROUTINE ");
break;
case OBJECT_RULE:
appendStringInfoString(str, "RULE ");
break;
case OBJECT_SCHEMA:
appendStringInfoString(str, "SCHEMA ");
break;
case OBJECT_SEQUENCE:
appendStringInfoString(str, "SEQUENCE ");
break;
case OBJECT_STATISTIC_EXT:
appendStringInfoString(str, "STATISTICS ");
break;
case OBJECT_TABLE:
appendStringInfoString(str, "TABLE ");
break;
case OBJECT_TRANSFORM:
appendStringInfoString(str, "TRANSFORM ");
break;
case OBJECT_TRIGGER:
appendStringInfoString(str, "TRIGGER ");
break;
case OBJECT_TSCONFIGURATION:
appendStringInfoString(str, "TEXT SEARCH CONFIGURATION ");
break;
case OBJECT_TSDICTIONARY:
appendStringInfoString(str, "TEXT SEARCH DICTIONARY ");
break;
case OBJECT_TSPARSER:
appendStringInfoString(str, "TEXT SEARCH PARSER ");
break;
case OBJECT_TSTEMPLATE:
appendStringInfoString(str, "TEXT SEARCH TEMPLATE ");
break;
case OBJECT_TYPE:
appendStringInfoString(str, "TYPE ");
break;
case OBJECT_VIEW:
appendStringInfoString(str, "VIEW ");
break;
default:
// Other object types are not supported here in the parser
Assert(false);
}
if (drop_stmt->concurrent)
appendStringInfoString(str, "CONCURRENTLY ");
if (drop_stmt->missing_ok)
appendStringInfoString(str, "IF EXISTS ");
switch (drop_stmt->removeType)
{
// drop_type_any_name
case OBJECT_TABLE:
case OBJECT_SEQUENCE:
case OBJECT_VIEW:
case OBJECT_MATVIEW:
case OBJECT_INDEX:
case OBJECT_FOREIGN_TABLE:
case OBJECT_COLLATION:
case OBJECT_CONVERSION:
case OBJECT_STATISTIC_EXT:
case OBJECT_TSPARSER:
case OBJECT_TSDICTIONARY:
case OBJECT_TSTEMPLATE:
case OBJECT_TSCONFIGURATION:
deparseAnyNameList(str, drop_stmt->objects);
appendStringInfoChar(str, ' ');
break;
// drop_type_name
case OBJECT_ACCESS_METHOD:
case OBJECT_EVENT_TRIGGER:
case OBJECT_EXTENSION:
case OBJECT_FDW:
case OBJECT_PUBLICATION:
case OBJECT_SCHEMA:
case OBJECT_FOREIGN_SERVER:
deparseNameList(str, drop_stmt->objects);
appendStringInfoChar(str, ' ');
break;
// drop_type_name_on_any_name
case OBJECT_POLICY:
case OBJECT_RULE:
case OBJECT_TRIGGER:
Assert(list_length(drop_stmt->objects) == 1);
l = linitial(drop_stmt->objects);
deparseColId(str, strVal(llast(l)));
appendStringInfoString(str, " ON ");
deparseAnyNameSkipLast(str, l);
appendStringInfoChar(str, ' ');
break;
case OBJECT_CAST:
Assert(list_length(drop_stmt->objects) == 1);
l = linitial(drop_stmt->objects);
Assert(list_length(l) == 2);
appendStringInfoChar(str, '(');
deparseTypeName(str, castNode(TypeName, linitial(l)));
appendStringInfoString(str, " AS ");
deparseTypeName(str, castNode(TypeName, lsecond(l)));
appendStringInfoChar(str, ')');
appendStringInfoChar(str, ' ');
break;
case OBJECT_OPFAMILY:
case OBJECT_OPCLASS:
Assert(list_length(drop_stmt->objects) == 1);
l = linitial(drop_stmt->objects);
deparseAnyNameSkipFirst(str, l);
appendStringInfoString(str, " USING ");
deparseColId(str, strVal(linitial(l)));
appendStringInfoChar(str, ' ');
break;
case OBJECT_TRANSFORM:
Assert(list_length(drop_stmt->objects) == 1);
l = linitial(drop_stmt->objects);
appendStringInfoString(str, "FOR ");
deparseTypeName(str, castNode(TypeName, linitial(l)));
appendStringInfoString(str, " LANGUAGE ");
deparseColId(str, strVal(lsecond(l)));
appendStringInfoChar(str, ' ');
break;
case OBJECT_LANGUAGE:
deparseStringLiteral(str, strVal(linitial(drop_stmt->objects)));
appendStringInfoChar(str, ' ');
break;
case OBJECT_TYPE:
case OBJECT_DOMAIN:
foreach(lc, drop_stmt->objects)
{
deparseTypeName(str, castNode(TypeName, lfirst(lc)));
if (lnext(drop_stmt->objects, lc))
appendStringInfoString(str, ", ");
}
appendStringInfoChar(str, ' ');
break;
case OBJECT_AGGREGATE:
foreach(lc, drop_stmt->objects)
{
deparseAggregateWithArgtypes(str, castNode(ObjectWithArgs, lfirst(lc)));
if (lnext(drop_stmt->objects, lc))
appendStringInfoString(str, ", ");
}
appendStringInfoChar(str, ' ');
break;
case OBJECT_FUNCTION:
case OBJECT_PROCEDURE:
case OBJECT_ROUTINE:
foreach(lc, drop_stmt->objects)
{
deparseFunctionWithArgtypes(str, castNode(ObjectWithArgs, lfirst(lc)));
if (lnext(drop_stmt->objects, lc))
appendStringInfoString(str, ", ");
}
appendStringInfoChar(str, ' ');
break;
case OBJECT_OPERATOR:
foreach(lc, drop_stmt->objects)
{
deparseOperatorWithArgtypes(str, castNode(ObjectWithArgs, lfirst(lc)));
if (lnext(drop_stmt->objects, lc))
appendStringInfoString(str, ", ");
}
appendStringInfoChar(str, ' ');
break;
default:
Assert(false);
}
deparseOptDropBehavior(str, drop_stmt->behavior);
removeTrailingSpace(str);
}