Code

RRTimeslice: Added cast from timestamptz to rrtimeslice.
authorSebastian Harl <sh@tokkee.org>
Thu, 8 Nov 2012 06:57:57 +0000 (07:57 +0100)
committerSebastian Harl <sh@tokkee.org>
Thu, 8 Nov 2012 06:57:57 +0000 (07:57 +0100)
src/postrr.h.in
src/postrr.sql.in
src/rrtimeslice.c

index d9df4af255258897d55faecec38ffd68e73ae6eb..bf93551c87af699e6ae00cee35e1168de8709aaf 100644 (file)
@@ -79,6 +79,8 @@ rrtimeslice_typmodout(PG_FUNCTION_ARGS);
 Datum
 rrtimeslice_to_rrtimeslice(PG_FUNCTION_ARGS);
 Datum
+timestamptz_to_rrtimeslice(PG_FUNCTION_ARGS);
+Datum
 rrtimeslice_to_timestamptz(PG_FUNCTION_ARGS);
 
 /* comparison operators */
index 9f34f22100cfd04151da1afb56ca23ec2c3538d8..eb197452a5ca6e1e4a771398854efc0d0d625975 100644 (file)
@@ -108,6 +108,15 @@ CREATE CAST (rrtimeslice AS rrtimeslice)
        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'
index 7de9ed742244b8c30b7ec2e7266e3fb9ae3ed552..1e8283c30235a0cced110368739c1cbb1b410407 100644 (file)
@@ -244,6 +244,7 @@ PG_FUNCTION_INFO_V1(rrtimeslice_typmodin);
 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);
@@ -511,6 +512,34 @@ rrtimeslice_to_rrtimeslice(PG_FUNCTION_ARGS)
        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)
 {