diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2014-01-20 17:12:50 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2014-01-20 17:13:47 -0300 |
commit | d2458e3b20f744ef88a8d3afaab91caa17508370 (patch) | |
tree | 9b14940d2c6d9a96f5ce86da8903bc25d7378f0c /src | |
parent | fe0c690dfdcf628671d62d04caa39449fdc56078 (diff) | |
download | postgresql-d2458e3b20f744ef88a8d3afaab91caa17508370.tar.gz postgresql-d2458e3b20f744ef88a8d3afaab91caa17508370.zip |
Expose a routine to print triggers during EXPLAIN ANALYZE
This is so that auto_explain can use it.
Kyotaro HORIGUCHI
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/explain.c | 60 | ||||
-rw-r--r-- | src/include/commands/explain.h | 1 |
2 files changed, 38 insertions, 23 deletions
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index e604be31f9d..0dba9283f1c 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -486,29 +486,7 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es, /* Print info about runtime of triggers */ if (es->analyze) - { - ResultRelInfo *rInfo; - bool show_relname; - int numrels = queryDesc->estate->es_num_result_relations; - List *targrels = queryDesc->estate->es_trig_target_relations; - int nr; - ListCell *l; - - ExplainOpenGroup("Triggers", "Triggers", false, es); - - show_relname = (numrels > 1 || targrels != NIL); - rInfo = queryDesc->estate->es_result_relations; - for (nr = 0; nr < numrels; rInfo++, nr++) - report_triggers(rInfo, show_relname, es); - - foreach(l, targrels) - { - rInfo = (ResultRelInfo *) lfirst(l); - report_triggers(rInfo, show_relname, es); - } - - ExplainCloseGroup("Triggers", "Triggers", false, es); - } + ExplainPrintTriggers(es, queryDesc); /* * Close down the query and free resources. Include time for this in the @@ -565,6 +543,42 @@ ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc) } /* + * ExplainPrintTriggers - + + * convert a QueryDesc's trigger statistics to text and append it to + * es->str + * + * The caller should have set up the options fields of *es, as well as + * initializing the output buffer es->str. Other fields in *es are + * initialized here. + */ +void +ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc) +{ + ResultRelInfo *rInfo; + bool show_relname; + int numrels = queryDesc->estate->es_num_result_relations; + List *targrels = queryDesc->estate->es_trig_target_relations; + int nr; + ListCell *l; + + ExplainOpenGroup("Triggers", "Triggers", false, es); + + show_relname = (numrels > 1 || targrels != NIL); + rInfo = queryDesc->estate->es_result_relations; + for (nr = 0; nr < numrels; rInfo++, nr++) + report_triggers(rInfo, show_relname, es); + + foreach(l, targrels) + { + rInfo = (ResultRelInfo *) lfirst(l); + report_triggers(rInfo, show_relname, es); + } + + ExplainCloseGroup("Triggers", "Triggers", false, es); +} + +/* * ExplainQueryText - * add a "Query Text" node that contains the actual text of the query * diff --git a/src/include/commands/explain.h b/src/include/commands/explain.h index 9e71206b505..e097710dddd 100644 --- a/src/include/commands/explain.h +++ b/src/include/commands/explain.h @@ -71,6 +71,7 @@ extern void ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, const char *queryString, ParamListInfo params); extern void ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc); +extern void ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc); extern void ExplainQueryText(ExplainState *es, QueryDesc *queryDesc); |