summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 3d39f72)
raw | patch | inline | side by side (parent: 3d39f72)
author | Sebastian Harl <sh@tokkee.org> | |
Thu, 8 Nov 2012 06:57:57 +0000 (07:57 +0100) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Thu, 8 Nov 2012 06:57:57 +0000 (07:57 +0100) |
src/postrr.h.in | patch | blob | history | |
src/postrr.sql.in | patch | blob | history | |
src/rrtimeslice.c | patch | blob | history |
diff --git a/src/postrr.h.in b/src/postrr.h.in
index d9df4af255258897d55faecec38ffd68e73ae6eb..bf93551c87af699e6ae00cee35e1168de8709aaf 100644 (file)
--- a/src/postrr.h.in
+++ b/src/postrr.h.in
Datum
rrtimeslice_to_rrtimeslice(PG_FUNCTION_ARGS);
Datum
+timestamptz_to_rrtimeslice(PG_FUNCTION_ARGS);
+Datum
rrtimeslice_to_timestamptz(PG_FUNCTION_ARGS);
/* comparison operators */
diff --git a/src/postrr.sql.in b/src/postrr.sql.in
index 9f34f22100cfd04151da1afb56ca23ec2c3538d8..eb197452a5ca6e1e4a771398854efc0d0d625975 100644 (file)
--- a/src/postrr.sql.in
+++ b/src/postrr.sql.in
WITH FUNCTION RRTimeslice(rrtimeslice, integer, boolean)
AS IMPLICIT;
+CREATE OR REPLACE FUNCTION RRTimeslice(timestamptz, integer, boolean)
+ RETURNS rrtimeslice
+ AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'timestamptz_to_rrtimeslice'
+ LANGUAGE 'C' IMMUTABLE STRICT;
+
+CREATE CAST (timestamptz AS rrtimeslice)
+ WITH FUNCTION RRTimeslice(timestamptz, integer, boolean)
+ AS IMPLICIT;
+
CREATE OR REPLACE FUNCTION Tstamptz(rrtimeslice)
RETURNS timestamptz
AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_to_timestamptz'
diff --git a/src/rrtimeslice.c b/src/rrtimeslice.c
index 7de9ed742244b8c30b7ec2e7266e3fb9ae3ed552..1e8283c30235a0cced110368739c1cbb1b410407 100644 (file)
--- a/src/rrtimeslice.c
+++ b/src/rrtimeslice.c
PG_FUNCTION_INFO_V1(rrtimeslice_typmodout);
PG_FUNCTION_INFO_V1(rrtimeslice_to_rrtimeslice);
+PG_FUNCTION_INFO_V1(timestamptz_to_rrtimeslice);
PG_FUNCTION_INFO_V1(rrtimeslice_to_timestamptz);
PG_FUNCTION_INFO_V1(rrtimeslice_cmp);
PG_RETURN_RRTIMESLICE_P(tslice);
} /* rrtimeslice_to_rrtimeslice */
+Datum
+timestamptz_to_rrtimeslice(PG_FUNCTION_ARGS)
+{
+ TimestampTz tstamp;
+ int32 typmod;
+
+ rrtimeslice_t *tslice;
+
+ if (PG_NARGS() != 3)
+ ereport(ERROR, (
+ errmsg("timestamptz_to_rrtimeslice() "
+ "expects three arguments"),
+ errhint("Usage: timestamptz_to_rrtimeslice"
+ "(timestamptz, typmod, is_explicit)")
+ ));
+
+ tstamp = PG_GETARG_TIMESTAMPTZ(0);
+ typmod = PG_GETARG_INT32(1);
+
+ tslice = (rrtimeslice_t *)palloc0(sizeof(*tslice));
+
+ tslice->tstamp = tstamp;
+ if (typmod >= 0)
+ rrtimeslice_apply_typmod(tslice, typmod);
+
+ PG_RETURN_RRTIMESLICE_P(tslice);
+} /* timestamptz_to_rrtimeslice */
+
Datum
rrtimeslice_to_timestamptz(PG_FUNCTION_ARGS)
{