Remove unused 'printCost' field from ExplainState, and simplify the code
accordingly (this field was always initialized to true). Patch from Alvaro Herrera.
This commit is contained in:
parent
ba42002461
commit
5788cca558
|
@ -7,7 +7,7 @@
|
||||||
* Portions Copyright (c) 1994-5, Regents of the University of California
|
* Portions Copyright (c) 1994-5, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.136 2005/06/03 23:05:28 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.137 2005/06/04 02:07:09 neilc Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -38,7 +38,6 @@
|
||||||
typedef struct ExplainState
|
typedef struct ExplainState
|
||||||
{
|
{
|
||||||
/* options */
|
/* options */
|
||||||
bool printCost; /* print cost */
|
|
||||||
bool printNodes; /* do nodeToString() too */
|
bool printNodes; /* do nodeToString() too */
|
||||||
bool printAnalyze; /* print actual times */
|
bool printAnalyze; /* print actual times */
|
||||||
/* other states */
|
/* other states */
|
||||||
|
@ -246,7 +245,6 @@ ExplainOnePlan(QueryDesc *queryDesc, ExplainStmt *stmt,
|
||||||
|
|
||||||
es = (ExplainState *) palloc0(sizeof(ExplainState));
|
es = (ExplainState *) palloc0(sizeof(ExplainState));
|
||||||
|
|
||||||
es->printCost = true; /* default */
|
|
||||||
es->printNodes = stmt->verbose;
|
es->printNodes = stmt->verbose;
|
||||||
es->printAnalyze = stmt->analyze;
|
es->printAnalyze = stmt->analyze;
|
||||||
es->rtable = queryDesc->parsetree->rtable;
|
es->rtable = queryDesc->parsetree->rtable;
|
||||||
|
@ -266,18 +264,14 @@ ExplainOnePlan(QueryDesc *queryDesc, ExplainStmt *stmt,
|
||||||
pfree(s);
|
pfree(s);
|
||||||
do_text_output_multiline(tstate, f);
|
do_text_output_multiline(tstate, f);
|
||||||
pfree(f);
|
pfree(f);
|
||||||
if (es->printCost)
|
do_text_output_oneline(tstate, ""); /* separator line */
|
||||||
do_text_output_oneline(tstate, ""); /* separator line */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
str = makeStringInfo();
|
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
|
* If we ran the command, run any AFTER triggers it queued. (Note this
|
||||||
|
@ -358,13 +352,10 @@ ExplainOnePlan(QueryDesc *queryDesc, ExplainStmt *stmt,
|
||||||
|
|
||||||
totaltime += elapsed_time(&starttime);
|
totaltime += elapsed_time(&starttime);
|
||||||
|
|
||||||
if (es->printCost)
|
if (stmt->analyze)
|
||||||
{
|
appendStringInfo(str, "Total runtime: %.3f ms\n",
|
||||||
if (stmt->analyze)
|
1000.0 * totaltime);
|
||||||
appendStringInfo(str, "Total runtime: %.3f ms\n",
|
do_text_output_multiline(tstate, str->data);
|
||||||
1000.0 * totaltime);
|
|
||||||
do_text_output_multiline(tstate, str->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
pfree(str->data);
|
pfree(str->data);
|
||||||
pfree(str);
|
pfree(str);
|
||||||
|
@ -667,32 +658,30 @@ explain_outNode(StringInfo str,
|
||||||
default:
|
default:
|
||||||
break;
|
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);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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)
|
||||||
{
|
{
|
||||||
appendStringInfo(str, " (cost=%.2f..%.2f rows=%.0f width=%d)",
|
double nloops = planstate->instrument->nloops;
|
||||||
plan->startup_cost, plan->total_cost,
|
|
||||||
plan->plan_rows, plan->plan_width);
|
|
||||||
|
|
||||||
/*
|
appendStringInfo(str, " (actual time=%.3f..%.3f rows=%.0f loops=%.0f)",
|
||||||
* We have to forcibly clean up the instrumentation state because
|
1000.0 * planstate->instrument->startup / nloops,
|
||||||
* we haven't done ExecutorEnd yet. This is pretty grotty ...
|
1000.0 * planstate->instrument->total / nloops,
|
||||||
*/
|
planstate->instrument->ntuples / nloops,
|
||||||
if (planstate->instrument)
|
planstate->instrument->nloops);
|
||||||
InstrEndLoop(planstate->instrument);
|
|
||||||
|
|
||||||
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)");
|
|
||||||
}
|
}
|
||||||
|
else if (es->printAnalyze)
|
||||||
|
appendStringInfo(str, " (never executed)");
|
||||||
appendStringInfoChar(str, '\n');
|
appendStringInfoChar(str, '\n');
|
||||||
|
|
||||||
/* quals, sort keys, etc */
|
/* quals, sort keys, etc */
|
||||||
|
|
Loading…
Reference in New Issue