Better fix for misuse of Float8GetDatumFast().
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 28 Mar 2015 17:56:37 +0000 (13:56 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 28 Mar 2015 17:56:37 +0000 (13:56 -0400)
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

index da6c242631a4f4124f64c0cb02a20e236d16f86a..76d9e0a5ec6132277041e6918a199c2f53e5a01e 100644 (file)
@@ -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);