in ext/pg_query/pg_query_deparse.c [9051:9158]
static void deparseCreateTrigStmt(StringInfo str, CreateTrigStmt *create_trig_stmt)
{
ListCell *lc;
bool skip_events_or = true;
appendStringInfoString(str, "CREATE ");
if (create_trig_stmt->isconstraint)
appendStringInfoString(str, "CONSTRAINT ");
appendStringInfoString(str, "TRIGGER ");
appendStringInfoString(str, quote_identifier(create_trig_stmt->trigname));
appendStringInfoChar(str, ' ');
switch (create_trig_stmt->timing)
{
case TRIGGER_TYPE_BEFORE:
appendStringInfoString(str, "BEFORE ");
break;
case TRIGGER_TYPE_AFTER:
appendStringInfoString(str, "AFTER ");
break;
case TRIGGER_TYPE_INSTEAD:
appendStringInfoString(str, "INSTEAD OF ");
break;
default:
Assert(false);
}
if (TRIGGER_FOR_INSERT(create_trig_stmt->events))
{
appendStringInfoString(str, "INSERT ");
skip_events_or = false;
}
if (TRIGGER_FOR_DELETE(create_trig_stmt->events))
{
if (!skip_events_or)
appendStringInfoString(str, "OR ");
appendStringInfoString(str, "DELETE ");
skip_events_or = false;
}
if (TRIGGER_FOR_UPDATE(create_trig_stmt->events))
{
if (!skip_events_or)
appendStringInfoString(str, "OR ");
appendStringInfoString(str, "UPDATE ");
if (list_length(create_trig_stmt->columns) > 0)
{
appendStringInfoString(str, "OF ");
deparseColumnList(str, create_trig_stmt->columns);
appendStringInfoChar(str, ' ');
}
skip_events_or = false;
}
if (TRIGGER_FOR_TRUNCATE(create_trig_stmt->events))
{
if (!skip_events_or)
appendStringInfoString(str, "OR ");
appendStringInfoString(str, "TRUNCATE ");
}
appendStringInfoString(str, "ON ");
deparseRangeVar(str, create_trig_stmt->relation, DEPARSE_NODE_CONTEXT_NONE);
appendStringInfoChar(str, ' ');
if (create_trig_stmt->transitionRels != NULL)
{
appendStringInfoString(str, "REFERENCING ");
foreach(lc, create_trig_stmt->transitionRels)
{
deparseTriggerTransition(str, castNode(TriggerTransition, lfirst(lc)));
appendStringInfoChar(str, ' ');
}
}
if (create_trig_stmt->constrrel != NULL)
{
appendStringInfoString(str, "FROM ");
deparseRangeVar(str, create_trig_stmt->constrrel, DEPARSE_NODE_CONTEXT_NONE);
appendStringInfoChar(str, ' ');
}
if (create_trig_stmt->deferrable)
appendStringInfoString(str, "DEFERRABLE ");
if (create_trig_stmt->initdeferred)
appendStringInfoString(str, "INITIALLY DEFERRED ");
if (create_trig_stmt->row)
appendStringInfoString(str, "FOR EACH ROW ");
if (create_trig_stmt->whenClause)
{
appendStringInfoString(str, "WHEN (");
deparseExpr(str, create_trig_stmt->whenClause);
appendStringInfoString(str, ") ");
}
appendStringInfoString(str, "EXECUTE FUNCTION ");
deparseFuncName(str, create_trig_stmt->funcname);
appendStringInfoChar(str, '(');
foreach(lc, create_trig_stmt->args)
{
deparseStringLiteral(str, strVal(lfirst(lc)));
if (lnext(create_trig_stmt->args, lc))
appendStringInfoString(str, ", ");
}
appendStringInfoChar(str, ')');
}