aboutsummaryrefslogtreecommitdiff
path: root/src/include/utils/timestamp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/utils/timestamp.h')
-rw-r--r--src/include/utils/timestamp.h128
1 files changed, 77 insertions, 51 deletions
diff --git a/src/include/utils/timestamp.h b/src/include/utils/timestamp.h
index b7c1d0dc3af..634d4402b1e 100644
--- a/src/include/utils/timestamp.h
+++ b/src/include/utils/timestamp.h
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: timestamp.h,v 1.5 2000/06/08 22:37:58 momjian Exp $
+ * $Id: timestamp.h,v 1.6 2000/06/09 01:11:15 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -17,6 +17,9 @@
#include <math.h>
#include <limits.h>
+#include "fmgr.h"
+
+
/*
* Timestamp represents absolute time.
* Interval represents delta time. Keep track of months (and years)
@@ -38,6 +41,25 @@ typedef struct
} Interval;
+/*
+ * Macros for fmgr-callable functions.
+ *
+ * For Timestamp, we make use of the same support routines as for float8.
+ * Therefore Timestamp is pass-by-reference if and only if float8 is!
+ */
+#define DatumGetTimestamp(X) ((Timestamp) DatumGetFloat8(X))
+#define DatumGetIntervalP(X) ((Interval *) DatumGetPointer(X))
+
+#define TimestampGetDatum(X) Float8GetDatum(X)
+#define IntervalPGetDatum(X) PointerGetDatum(X)
+
+#define PG_GETARG_TIMESTAMP(n) DatumGetTimestamp(PG_GETARG_DATUM(n))
+#define PG_GETARG_INTERVAL_P(n) DatumGetIntervalP(PG_GETARG_DATUM(n))
+
+#define PG_RETURN_TIMESTAMP(x) return TimestampGetDatum(x)
+#define PG_RETURN_INTERVAL_P(x) return IntervalPGetDatum(x)
+
+
#ifdef NAN
#define DT_INVALID (NAN)
#else
@@ -105,59 +127,63 @@ extern int timestamp_is_epoch(double j);
* timestamp.c prototypes
*/
-extern Timestamp *timestamp_in(char *str);
-extern char *timestamp_out(Timestamp *dt);
-extern bool timestamp_eq(Timestamp *dt1, Timestamp *dt2);
-extern bool timestamp_ne(Timestamp *dt1, Timestamp *dt2);
-extern bool timestamp_lt(Timestamp *dt1, Timestamp *dt2);
-extern bool timestamp_le(Timestamp *dt1, Timestamp *dt2);
-extern bool timestamp_ge(Timestamp *dt1, Timestamp *dt2);
-extern bool timestamp_gt(Timestamp *dt1, Timestamp *dt2);
-extern bool timestamp_finite(Timestamp *timestamp);
-extern int timestamp_cmp(Timestamp *dt1, Timestamp *dt2);
-extern Timestamp *timestamp_smaller(Timestamp *dt1, Timestamp *dt2);
-extern Timestamp *timestamp_larger(Timestamp *dt1, Timestamp *dt2);
-
-extern Interval *interval_in(char *str);
-extern char *interval_out(Interval *span);
-extern bool interval_eq(Interval *span1, Interval *span2);
-extern bool interval_ne(Interval *span1, Interval *span2);
-extern bool interval_lt(Interval *span1, Interval *span2);
-extern bool interval_le(Interval *span1, Interval *span2);
-extern bool interval_ge(Interval *span1, Interval *span2);
-extern bool interval_gt(Interval *span1, Interval *span2);
-extern bool interval_finite(Interval *span);
-extern int interval_cmp(Interval *span1, Interval *span2);
-extern Interval *interval_smaller(Interval *span1, Interval *span2);
-extern Interval *interval_larger(Interval *span1, Interval *span2);
-
-extern text *timestamp_text(Timestamp *timestamp);
-extern Timestamp *text_timestamp(text *str);
-extern text *interval_text(Interval *interval);
-extern Interval *text_interval(text *str);
-extern Timestamp *timestamp_trunc(text *units, Timestamp *timestamp);
-extern Interval *interval_trunc(text *units, Interval *interval);
-extern float64 timestamp_part(text *units, Timestamp *timestamp);
-extern float64 interval_part(text *units, Interval *interval);
-extern text *timestamp_zone(text *zone, Timestamp *timestamp);
-
-extern Interval *interval_um(Interval *span);
-extern Interval *interval_pl(Interval *span1, Interval *span2);
-extern Interval *interval_mi(Interval *span1, Interval *span2);
-extern Interval *interval_mul(Interval *span1, float8 *factor);
-extern Interval *mul_d_interval(float8 *factor, Interval *span1);
-extern Interval *interval_div(Interval *span1, float8 *factor);
-
-extern Interval *timestamp_mi(Timestamp *dt1, Timestamp *dt2);
-extern Timestamp *timestamp_pl_span(Timestamp *dt, Interval *span);
-extern Timestamp *timestamp_mi_span(Timestamp *dt, Interval *span);
-extern Interval *timestamp_age(Timestamp *dt1, Timestamp *dt2);
-extern bool overlaps_timestamp(Timestamp *dt1, Timestamp *dt2, Timestamp *dt3, Timestamp *dt4);
+extern Datum timestamp_in(PG_FUNCTION_ARGS);
+extern Datum timestamp_out(PG_FUNCTION_ARGS);
+extern Datum timestamp_eq(PG_FUNCTION_ARGS);
+extern Datum timestamp_ne(PG_FUNCTION_ARGS);
+extern Datum timestamp_lt(PG_FUNCTION_ARGS);
+extern Datum timestamp_le(PG_FUNCTION_ARGS);
+extern Datum timestamp_ge(PG_FUNCTION_ARGS);
+extern Datum timestamp_gt(PG_FUNCTION_ARGS);
+extern Datum timestamp_finite(PG_FUNCTION_ARGS);
+extern Datum timestamp_cmp(PG_FUNCTION_ARGS);
+extern Datum timestamp_smaller(PG_FUNCTION_ARGS);
+extern Datum timestamp_larger(PG_FUNCTION_ARGS);
+
+extern Datum interval_in(PG_FUNCTION_ARGS);
+extern Datum interval_out(PG_FUNCTION_ARGS);
+extern Datum interval_eq(PG_FUNCTION_ARGS);
+extern Datum interval_ne(PG_FUNCTION_ARGS);
+extern Datum interval_lt(PG_FUNCTION_ARGS);
+extern Datum interval_le(PG_FUNCTION_ARGS);
+extern Datum interval_ge(PG_FUNCTION_ARGS);
+extern Datum interval_gt(PG_FUNCTION_ARGS);
+extern Datum interval_finite(PG_FUNCTION_ARGS);
+extern Datum interval_cmp(PG_FUNCTION_ARGS);
+extern Datum interval_smaller(PG_FUNCTION_ARGS);
+extern Datum interval_larger(PG_FUNCTION_ARGS);
+
+extern Datum timestamp_text(PG_FUNCTION_ARGS);
+extern Datum text_timestamp(PG_FUNCTION_ARGS);
+extern Datum interval_text(PG_FUNCTION_ARGS);
+extern Datum text_interval(PG_FUNCTION_ARGS);
+extern Datum timestamp_trunc(PG_FUNCTION_ARGS);
+extern Datum interval_trunc(PG_FUNCTION_ARGS);
+extern Datum timestamp_part(PG_FUNCTION_ARGS);
+extern Datum interval_part(PG_FUNCTION_ARGS);
+extern Datum timestamp_zone(PG_FUNCTION_ARGS);
+
+extern Datum interval_um(PG_FUNCTION_ARGS);
+extern Datum interval_pl(PG_FUNCTION_ARGS);
+extern Datum interval_mi(PG_FUNCTION_ARGS);
+extern Datum interval_mul(PG_FUNCTION_ARGS);
+extern Datum mul_d_interval(PG_FUNCTION_ARGS);
+extern Datum interval_div(PG_FUNCTION_ARGS);
+
+extern Datum timestamp_mi(PG_FUNCTION_ARGS);
+extern Datum timestamp_pl_span(PG_FUNCTION_ARGS);
+extern Datum timestamp_mi_span(PG_FUNCTION_ARGS);
+extern Datum timestamp_age(PG_FUNCTION_ARGS);
+extern Datum overlaps_timestamp(PG_FUNCTION_ARGS);
+
+extern Datum now(PG_FUNCTION_ARGS);
+
+/* Internal routines (not fmgr-callable) */
extern int tm2timestamp(struct tm * tm, double fsec, int *tzp, Timestamp *dt);
-extern int timestamp2tm(Timestamp dt, int *tzp, struct tm * tm, double *fsec, char **tzn);
+extern int timestamp2tm(Timestamp dt, int *tzp, struct tm * tm,
+ double *fsec, char **tzn);
extern Timestamp SetTimestamp(Timestamp timestamp);
-extern Timestamp *now(void);
#endif /* TIMESTAMP_H */