LCOV - code coverage report
Current view: top level - src/bin/pg_waldump - compat.c (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 11 11
Test Date: 2026-03-11 10:16:42 Functions: 100.0 % 2 2
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-2026, 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         1484 : timestamptz_to_time_t(TimestampTz t)
      28              : {
      29              :     pg_time_t   result;
      30              : 
      31         1484 :     result = (pg_time_t) (t / USECS_PER_SEC +
      32              :                           ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY));
      33         1484 :     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         1484 : timestamptz_to_str(TimestampTz t)
      50              : {
      51              :     static char buf[MAXDATELEN + 1];
      52              :     char        ts[MAXDATELEN + 1];
      53              :     char        zone[MAXDATELEN + 1];
      54         1484 :     time_t      result = (time_t) timestamptz_to_time_t(t);
      55         1484 :     struct tm  *ltime = localtime(&result);
      56              : 
      57         1484 :     strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", ltime);
      58         1484 :     strftime(zone, sizeof(zone), "%Z", ltime);
      59              : 
      60         1484 :     snprintf(buf, sizeof(buf), "%s.%06d %s",
      61         1484 :              ts, (int) (t % USECS_PER_SEC), zone);
      62              : 
      63         1484 :     return buf;
      64              : }
        

Generated by: LCOV version 2.0-1