Expose a routine to print triggers during EXPLAIN ANALYZE
This is so that auto_explain can use it. Kyotaro HORIGUCHI
This commit is contained in:
parent
fe0c690dfd
commit
d2458e3b20
@ -486,29 +486,7 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es,
|
|||||||
|
|
||||||
/* Print info about runtime of triggers */
|
/* Print info about runtime of triggers */
|
||||||
if (es->analyze)
|
if (es->analyze)
|
||||||
{
|
ExplainPrintTriggers(es, 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Close down the query and free resources. Include time for this in the
|
* 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);
|
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 -
|
* ExplainQueryText -
|
||||||
* add a "Query Text" node that contains the actual text of the query
|
* add a "Query Text" node that contains the actual text of the query
|
||||||
|
@ -71,6 +71,7 @@ extern void ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into,
|
|||||||
const char *queryString, ParamListInfo params);
|
const char *queryString, ParamListInfo params);
|
||||||
|
|
||||||
extern void ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc);
|
extern void ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc);
|
||||||
|
extern void ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc);
|
||||||
|
|
||||||
extern void ExplainQueryText(ExplainState *es, QueryDesc *queryDesc);
|
extern void ExplainQueryText(ExplainState *es, QueryDesc *queryDesc);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user