Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit a89b4b1

Browse files
committed
Update citext extension for parallel query.
All citext functions are PARALLEL SAFE, and a couple of them can benefit from having aggregate combine functions. Andreas Karlsson
1 parent 40fc457 commit a89b4b1

File tree

4 files changed

+101
-42
lines changed

4 files changed

+101
-42
lines changed

contrib/citext/Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
MODULES = citext
44

55
EXTENSION = citext
6-
DATA = citext--1.1.sql citext--1.0--1.1.sql citext--unpackaged--1.0.sql
6+
DATA = citext--1.2.sql citext--1.1--1.2.sql citext--1.0--1.1.sql \
7+
citext--unpackaged--1.0.sql
78
PGFILEDESC = "citext - case-insensitive character string data type"
89

910
REGRESS = citext

contrib/citext/citext--1.1--1.2.sql

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/* contrib/citext/citext--1.1--1.2.sql */
2+
3+
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
4+
\echo Use "ALTER EXTENSION citext UPDATE TO '1.2'" to load this file. \quit
5+
6+
ALTER FUNCTION citextin(cstring) PARALLEL SAFE;
7+
ALTER FUNCTION citextout(citext) PARALLEL SAFE;
8+
ALTER FUNCTION citextrecv(internal) PARALLEL SAFE;
9+
ALTER FUNCTION citextsend(citext) PARALLEL SAFE;
10+
ALTER FUNCTION citext(bpchar) PARALLEL SAFE;
11+
ALTER FUNCTION citext(boolean) PARALLEL SAFE;
12+
ALTER FUNCTION citext(inet) PARALLEL SAFE;
13+
ALTER FUNCTION citext_eq(citext, citext) PARALLEL SAFE;
14+
ALTER FUNCTION citext_ne(citext, citext) PARALLEL SAFE;
15+
ALTER FUNCTION citext_lt(citext, citext) PARALLEL SAFE;
16+
ALTER FUNCTION citext_le(citext, citext) PARALLEL SAFE;
17+
ALTER FUNCTION citext_gt(citext, citext) PARALLEL SAFE;
18+
ALTER FUNCTION citext_ge(citext, citext) PARALLEL SAFE;
19+
ALTER FUNCTION citext_cmp(citext, citext) PARALLEL SAFE;
20+
ALTER FUNCTION citext_hash(citext) PARALLEL SAFE;
21+
ALTER FUNCTION citext_smaller(citext, citext) PARALLEL SAFE;
22+
ALTER FUNCTION citext_larger(citext, citext) PARALLEL SAFE;
23+
ALTER FUNCTION texticlike(citext, citext) PARALLEL SAFE;
24+
ALTER FUNCTION texticnlike(citext, citext) PARALLEL SAFE;
25+
ALTER FUNCTION texticregexeq(citext, citext) PARALLEL SAFE;
26+
ALTER FUNCTION texticregexne(citext, citext) PARALLEL SAFE;
27+
ALTER FUNCTION texticlike(citext, text) PARALLEL SAFE;
28+
ALTER FUNCTION texticnlike(citext, text) PARALLEL SAFE;
29+
ALTER FUNCTION texticregexeq(citext, text) PARALLEL SAFE;
30+
ALTER FUNCTION texticregexne(citext, text) PARALLEL SAFE;
31+
ALTER FUNCTION regexp_matches(citext, citext) PARALLEL SAFE;
32+
ALTER FUNCTION regexp_matches(citext, citext, text) PARALLEL SAFE;
33+
ALTER FUNCTION regexp_replace(citext, citext, text) PARALLEL SAFE;
34+
ALTER FUNCTION regexp_replace(citext, citext, text, text) PARALLEL SAFE;
35+
ALTER FUNCTION regexp_split_to_array(citext, citext) PARALLEL SAFE;
36+
ALTER FUNCTION regexp_split_to_array(citext, citext, text) PARALLEL SAFE;
37+
ALTER FUNCTION regexp_split_to_table(citext, citext) PARALLEL SAFE;
38+
ALTER FUNCTION regexp_split_to_table(citext, citext, text) PARALLEL SAFE;
39+
ALTER FUNCTION strpos(citext, citext) PARALLEL SAFE;
40+
ALTER FUNCTION replace(citext, citext, citext) PARALLEL SAFE;
41+
ALTER FUNCTION split_part(citext, citext, int) PARALLEL SAFE;
42+
ALTER FUNCTION translate(citext, citext, text) PARALLEL SAFE;
43+
44+
UPDATE pg_proc SET proparallel = 's'
45+
WHERE oid = 'min(citext)'::regprocedure;
46+
47+
UPDATE pg_proc SET proparallel = 's'
48+
WHERE oid = 'max(citext)'::regprocedure;
49+
50+
UPDATE pg_aggregate SET aggcombinefn = 'citext_smaller'
51+
WHERE aggfnoid = 'max(citext)'::regprocedure;
52+
53+
UPDATE pg_aggregate SET aggcombinefn = 'citext_larger'
54+
WHERE aggfnoid = 'max(citext)'::regprocedure;

contrib/citext/citext--1.1.sql renamed to contrib/citext/citext--1.2.sql

+44-40
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* contrib/citext/citext--1.1.sql */
1+
/* contrib/citext/citext--1.2.sql */
22

33
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
44
\echo Use "CREATE EXTENSION citext" to load this file. \quit
@@ -22,22 +22,22 @@ CREATE TYPE citext;
2222
CREATE FUNCTION citextin(cstring)
2323
RETURNS citext
2424
AS 'textin'
25-
LANGUAGE internal IMMUTABLE STRICT;
25+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
2626

2727
CREATE FUNCTION citextout(citext)
2828
RETURNS cstring
2929
AS 'textout'
30-
LANGUAGE internal IMMUTABLE STRICT;
30+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
3131

3232
CREATE FUNCTION citextrecv(internal)
3333
RETURNS citext
3434
AS 'textrecv'
35-
LANGUAGE internal STABLE STRICT;
35+
LANGUAGE internal STABLE STRICT PARALLEL SAFE;
3636

3737
CREATE FUNCTION citextsend(citext)
3838
RETURNS bytea
3939
AS 'textsend'
40-
LANGUAGE internal STABLE STRICT;
40+
LANGUAGE internal STABLE STRICT PARALLEL SAFE;
4141

4242
--
4343
-- The type itself.
@@ -64,17 +64,17 @@ CREATE TYPE citext (
6464
CREATE FUNCTION citext(bpchar)
6565
RETURNS citext
6666
AS 'rtrim1'
67-
LANGUAGE internal IMMUTABLE STRICT;
67+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
6868

6969
CREATE FUNCTION citext(boolean)
7070
RETURNS citext
7171
AS 'booltext'
72-
LANGUAGE internal IMMUTABLE STRICT;
72+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
7373

7474
CREATE FUNCTION citext(inet)
7575
RETURNS citext
7676
AS 'network_show'
77-
LANGUAGE internal IMMUTABLE STRICT;
77+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
7878

7979
--
8080
-- Implicit and assignment type casts.
@@ -96,32 +96,32 @@ CREATE CAST (inet AS citext) WITH FUNCTION citext(inet) AS ASSIGNMENT;
9696
CREATE FUNCTION citext_eq( citext, citext )
9797
RETURNS bool
9898
AS 'MODULE_PATHNAME'
99-
LANGUAGE C IMMUTABLE STRICT;
99+
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
100100

101101
CREATE FUNCTION citext_ne( citext, citext )
102102
RETURNS bool
103103
AS 'MODULE_PATHNAME'
104-
LANGUAGE C IMMUTABLE STRICT;
104+
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
105105

106106
CREATE FUNCTION citext_lt( citext, citext )
107107
RETURNS bool
108108
AS 'MODULE_PATHNAME'
109-
LANGUAGE C IMMUTABLE STRICT;
109+
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
110110

111111
CREATE FUNCTION citext_le( citext, citext )
112112
RETURNS bool
113113
AS 'MODULE_PATHNAME'
114-
LANGUAGE C IMMUTABLE STRICT;
114+
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
115115

116116
CREATE FUNCTION citext_gt( citext, citext )
117117
RETURNS bool
118118
AS 'MODULE_PATHNAME'
119-
LANGUAGE C IMMUTABLE STRICT;
119+
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
120120

121121
CREATE FUNCTION citext_ge( citext, citext )
122122
RETURNS bool
123123
AS 'MODULE_PATHNAME'
124-
LANGUAGE C IMMUTABLE STRICT;
124+
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
125125

126126
--
127127
-- Operators.
@@ -196,12 +196,12 @@ CREATE OPERATOR > (
196196
CREATE FUNCTION citext_cmp(citext, citext)
197197
RETURNS int4
198198
AS 'MODULE_PATHNAME'
199-
LANGUAGE C STRICT IMMUTABLE;
199+
LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
200200

201201
CREATE FUNCTION citext_hash(citext)
202202
RETURNS int4
203203
AS 'MODULE_PATHNAME'
204-
LANGUAGE C STRICT IMMUTABLE;
204+
LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
205205

206206
--
207207
-- The btree indexing operator class.
@@ -232,23 +232,27 @@ DEFAULT FOR TYPE citext USING hash AS
232232
CREATE FUNCTION citext_smaller(citext, citext)
233233
RETURNS citext
234234
AS 'MODULE_PATHNAME'
235-
LANGUAGE C IMMUTABLE STRICT;
235+
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
236236

237237
CREATE FUNCTION citext_larger(citext, citext)
238238
RETURNS citext
239239
AS 'MODULE_PATHNAME'
240-
LANGUAGE C IMMUTABLE STRICT;
240+
LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
241241

242242
CREATE AGGREGATE min(citext) (
243243
SFUNC = citext_smaller,
244244
STYPE = citext,
245-
SORTOP = <
245+
SORTOP = <,
246+
PARALLEL = SAFE,
247+
COMBINEFUNC = citext_smaller
246248
);
247249

248250
CREATE AGGREGATE max(citext) (
249251
SFUNC = citext_larger,
250252
STYPE = citext,
251-
SORTOP = >
253+
SORTOP = >,
254+
PARALLEL = SAFE,
255+
COMBINEFUNC = citext_larger
252256
);
253257

254258
--
@@ -257,19 +261,19 @@ CREATE AGGREGATE max(citext) (
257261

258262
CREATE FUNCTION texticlike(citext, citext)
259263
RETURNS bool AS 'texticlike'
260-
LANGUAGE internal IMMUTABLE STRICT;
264+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
261265

262266
CREATE FUNCTION texticnlike(citext, citext)
263267
RETURNS bool AS 'texticnlike'
264-
LANGUAGE internal IMMUTABLE STRICT;
268+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
265269

266270
CREATE FUNCTION texticregexeq(citext, citext)
267271
RETURNS bool AS 'texticregexeq'
268-
LANGUAGE internal IMMUTABLE STRICT;
272+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
269273

270274
CREATE FUNCTION texticregexne(citext, citext)
271275
RETURNS bool AS 'texticregexne'
272-
LANGUAGE internal IMMUTABLE STRICT;
276+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
273277

274278
CREATE OPERATOR ~ (
275279
PROCEDURE = texticregexeq,
@@ -349,19 +353,19 @@ CREATE OPERATOR !~~* (
349353

350354
CREATE FUNCTION texticlike(citext, text)
351355
RETURNS bool AS 'texticlike'
352-
LANGUAGE internal IMMUTABLE STRICT;
356+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
353357

354358
CREATE FUNCTION texticnlike(citext, text)
355359
RETURNS bool AS 'texticnlike'
356-
LANGUAGE internal IMMUTABLE STRICT;
360+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
357361

358362
CREATE FUNCTION texticregexeq(citext, text)
359363
RETURNS bool AS 'texticregexeq'
360-
LANGUAGE internal IMMUTABLE STRICT;
364+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
361365

362366
CREATE FUNCTION texticregexne(citext, text)
363367
RETURNS bool AS 'texticregexne'
364-
LANGUAGE internal IMMUTABLE STRICT;
368+
LANGUAGE internal IMMUTABLE STRICT PARALLEL SAFE;
365369

366370
CREATE OPERATOR ~ (
367371
PROCEDURE = texticregexeq,
@@ -442,48 +446,48 @@ CREATE OPERATOR !~~* (
442446

443447
CREATE FUNCTION regexp_matches( citext, citext ) RETURNS SETOF TEXT[] AS $$
444448
SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
445-
$$ LANGUAGE SQL IMMUTABLE STRICT ROWS 1;
449+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 1;
446450

447451
CREATE FUNCTION regexp_matches( citext, citext, text ) RETURNS SETOF TEXT[] AS $$
448452
SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
449-
$$ LANGUAGE SQL IMMUTABLE STRICT ROWS 10;
453+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 10;
450454

451455
CREATE FUNCTION regexp_replace( citext, citext, text ) returns TEXT AS $$
452456
SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, 'i');
453-
$$ LANGUAGE SQL IMMUTABLE STRICT;
457+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
454458

455459
CREATE FUNCTION regexp_replace( citext, citext, text, text ) returns TEXT AS $$
456460
SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, CASE WHEN pg_catalog.strpos($4, 'c') = 0 THEN $4 || 'i' ELSE $4 END);
457-
$$ LANGUAGE SQL IMMUTABLE STRICT;
461+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
458462

459463
CREATE FUNCTION regexp_split_to_array( citext, citext ) RETURNS TEXT[] AS $$
460464
SELECT pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
461-
$$ LANGUAGE SQL IMMUTABLE STRICT;
465+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
462466

463467
CREATE FUNCTION regexp_split_to_array( citext, citext, text ) RETURNS TEXT[] AS $$
464468
SELECT pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
465-
$$ LANGUAGE SQL IMMUTABLE STRICT;
469+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
466470

467471
CREATE FUNCTION regexp_split_to_table( citext, citext ) RETURNS SETOF TEXT AS $$
468472
SELECT pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
469-
$$ LANGUAGE SQL IMMUTABLE STRICT;
473+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
470474

471475
CREATE FUNCTION regexp_split_to_table( citext, citext, text ) RETURNS SETOF TEXT AS $$
472476
SELECT pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
473-
$$ LANGUAGE SQL IMMUTABLE STRICT;
477+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
474478

475479
CREATE FUNCTION strpos( citext, citext ) RETURNS INT AS $$
476480
SELECT pg_catalog.strpos( pg_catalog.lower( $1::pg_catalog.text ), pg_catalog.lower( $2::pg_catalog.text ) );
477-
$$ LANGUAGE SQL IMMUTABLE STRICT;
481+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
478482

479483
CREATE FUNCTION replace( citext, citext, citext ) RETURNS TEXT AS $$
480484
SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, pg_catalog.regexp_replace($2::pg_catalog.text, '([^a-zA-Z_0-9])', E'\\\\\\1', 'g'), $3::pg_catalog.text, 'gi' );
481-
$$ LANGUAGE SQL IMMUTABLE STRICT;
485+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
482486

483487
CREATE FUNCTION split_part( citext, citext, int ) RETURNS TEXT AS $$
484488
SELECT (pg_catalog.regexp_split_to_array( $1::pg_catalog.text, pg_catalog.regexp_replace($2::pg_catalog.text, '([^a-zA-Z_0-9])', E'\\\\\\1', 'g'), 'i'))[$3];
485-
$$ LANGUAGE SQL IMMUTABLE STRICT;
489+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;
486490

487491
CREATE FUNCTION translate( citext, citext, text ) RETURNS TEXT AS $$
488492
SELECT pg_catalog.translate( pg_catalog.translate( $1::pg_catalog.text, pg_catalog.lower($2::pg_catalog.text), $3), pg_catalog.upper($2::pg_catalog.text), $3);
489-
$$ LANGUAGE SQL IMMUTABLE STRICT;
493+
$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE;

contrib/citext/citext.control

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# citext extension
22
comment = 'data type for case-insensitive character strings'
3-
default_version = '1.1'
3+
default_version = '1.2'
44
module_pathname = '$libdir/citext'
55
relocatable = true

0 commit comments

Comments
 (0)