1SET client_min_messages = warning;
2
3
4CREATE TYPE uri;
5
6CREATE FUNCTION uri_in(cstring) RETURNS uri
7    IMMUTABLE
8    STRICT
9    LANGUAGE C
10    AS '$libdir/uri';
11
12CREATE FUNCTION uri_out(uri) RETURNS cstring
13    IMMUTABLE
14    STRICT
15    LANGUAGE C
16    AS '$libdir/uri';
17
18CREATE TYPE uri (
19    INTERNALLENGTH = -1,
20    INPUT = uri_in,
21    OUTPUT = uri_out
22);
23
24
25CREATE CAST (uri AS text) WITH INOUT AS ASSIGNMENT;
26CREATE CAST (text AS uri) WITH INOUT AS ASSIGNMENT;
27
28
29CREATE FUNCTION uri_scheme(uri) RETURNS text
30    IMMUTABLE
31    STRICT
32    LANGUAGE C
33    AS '$libdir/uri';
34
35CREATE FUNCTION uri_userinfo(uri) RETURNS text
36    IMMUTABLE
37    STRICT
38    LANGUAGE C
39    AS '$libdir/uri';
40
41CREATE FUNCTION uri_host(uri) RETURNS text
42    IMMUTABLE
43    STRICT
44    LANGUAGE C
45    AS '$libdir/uri';
46
47CREATE FUNCTION uri_host_inet(uri) RETURNS inet
48    IMMUTABLE
49    STRICT
50    LANGUAGE C
51    AS '$libdir/uri';
52
53CREATE FUNCTION uri_port(uri) RETURNS integer
54    IMMUTABLE
55    STRICT
56    LANGUAGE C
57    AS '$libdir/uri';
58
59CREATE FUNCTION uri_query(uri) RETURNS text
60    IMMUTABLE
61    STRICT
62    LANGUAGE C
63    AS '$libdir/uri';
64
65CREATE FUNCTION uri_fragment(uri) RETURNS text
66    IMMUTABLE
67    STRICT
68    LANGUAGE C
69    AS '$libdir/uri';
70
71CREATE FUNCTION uri_path(uri) RETURNS text
72    IMMUTABLE
73    STRICT
74    LANGUAGE C
75    AS '$libdir/uri';
76
77CREATE FUNCTION uri_path_array(uri) RETURNS text[]
78    IMMUTABLE
79    STRICT
80    LANGUAGE C
81    AS '$libdir/uri';
82
83
84CREATE FUNCTION uri_normalize(uri) RETURNS uri
85    IMMUTABLE
86    STRICT
87    LANGUAGE C
88    AS '$libdir/uri';
89
90
91CREATE FUNCTION uri_lt(uri, uri) RETURNS boolean
92    IMMUTABLE
93    STRICT
94    LANGUAGE C
95    AS '$libdir/uri';
96
97CREATE FUNCTION uri_le(uri, uri) RETURNS boolean
98    IMMUTABLE
99    STRICT
100    LANGUAGE C
101    AS '$libdir/uri';
102
103CREATE FUNCTION uri_eq(uri, uri) RETURNS boolean
104    IMMUTABLE
105    STRICT
106    LANGUAGE C
107    AS '$libdir/uri';
108
109CREATE FUNCTION uri_ne(uri, uri) RETURNS boolean
110    IMMUTABLE
111    STRICT
112    LANGUAGE C
113    AS '$libdir/uri';
114
115CREATE FUNCTION uri_ge(uri, uri) RETURNS boolean
116    IMMUTABLE
117    STRICT
118    LANGUAGE C
119    AS '$libdir/uri';
120
121CREATE FUNCTION uri_gt(uri, uri) RETURNS boolean
122    IMMUTABLE
123    STRICT
124    LANGUAGE C
125    AS '$libdir/uri';
126
127CREATE FUNCTION uri_cmp(uri, uri) RETURNS integer
128    IMMUTABLE
129    STRICT
130    LANGUAGE C
131    AS '$libdir/uri';
132
133CREATE OPERATOR < (
134    LEFTARG = uri,
135    RIGHTARG = uri,
136    COMMUTATOR = >,
137    NEGATOR = >=,
138    RESTRICT = scalarltsel,
139    JOIN = scalarltjoinsel,
140    PROCEDURE = uri_lt
141);
142
143CREATE OPERATOR <= (
144    LEFTARG = uri,
145    RIGHTARG = uri,
146    COMMUTATOR = >=,
147    NEGATOR = >,
148    RESTRICT = scalarltsel,
149    JOIN = scalarltjoinsel,
150    PROCEDURE = uri_le
151);
152
153CREATE OPERATOR = (
154    LEFTARG = uri,
155    RIGHTARG = uri,
156    COMMUTATOR = =,
157    NEGATOR = <>,
158    RESTRICT = eqsel,
159    JOIN = eqjoinsel,
160    HASHES,
161    MERGES,
162    PROCEDURE = uri_eq
163);
164
165CREATE OPERATOR <> (
166    LEFTARG = uri,
167    RIGHTARG = uri,
168    COMMUTATOR = <>,
169    NEGATOR = =,
170    RESTRICT = neqsel,
171    JOIN = neqjoinsel,
172    PROCEDURE = uri_ne
173);
174
175CREATE OPERATOR >= (
176    LEFTARG = uri,
177    RIGHTARG = uri,
178    COMMUTATOR = <=,
179    NEGATOR = <,
180    RESTRICT = scalargtsel,
181    JOIN = scalargtjoinsel,
182    PROCEDURE = uri_ge
183);
184
185CREATE OPERATOR > (
186    LEFTARG = uri,
187    RIGHTARG = uri,
188    COMMUTATOR = <,
189    NEGATOR = <=,
190    RESTRICT = scalargtsel,
191    JOIN = scalargtjoinsel,
192    PROCEDURE = uri_gt
193);
194
195CREATE OPERATOR CLASS uri_ops
196    DEFAULT FOR TYPE uri USING btree AS
197        OPERATOR        1       < ,
198        OPERATOR        2       <= ,
199        OPERATOR        3       = ,
200        OPERATOR        4       >= ,
201        OPERATOR        5       > ,
202        FUNCTION        1       uri_cmp(uri, uri);
203