Skip to content

Commit a61742c

Browse files
author
Vladlen Popolitov
committed
Anyarray support for uuid type added in GIST, GIN, RUM
1 parent acff257 commit a61742c

File tree

6 files changed

+863
-6
lines changed

6 files changed

+863
-6
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ REGRESS = security init anyarray \
1313
text varchar char varbit bit bytea \
1414
interval money oid \
1515
timestamp timestamptz time timetz date \
16-
macaddr inet cidr anyarrayrum
16+
macaddr inet cidr anyarrayrum uuid
1717

1818
ifdef USE_PGXS
1919
PG_CONFIG = pg_config

anyarray--1.2.sql

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1487,4 +1487,54 @@ AS
14871487
FUNCTION 7 rumanyarray_preconsistent(internal,smallint,anyarray,integer,internal,internal,internal,internal),
14881488
FUNCTION 8 rumanyarray_ordering(internal,smallint,anyarray,int,internal,internal,internal,internal,internal),
14891489
STORAGE varchar;
1490-
1490+
1491+
CREATE OPERATOR CLASS _uuid_aa_ops
1492+
FOR TYPE _uuid USING gist
1493+
AS
1494+
OPERATOR 3 && (anyarray, anyarray),
1495+
OPERATOR 6 = (anyarray, anyarray),
1496+
OPERATOR 7 @> (anyarray, anyarray),
1497+
OPERATOR 8 <@ (anyarray, anyarray),
1498+
OPERATOR 16 % (anyarray, anyarray),
1499+
FUNCTION 1 ganyarray_consistent(internal,internal,int,oid,internal),
1500+
FUNCTION 2 ganyarray_union (bytea, internal),
1501+
FUNCTION 3 ganyarray_compress (internal),
1502+
FUNCTION 4 ganyarray_decompress (internal),
1503+
FUNCTION 5 ganyarray_penalty (internal, internal, internal),
1504+
FUNCTION 6 ganyarray_picksplit (internal, internal),
1505+
FUNCTION 7 ganyarray_same (ganyarray, ganyarray, internal),
1506+
STORAGE ganyarray;
1507+
1508+
CREATE OPERATOR CLASS _uuid_aa_ops
1509+
FOR TYPE _uuid USING gin
1510+
AS
1511+
OPERATOR 3 && (anyarray, anyarray),
1512+
OPERATOR 6 = (anyarray, anyarray),
1513+
OPERATOR 7 @> (anyarray, anyarray),
1514+
OPERATOR 8 <@ (anyarray, anyarray),
1515+
OPERATOR 16 % (anyarray, anyarray),
1516+
FUNCTION 1 uuid_cmp(uuid,uuid),
1517+
FUNCTION 2 ginanyarray_extract(anyarray, internal),
1518+
FUNCTION 3 ginanyarray_queryextract(anyarray, internal, internal),
1519+
FUNCTION 4 ginanyarray_consistent(internal, internal, anyarray),
1520+
FUNCTION 6 ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal),
1521+
STORAGE uuid;
1522+
1523+
CREATE OPERATOR CLASS _uuid_aa_ops
1524+
FOR TYPE _uuid USING rum
1525+
AS
1526+
OPERATOR 1 && (anyarray, anyarray),
1527+
OPERATOR 2 @> (anyarray, anyarray),
1528+
OPERATOR 3 <@ (anyarray, anyarray),
1529+
OPERATOR 4 = (anyarray, anyarray),
1530+
OPERATOR 5 % (anyarray, anyarray),
1531+
OPERATOR 20 <=> (anyarray, anyarray) FOR ORDER BY pg_catalog.float_ops,
1532+
--dispatch function 1 for concrete type
1533+
FUNCTION 1 uuid_cmp(uuid,uuid),
1534+
FUNCTION 2 rumextract_anyarray(anyarray,internal,internal,internal,internal),
1535+
FUNCTION 3 rumextract_anyarray_query(anyarray,internal,smallint,internal,internal,internal,internal),
1536+
FUNCTION 4 rumanyarray_consistent(internal,smallint,anyarray,integer,internal,internal,internal,internal),
1537+
FUNCTION 6 rumanyarray_config(internal),
1538+
FUNCTION 7 rumanyarray_preconsistent(internal,smallint,anyarray,integer,internal,internal,internal,internal),
1539+
FUNCTION 8 rumanyarray_ordering(internal,smallint,anyarray,int,internal,internal,internal,internal,internal),
1540+
STORAGE uuid;

expected/init.out

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ ORDER BY opc.opcname;
3838
_timestamp_aa_ops | _timestamp | f
3939
_timestamptz_aa_ops | _timestamptz | f
4040
_timetz_aa_ops | _timetz | f
41+
_uuid_aa_ops | _uuid | f
4142
_varchar_aa_ops | _varchar | f
42-
(20 rows)
43+
(21 rows)
4344

4445
SELECT
4546
opc.opcname,
@@ -78,9 +79,10 @@ ORDER BY opc.opcname;
7879
_timestamp_aa_ops | _timestamp | f
7980
_timestamptz_aa_ops | _timestamptz | f
8081
_timetz_aa_ops | _timetz | f
82+
_uuid_aa_ops | _uuid | f
8183
_varbit_aa_ops | _varbit | f
8284
_varchar_aa_ops | _varchar | f
83-
(23 rows)
85+
(24 rows)
8486

8587
SELECT
8688
am.amname,
@@ -206,6 +208,11 @@ ORDER BY
206208
gin | _timetz_aa_ops | <@ | 5
207209
gin | _timetz_aa_ops | = | 5
208210
gin | _timetz_aa_ops | @> | 5
211+
gin | _uuid_aa_ops | % | 5
212+
gin | _uuid_aa_ops | && | 5
213+
gin | _uuid_aa_ops | <@ | 5
214+
gin | _uuid_aa_ops | = | 5
215+
gin | _uuid_aa_ops | @> | 5
209216
gin | _varbit_aa_ops | % | 5
210217
gin | _varbit_aa_ops | && | 5
211218
gin | _varbit_aa_ops | <@ | 5
@@ -311,6 +318,11 @@ ORDER BY
311318
gist | _timetz_aa_ops | <@ | 5
312319
gist | _timetz_aa_ops | = | 5
313320
gist | _timetz_aa_ops | @> | 5
321+
gist | _uuid_aa_ops | % | 5
322+
gist | _uuid_aa_ops | && | 5
323+
gist | _uuid_aa_ops | <@ | 5
324+
gist | _uuid_aa_ops | = | 5
325+
gist | _uuid_aa_ops | @> | 5
314326
gist | _varchar_aa_ops | % | 5
315327
gist | _varchar_aa_ops | && | 5
316328
gist | _varchar_aa_ops | <@ | 5
@@ -442,6 +454,12 @@ ORDER BY
442454
rum | _timetz_aa_ops | <@ | 6
443455
rum | _timetz_aa_ops | = | 6
444456
rum | _timetz_aa_ops | @> | 6
457+
rum | _uuid_aa_ops | % | 6
458+
rum | _uuid_aa_ops | && | 6
459+
rum | _uuid_aa_ops | <=> | 6
460+
rum | _uuid_aa_ops | <@ | 6
461+
rum | _uuid_aa_ops | = | 6
462+
rum | _uuid_aa_ops | @> | 6
445463
rum | _varbit_aa_ops | % | 6
446464
rum | _varbit_aa_ops | && | 6
447465
rum | _varbit_aa_ops | <=> | 6
@@ -454,7 +472,7 @@ ORDER BY
454472
rum | _varchar_aa_ops | <@ | 6
455473
rum | _varchar_aa_ops | = | 6
456474
rum | _varchar_aa_ops | @> | 6
457-
(353 rows)
475+
(369 rows)
458476

459477
SELECT
460478
trim( leading '_' from t.typname ) || '[]' AS "Array Type",
@@ -516,9 +534,10 @@ ORDER BY
516534
timestamp[] | _timestamp_aa_ops | _timestamp_aa_ops
517535
timestamptz[] | _timestamptz_aa_ops | _timestamptz_aa_ops
518536
timetz[] | _timetz_aa_ops | _timetz_aa_ops
537+
uuid[] | _uuid_aa_ops | _uuid_aa_ops
519538
varbit[] | _varbit_aa_ops |
520539
varchar[] | _varchar_aa_ops | _varchar_aa_ops
521-
(23 rows)
540+
(24 rows)
522541

523542
--testing function
524543
CREATE OR REPLACE FUNCTION epoch2timestamp(int8)
@@ -543,6 +562,15 @@ RETURNS _macaddr AS $$
543562
generate_series( 1, array_upper( $1, 1) - array_lower( $1, 1 ) + 1 ) AS n
544563
);
545564
$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT IMMUTABLE;
565+
CREATE OR REPLACE FUNCTION to_uuid_array(_int8)
566+
RETURNS _uuid AS $$
567+
SELECT ARRAY(
568+
SELECT
569+
('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a' || RIGHT('00' || to_hex($1[n] % 256),2))::uuid
570+
FROM
571+
generate_series( 1, array_upper( $1, 1) - array_lower( $1, 1 ) + 1 ) AS n
572+
);
573+
$$ LANGUAGE SQL RETURNS NULL ON NULL INPUT IMMUTABLE;
546574
CREATE OR REPLACE FUNCTION to_inetp_array(_int8)
547575
RETURNS _inet AS $$
548576
SELECT ARRAY(

0 commit comments

Comments
 (0)