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

Lines changed: 2 additions & 1 deletion
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

Lines changed: 54 additions & 0 deletions
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

Lines changed: 44 additions & 40 deletions
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

Lines changed: 1 addition & 1 deletion
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy