aboutsummaryrefslogtreecommitdiff
path: root/src/include/utils/nabstime.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/utils/nabstime.h')
-rw-r--r--src/include/utils/nabstime.h148
1 files changed, 79 insertions, 69 deletions
diff --git a/src/include/utils/nabstime.h b/src/include/utils/nabstime.h
index 97f5119fd74..683b81e2e42 100644
--- a/src/include/utils/nabstime.h
+++ b/src/include/utils/nabstime.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: nabstime.h,v 1.25 2000/04/12 17:16:55 momjian Exp $
+ * $Id: nabstime.h,v 1.26 2000/06/09 01:11:15 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -15,13 +15,15 @@
#define NABSTIME_H
#include <time.h>
+
+#include "fmgr.h"
#include "utils/timestamp.h"
#include "utils/datetime.h"
/* ----------------------------------------------------------------
- * time types + support macros
*
+ * time types + support macros
*
* ----------------------------------------------------------------
*/
@@ -39,9 +41,29 @@ typedef struct
int32 status;
AbsoluteTime data[2];
} TimeIntervalData;
+
typedef TimeIntervalData *TimeInterval;
/*
+ * Macros for fmgr-callable functions.
+ */
+#define DatumGetAbsoluteTime(X) ((AbsoluteTime) DatumGetInt32(X))
+#define DatumGetRelativeTime(X) ((RelativeTime) DatumGetInt32(X))
+#define DatumGetTimeInterval(X) ((TimeInterval) DatumGetPointer(X))
+
+#define AbsoluteTimeGetDatum(X) Int32GetDatum(X)
+#define RelativeTimeGetDatum(X) Int32GetDatum(X)
+#define TimeIntervalGetDatum(X) PointerGetDatum(X)
+
+#define PG_GETARG_ABSOLUTETIME(n) DatumGetAbsoluteTime(PG_GETARG_DATUM(n))
+#define PG_GETARG_RELATIVETIME(n) DatumGetRelativeTime(PG_GETARG_DATUM(n))
+#define PG_GETARG_TIMEINTERVAL(n) DatumGetTimeInterval(PG_GETARG_DATUM(n))
+
+#define PG_RETURN_ABSOLUTETIME(x) return AbsoluteTimeGetDatum(x)
+#define PG_RETURN_RELATIVETIME(x) return RelativeTimeGetDatum(x)
+#define PG_RETURN_TIMEINTERVAL(x) return TimeIntervalGetDatum(x)
+
+/*
* Reserved values
* Epoch is Unix system time zero, but needs to be kept as a reserved
* value rather than converting to time since timezone calculations
@@ -78,21 +100,9 @@ typedef TimeIntervalData *TimeInterval;
((bool) (((AbsoluteTime) time) < NOEND_ABSTIME && \
((AbsoluteTime) time) > NOSTART_ABSTIME))
-/* have to include this because EPOCH_ABSTIME used to be invalid - yuk */
-#define AbsoluteTimeIsBackwardCompatiblyValid(time) \
- ((bool) (((AbsoluteTime) time) != INVALID_ABSTIME && \
- ((AbsoluteTime) time) > EPOCH_ABSTIME))
-
-#define AbsoluteTimeIsBackwardCompatiblyReal(time) \
- ((bool) (((AbsoluteTime) time) < NOEND_ABSTIME && \
- ((AbsoluteTime) time) > NOSTART_ABSTIME && \
- ((AbsoluteTime) time) > EPOCH_ABSTIME))
-
#define RelativeTimeIsValid(time) \
((bool) (((RelativeTime) time) != INVALID_RELTIME))
-extern AbsoluteTime GetCurrentAbsoluteTime(void);
-
/*
* getSystemTime
* Returns system time.
@@ -104,62 +114,62 @@ extern AbsoluteTime GetCurrentAbsoluteTime(void);
/*
* nabstime.c prototypes
*/
-extern AbsoluteTime nabstimein(char *timestr);
-extern char *nabstimeout(AbsoluteTime time);
-
-extern bool abstimeeq(AbsoluteTime t1, AbsoluteTime t2);
-extern bool abstimene(AbsoluteTime t1, AbsoluteTime t2);
-extern bool abstimelt(AbsoluteTime t1, AbsoluteTime t2);
-extern bool abstimegt(AbsoluteTime t1, AbsoluteTime t2);
-extern bool abstimele(AbsoluteTime t1, AbsoluteTime t2);
-extern bool abstimege(AbsoluteTime t1, AbsoluteTime t2);
-extern bool abstime_finite(AbsoluteTime time);
-
-extern AbsoluteTime timestamp_abstime(Timestamp *timestamp);
-extern Timestamp *abstime_timestamp(AbsoluteTime abstime);
-
+extern Datum nabstimein(PG_FUNCTION_ARGS);
+extern Datum nabstimeout(PG_FUNCTION_ARGS);
+
+extern Datum abstimeeq(PG_FUNCTION_ARGS);
+extern Datum abstimene(PG_FUNCTION_ARGS);
+extern Datum abstimelt(PG_FUNCTION_ARGS);
+extern Datum abstimegt(PG_FUNCTION_ARGS);
+extern Datum abstimele(PG_FUNCTION_ARGS);
+extern Datum abstimege(PG_FUNCTION_ARGS);
+extern Datum abstime_finite(PG_FUNCTION_ARGS);
+
+extern Datum timestamp_abstime(PG_FUNCTION_ARGS);
+extern Datum abstime_timestamp(PG_FUNCTION_ARGS);
+
+extern Datum reltimein(PG_FUNCTION_ARGS);
+extern Datum reltimeout(PG_FUNCTION_ARGS);
+extern Datum tintervalin(PG_FUNCTION_ARGS);
+extern Datum tintervalout(PG_FUNCTION_ARGS);
+extern Datum interval_reltime(PG_FUNCTION_ARGS);
+extern Datum reltime_interval(PG_FUNCTION_ARGS);
+extern Datum mktinterval(PG_FUNCTION_ARGS);
+extern Datum timepl(PG_FUNCTION_ARGS);
+extern Datum timemi(PG_FUNCTION_ARGS);
+
+extern Datum intinterval(PG_FUNCTION_ARGS);
+extern Datum tintervalrel(PG_FUNCTION_ARGS);
+extern Datum timenow(PG_FUNCTION_ARGS);
+extern Datum reltimeeq(PG_FUNCTION_ARGS);
+extern Datum reltimene(PG_FUNCTION_ARGS);
+extern Datum reltimelt(PG_FUNCTION_ARGS);
+extern Datum reltimegt(PG_FUNCTION_ARGS);
+extern Datum reltimele(PG_FUNCTION_ARGS);
+extern Datum reltimege(PG_FUNCTION_ARGS);
+extern Datum tintervalsame(PG_FUNCTION_ARGS);
+extern Datum tintervaleq(PG_FUNCTION_ARGS);
+extern Datum tintervalne(PG_FUNCTION_ARGS);
+extern Datum tintervallt(PG_FUNCTION_ARGS);
+extern Datum tintervalgt(PG_FUNCTION_ARGS);
+extern Datum tintervalle(PG_FUNCTION_ARGS);
+extern Datum tintervalge(PG_FUNCTION_ARGS);
+extern Datum tintervalleneq(PG_FUNCTION_ARGS);
+extern Datum tintervallenne(PG_FUNCTION_ARGS);
+extern Datum tintervallenlt(PG_FUNCTION_ARGS);
+extern Datum tintervallengt(PG_FUNCTION_ARGS);
+extern Datum tintervallenle(PG_FUNCTION_ARGS);
+extern Datum tintervallenge(PG_FUNCTION_ARGS);
+extern Datum tintervalct(PG_FUNCTION_ARGS);
+extern Datum tintervalov(PG_FUNCTION_ARGS);
+extern Datum tintervalstart(PG_FUNCTION_ARGS);
+extern Datum tintervalend(PG_FUNCTION_ARGS);
+extern Datum int4reltime(PG_FUNCTION_ARGS);
+extern Datum timeofday(PG_FUNCTION_ARGS);
+
+/* non-fmgr-callable support routines */
+extern AbsoluteTime GetCurrentAbsoluteTime(void);
extern bool AbsoluteTimeIsBefore(AbsoluteTime time1, AbsoluteTime time2);
-
extern void abstime2tm(AbsoluteTime time, int *tzp, struct tm * tm, char *tzn);
-extern RelativeTime reltimein(char *timestring);
-extern char *reltimeout(RelativeTime timevalue);
-extern TimeInterval tintervalin(char *intervalstr);
-extern char *tintervalout(TimeInterval interval);
-extern RelativeTime interval_reltime(Interval *interval);
-extern Interval *reltime_interval(RelativeTime reltime);
-extern TimeInterval mktinterval(AbsoluteTime t1, AbsoluteTime t2);
-extern AbsoluteTime timepl(AbsoluteTime t1, RelativeTime t2);
-extern AbsoluteTime timemi(AbsoluteTime t1, RelativeTime t2);
-
-/* extern RelativeTime abstimemi(AbsoluteTime t1, AbsoluteTime t2); static*/
-extern int intinterval(AbsoluteTime t, TimeInterval interval);
-extern RelativeTime tintervalrel(TimeInterval interval);
-extern AbsoluteTime timenow(void);
-extern bool reltimeeq(RelativeTime t1, RelativeTime t2);
-extern bool reltimene(RelativeTime t1, RelativeTime t2);
-extern bool reltimelt(RelativeTime t1, RelativeTime t2);
-extern bool reltimegt(RelativeTime t1, RelativeTime t2);
-extern bool reltimele(RelativeTime t1, RelativeTime t2);
-extern bool reltimege(RelativeTime t1, RelativeTime t2);
-extern bool tintervalsame(TimeInterval i1, TimeInterval i2);
-extern bool tintervaleq(TimeInterval i1, TimeInterval i2);
-extern bool tintervalne(TimeInterval i1, TimeInterval i2);
-extern bool tintervallt(TimeInterval i1, TimeInterval i2);
-extern bool tintervalgt(TimeInterval i1, TimeInterval i2);
-extern bool tintervalle(TimeInterval i1, TimeInterval i2);
-extern bool tintervalge(TimeInterval i1, TimeInterval i2);
-extern bool tintervalleneq(TimeInterval i, RelativeTime t);
-extern bool tintervallenne(TimeInterval i, RelativeTime t);
-extern bool tintervallenlt(TimeInterval i, RelativeTime t);
-extern bool tintervallengt(TimeInterval i, RelativeTime t);
-extern bool tintervallenle(TimeInterval i, RelativeTime t);
-extern bool tintervallenge(TimeInterval i, RelativeTime t);
-extern bool tintervalct(TimeInterval i1, TimeInterval i2);
-extern bool tintervalov(TimeInterval i1, TimeInterval i2);
-extern AbsoluteTime tintervalstart(TimeInterval i);
-extern AbsoluteTime tintervalend(TimeInterval i);
-extern int32 int4reltime(int32 timevalue);
-extern text *timeofday(void);
-
#endif /* NABSTIME_H */