typedef struct ExplainState
{
/* options */
- bool printCost; /* print cost */
bool printNodes; /* do nodeToString() too */
bool printAnalyze; /* print actual times */
/* other states */
es = (ExplainState *) palloc0(sizeof(ExplainState));
- es->printCost = true; /* default */
es->printNodes = stmt->verbose;
es->printAnalyze = stmt->analyze;
es->rtable = queryDesc->parsetree->rtable;
pfree(s);
do_text_output_multiline(tstate, f);
pfree(f);
- if (es->printCost)
- do_text_output_oneline(tstate, ""); /* separator line */
+ do_text_output_oneline(tstate, ""); /* separator line */
}
}
str = makeStringInfo();
- if (es->printCost)
- {
- explain_outNode(str, queryDesc->plantree, queryDesc->planstate,
- NULL, 0, es);
- }
+ explain_outNode(str, queryDesc->plantree, queryDesc->planstate,
+ NULL, 0, es);
/*
* If we ran the command, run any AFTER triggers it queued. (Note this
totaltime += elapsed_time(&starttime);
- if (es->printCost)
- {
- if (stmt->analyze)
- appendStringInfo(str, "Total runtime: %.3f ms\n",
- 1000.0 * totaltime);
- do_text_output_multiline(tstate, str->data);
- }
+ if (stmt->analyze)
+ appendStringInfo(str, "Total runtime: %.3f ms\n",
+ 1000.0 * totaltime);
+ do_text_output_multiline(tstate, str->data);
pfree(str->data);
pfree(str);
default:
break;
}
- if (es->printCost)
- {
- appendStringInfo(str, " (cost=%.2f..%.2f rows=%.0f width=%d)",
- plan->startup_cost, plan->total_cost,
- plan->plan_rows, plan->plan_width);
+
+ appendStringInfo(str, " (cost=%.2f..%.2f rows=%.0f width=%d)",
+ plan->startup_cost, plan->total_cost,
+ plan->plan_rows, plan->plan_width);
- /*
- * We have to forcibly clean up the instrumentation state because
- * we haven't done ExecutorEnd yet. This is pretty grotty ...
- */
- if (planstate->instrument)
- InstrEndLoop(planstate->instrument);
+ /*
+ * We have to forcibly clean up the instrumentation state because
+ * we haven't done ExecutorEnd yet. This is pretty grotty ...
+ */
+ if (planstate->instrument)
+ InstrEndLoop(planstate->instrument);
- if (planstate->instrument && planstate->instrument->nloops > 0)
- {
- double nloops = planstate->instrument->nloops;
+ if (planstate->instrument && planstate->instrument->nloops > 0)
+ {
+ double nloops = planstate->instrument->nloops;
- appendStringInfo(str, " (actual time=%.3f..%.3f rows=%.0f loops=%.0f)",
- 1000.0 * planstate->instrument->startup / nloops,
- 1000.0 * planstate->instrument->total / nloops,
- planstate->instrument->ntuples / nloops,
- planstate->instrument->nloops);
- }
- else if (es->printAnalyze)
- appendStringInfo(str, " (never executed)");
+ appendStringInfo(str, " (actual time=%.3f..%.3f rows=%.0f loops=%.0f)",
+ 1000.0 * planstate->instrument->startup / nloops,
+ 1000.0 * planstate->instrument->total / nloops,
+ planstate->instrument->ntuples / nloops,
+ planstate->instrument->nloops);
}
+ else if (es->printAnalyze)
+ appendStringInfo(str, " (never executed)");
appendStringInfoChar(str, '\n');
/* quals, sort keys, etc */