Code

c2b48212784d066231cd4f7d8d27d76c81307e4a
[postrr.git] / src / postrr.sql.in
1 -- PostRR - src/postrr.sql
2 -- Copyright (C) 2012 Sebastian 'tokkee' Harl <sh@tokkee.org>
3 -- All rights reserved.
4 --
5 -- Redistribution and use in source and binary forms, with or without
6 -- modification, are permitted provided that the following conditions
7 -- are met:
8 -- 1. Redistributions of source code must retain the above copyright
9 --    notice, this list of conditions and the following disclaimer.
10 -- 2. Redistributions in binary form must reproduce the above copyright
11 --    notice, this list of conditions and the following disclaimer in the
12 --    documentation and/or other materials provided with the distribution.
13 --
14 -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15 -- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
16 -- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 -- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
18 -- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 -- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 -- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21 -- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22 -- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23 -- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24 -- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 --
27 -- PostRR - PostgreSQL Round-Robin Extension
28 --
30 -- suppress messages like 'return type foo is only a shell'
31 SET client_min_messages TO WARNING;
33 BEGIN;
35 CREATE SCHEMA postrr;
37 CREATE SEQUENCE postrr.tsid INCREMENT BY 1
38         MINVALUE 1 MAXVALUE 2147483647 START WITH 1 NO CYCLE;
40 CREATE TABLE postrr.rrtimeslices (
41         tsid integer NOT NULL PRIMARY KEY
42                 DEFAULT nextval('postrr.tsid'::regclass)
43                 CHECK (0 < tsid),
44         tslen integer NOT NULL,
45         tsnum integer NOT NULL
46 );
48 CREATE OR REPLACE FUNCTION PostRR_Version()
49         RETURNS cstring
50         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'postrr_version'
51         LANGUAGE 'C' IMMUTABLE;
53 CREATE TYPE RRTimeslice;
55 CREATE OR REPLACE FUNCTION RRTimeslice_validate(integer)
56         RETURNS cstring
57         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_validate'
58         LANGUAGE 'C' IMMUTABLE STRICT;
60 -- this will abort the transaction in case the expected internal length does
61 -- not match the actual length
62 SELECT RRTimeslice_validate(16);
64 CREATE OR REPLACE FUNCTION RRTimeslice_in(cstring, oid, integer)
65         RETURNS RRTimeslice
66         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_in'
67         LANGUAGE 'C' IMMUTABLE STRICT;
69 CREATE OR REPLACE FUNCTION RRTimeslice_out(RRTimeslice)
70         RETURNS cstring
71         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_out'
72         LANGUAGE 'C' IMMUTABLE STRICT;
74 CREATE OR REPLACE FUNCTION RRTimeslice_typmodin(cstring[])
75         RETURNS integer
76         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_typmodin'
77         LANGUAGE 'C' IMMUTABLE STRICT;
79 CREATE OR REPLACE FUNCTION RRTimeslice_typmodout(integer)
80         RETURNS cstring
81         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_typmodout'
82         LANGUAGE 'C' IMMUTABLE STRICT;
84 CREATE TYPE RRTimeslice (
85         INTERNALLENGTH = 16,
86         INPUT          = RRTimeslice_in,
87         OUTPUT         = RRTimeslice_out,
88         TYPMOD_IN      = RRTimeslice_typmodin,
89         TYPMOD_OUT     = RRTimeslice_typmodout,
90         ALIGNMENT      = double,
91         STORAGE        = plain
92 );
94 CREATE OR REPLACE FUNCTION RRTimeslice(rrtimeslice, integer, boolean)
95         RETURNS rrtimeslice
96         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_to_rrtimeslice'
97         LANGUAGE 'C' IMMUTABLE STRICT;
99 CREATE CAST (rrtimeslice AS rrtimeslice)
100         WITH FUNCTION RRTimeslice(rrtimeslice, integer, boolean)
101         AS IMPLICIT;
103 CREATE OR REPLACE FUNCTION RRTimeslice_eq(rrtimeslice, rrtimeslice)
104         RETURNS boolean
105         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_eq'
106         LANGUAGE 'C' IMMUTABLE STRICT;
108 CREATE OR REPLACE FUNCTION RRTimeslice_ne(rrtimeslice, rrtimeslice)
109         RETURNS boolean
110         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_ne'
111         LANGUAGE 'C' IMMUTABLE STRICT;
113 CREATE OR REPLACE FUNCTION RRTimeslice_lt(rrtimeslice, rrtimeslice)
114         RETURNS boolean
115         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_lt'
116         LANGUAGE 'C' IMMUTABLE STRICT;
118 CREATE OR REPLACE FUNCTION RRTimeslice_le(rrtimeslice, rrtimeslice)
119         RETURNS boolean
120         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_le'
121         LANGUAGE 'C' IMMUTABLE STRICT;
123 CREATE OR REPLACE FUNCTION RRTimeslice_gt(rrtimeslice, rrtimeslice)
124         RETURNS boolean
125         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_gt'
126         LANGUAGE 'C' IMMUTABLE STRICT;
128 CREATE OR REPLACE FUNCTION RRTimeslice_ge(rrtimeslice, rrtimeslice)
129         RETURNS boolean
130         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_ge'
131         LANGUAGE 'C' IMMUTABLE STRICT;
133 CREATE OR REPLACE FUNCTION RRTimeslice_cmp(rrtimeslice, rrtimeslice)
134         RETURNS integer
135         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_cmp'
136         LANGUAGE 'C' IMMUTABLE STRICT;
138 CREATE OR REPLACE FUNCTION RRTimeslice_hash(rrtimeslice)
139         RETURNS integer
140         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'rrtimeslice_hash'
141         LANGUAGE 'C' IMMUTABLE STRICT;
143 CREATE OPERATOR = (
144         LEFTARG    = RRTimeslice,
145         RIGHTARG   = RRTimeslice,
146         PROCEDURE  = RRTimeslice_eq,
147         COMMUTATOR = =,
148         NEGATOR    = <>,
149         RESTRICT   = eqsel
150 );
152 CREATE OPERATOR <> (
153         LEFTARG    = RRTimeslice,
154         RIGHTARG   = RRTimeslice,
155         PROCEDURE  = RRTimeslice_ne,
156         COMMUTATOR = <>,
157         NEGATOR    = =,
158         RESTRICT   = neqsel
159 );
161 CREATE OPERATOR < (
162         LEFTARG    = RRTimeslice,
163         RIGHTARG   = RRTimeslice,
164         PROCEDURE  = RRTimeslice_lt,
165         COMMUTATOR = >,
166         NEGATOR    = <=,
167         RESTRICT   = scalarltsel
168 );
170 CREATE OPERATOR <= (
171         LEFTARG    = RRTimeslice,
172         RIGHTARG   = RRTimeslice,
173         PROCEDURE  = RRTimeslice_le,
174         COMMUTATOR = >=,
175         NEGATOR    = <,
176         RESTRICT   = scalarltsel
177 );
179 CREATE OPERATOR > (
180         LEFTARG    = RRTimeslice,
181         RIGHTARG   = RRTimeslice,
182         PROCEDURE  = RRTimeslice_gt,
183         COMMUTATOR = <,
184         NEGATOR    = >=,
185         RESTRICT   = scalargtsel
186 );
188 CREATE OPERATOR >= (
189         LEFTARG    = RRTimeslice,
190         RIGHTARG   = RRTimeslice,
191         PROCEDURE  = RRTimeslice_ge,
192         COMMUTATOR = <=,
193         NEGATOR    = >,
194         RESTRICT   = scalargtsel
195 );
197 CREATE OPERATOR CLASS rrtimeslice_ops
198         DEFAULT FOR TYPE RRTimeslice USING btree AS
199                 OPERATOR 1 < ,
200                 OPERATOR 2 <= ,
201                 OPERATOR 3 = ,
202                 OPERATOR 4 >= ,
203                 OPERATOR 5 > ,
204                 FUNCTION 1 RRTimeslice_cmp(rrtimeslice, rrtimeslice);
206 CREATE OPERATOR CLASS rrtimeslice_hash_ops
207         FOR TYPE RRTimeslice USING hash AS
208                 OPERATOR 1 = ,
209                 FUNCTION 1 RRTimeslice_hash(rrtimeslice);
211 CREATE TYPE CData;
213 CREATE OR REPLACE FUNCTION CData_validate(integer)
214         RETURNS cstring
215         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'cdata_validate'
216         LANGUAGE 'C' IMMUTABLE STRICT;
218 -- this will abort the transaction in case the expected internal length does
219 -- not match the actual length
220 SELECT CData_validate(24);
222 CREATE OR REPLACE FUNCTION CData_in(cstring, oid, integer)
223         RETURNS CData
224         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'cdata_in'
225         LANGUAGE 'C' IMMUTABLE STRICT;
227 CREATE OR REPLACE FUNCTION CData_out(CData)
228         RETURNS cstring
229         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'cdata_out'
230         LANGUAGE 'C' IMMUTABLE STRICT;
232 CREATE OR REPLACE FUNCTION CData_typmodin(cstring[])
233         RETURNS integer
234         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'cdata_typmodin'
235         LANGUAGE 'C' IMMUTABLE STRICT;
237 CREATE OR REPLACE FUNCTION CData_typmodout(integer)
238         RETURNS cstring
239         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'cdata_typmodout'
240         LANGUAGE 'C' IMMUTABLE STRICT;
242 CREATE TYPE CData (
243         INTERNALLENGTH = 24,
244         INPUT          = CData_in,
245         OUTPUT         = CData_out,
246         TYPMOD_IN      = CData_typmodin,
247         TYPMOD_OUT     = CData_typmodout,
248         ALIGNMENT      = double,
249         STORAGE        = plain
250 );
252 CREATE OR REPLACE FUNCTION CData(cdata, integer, boolean)
253         RETURNS cdata
254         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'cdata_to_cdata'
255         LANGUAGE 'C' IMMUTABLE STRICT;
257 CREATE CAST (cdata AS cdata)
258         WITH FUNCTION CData(cdata, integer, boolean)
259         AS IMPLICIT;
261 CREATE CAST (numeric AS cdata)
262         WITH INOUT
263         AS ASSIGNMENT;
265 CREATE OR REPLACE FUNCTION CData(integer, integer, boolean)
266         RETURNS cdata
267         AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'int32_to_cdata'
268         LANGUAGE 'C' IMMUTABLE STRICT;
270 CREATE CAST (integer AS cdata)
271         WITH FUNCTION CData(integer, integer, boolean)
272         AS ASSIGNMENT;
274 COMMIT;
276 SET client_min_messages TO DEFAULT;
278 -- vim: set tw=78 sw=4 ts=4 noexpandtab :