postgres.git / summary / log / commit / refs
commit d2458e3b20f744ef88a8d3afaab91caa17508370
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Mon Jan 20 20:12:50 2014 +0000
First released in: 9.4.0
Expose a routine to print triggers during EXPLAIN ANALYZE
This is so that auto_explain can use it.
Kyotaro HORIGUCHI
src/backend/commands/explain.c | 60 ++++++++++++++++++++++++++----------------
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
@@ -564,6 +542,42 @@ ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc)
ExplainNode(queryDesc->planstate, NIL, NULL, NULL, es);
}
+/*
+ * 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);
[parent: fe0c690dfdcf]