Skip to content

Commit ed006a5

Browse files
authored
Merge pull request #18 from adjust/pg16-compatibility
add pg16 compatibility
2 parents 1fab692 + 7ac57c2 commit ed006a5

File tree

6 files changed

+231
-4
lines changed

6 files changed

+231
-4
lines changed

Diff for: .github/workflows/main.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
test:
1212
strategy:
1313
matrix:
14-
pg: [15, 14, 13, 12, 11, 10]
14+
pg: [16, 15, 14, 13, 12, 11, 10]
1515
name: 🐘 PostgreSQL ${{ matrix.pg }}
1616
runs-on: ubuntu-latest
1717
container: pgxn/pgxn-tools

Diff for: sql/currency--0.0.4.sql

+203
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
2+
CREATE TYPE currency;
3+
4+
CREATE FUNCTION supported_currencies()
5+
RETURNS SETOF currency
6+
AS '$libdir/currency.so'
7+
LANGUAGE C IMMUTABLE STRICT;
8+
9+
CREATE FUNCTION currency_in(cstring)
10+
RETURNS currency
11+
AS '$libdir/currency.so'
12+
LANGUAGE C IMMUTABLE STRICT;
13+
14+
CREATE FUNCTION currency_out(currency)
15+
RETURNS cstring
16+
AS '$libdir/currency.so'
17+
LANGUAGE C IMMUTABLE STRICT;
18+
19+
CREATE FUNCTION currency_recv(internal)
20+
RETURNS currency
21+
AS '$libdir/currency.so'
22+
LANGUAGE C IMMUTABLE STRICT;
23+
24+
CREATE FUNCTION currency_send(currency)
25+
RETURNS bytea
26+
AS '$libdir/currency.so'
27+
LANGUAGE C IMMUTABLE STRICT;
28+
29+
CREATE TYPE currency (
30+
internallength = 1,
31+
input = currency_in,
32+
output = currency_out,
33+
send = currency_send,
34+
receive = currency_recv,
35+
alignment = char,
36+
PASSEDBYVALUE
37+
);
38+
39+
COMMENT ON TYPE currency
40+
IS '1-byte ISO 4217 Currency Code';
41+
42+
CREATE FUNCTION currency_lt(currency, currency)
43+
RETURNS BOOL
44+
AS '$libdir/currency.so'
45+
LANGUAGE C IMMUTABLE STRICT;
46+
47+
COMMENT ON FUNCTION currency_lt(currency, currency) IS 'implementation of < operator';
48+
49+
CREATE FUNCTION currency_le(currency, currency)
50+
RETURNS BOOL
51+
AS '$libdir/currency.so'
52+
LANGUAGE C IMMUTABLE STRICT;
53+
54+
COMMENT ON FUNCTION currency_le(currency, currency) IS 'implementation of <= operator';
55+
56+
CREATE FUNCTION currency_eq(currency, currency)
57+
RETURNS BOOL
58+
AS '$libdir/currency.so'
59+
LANGUAGE C IMMUTABLE STRICT;
60+
61+
COMMENT ON FUNCTION currency_eq(currency, currency) IS 'implementation of = operator';
62+
63+
CREATE FUNCTION currency_neq(currency, currency)
64+
RETURNS BOOL
65+
AS '$libdir/currency.so'
66+
LANGUAGE C IMMUTABLE STRICT;
67+
68+
COMMENT ON FUNCTION currency_neq(currency, currency) IS 'implementation of <> operator';
69+
70+
CREATE FUNCTION currency_ge(currency, currency)
71+
RETURNS BOOL
72+
AS '$libdir/currency.so'
73+
LANGUAGE C IMMUTABLE STRICT;
74+
75+
COMMENT ON FUNCTION currency_ge(currency, currency) IS 'implementation of >= operator';
76+
77+
CREATE FUNCTION currency_gt(currency, currency)
78+
RETURNS BOOL
79+
AS '$libdir/currency.so'
80+
LANGUAGE C IMMUTABLE STRICT;
81+
82+
COMMENT ON FUNCTION currency_gt(currency, currency) IS 'implementation of > operator';
83+
84+
CREATE FUNCTION hash_currency(currency)
85+
RETURNS integer
86+
AS '$libdir/currency.so'
87+
LANGUAGE C IMMUTABLE STRICT;
88+
89+
COMMENT ON FUNCTION hash_currency(currency) IS 'hash';
90+
91+
CREATE OPERATOR < (
92+
leftarg = currency,
93+
rightarg = currency,
94+
procedure = currency_lt,
95+
commutator = >,
96+
negator = >=,
97+
restrict = scalarltsel,
98+
join = scalarltjoinsel
99+
);
100+
101+
COMMENT ON OPERATOR <(currency, currency) IS 'less than';
102+
103+
CREATE OPERATOR <= (
104+
leftarg = currency,
105+
rightarg = currency,
106+
procedure = currency_le,
107+
commutator = >=,
108+
negator = >,
109+
restrict = scalarltsel,
110+
join = scalarltjoinsel
111+
);
112+
113+
COMMENT ON OPERATOR <=(currency, currency) IS 'less than or equal';
114+
115+
CREATE OPERATOR = (
116+
leftarg = currency,
117+
rightarg = currency,
118+
procedure = currency_eq,
119+
commutator = =,
120+
negator = <>,
121+
restrict = eqsel,
122+
join = eqjoinsel,
123+
HASHES, MERGES
124+
);
125+
126+
COMMENT ON OPERATOR =(currency, currency) IS 'equal';
127+
128+
CREATE OPERATOR >= (
129+
leftarg = currency,
130+
rightarg = currency,
131+
procedure = currency_ge,
132+
commutator = <=,
133+
negator = <,
134+
restrict = scalargtsel,
135+
join = scalargtjoinsel
136+
);
137+
138+
COMMENT ON OPERATOR >=(currency, currency) IS 'greater than or equal';
139+
140+
CREATE OPERATOR > (
141+
leftarg = currency,
142+
rightarg = currency,
143+
procedure = currency_gt,
144+
commutator = <,
145+
negator = <=,
146+
restrict = scalargtsel,
147+
join = scalargtjoinsel
148+
);
149+
150+
COMMENT ON OPERATOR >(currency, currency) IS 'greater than';
151+
152+
CREATE OPERATOR <> (
153+
leftarg = currency,
154+
rightarg = currency,
155+
procedure = currency_neq,
156+
commutator = <>,
157+
negator = =,
158+
restrict = neqsel,
159+
join = neqjoinsel
160+
);
161+
162+
COMMENT ON OPERATOR <>(currency, currency) IS 'not equal';
163+
164+
CREATE FUNCTION currency_cmp(currency, currency)
165+
RETURNS int4
166+
AS '$libdir/currency.so'
167+
LANGUAGE C IMMUTABLE STRICT;
168+
169+
CREATE OPERATOR CLASS currency_ops
170+
DEFAULT FOR TYPE currency USING btree AS
171+
OPERATOR 1 < ,
172+
OPERATOR 2 <= ,
173+
OPERATOR 3 = ,
174+
OPERATOR 4 >= ,
175+
OPERATOR 5 > ,
176+
FUNCTION 1 currency_cmp(currency, currency);
177+
178+
CREATE OPERATOR CLASS currency_ops
179+
DEFAULT FOR TYPE currency USING hash AS
180+
OPERATOR 1 = ,
181+
FUNCTION 1 hash_currency(currency);
182+
183+
DO $$
184+
DECLARE version_num integer;
185+
BEGIN
186+
SELECT current_setting('server_version_num') INTO STRICT version_num;
187+
IF version_num > 90600 THEN
188+
EXECUTE $E$ ALTER FUNCTION currency_in(cstring) PARALLEL SAFE $E$;
189+
EXECUTE $E$ ALTER FUNCTION currency_out(currency) PARALLEL SAFE $E$;
190+
EXECUTE $E$ ALTER FUNCTION currency_recv(internal) PARALLEL SAFE $E$;
191+
EXECUTE $E$ ALTER FUNCTION currency_send(currency) PARALLEL SAFE $E$;
192+
EXECUTE $E$ ALTER FUNCTION currency_eq(currency, currency) PARALLEL SAFE $E$;
193+
EXECUTE $E$ ALTER FUNCTION currency_neq(currency, currency) PARALLEL SAFE $E$;
194+
EXECUTE $E$ ALTER FUNCTION currency_lt(currency, currency) PARALLEL SAFE $E$;
195+
EXECUTE $E$ ALTER FUNCTION currency_le(currency, currency) PARALLEL SAFE $E$;
196+
EXECUTE $E$ ALTER FUNCTION currency_gt(currency, currency) PARALLEL SAFE $E$;
197+
EXECUTE $E$ ALTER FUNCTION currency_ge(currency, currency) PARALLEL SAFE $E$;
198+
EXECUTE $E$ ALTER FUNCTION currency_cmp(currency, currency) PARALLEL SAFE $E$;
199+
EXECUTE $E$ ALTER FUNCTION hash_currency(currency) PARALLEL SAFE $E$;
200+
END IF;
201+
END;
202+
$$;
203+

Diff for: src/currency.h

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#include "access/hash.h"
77
#include "libpq/pqformat.h"
88
#include "funcapi.h"
9+
#if PG_VERSION_NUM >= 160000
10+
#include "varatt.h"
11+
#endif
912

1013
typedef unsigned char currency;
1114

Diff for: test/expected/parallel_test.out

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
BEGIN;
22
SET max_parallel_workers_per_gather=4;
3-
SET force_parallel_mode=on;
3+
DO $$
4+
BEGIN
5+
IF current_setting('server_version_num')::int >= 160000 THEN
6+
EXECUTE 'SET debug_parallel_query = on';
7+
ELSE
8+
EXECUTE 'SET force_parallel_mode = on';
9+
END IF;
10+
END $$;
411
CREATE TABLE parallel_test(i int, c currency) WITH (parallel_workers = 4);
512
INSERT INTO parallel_test (i, c)
613
SELECT i, c.country

Diff for: test/expected/parallel_test_1.out

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
BEGIN;
22
SET max_parallel_workers_per_gather=4;
3-
SET force_parallel_mode=on;
3+
DO $$
4+
BEGIN
5+
IF current_setting('server_version_num')::int >= 160000 THEN
6+
EXECUTE 'SET debug_parallel_query = on';
7+
ELSE
8+
EXECUTE 'SET force_parallel_mode = on';
9+
END IF;
10+
END $$;
411
CREATE TABLE parallel_test(i int, c currency) WITH (parallel_workers = 4);
512
INSERT INTO parallel_test (i, c)
613
SELECT i, c.country

Diff for: test/sql/parallel_test.sql

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
BEGIN;
22
SET max_parallel_workers_per_gather=4;
3-
SET force_parallel_mode=on;
3+
DO $$
4+
BEGIN
5+
IF current_setting('server_version_num')::int >= 160000 THEN
6+
EXECUTE 'SET debug_parallel_query = on';
7+
ELSE
8+
EXECUTE 'SET force_parallel_mode = on';
9+
END IF;
10+
END $$;
411

512
CREATE TABLE parallel_test(i int, c currency) WITH (parallel_workers = 4);
613
INSERT INTO parallel_test (i, c)

0 commit comments

Comments
 (0)