Coverage Report

Created: 2026-11-09 07:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/postgres/src/include/utils/date.h
Line
Count
Source
1
/*-------------------------------------------------------------------------
2
 *
3
 * date.h
4
 *    Definitions for the SQL "date" and "time" types.
5
 *
6
 *
7
 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
8
 * Portions Copyright (c) 1994, Regents of the University of California
9
 *
10
 * src/include/utils/date.h
11
 *
12
 *-------------------------------------------------------------------------
13
 */
14
#ifndef DATE_H
15
#define DATE_H
16
17
#include "datatype/timestamp.h"
18
#include "fmgr.h"
19
#include "pgtime.h"
20
21
typedef int32 DateADT;
22
23
typedef int64 TimeADT;
24
25
typedef struct
26
{
27
  TimeADT   time;     /* all time units other than months and years */
28
  int32   zone;     /* numeric time zone, in seconds */
29
} TimeTzADT;
30
31
/*
32
 * sizeof(TimeTzADT) will be 16 on most platforms due to alignment padding.
33
 * However, timetz's typlen is 12 according to pg_type.  In most places
34
 * we can get away with using sizeof(TimeTzADT), but where it's important
35
 * to match the declared typlen, use TIMETZ_TYPLEN.
36
 */
37
0
#define TIMETZ_TYPLEN   12
38
39
/*
40
 * Infinity and minus infinity must be the max and min values of DateADT.
41
 */
42
0
#define DATEVAL_NOBEGIN   ((DateADT) PG_INT32_MIN)
43
0
#define DATEVAL_NOEND   ((DateADT) PG_INT32_MAX)
44
45
0
#define DATE_NOBEGIN(j)   ((j) = DATEVAL_NOBEGIN)
46
0
#define DATE_IS_NOBEGIN(j)  ((j) == DATEVAL_NOBEGIN)
47
0
#define DATE_NOEND(j)   ((j) = DATEVAL_NOEND)
48
0
#define DATE_IS_NOEND(j)  ((j) == DATEVAL_NOEND)
49
0
#define DATE_NOT_FINITE(j)  (DATE_IS_NOBEGIN(j) || DATE_IS_NOEND(j))
50
51
0
#define MAX_TIME_PRECISION 6
52
53
/*
54
 * Functions for fmgr-callable functions.
55
 *
56
 * For TimeADT, we make use of the same support routines as for int64.
57
 * Therefore TimeADT is pass-by-reference if and only if int64 is!
58
 */
59
static inline DateADT
60
DatumGetDateADT(Datum X)
61
0
{
62
0
  return (DateADT) DatumGetInt32(X);
63
0
}
Unexecuted instantiation: brin_minmax_multi.c:DatumGetDateADT
Unexecuted instantiation: parse_expr.c:DatumGetDateADT
Unexecuted instantiation: execExprInterp.c:DatumGetDateADT
Unexecuted instantiation: date.c:DatumGetDateADT
Unexecuted instantiation: datetime.c:DatumGetDateADT
Unexecuted instantiation: formatting.c:DatumGetDateADT
Unexecuted instantiation: json.c:DatumGetDateADT
Unexecuted instantiation: jsonb_util.c:DatumGetDateADT
Unexecuted instantiation: jsonpath_exec.c:DatumGetDateADT
Unexecuted instantiation: pseudorandomfuncs.c:DatumGetDateADT
Unexecuted instantiation: rangetypes.c:DatumGetDateADT
Unexecuted instantiation: selfuncs.c:DatumGetDateADT
Unexecuted instantiation: timestamp.c:DatumGetDateADT
Unexecuted instantiation: xml.c:DatumGetDateADT
64
65
static inline TimeADT
66
DatumGetTimeADT(Datum X)
67
0
{
68
0
  return (TimeADT) DatumGetInt64(X);
69
0
}
Unexecuted instantiation: brin_minmax_multi.c:DatumGetTimeADT
Unexecuted instantiation: parse_expr.c:DatumGetTimeADT
Unexecuted instantiation: execExprInterp.c:DatumGetTimeADT
Unexecuted instantiation: date.c:DatumGetTimeADT
Unexecuted instantiation: datetime.c:DatumGetTimeADT
Unexecuted instantiation: formatting.c:DatumGetTimeADT
Unexecuted instantiation: json.c:DatumGetTimeADT
Unexecuted instantiation: jsonb_util.c:DatumGetTimeADT
Unexecuted instantiation: jsonpath_exec.c:DatumGetTimeADT
Unexecuted instantiation: pseudorandomfuncs.c:DatumGetTimeADT
Unexecuted instantiation: rangetypes.c:DatumGetTimeADT
Unexecuted instantiation: selfuncs.c:DatumGetTimeADT
Unexecuted instantiation: timestamp.c:DatumGetTimeADT
Unexecuted instantiation: xml.c:DatumGetTimeADT
70
71
static inline TimeTzADT *
72
DatumGetTimeTzADTP(Datum X)
73
0
{
74
0
  return (TimeTzADT *) DatumGetPointer(X);
75
0
}
Unexecuted instantiation: brin_minmax_multi.c:DatumGetTimeTzADTP
Unexecuted instantiation: parse_expr.c:DatumGetTimeTzADTP
Unexecuted instantiation: execExprInterp.c:DatumGetTimeTzADTP
Unexecuted instantiation: date.c:DatumGetTimeTzADTP
Unexecuted instantiation: datetime.c:DatumGetTimeTzADTP
Unexecuted instantiation: formatting.c:DatumGetTimeTzADTP
Unexecuted instantiation: json.c:DatumGetTimeTzADTP
Unexecuted instantiation: jsonb_util.c:DatumGetTimeTzADTP
Unexecuted instantiation: jsonpath_exec.c:DatumGetTimeTzADTP
Unexecuted instantiation: pseudorandomfuncs.c:DatumGetTimeTzADTP
Unexecuted instantiation: rangetypes.c:DatumGetTimeTzADTP
Unexecuted instantiation: selfuncs.c:DatumGetTimeTzADTP
Unexecuted instantiation: timestamp.c:DatumGetTimeTzADTP
Unexecuted instantiation: xml.c:DatumGetTimeTzADTP
76
77
static inline Datum
78
DateADTGetDatum(DateADT X)
79
0
{
80
0
  return Int32GetDatum(X);
81
0
}
Unexecuted instantiation: brin_minmax_multi.c:DateADTGetDatum
Unexecuted instantiation: parse_expr.c:DateADTGetDatum
Unexecuted instantiation: execExprInterp.c:DateADTGetDatum
Unexecuted instantiation: date.c:DateADTGetDatum
Unexecuted instantiation: datetime.c:DateADTGetDatum
Unexecuted instantiation: formatting.c:DateADTGetDatum
Unexecuted instantiation: json.c:DateADTGetDatum
Unexecuted instantiation: jsonb_util.c:DateADTGetDatum
Unexecuted instantiation: jsonpath_exec.c:DateADTGetDatum
Unexecuted instantiation: pseudorandomfuncs.c:DateADTGetDatum
Unexecuted instantiation: rangetypes.c:DateADTGetDatum
Unexecuted instantiation: selfuncs.c:DateADTGetDatum
Unexecuted instantiation: timestamp.c:DateADTGetDatum
Unexecuted instantiation: xml.c:DateADTGetDatum
82
83
static inline Datum
84
TimeADTGetDatum(TimeADT X)
85
0
{
86
0
  return Int64GetDatum(X);
87
0
}
Unexecuted instantiation: brin_minmax_multi.c:TimeADTGetDatum
Unexecuted instantiation: parse_expr.c:TimeADTGetDatum
Unexecuted instantiation: execExprInterp.c:TimeADTGetDatum
Unexecuted instantiation: date.c:TimeADTGetDatum
Unexecuted instantiation: datetime.c:TimeADTGetDatum
Unexecuted instantiation: formatting.c:TimeADTGetDatum
Unexecuted instantiation: json.c:TimeADTGetDatum
Unexecuted instantiation: jsonb_util.c:TimeADTGetDatum
Unexecuted instantiation: jsonpath_exec.c:TimeADTGetDatum
Unexecuted instantiation: pseudorandomfuncs.c:TimeADTGetDatum
Unexecuted instantiation: rangetypes.c:TimeADTGetDatum
Unexecuted instantiation: selfuncs.c:TimeADTGetDatum
Unexecuted instantiation: timestamp.c:TimeADTGetDatum
Unexecuted instantiation: xml.c:TimeADTGetDatum
88
89
static inline Datum
90
TimeTzADTPGetDatum(const TimeTzADT *X)
91
0
{
92
0
  return PointerGetDatum(X);
93
0
}
Unexecuted instantiation: brin_minmax_multi.c:TimeTzADTPGetDatum
Unexecuted instantiation: parse_expr.c:TimeTzADTPGetDatum
Unexecuted instantiation: execExprInterp.c:TimeTzADTPGetDatum
Unexecuted instantiation: date.c:TimeTzADTPGetDatum
Unexecuted instantiation: datetime.c:TimeTzADTPGetDatum
Unexecuted instantiation: formatting.c:TimeTzADTPGetDatum
Unexecuted instantiation: json.c:TimeTzADTPGetDatum
Unexecuted instantiation: jsonb_util.c:TimeTzADTPGetDatum
Unexecuted instantiation: jsonpath_exec.c:TimeTzADTPGetDatum
Unexecuted instantiation: pseudorandomfuncs.c:TimeTzADTPGetDatum
Unexecuted instantiation: rangetypes.c:TimeTzADTPGetDatum
Unexecuted instantiation: selfuncs.c:TimeTzADTPGetDatum
Unexecuted instantiation: timestamp.c:TimeTzADTPGetDatum
Unexecuted instantiation: xml.c:TimeTzADTPGetDatum
94
95
0
#define PG_GETARG_DATEADT(n)   DatumGetDateADT(PG_GETARG_DATUM(n))
96
0
#define PG_GETARG_TIMEADT(n)   DatumGetTimeADT(PG_GETARG_DATUM(n))
97
0
#define PG_GETARG_TIMETZADT_P(n) DatumGetTimeTzADTP(PG_GETARG_DATUM(n))
98
99
0
#define PG_RETURN_DATEADT(x)   return DateADTGetDatum(x)
100
0
#define PG_RETURN_TIMEADT(x)   return TimeADTGetDatum(x)
101
0
#define PG_RETURN_TIMETZADT_P(x) return TimeTzADTPGetDatum(x)
102
103
104
/* date.c */
105
extern int32 anytime_typmod_check(bool istz, int32 typmod);
106
extern double date2timestamp_no_overflow(DateADT dateVal);
107
extern Timestamp date2timestamp_safe(DateADT dateVal, Node *escontext);
108
extern TimestampTz date2timestamptz_safe(DateADT dateVal, Node *escontext);
109
extern DateADT timestamp2date_safe(Timestamp timestamp, Node *escontext);
110
extern DateADT timestamptz2date_safe(TimestampTz timestamp, Node *escontext);
111
extern int32 date_cmp_timestamp_internal(DateADT dateVal, Timestamp dt2);
112
extern int32 date_cmp_timestamptz_internal(DateADT dateVal, TimestampTz dt2);
113
114
extern void EncodeSpecialDate(DateADT dt, char *str);
115
extern DateADT GetSQLCurrentDate(void);
116
extern TimeTzADT *GetSQLCurrentTime(int32 typmod);
117
extern TimeADT GetSQLLocalTime(int32 typmod);
118
extern int  time2tm(TimeADT time, struct pg_tm *tm, fsec_t *fsec);
119
extern int  timetz2tm(TimeTzADT *time, struct pg_tm *tm, fsec_t *fsec, int *tzp);
120
extern int  tm2time(struct pg_tm *tm, fsec_t fsec, TimeADT *result);
121
extern int  tm2timetz(struct pg_tm *tm, fsec_t fsec, int tz, TimeTzADT *result);
122
extern bool time_overflows(int hour, int min, int sec, fsec_t fsec);
123
extern bool float_time_overflows(int hour, int min, double sec);
124
extern void AdjustTimeForTypmod(TimeADT *time, int32 typmod);
125
126
#endif              /* DATE_H */