-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathajbool--0.0.3.sql
More file actions
176 lines (149 loc) · 5.06 KB
/
ajbool--0.0.3.sql
File metadata and controls
176 lines (149 loc) · 5.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION ajbool" to load this file. \quit
CREATE FUNCTION ajbool_in(cstring)
RETURNS ajbool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION ajbool_out(ajbool)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
CREATE FUNCTION ajbool_recv(internal)
RETURNS ajbool
LANGUAGE internal IMMUTABLE AS 'charrecv';
CREATE FUNCTION ajbool_send(ajbool)
RETURNS bytea
LANGUAGE internal IMMUTABLE AS 'charsend';
CREATE TYPE ajbool (
INPUT = ajbool_in,
OUTPUT = ajbool_out,
RECEIVE = ajbool_recv,
SEND = ajbool_send,
INTERNALLENGTH = 1,
ALIGNMENT = char,
STORAGE = plain,
CATEGORY = 'B',
PASSEDBYVALUE
);
COMMENT ON TYPE ajbool IS 'boolean type with explict NULL';
CREATE FUNCTION ajbool_to_bool(ajbool) RETURNS bool AS
'MODULE_PATHNAME'
LANGUAGE c IMMUTABLE STRICT;
CREATE CAST (ajbool AS bool)
WITH FUNCTION ajbool_to_bool(ajbool) AS IMPLICIT;
CREATE FUNCTION bool_to_ajbool(bool) RETURNS ajbool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
CREATE CAST (bool as ajbool) WITH FUNCTION bool_to_ajbool(bool) AS ASSIGNMENT;
CREATE FUNCTION ajbool_eq(ajbool, ajbool)
RETURNS boolean LANGUAGE internal IMMUTABLE AS 'chareq';
CREATE FUNCTION ajbool_ne(ajbool, ajbool)
RETURNS boolean LANGUAGE internal IMMUTABLE AS 'charne';
CREATE FUNCTION ajbool_lt(ajbool, ajbool)
RETURNS boolean LANGUAGE internal IMMUTABLE AS 'charlt';
CREATE FUNCTION ajbool_le(ajbool, ajbool)
RETURNS boolean LANGUAGE internal IMMUTABLE AS 'charle';
CREATE FUNCTION ajbool_gt(ajbool, ajbool)
RETURNS boolean LANGUAGE internal IMMUTABLE AS 'chargt';
CREATE FUNCTION ajbool_ge(ajbool, ajbool)
RETURNS boolean LANGUAGE internal IMMUTABLE AS 'charge';
CREATE FUNCTION ajbool_cmp(ajbool, ajbool)
RETURNS integer LANGUAGE internal IMMUTABLE AS 'btcharcmp';
CREATE FUNCTION hash_ajbool(ajbool)
RETURNS integer LANGUAGE internal IMMUTABLE AS 'hashchar';
CREATE OPERATOR = (
LEFTARG = ajbool,
RIGHTARG = ajbool,
PROCEDURE = ajbool_eq,
COMMUTATOR = '=',
NEGATOR = '<>',
RESTRICT = eqsel,
JOIN = eqjoinsel
);
COMMENT ON OPERATOR =(ajbool, ajbool) IS 'equals?';
CREATE OPERATOR <> (
LEFTARG = ajbool,
RIGHTARG = ajbool,
PROCEDURE = ajbool_ne,
COMMUTATOR = '<>',
NEGATOR = '=',
RESTRICT = neqsel,
JOIN = neqjoinsel
);
COMMENT ON OPERATOR <>(ajbool, ajbool) IS 'not equals?';
CREATE OPERATOR < (
LEFTARG = ajbool,
RIGHTARG = ajbool,
PROCEDURE = ajbool_lt,
COMMUTATOR = > ,
NEGATOR = >= ,
RESTRICT = scalarltsel,
JOIN = scalarltjoinsel
);
COMMENT ON OPERATOR <(ajbool, ajbool) IS 'less-than';
CREATE OPERATOR <= (
LEFTARG = ajbool,
RIGHTARG = ajbool,
PROCEDURE = ajbool_le,
COMMUTATOR = >= ,
NEGATOR = > ,
RESTRICT = scalarltsel,
JOIN = scalarltjoinsel
);
COMMENT ON OPERATOR <=(ajbool, ajbool) IS 'less-than-or-equal';
CREATE OPERATOR > (
LEFTARG = ajbool,
RIGHTARG = ajbool,
PROCEDURE = ajbool_gt,
COMMUTATOR = < ,
NEGATOR = <= ,
RESTRICT = scalargtsel,
JOIN = scalargtjoinsel
);
COMMENT ON OPERATOR >(ajbool, ajbool) IS 'greater-than';
CREATE OPERATOR >= (
LEFTARG = ajbool,
RIGHTARG = ajbool,
PROCEDURE = ajbool_ge,
COMMUTATOR = <= ,
NEGATOR = < ,
RESTRICT = scalargtsel,
JOIN = scalargtjoinsel
);
COMMENT ON OPERATOR >=(ajbool, ajbool) IS 'greater-than-or-equal';
CREATE OPERATOR CLASS btree_ajbool_ops
DEFAULT FOR TYPE ajbool USING btree
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
FUNCTION 1 ajbool_cmp(ajbool, ajbool);
CREATE OPERATOR CLASS hash_ajbool_ops
DEFAULT FOR TYPE ajbool USING hash AS
OPERATOR 1 = ,
FUNCTION 1 hash_ajbool(ajbool);
-- adds parallel suport
DO $$
DECLARE version_num integer;
BEGIN
SELECT current_setting('server_version_num') INTO STRICT version_num;
IF version_num > 90600 THEN
EXECUTE $E$ ALTER FUNCTION ajbool_in(cstring) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_out(ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_recv(internal) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_send(ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_to_bool(ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION bool_to_ajbool(bool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_eq(ajbool, ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_ne(ajbool, ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_lt(ajbool, ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_le(ajbool, ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_gt(ajbool, ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_ge(ajbool, ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION ajbool_cmp(ajbool, ajbool) PARALLEL SAFE $E$;
EXECUTE $E$ ALTER FUNCTION hash_ajbool(ajbool) PARALLEL SAFE $E$;
END IF;
END;
$$;