From 2c33e0fbceb01d0ecd78330feef1315682c64bc4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 28 Mar 2015 13:56:37 -0400 Subject: [PATCH] Better fix for misuse of Float8GetDatumFast(). We can use that macro as long as we put the value into a local variable. Commit 735cd6128 was not wrong on its own terms, but I think this way looks nicer, and it should save a few cycles on 32-bit machines. --- contrib/pg_stat_statements/pg_stat_statements.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index da6c242631a..76d9e0a5ec6 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -1246,7 +1246,6 @@ pgss_store(const char *query, uint32 queryId, e->counters.min_time = total_time; if (e->counters.max_time < total_time) e->counters.max_time = total_time; - } e->counters.rows += rows; e->counters.shared_blks_hit += bufusage->shared_blks_hit; @@ -1491,6 +1490,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, bool nulls[PG_STAT_STATEMENTS_COLS]; int i = 0; Counters tmp; + double stddev; int64 queryid = entry->key.queryid; memset(values, 0, sizeof(values)); @@ -1577,15 +1577,12 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo, * sample variance, as we have data for the whole population, * so Bessel's correction is not used, and we don't divide by * tmp.calls - 1. - * - * We're calculating the stddev on the fly, so it's not in the tmp - * structure, so we can't use the Float8GetDatumFast macro here. */ if (tmp.calls > 1) - values[i++] = - Float8GetDatum(sqrt(tmp.sum_var_time / tmp.calls)); + stddev = sqrt(tmp.sum_var_time / tmp.calls); else - values[i++] = Float8GetDatum(0.0); + stddev = 0.0; + values[i++] = Float8GetDatumFast(stddev); } values[i++] = Int64GetDatumFast(tmp.rows); values[i++] = Int64GetDatumFast(tmp.shared_blks_hit);