LCOV - differential code coverage report
Current view: top level - src/include/utils - date.h (source / functions) Coverage Total Hit GNC ECB DCB
Current: Differential Code Coverage HEAD vs 15 Lines: 100.0 % 12 12 12 10 2
Current Date: 2023-04-08 15:15:32 Functions: 100.0 % 6 6 6 5 1
Baseline: 15
Baseline Date: 2023-04-08 15:09:40
Legend: Lines: hit not hit

           TLA  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-2023, 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 <math.h>
      18                 : 
      19                 : #include "datatype/timestamp.h"
      20                 : #include "fmgr.h"
      21                 : #include "pgtime.h"
      22                 : 
      23                 : typedef int32 DateADT;
      24                 : 
      25                 : typedef int64 TimeADT;
      26                 : 
      27                 : typedef struct
      28                 : {
      29                 :     TimeADT     time;           /* all time units other than months and years */
      30                 :     int32       zone;           /* numeric time zone, in seconds */
      31                 : } TimeTzADT;
      32                 : 
      33                 : /*
      34                 :  * Infinity and minus infinity must be the max and min values of DateADT.
      35                 :  */
      36                 : #define DATEVAL_NOBEGIN     ((DateADT) PG_INT32_MIN)
      37                 : #define DATEVAL_NOEND       ((DateADT) PG_INT32_MAX)
      38                 : 
      39                 : #define DATE_NOBEGIN(j)     ((j) = DATEVAL_NOBEGIN)
      40                 : #define DATE_IS_NOBEGIN(j)  ((j) == DATEVAL_NOBEGIN)
      41                 : #define DATE_NOEND(j)       ((j) = DATEVAL_NOEND)
      42                 : #define DATE_IS_NOEND(j)    ((j) == DATEVAL_NOEND)
      43                 : #define DATE_NOT_FINITE(j)  (DATE_IS_NOBEGIN(j) || DATE_IS_NOEND(j))
      44                 : 
      45                 : #define MAX_TIME_PRECISION 6
      46                 : 
      47                 : /*
      48                 :  * Functions for fmgr-callable functions.
      49                 :  *
      50                 :  * For TimeADT, we make use of the same support routines as for int64.
      51                 :  * Therefore TimeADT is pass-by-reference if and only if int64 is!
      52                 :  */
      53                 : static inline DateADT
      54 GNC      181854 : DatumGetDateADT(Datum X)
      55                 : {
      56          181854 :     return (DateADT) DatumGetInt32(X);
      57                 : }
      58                 : 
      59                 : static inline TimeADT
      60          200123 : DatumGetTimeADT(Datum X)
      61                 : {
      62          200123 :     return (TimeADT) DatumGetInt64(X);
      63                 : }
      64 ECB             : 
      65                 : static inline TimeTzADT *
      66 GNC      207651 : DatumGetTimeTzADTP(Datum X)
      67                 : {
      68          207651 :     return (TimeTzADT *) DatumGetPointer(X);
      69                 : }
      70                 : 
      71                 : static inline Datum
      72           26450 : DateADTGetDatum(DateADT X)
      73                 : {
      74           26450 :     return Int32GetDatum(X);
      75                 : }
      76                 : 
      77                 : static inline Datum
      78           49994 : TimeADTGetDatum(TimeADT X)
      79                 : {
      80           49994 :     return Int64GetDatum(X);
      81                 : }
      82                 : 
      83                 : static inline Datum
      84            2421 : TimeTzADTPGetDatum(const TimeTzADT *X)
      85                 : {
      86            2421 :     return PointerGetDatum(X);
      87                 : }
      88 ECB             : 
      89                 : #define PG_GETARG_DATEADT(n)     DatumGetDateADT(PG_GETARG_DATUM(n))
      90                 : #define PG_GETARG_TIMEADT(n)     DatumGetTimeADT(PG_GETARG_DATUM(n))
      91                 : #define PG_GETARG_TIMETZADT_P(n) DatumGetTimeTzADTP(PG_GETARG_DATUM(n))
      92                 : 
      93                 : #define PG_RETURN_DATEADT(x)     return DateADTGetDatum(x)
      94                 : #define PG_RETURN_TIMEADT(x)     return TimeADTGetDatum(x)
      95                 : #define PG_RETURN_TIMETZADT_P(x) return TimeTzADTPGetDatum(x)
      96                 : 
      97                 : 
      98                 : /* date.c */
      99                 : extern double date2timestamp_no_overflow(DateADT dateVal);
     100                 : extern Timestamp date2timestamp_opt_overflow(DateADT dateVal, int *overflow);
     101                 : extern TimestampTz date2timestamptz_opt_overflow(DateADT dateVal, int *overflow);
     102                 : extern int32 date_cmp_timestamp_internal(DateADT dateVal, Timestamp dt2);
     103                 : extern int32 date_cmp_timestamptz_internal(DateADT dateVal, TimestampTz dt2);
     104                 : 
     105                 : extern void EncodeSpecialDate(DateADT dt, char *str);
     106                 : extern int  time2tm(TimeADT time, struct pg_tm *tm, fsec_t *fsec);
     107                 : extern int  timetz2tm(TimeTzADT *time, struct pg_tm *tm, fsec_t *fsec, int *tzp);
     108                 : extern int  tm2time(struct pg_tm *tm, fsec_t fsec, TimeADT *result);
     109                 : extern int  tm2timetz(struct pg_tm *tm, fsec_t fsec, int tz, TimeTzADT *result);
     110                 : extern bool time_overflows(int hour, int min, int sec, fsec_t fsec);
     111                 : extern bool float_time_overflows(int hour, int min, double sec);
     112                 : extern void AdjustTimeForTypmod(TimeADT *time, int32 typmod);
     113                 : 
     114                 : #endif                          /* DATE_H */
        

Generated by: LCOV version v1.16-55-g56c0a2a