]> granicus.if.org Git - postgresql/blob - src/include/utils/nabstime.h
Update copyright for the year 2010.
[postgresql] / src / include / utils / nabstime.h
1 /*-------------------------------------------------------------------------
2  *
3  * nabstime.h
4  *        Definitions for the "new" abstime code.
5  *
6  *
7  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * $PostgreSQL: pgsql/src/include/utils/nabstime.h,v 1.53 2010/01/02 16:58:10 momjian Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef NABSTIME_H
15 #define NABSTIME_H
16
17 #include <limits.h>
18
19 #include "fmgr.h"
20 #include "utils/timestamp.h"
21 #include "utils/datetime.h"
22
23
24 /* ----------------------------------------------------------------
25  *
26  *                              time types + support macros
27  *
28  * ----------------------------------------------------------------
29  */
30
31 /*
32  * Although time_t generally is a long int on 64 bit systems, these two
33  * types must be 4 bytes, because that's what pg_type.h assumes. They
34  * should be yanked (long) before 2038 and be replaced by timestamp and
35  * interval.
36  */
37 typedef int32 AbsoluteTime;
38 typedef int32 RelativeTime;
39
40 typedef struct
41 {
42         int32           status;
43         AbsoluteTime data[2];
44 } TimeIntervalData;
45
46 typedef TimeIntervalData *TimeInterval;
47
48 /*
49  * Macros for fmgr-callable functions.
50  */
51 #define DatumGetAbsoluteTime(X)  ((AbsoluteTime) DatumGetInt32(X))
52 #define DatumGetRelativeTime(X)  ((RelativeTime) DatumGetInt32(X))
53 #define DatumGetTimeInterval(X)  ((TimeInterval) DatumGetPointer(X))
54
55 #define AbsoluteTimeGetDatum(X)  Int32GetDatum(X)
56 #define RelativeTimeGetDatum(X)  Int32GetDatum(X)
57 #define TimeIntervalGetDatum(X)  PointerGetDatum(X)
58
59 #define PG_GETARG_ABSOLUTETIME(n)  DatumGetAbsoluteTime(PG_GETARG_DATUM(n))
60 #define PG_GETARG_RELATIVETIME(n)  DatumGetRelativeTime(PG_GETARG_DATUM(n))
61 #define PG_GETARG_TIMEINTERVAL(n)  DatumGetTimeInterval(PG_GETARG_DATUM(n))
62
63 #define PG_RETURN_ABSOLUTETIME(x)  return AbsoluteTimeGetDatum(x)
64 #define PG_RETURN_RELATIVETIME(x)  return RelativeTimeGetDatum(x)
65 #define PG_RETURN_TIMEINTERVAL(x)  return TimeIntervalGetDatum(x)
66
67 /*
68  * Reserved values
69  * Epoch is Unix system time zero, but needs to be kept as a reserved
70  *      value rather than converting to time since timezone calculations
71  *      might move it away from 1970-01-01 00:00:00Z - tgl 97/02/20
72  *
73  * Pre-v6.1 code had large decimal numbers for reserved values.
74  * These were chosen as special 32-bit bit patterns,
75  *      so redefine them explicitly using these bit patterns. - tgl 97/02/24
76  */
77 #define INVALID_ABSTIME ((AbsoluteTime) 0x7FFFFFFE)             /* 2147483647 (2^31 - 1) */
78 #define NOEND_ABSTIME   ((AbsoluteTime) 0x7FFFFFFC)             /* 2147483645 (2^31 - 3) */
79 #define NOSTART_ABSTIME ((AbsoluteTime) INT_MIN)                /* -2147483648 */
80
81 #define INVALID_RELTIME ((RelativeTime) 0x7FFFFFFE)             /* 2147483647 (2^31 - 1) */
82
83 #define AbsoluteTimeIsValid(time) \
84         ((bool) ((time) != INVALID_ABSTIME))
85
86 /*
87  * Because NOSTART_ABSTIME is defined as INT_MIN, there can't be any
88  * AbsoluteTime values less than it.  Therefore, we can code the test
89  * "time > NOSTART_ABSTIME" as "time != NOSTART_ABSTIME", which avoids
90  * compiler bugs on some platforms.  --- tgl & az, 11/2000
91  */
92 #define AbsoluteTimeIsReal(time) \
93         ((bool) (((AbsoluteTime) (time)) < NOEND_ABSTIME && \
94                           ((AbsoluteTime) (time)) != NOSTART_ABSTIME))
95
96 #define RelativeTimeIsValid(time) \
97         ((bool) (((RelativeTime) (time)) != INVALID_RELTIME))
98
99
100 /*
101  * nabstime.c prototypes
102  */
103 extern Datum abstimein(PG_FUNCTION_ARGS);
104 extern Datum abstimeout(PG_FUNCTION_ARGS);
105 extern Datum abstimerecv(PG_FUNCTION_ARGS);
106 extern Datum abstimesend(PG_FUNCTION_ARGS);
107
108 extern Datum abstimeeq(PG_FUNCTION_ARGS);
109 extern Datum abstimene(PG_FUNCTION_ARGS);
110 extern Datum abstimelt(PG_FUNCTION_ARGS);
111 extern Datum abstimegt(PG_FUNCTION_ARGS);
112 extern Datum abstimele(PG_FUNCTION_ARGS);
113 extern Datum abstimege(PG_FUNCTION_ARGS);
114 extern Datum abstime_finite(PG_FUNCTION_ARGS);
115
116 extern Datum timestamp_abstime(PG_FUNCTION_ARGS);
117 extern Datum abstime_timestamp(PG_FUNCTION_ARGS);
118 extern Datum timestamptz_abstime(PG_FUNCTION_ARGS);
119 extern Datum abstime_timestamptz(PG_FUNCTION_ARGS);
120
121 extern Datum reltimein(PG_FUNCTION_ARGS);
122 extern Datum reltimeout(PG_FUNCTION_ARGS);
123 extern Datum reltimerecv(PG_FUNCTION_ARGS);
124 extern Datum reltimesend(PG_FUNCTION_ARGS);
125 extern Datum tintervalin(PG_FUNCTION_ARGS);
126 extern Datum tintervalout(PG_FUNCTION_ARGS);
127 extern Datum tintervalrecv(PG_FUNCTION_ARGS);
128 extern Datum tintervalsend(PG_FUNCTION_ARGS);
129 extern Datum interval_reltime(PG_FUNCTION_ARGS);
130 extern Datum reltime_interval(PG_FUNCTION_ARGS);
131 extern Datum mktinterval(PG_FUNCTION_ARGS);
132 extern Datum timepl(PG_FUNCTION_ARGS);
133 extern Datum timemi(PG_FUNCTION_ARGS);
134
135 extern Datum intinterval(PG_FUNCTION_ARGS);
136 extern Datum tintervalrel(PG_FUNCTION_ARGS);
137 extern Datum timenow(PG_FUNCTION_ARGS);
138 extern Datum reltimeeq(PG_FUNCTION_ARGS);
139 extern Datum reltimene(PG_FUNCTION_ARGS);
140 extern Datum reltimelt(PG_FUNCTION_ARGS);
141 extern Datum reltimegt(PG_FUNCTION_ARGS);
142 extern Datum reltimele(PG_FUNCTION_ARGS);
143 extern Datum reltimege(PG_FUNCTION_ARGS);
144 extern Datum tintervalsame(PG_FUNCTION_ARGS);
145 extern Datum tintervaleq(PG_FUNCTION_ARGS);
146 extern Datum tintervalne(PG_FUNCTION_ARGS);
147 extern Datum tintervallt(PG_FUNCTION_ARGS);
148 extern Datum tintervalgt(PG_FUNCTION_ARGS);
149 extern Datum tintervalle(PG_FUNCTION_ARGS);
150 extern Datum tintervalge(PG_FUNCTION_ARGS);
151 extern Datum tintervalleneq(PG_FUNCTION_ARGS);
152 extern Datum tintervallenne(PG_FUNCTION_ARGS);
153 extern Datum tintervallenlt(PG_FUNCTION_ARGS);
154 extern Datum tintervallengt(PG_FUNCTION_ARGS);
155 extern Datum tintervallenle(PG_FUNCTION_ARGS);
156 extern Datum tintervallenge(PG_FUNCTION_ARGS);
157 extern Datum tintervalct(PG_FUNCTION_ARGS);
158 extern Datum tintervalov(PG_FUNCTION_ARGS);
159 extern Datum tintervalstart(PG_FUNCTION_ARGS);
160 extern Datum tintervalend(PG_FUNCTION_ARGS);
161 extern Datum timeofday(PG_FUNCTION_ARGS);
162
163 /* non-fmgr-callable support routines */
164 extern AbsoluteTime GetCurrentAbsoluteTime(void);
165 extern void abstime2tm(AbsoluteTime time, int *tzp, struct pg_tm * tm, char **tzn);
166
167 #endif   /* NABSTIME_H */