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);