Age Owner Branch data TLA 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
4069 alvherre@alvh.no-ip. 27 :GBC 1638 : timestamptz_to_time_t(TimestampTz t)
28 : : {
29 : : pg_time_t result;
30 : :
31 : 1638 : result = (pg_time_t) (t / USECS_PER_SEC +
32 : : ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY));
33 : 1638 : 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 *
572 pg@bowt.ie 49 : 1638 : timestamptz_to_str(TimestampTz t)
50 : : {
51 : : static char buf[MAXDATELEN + 1];
52 : : char ts[MAXDATELEN + 1];
53 : : char zone[MAXDATELEN + 1];
54 : 1638 : time_t result = (time_t) timestamptz_to_time_t(t);
4069 alvherre@alvh.no-ip. 55 : 1638 : struct tm *ltime = localtime(&result);
56 : :
4065 tgl@sss.pgh.pa.us 57 : 1638 : strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", ltime);
4069 alvherre@alvh.no-ip. 58 : 1638 : strftime(zone, sizeof(zone), "%Z", ltime);
59 : :
2129 tgl@sss.pgh.pa.us 60 : 1638 : snprintf(buf, sizeof(buf), "%s.%06d %s",
572 pg@bowt.ie 61 : 1638 : ts, (int) (t % USECS_PER_SEC), zone);
62 : :
4069 alvherre@alvh.no-ip. 63 : 1638 : return buf;
64 : : }
|