LCOV - code coverage report
Current view: top level - src/bin/pg_waldump - compat.c (source / functions) Hit Total Coverage
Test: PostgreSQL 17devel Lines: 11 11 100.0 %
Date: 2024-04-27 03:11:33 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*-------------------------------------------------------------------------
       2             :  *
       3             :  * compat.c
       4             :  *      Reimplementations of various backend functions.
       5             :  *
       6             :  * Portions Copyright (c) 2013-2024, PostgreSQL Global Development Group
       7             :  *
       8             :  * IDENTIFICATION
       9             :  *      src/bin/pg_waldump/compat.c
      10             :  *
      11             :  * This file contains client-side implementations for various backend
      12             :  * functions that the rm_desc functions in *desc.c files rely on.
      13             :  *
      14             :  *-------------------------------------------------------------------------
      15             :  */
      16             : 
      17             : /* ugly hack, same as in e.g pg_controldata */
      18             : #define FRONTEND 1
      19             : #include "postgres.h"
      20             : 
      21             : #include <time.h>
      22             : 
      23             : #include "utils/datetime.h"
      24             : 
      25             : /* copied from timestamp.c */
      26             : pg_time_t
      27        3276 : timestamptz_to_time_t(TimestampTz t)
      28             : {
      29             :     pg_time_t   result;
      30             : 
      31        3276 :     result = (pg_time_t) (t / USECS_PER_SEC +
      32             :                           ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY));
      33        3276 :     return result;
      34             : }
      35             : 
      36             : /*
      37             :  * Stopgap implementation of timestamptz_to_str that doesn't depend on backend
      38             :  * infrastructure.  This will work for timestamps that are within the range
      39             :  * of the platform time_t type.  (pg_time_t is compatible except for possibly
      40             :  * being wider.)
      41             :  *
      42             :  * XXX the return value points to a static buffer, so beware of using more
      43             :  * than one result value concurrently.
      44             :  *
      45             :  * XXX: The backend timestamp infrastructure should instead be split out and
      46             :  * moved into src/common.  That's a large project though.
      47             :  */
      48             : const char *
      49        3276 : timestamptz_to_str(TimestampTz t)
      50             : {
      51             :     static char buf[MAXDATELEN + 1];
      52             :     char        ts[MAXDATELEN + 1];
      53             :     char        zone[MAXDATELEN + 1];
      54        3276 :     time_t      result = (time_t) timestamptz_to_time_t(t);
      55        3276 :     struct tm  *ltime = localtime(&result);
      56             : 
      57        3276 :     strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", ltime);
      58        3276 :     strftime(zone, sizeof(zone), "%Z", ltime);
      59             : 
      60        3276 :     snprintf(buf, sizeof(buf), "%s.%06d %s",
      61        3276 :              ts, (int) (t % USECS_PER_SEC), zone);
      62             : 
      63        3276 :     return buf;
      64             : }

Generated by: LCOV version 1.14