Skip to content

Commit cbe3732

Browse files
committed
more sanity checks for array_ops
1 parent 09fe92a commit cbe3732

File tree

2 files changed

+225
-0
lines changed

2 files changed

+225
-0
lines changed

expected/array.out

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ CREATE TABLE test_array (
77
);
88
INSERT INTO test_array VALUES ('{}'), ('{0}'), ('{1,2,3,4}'), ('{1,2,3}'), ('{1,2}'), ('{1}');
99
CREATE INDEX idx_array ON test_array USING rum (i);
10+
SELECT * FROM test_array WHERE i = '{NULL}';
11+
ERROR: array must not contain nulls
12+
SELECT * FROM test_array WHERE i = '{1,2,3,NULL}';
13+
ERROR: array must not contain nulls
14+
SELECT * FROM test_array WHERE i = '{{1,2},{3,4}}';
15+
ERROR: array must have 1 dimension
1016
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
1117
QUERY PLAN
1218
------------------------------------------
@@ -512,3 +518,183 @@ EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
512518
Index Cond: (i % '{}'::text[])
513519
(2 rows)
514520

521+
ALTER TABLE test_array ALTER COLUMN i TYPE varchar[];
522+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
523+
QUERY PLAN
524+
-----------------------------------------------
525+
Index Scan using idx_array on test_array
526+
Index Cond: (i = '{}'::character varying[])
527+
(2 rows)
528+
529+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
530+
QUERY PLAN
531+
------------------------------------------------
532+
Index Scan using idx_array on test_array
533+
Index Cond: (i && '{}'::character varying[])
534+
(2 rows)
535+
536+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
537+
QUERY PLAN
538+
------------------------------------------------
539+
Index Scan using idx_array on test_array
540+
Index Cond: (i @> '{}'::character varying[])
541+
(2 rows)
542+
543+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
544+
QUERY PLAN
545+
------------------------------------------------
546+
Index Scan using idx_array on test_array
547+
Index Cond: (i <@ '{}'::character varying[])
548+
(2 rows)
549+
550+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
551+
QUERY PLAN
552+
-----------------------------------------------
553+
Index Scan using idx_array on test_array
554+
Index Cond: (i % '{}'::character varying[])
555+
(2 rows)
556+
557+
ALTER TABLE test_array ALTER COLUMN i TYPE char[];
558+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
559+
QUERY PLAN
560+
------------------------------------------
561+
Index Scan using idx_array on test_array
562+
Index Cond: (i = '{}'::bpchar[])
563+
(2 rows)
564+
565+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
566+
QUERY PLAN
567+
------------------------------------------
568+
Index Scan using idx_array on test_array
569+
Index Cond: (i && '{}'::bpchar[])
570+
(2 rows)
571+
572+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
573+
QUERY PLAN
574+
------------------------------------------
575+
Index Scan using idx_array on test_array
576+
Index Cond: (i @> '{}'::bpchar[])
577+
(2 rows)
578+
579+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
580+
QUERY PLAN
581+
------------------------------------------
582+
Index Scan using idx_array on test_array
583+
Index Cond: (i <@ '{}'::bpchar[])
584+
(2 rows)
585+
586+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
587+
QUERY PLAN
588+
------------------------------------------
589+
Index Scan using idx_array on test_array
590+
Index Cond: (i % '{}'::bpchar[])
591+
(2 rows)
592+
593+
ALTER TABLE test_array ALTER COLUMN i TYPE numeric[] USING i::numeric[];
594+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
595+
QUERY PLAN
596+
------------------------------------------
597+
Index Scan using idx_array on test_array
598+
Index Cond: (i = '{}'::numeric[])
599+
(2 rows)
600+
601+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
602+
QUERY PLAN
603+
------------------------------------------
604+
Index Scan using idx_array on test_array
605+
Index Cond: (i && '{}'::numeric[])
606+
(2 rows)
607+
608+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
609+
QUERY PLAN
610+
------------------------------------------
611+
Index Scan using idx_array on test_array
612+
Index Cond: (i @> '{}'::numeric[])
613+
(2 rows)
614+
615+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
616+
QUERY PLAN
617+
------------------------------------------
618+
Index Scan using idx_array on test_array
619+
Index Cond: (i <@ '{}'::numeric[])
620+
(2 rows)
621+
622+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
623+
QUERY PLAN
624+
------------------------------------------
625+
Index Scan using idx_array on test_array
626+
Index Cond: (i % '{}'::numeric[])
627+
(2 rows)
628+
629+
ALTER TABLE test_array ALTER COLUMN i TYPE float4[] USING i::float4[];
630+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
631+
QUERY PLAN
632+
------------------------------------------
633+
Index Scan using idx_array on test_array
634+
Index Cond: (i = '{}'::real[])
635+
(2 rows)
636+
637+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
638+
QUERY PLAN
639+
------------------------------------------
640+
Index Scan using idx_array on test_array
641+
Index Cond: (i && '{}'::real[])
642+
(2 rows)
643+
644+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
645+
QUERY PLAN
646+
------------------------------------------
647+
Index Scan using idx_array on test_array
648+
Index Cond: (i @> '{}'::real[])
649+
(2 rows)
650+
651+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
652+
QUERY PLAN
653+
------------------------------------------
654+
Index Scan using idx_array on test_array
655+
Index Cond: (i <@ '{}'::real[])
656+
(2 rows)
657+
658+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
659+
QUERY PLAN
660+
------------------------------------------
661+
Index Scan using idx_array on test_array
662+
Index Cond: (i % '{}'::real[])
663+
(2 rows)
664+
665+
ALTER TABLE test_array ALTER COLUMN i TYPE float8[] USING i::float8[];
666+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
667+
QUERY PLAN
668+
----------------------------------------------
669+
Index Scan using idx_array on test_array
670+
Index Cond: (i = '{}'::double precision[])
671+
(2 rows)
672+
673+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
674+
QUERY PLAN
675+
-----------------------------------------------
676+
Index Scan using idx_array on test_array
677+
Index Cond: (i && '{}'::double precision[])
678+
(2 rows)
679+
680+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
681+
QUERY PLAN
682+
-----------------------------------------------
683+
Index Scan using idx_array on test_array
684+
Index Cond: (i @> '{}'::double precision[])
685+
(2 rows)
686+
687+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
688+
QUERY PLAN
689+
-----------------------------------------------
690+
Index Scan using idx_array on test_array
691+
Index Cond: (i <@ '{}'::double precision[])
692+
(2 rows)
693+
694+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
695+
QUERY PLAN
696+
----------------------------------------------
697+
Index Scan using idx_array on test_array
698+
Index Cond: (i % '{}'::double precision[])
699+
(2 rows)
700+

sql/array.sql

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ INSERT INTO test_array VALUES ('{}'), ('{0}'), ('{1,2,3,4}'), ('{1,2,3}'), ('{1,
1313

1414
CREATE INDEX idx_array ON test_array USING rum (i);
1515

16+
SELECT * FROM test_array WHERE i = '{NULL}';
17+
SELECT * FROM test_array WHERE i = '{1,2,3,NULL}';
18+
SELECT * FROM test_array WHERE i = '{{1,2},{3,4}}';
19+
1620
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
1721
SELECT * FROM test_array WHERE i = '{}';
1822
SELECT * FROM test_array WHERE i = '{0}';
@@ -100,3 +104,38 @@ EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
100104
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
101105
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
102106

107+
ALTER TABLE test_array ALTER COLUMN i TYPE varchar[];
108+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
109+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
110+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
111+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
112+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
113+
114+
ALTER TABLE test_array ALTER COLUMN i TYPE char[];
115+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
116+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
117+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
118+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
119+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
120+
121+
ALTER TABLE test_array ALTER COLUMN i TYPE numeric[] USING i::numeric[];
122+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
123+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
124+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
125+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
126+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
127+
128+
ALTER TABLE test_array ALTER COLUMN i TYPE float4[] USING i::float4[];
129+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
130+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
131+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
132+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
133+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
134+
135+
ALTER TABLE test_array ALTER COLUMN i TYPE float8[] USING i::float8[];
136+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i = '{}';
137+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i && '{}';
138+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i @> '{}';
139+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i <@ '{}';
140+
EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
141+

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