]> granicus.if.org Git - postgresql/blob - contrib/intarray/sql/_int.sql
Fix intarray's GiST opclasses to not fail for empty arrays with <@.
[postgresql] / contrib / intarray / sql / _int.sql
1 CREATE EXTENSION intarray;
2
3 -- Check whether any of our opclasses fail amvalidate
4 SELECT amname, opcname
5 FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
6 WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
7
8 SELECT intset(1234);
9 SELECT icount('{1234234,234234}');
10 SELECT sort('{1234234,-30,234234}');
11 SELECT sort('{1234234,-30,234234}','asc');
12 SELECT sort('{1234234,-30,234234}','desc');
13 SELECT sort_asc('{1234234,-30,234234}');
14 SELECT sort_desc('{1234234,-30,234234}');
15 SELECT uniq('{1234234,-30,-30,234234,-30}');
16 SELECT uniq(sort_asc('{1234234,-30,-30,234234,-30}'));
17 SELECT idx('{1234234,-30,-30,234234,-30}',-30);
18 SELECT subarray('{1234234,-30,-30,234234,-30}',2,3);
19 SELECT subarray('{1234234,-30,-30,234234,-30}',-1,1);
20 SELECT subarray('{1234234,-30,-30,234234,-30}',0,-1);
21
22 SELECT #'{1234234,234234}'::int[];
23 SELECT '{123,623,445}'::int[] + 1245;
24 SELECT '{123,623,445}'::int[] + 445;
25 SELECT '{123,623,445}'::int[] + '{1245,87,445}';
26 SELECT '{123,623,445}'::int[] - 623;
27 SELECT '{123,623,445}'::int[] - '{1623,623}';
28 SELECT '{123,623,445}'::int[] | 623;
29 SELECT '{123,623,445}'::int[] | 1623;
30 SELECT '{123,623,445}'::int[] | '{1623,623}';
31 SELECT '{123,623,445}'::int[] & '{1623,623}';
32 SELECT '{-1,3,1}'::int[] & '{1,2}';
33 SELECT '{1}'::int[] & '{2}'::int[];
34 SELECT array_dims('{1}'::int[] & '{2}'::int[]);
35 SELECT ('{1}'::int[] & '{2}'::int[]) = '{}'::int[];
36 SELECT ('{}'::int[] & '{}'::int[]) = '{}'::int[];
37
38
39 --test query_int
40 SELECT '1'::query_int;
41 SELECT ' 1'::query_int;
42 SELECT '1 '::query_int;
43 SELECT ' 1 '::query_int;
44 SELECT ' ! 1 '::query_int;
45 SELECT '!1'::query_int;
46 SELECT '1|2'::query_int;
47 SELECT '1|!2'::query_int;
48 SELECT '!1|2'::query_int;
49 SELECT '!1|!2'::query_int;
50 SELECT '!(!1|!2)'::query_int;
51 SELECT '!(!1|2)'::query_int;
52 SELECT '!(1|!2)'::query_int;
53 SELECT '!(1|2)'::query_int;
54 SELECT '1&2'::query_int;
55 SELECT '!1&2'::query_int;
56 SELECT '1&!2'::query_int;
57 SELECT '!1&!2'::query_int;
58 SELECT '(1&2)'::query_int;
59 SELECT '1&(2)'::query_int;
60 SELECT '!(1)&2'::query_int;
61 SELECT '!(1&2)'::query_int;
62 SELECT '1|2&3'::query_int;
63 SELECT '1|(2&3)'::query_int;
64 SELECT '(1|2)&3'::query_int;
65 SELECT '1|2&!3'::query_int;
66 SELECT '1|!2&3'::query_int;
67 SELECT '!1|2&3'::query_int;
68 SELECT '!1|(2&3)'::query_int;
69 SELECT '!(1|2)&3'::query_int;
70 SELECT '(!1|2)&3'::query_int;
71 SELECT '1|(2|(4|(5|6)))'::query_int;
72 SELECT '1|2|4|5|6'::query_int;
73 SELECT '1&(2&(4&(5&6)))'::query_int;
74 SELECT '1&2&4&5&6'::query_int;
75 SELECT '1&(2&(4&(5|6)))'::query_int;
76 SELECT '1&(2&(4&(5|!6)))'::query_int;
77
78
79 CREATE TABLE test__int( a int[] );
80 \copy test__int from 'data/test__int.data'
81 ANALYZE test__int;
82
83 SELECT count(*) from test__int WHERE a && '{23,50}';
84 SELECT count(*) from test__int WHERE a @@ '23|50';
85 SELECT count(*) from test__int WHERE a @> '{23,50}';
86 SELECT count(*) from test__int WHERE a @@ '23&50';
87 SELECT count(*) from test__int WHERE a @> '{20,23}';
88 SELECT count(*) from test__int WHERE a <@ '{73,23,20}';
89 SELECT count(*) from test__int WHERE a = '{73,23,20}';
90 SELECT count(*) from test__int WHERE a @@ '50&68';
91 SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}';
92 SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)';
93 SELECT count(*) from test__int WHERE a @@ '20 | !21';
94 SELECT count(*) from test__int WHERE a @@ '!20 & !21';
95
96 SET enable_seqscan = off;  -- not all of these would use index by default
97
98 CREATE INDEX text_idx on test__int using gist ( a gist__int_ops );
99
100 SELECT count(*) from test__int WHERE a && '{23,50}';
101 SELECT count(*) from test__int WHERE a @@ '23|50';
102 SELECT count(*) from test__int WHERE a @> '{23,50}';
103 SELECT count(*) from test__int WHERE a @@ '23&50';
104 SELECT count(*) from test__int WHERE a @> '{20,23}';
105 SELECT count(*) from test__int WHERE a <@ '{73,23,20}';
106 SELECT count(*) from test__int WHERE a = '{73,23,20}';
107 SELECT count(*) from test__int WHERE a @@ '50&68';
108 SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}';
109 SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)';
110 SELECT count(*) from test__int WHERE a @@ '20 | !21';
111 SELECT count(*) from test__int WHERE a @@ '!20 & !21';
112
113 DROP INDEX text_idx;
114 CREATE INDEX text_idx on test__int using gist ( a gist__intbig_ops );
115
116 SELECT count(*) from test__int WHERE a && '{23,50}';
117 SELECT count(*) from test__int WHERE a @@ '23|50';
118 SELECT count(*) from test__int WHERE a @> '{23,50}';
119 SELECT count(*) from test__int WHERE a @@ '23&50';
120 SELECT count(*) from test__int WHERE a @> '{20,23}';
121 SELECT count(*) from test__int WHERE a <@ '{73,23,20}';
122 SELECT count(*) from test__int WHERE a = '{73,23,20}';
123 SELECT count(*) from test__int WHERE a @@ '50&68';
124 SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}';
125 SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)';
126 SELECT count(*) from test__int WHERE a @@ '20 | !21';
127 SELECT count(*) from test__int WHERE a @@ '!20 & !21';
128
129 DROP INDEX text_idx;
130 CREATE INDEX text_idx on test__int using gin ( a gin__int_ops );
131
132 SELECT count(*) from test__int WHERE a && '{23,50}';
133 SELECT count(*) from test__int WHERE a @@ '23|50';
134 SELECT count(*) from test__int WHERE a @> '{23,50}';
135 SELECT count(*) from test__int WHERE a @@ '23&50';
136 SELECT count(*) from test__int WHERE a @> '{20,23}';
137 SELECT count(*) from test__int WHERE a <@ '{73,23,20}';
138 SELECT count(*) from test__int WHERE a = '{73,23,20}';
139 SELECT count(*) from test__int WHERE a @@ '50&68';
140 SELECT count(*) from test__int WHERE a @> '{20,23}' or a @> '{50,68}';
141 SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)';
142 SELECT count(*) from test__int WHERE a @@ '20 | !21';
143 SELECT count(*) from test__int WHERE a @@ '!20 & !21';
144
145 RESET enable_seqscan;