LCOV - code coverage report
Current view: top level - src/include/utils - date.h (source / functions) Coverage Total Hit
Test: Code coverage Lines: 100.0 % 12 12
Test Date: 2026-01-26 10:56:24 Functions: 100.0 % 6 6
Legend: Lines:     hit not hit

            Line data    Source code
       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              : #define TIMETZ_TYPLEN           12
      38              : 
      39              : /*
      40              :  * Infinity and minus infinity must be the max and min values of DateADT.
      41              :  */
      42              : #define DATEVAL_NOBEGIN         ((DateADT) PG_INT32_MIN)
      43              : #define DATEVAL_NOEND           ((DateADT) PG_INT32_MAX)
      44              : 
      45              : #define DATE_NOBEGIN(j)         ((j) = DATEVAL_NOBEGIN)
      46              : #define DATE_IS_NOBEGIN(j)      ((j) == DATEVAL_NOBEGIN)
      47              : #define DATE_NOEND(j)           ((j) = DATEVAL_NOEND)
      48              : #define DATE_IS_NOEND(j)        ((j) == DATEVAL_NOEND)
      49              : #define DATE_NOT_FINITE(j)      (DATE_IS_NOBEGIN(j) || DATE_IS_NOEND(j))
      50              : 
      51              : #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        91189 : DatumGetDateADT(Datum X)
      61              : {
      62        91189 :         return (DateADT) DatumGetInt32(X);
      63              : }
      64              : 
      65              : static inline TimeADT
      66        48264 : DatumGetTimeADT(Datum X)
      67              : {
      68        48264 :         return (TimeADT) DatumGetInt64(X);
      69              : }
      70              : 
      71              : static inline TimeTzADT *
      72        62883 : DatumGetTimeTzADTP(Datum X)
      73              : {
      74        62883 :         return (TimeTzADT *) DatumGetPointer(X);
      75              : }
      76              : 
      77              : static inline Datum
      78         2442 : DateADTGetDatum(DateADT X)
      79              : {
      80         2442 :         return Int32GetDatum(X);
      81              : }
      82              : 
      83              : static inline Datum
      84          995 : TimeADTGetDatum(TimeADT X)
      85              : {
      86          995 :         return Int64GetDatum(X);
      87              : }
      88              : 
      89              : static inline Datum
      90         1202 : TimeTzADTPGetDatum(const TimeTzADT *X)
      91              : {
      92         1202 :         return PointerGetDatum(X);
      93              : }
      94              : 
      95              : #define PG_GETARG_DATEADT(n)     DatumGetDateADT(PG_GETARG_DATUM(n))
      96              : #define PG_GETARG_TIMEADT(n)     DatumGetTimeADT(PG_GETARG_DATUM(n))
      97              : #define PG_GETARG_TIMETZADT_P(n) DatumGetTimeTzADTP(PG_GETARG_DATUM(n))
      98              : 
      99              : #define PG_RETURN_DATEADT(x)     return DateADTGetDatum(x)
     100              : #define PG_RETURN_TIMEADT(x)     return TimeADTGetDatum(x)
     101              : #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 */
        

Generated by: LCOV version 2.3.2-1