Fix another portability bug in recent pgbench commit.
authorThomas Munro
Wed, 10 Mar 2021 09:22:12 +0000 (22:22 +1300)
committerThomas Munro
Wed, 10 Mar 2021 10:20:41 +0000 (23:20 +1300)
Commit 547f04e7 produced errors on AIX/xlc while building plpython.  The
new code appears to be incompatible with the hack installed by commit
a11cf433.  Without access to an AIX system to check, my guess is that
_POSIX_C_SOURCE may be required for  to declare the things the
header needs to see, but plpython.h undefines it.

For now, to unbreak build farm animal hoverfly, just move the new
pg_time_usec_t support into pgbench.c.  Perhaps later we could figure
out what to rearrange to put it back into a header for wider use.

Discussion: https://postgr.es/m/CA%2BhUKG%2BP%2BjcD%3Dx9%2BagyTdWtjpOT64MYiGic%2Bcbu_TD8CV%3D6A3w%40mail.gmail.com

src/bin/pgbench/pgbench.c
src/include/portability/instr_time.h

index e4dfbcf4720c3819732ca65b28d487e5e7d2b40c..f6a214669c1a312227b33891ea0ccd1742dba735 100644 (file)
@@ -320,6 +320,13 @@ typedef struct SimpleStats
    double      sum2;           /* sum of squared values */
 } SimpleStats;
 
+/*
+ * The instr_time type is expensive when dealing with time arithmetic.  Define
+ * a type to hold microseconds instead.  Type int64 is good enough for about
+ * 584500 years.
+ */
+typedef int64 pg_time_usec_t;
+
 /*
  * Data structure to hold various statistics: per-thread and per-script stats
  * are maintained and merged together.
@@ -658,6 +665,24 @@ static const PsqlScanCallbacks pgbench_callbacks = {
    NULL,                       /* don't need get_variable functionality */
 };
 
+static inline pg_time_usec_t
+pg_time_now(void)
+{
+   instr_time  now;
+
+   INSTR_TIME_SET_CURRENT(now);
+
+   return (pg_time_usec_t) INSTR_TIME_GET_MICROSEC(now);
+}
+
+static inline void
+pg_time_now_lazy(pg_time_usec_t *now)
+{
+   if ((*now) == 0)
+       (*now) = pg_time_now();
+}
+
+#define PG_TIME_GET_DOUBLE(t) (0.000001 * (t))
 
 static void
 usage(void)
index faf806a4410a0eebe50d1d913b42cdf8bb42c2af..39a4f0600e23737c3b35199ef213d8c78bc81140 100644 (file)
@@ -253,32 +253,4 @@ GetTimerFrequency(void)
 #define INSTR_TIME_SET_CURRENT_LAZY(t) \
    (INSTR_TIME_IS_ZERO(t) ? INSTR_TIME_SET_CURRENT(t), true : false)
 
-/*
- * Simpler convenient interface
- *
- * The instr_time type is expensive when dealing with time arithmetic.
- * Define a type to hold microseconds on top of this, suitable for
- * benchmarking performance measures, eg in "pgbench".
- *
- * Type int64 is good enough for about 584500 years.
- */
-typedef int64 pg_time_usec_t;
-
-static inline pg_time_usec_t
-pg_time_now(void)
-{
-   instr_time now;
-
-   INSTR_TIME_SET_CURRENT(now);
-   return (pg_time_usec_t) INSTR_TIME_GET_MICROSEC(now);
-}
-
-static inline void
-pg_time_now_lazy(pg_time_usec_t *now)
-{
-   if ((*now) == 0)
-       (*now) = pg_time_now();
-}
-
-#define PG_TIME_GET_DOUBLE(t) (0.000001 * (t))
 #endif                         /* INSTR_TIME_H */