Improve descriptions of some pg_stat_checkpoints functions in pg_proc.dat.
[pgsql.git] / contrib / ltree / sql / ltree.sql
blobdd705d9d7ca00136dd6b291c1204e41e2c3e2264
1 CREATE EXTENSION ltree;
3 -- max length for a label
4 \set maxlbl 1000
6 -- Check whether any of our opclasses fail amvalidate
7 SELECT amname, opcname
8 FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
9 WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
11 SELECT ''::ltree;
12 SELECT '1'::ltree;
13 SELECT '1.2'::ltree;
14 SELECT '1.2.-3'::ltree;
15 SELECT '1.2._3'::ltree;
17 -- empty labels not allowed
18 SELECT '.2.3'::ltree;
19 SELECT '1..3'::ltree;
20 SELECT '1.2.'::ltree;
22 SELECT repeat('x', :maxlbl)::ltree;
23 SELECT repeat('x', :maxlbl + 1)::ltree;
25 SELECT ltree2text('1.2.3.34.sdf');
26 SELECT text2ltree('1.2.3.34.sdf');
28 SELECT subltree('Top.Child1.Child2',1,2);
29 SELECT subpath('Top.Child1.Child2',1,2);
30 SELECT subpath('Top.Child1.Child2',-1,1);
31 SELECT subpath('Top.Child1.Child2',0,-2);
32 SELECT subpath('Top.Child1.Child2',0,-1);
33 SELECT subpath('Top.Child1.Child2',0,0);
34 SELECT subpath('Top.Child1.Child2',1,0);
35 SELECT subpath('Top.Child1.Child2',0);
36 SELECT subpath('Top.Child1.Child2',1);
39 SELECT index('1.2.3.4.5.6','1.2');
40 SELECT index('a.1.2.3.4.5.6','1.2');
41 SELECT index('a.1.2.3.4.5.6','1.2.3');
42 SELECT index('a.1.2.3.4.5.6','1.2.3.j');
43 SELECT index('a.1.2.3.4.5.6','1.2.3.j.4.5.5.5.5.5.5');
44 SELECT index('a.1.2.3.4.5.6','1.2.3');
45 SELECT index('a.1.2.3.4.5.6','6');
46 SELECT index('a.1.2.3.4.5.6','6.1');
47 SELECT index('a.1.2.3.4.5.6','5.6');
48 SELECT index('0.1.2.3.5.4.5.6','5.6');
49 SELECT index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',3);
50 SELECT index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',6);
51 SELECT index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',7);
52 SELECT index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',-7);
53 SELECT index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',-4);
54 SELECT index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',-3);
55 SELECT index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',-2);
56 SELECT index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',-20000);
59 SELECT 'Top.Child1.Child2'::ltree || 'Child3'::text;
60 SELECT 'Top.Child1.Child2'::ltree || 'Child3'::ltree;
61 SELECT 'Top_0'::ltree || 'Top.Child1.Child2'::ltree;
62 SELECT 'Top.Child1.Child2'::ltree || ''::ltree;
63 SELECT ''::ltree || 'Top.Child1.Child2'::ltree;
65 SELECT lca('{la.2.3,1.2.3.4.5.6,""}') IS NULL;
66 SELECT lca('{la.2.3,1.2.3.4.5.6}') IS NULL;
67 SELECT lca('{1.la.2.3,1.2.3.4.5.6}');
68 SELECT lca('{1.2.3,1.2.3.4.5.6}');
69 SELECT lca('{1.2.3}');
70 SELECT lca('{1}'), lca('{1}') IS NULL;
71 SELECT lca('{}') IS NULL;
72 SELECT lca('1.la.2.3','1.2.3.4.5.6');
73 SELECT lca('1.2.3','1.2.3.4.5.6');
74 SELECT lca('1.2.2.3','1.2.3.4.5.6');
75 SELECT lca('1.2.2.3','1.2.3.4.5.6','');
76 SELECT lca('1.2.2.3','1.2.3.4.5.6','2');
77 SELECT lca('1.2.2.3','1.2.3.4.5.6','1');
80 SELECT '1'::lquery;
81 SELECT '4|3|2'::lquery;
82 SELECT '1.2'::lquery;
83 SELECT '1.4|3|2'::lquery;
84 SELECT '1.0'::lquery;
85 SELECT '4|3|2.0'::lquery;
86 SELECT '1.2.0'::lquery;
87 SELECT '1.4|3|2.0'::lquery;
88 SELECT '1.*'::lquery;
89 SELECT '4|3|2.*'::lquery;
90 SELECT '1.2.*'::lquery;
91 SELECT '1.4|3|2.*'::lquery;
92 SELECT '*.1.*'::lquery;
93 SELECT '*.4|3|2.*'::lquery;
94 SELECT '*.1.2.*'::lquery;
95 SELECT '*.1.4|3|2.*'::lquery;
96 SELECT '1.*.4|3|2'::lquery;
97 SELECT '1.*.4|3|2.0'::lquery;
98 SELECT '1.*.4|3|2.*{1,4}'::lquery;
99 SELECT '1.*.4|3|2.*{,4}'::lquery;
100 SELECT '1.*.4|3|2.*{1,}'::lquery;
101 SELECT '1.*.4|3|2.*{1}'::lquery;
102 SELECT 'foo.bar{,}.!a*|b{1,}.c{,44}.d{3,4}'::lquery;
103 SELECT 'foo*@@*'::lquery;
104 SELECT 'qwerty%@*.tu'::lquery;
106 -- empty labels not allowed
107 SELECT '.2.3'::lquery;
108 SELECT '1..3'::lquery;
109 SELECT '1.2.'::lquery;
110 SELECT '@.2.3'::lquery;
111 SELECT '1.@.3'::lquery;
112 SELECT '1.2.@'::lquery;
113 SELECT '!.2.3'::lquery;
114 SELECT '1.!.3'::lquery;
115 SELECT '1.2.!'::lquery;
116 SELECT '1.2.3|@.4'::lquery;
118 SELECT (repeat('x', :maxlbl) || '*@@*')::lquery;
119 SELECT (repeat('x', :maxlbl + 1) || '*@@*')::lquery;
120 SELECT ('!' || repeat('x', :maxlbl))::lquery;
121 SELECT ('!' || repeat('x', :maxlbl + 1))::lquery;
123 SELECT nlevel('1.2.3.4');
124 SELECT nlevel(('1' || repeat('.1', 65534))::ltree);
125 SELECT nlevel(('1' || repeat('.1', 65535))::ltree);
126 SELECT nlevel(('1' || repeat('.1', 65534))::ltree || '1');
127 SELECT ('1' || repeat('.1', 65534))::lquery IS NULL;
128 SELECT ('1' || repeat('.1', 65535))::lquery IS NULL;
129 SELECT '*{65535}'::lquery;
130 SELECT '*{65536}'::lquery;
131 SELECT '*{,65534}'::lquery;
132 SELECT '*{,65535}'::lquery;
133 SELECT '*{,65536}'::lquery;
134 SELECT '*{4,3}'::lquery;
136 SELECT '1.2'::ltree  < '2.2'::ltree;
137 SELECT '1.2'::ltree  <= '2.2'::ltree;
138 SELECT '2.2'::ltree  = '2.2'::ltree;
139 SELECT '3.2'::ltree  >= '2.2'::ltree;
140 SELECT '3.2'::ltree  > '2.2'::ltree;
142 SELECT '1.2.3'::ltree @> '1.2.3.4'::ltree;
143 SELECT '1.2.3.4'::ltree @> '1.2.3.4'::ltree;
144 SELECT '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree;
145 SELECT '1.3.3'::ltree @> '1.2.3.4'::ltree;
147 SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e';
148 SELECT 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e';
149 SELECT 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e';
150 SELECT 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e';
151 SELECT 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e';
152 SELECT 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e';
153 SELECT 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e';
154 SELECT 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e';
155 SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e';
156 SELECT 'a.b.c.d.e'::ltree ~ 'a.*.e';
157 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{3}.e';
158 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2}.e';
159 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{4}.e';
160 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e';
161 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e';
162 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e';
163 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e';
164 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}';
165 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}';
166 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,5}';
167 SELECT 'a.b.c.d.e'::ltree ~ '*{2,3}.e';
168 SELECT 'a.b.c.d.e'::ltree ~ '*{2,4}.e';
169 SELECT 'a.b.c.d.e'::ltree ~ '*{2,5}.e';
170 SELECT 'a.b.c.d.e'::ltree ~ '*.e';
171 SELECT 'a.b.c.d.e'::ltree ~ '*.e.*';
172 SELECT 'a.b.c.d.e'::ltree ~ '*.d.*';
173 SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.d.*';
174 SELECT 'a.b.c.d.e'::ltree ~ '*.!d.*';
175 SELECT 'a.b.c.d.e'::ltree ~ '*.!d';
176 SELECT 'a.b.c.d.e'::ltree ~ '!d.*';
177 SELECT 'a.b.c.d.e'::ltree ~ '!a.*';
178 SELECT 'a.b.c.d.e'::ltree ~ '*.!e';
179 SELECT 'a.b.c.d.e'::ltree ~ '*.!e.*';
180 SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!e';
181 SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d';
182 SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d.*';
183 SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!f.*';
184 SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*';
185 SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*';
186 SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d.*';
187 SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d';
188 SELECT 'a.b.c.d.e'::ltree ~ 'a.!d.*';
189 SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*';
190 SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*';
191 SELECT 'a.b.c.d.e'::ltree ~ '*.!b.c.*';
192 SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*';
193 SELECT 'a.b.c.d.e'::ltree ~ '!b.*.c.*';
194 SELECT 'a.b.c.d.e'::ltree ~ '!b.b.*';
195 SELECT 'a.b.c.d.e'::ltree ~ '!b.*.e';
196 SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*.e';
197 SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e';
198 SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e';
199 SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e';
200 SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e';
201 SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e';
202 SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e';
203 SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e';
204 SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e';
205 SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*';
206 SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*';
207 SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*';
208 SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*';
209 SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*';
210 SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*';
211 SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*';
212 SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*';
213 SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*';
214 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2}.*{2}';
215 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{1}.*{2}.e';
216 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{1}.*{4}';
217 SELECT 'a.b.c.d.e'::ltree ~ 'a.*{5}.*';
218 SELECT '5.0.1.0'::ltree ~ '5.!0.!0.0';
219 SELECT 'a.b'::ltree ~ '!a.!a';
221 SELECT 'a.b.c.d.e'::ltree ~ 'a{,}';
222 SELECT 'a.b.c.d.e'::ltree ~ 'a{1,}.*';
223 SELECT 'a.b.c.d.e'::ltree ~ 'a{,}.!a{,}';
224 SELECT 'a.b.c.d.a'::ltree ~ 'a{,}.!a{,}';
225 SELECT 'a.b.c.d.a'::ltree ~ 'a{,2}.!a{1,}';
226 SELECT 'a.b.c.d.e'::ltree ~ 'a{,2}.!a{1,}';
227 SELECT 'a.b.c.d.e'::ltree ~ '!x{,}';
228 SELECT 'a.b.c.d.e'::ltree ~ '!c{,}';
229 SELECT 'a.b.c.d.e'::ltree ~ '!c{0,3}.!a{2,}';
230 SELECT 'a.b.c.d.e'::ltree ~ '!c{0,3}.!d{2,}.*';
232 SELECT 'QWER_TY'::ltree ~ 'q%@*';
233 SELECT 'QWER_TY'::ltree ~ 'q%@*%@*';
234 SELECT 'QWER_TY'::ltree ~ 'Q_t%@*';
235 SELECT 'QWER_GY'::ltree ~ 'q_t%@*';
237 --ltxtquery
238 SELECT '!tree & aWdf@*'::ltxtquery;
239 SELECT 'tree & aw_qw%*'::ltxtquery;
240 SELECT 'tree & aw-qw%*'::ltxtquery;
242 SELECT 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery;
243 SELECT 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery;
244 SELECT 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery;
245 SELECT 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery;
246 SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery;
247 SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery;
248 SELECT 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery;
249 SELECT 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery;
250 SELECT 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery;
251 SELECT 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery;
252 SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery;
253 SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery;
255 --arrays
257 SELECT '{1.2.3}'::ltree[] @> '1.2.3.4';
258 SELECT '{1.2.3.4}'::ltree[] @> '1.2.3.4';
259 SELECT '{1.2.3.4.5}'::ltree[] @> '1.2.3.4';
260 SELECT '{1.3.3}'::ltree[] @> '1.2.3.4';
261 SELECT '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4';
262 SELECT '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4';
263 SELECT '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4';
264 SELECT '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4';
265 SELECT '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4';
266 SELECT '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4';
267 SELECT '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4';
268 SELECT '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4';
269 SELECT '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery;
270 SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e';
271 SELECT 'a.b.c.d.e'::ltree ? '{A.b.c.d.e}';
272 SELECT 'a.b.c.d.e'::ltree ? '{a.b.c.d.e}';
273 SELECT 'a.b.c.d.e'::ltree ? '{A.b.c.d.e, a.*}';
274 SELECT '{a.b.c.d.e,B.df}'::ltree[] ? '{A.b.c.d.e}';
275 SELECT '{a.b.c.d.e,B.df}'::ltree[] ? '{A.b.c.d.e,*.df}';
277 --extractors
278 SELECT ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null;
279 SELECT '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4';
280 SELECT '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3';
281 SELECT ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null;
282 SELECT '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery;
283 SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e';
285 -- Check that the hash_ltree() and hash_ltree_extended() function's lower
286 -- 32 bits match when the seed is 0 and do not match when the seed != 0
287 SELECT v as value, hash_ltree(v)::bit(32) as standard,
288        hash_ltree_extended(v, 0)::bit(32) as extended0,
289        hash_ltree_extended(v, 1)::bit(32) as extended1
290 FROM   (VALUES (NULL::ltree), (''::ltree), ('0'::ltree), ('0.1'::ltree),
291        ('0.1.2'::ltree), ('0'::ltree), ('0_asd.1_ASD'::ltree)) x(v)
292 WHERE  hash_ltree(v)::bit(32) != hash_ltree_extended(v, 0)::bit(32)
293        OR hash_ltree(v)::bit(32) = hash_ltree_extended(v, 1)::bit(32);
295 CREATE TABLE ltreetest (t ltree);
296 \copy ltreetest FROM 'data/ltree.data'
298 SELECT count(*) from ltreetest;
300 SELECT * FROM ltreetest WHERE t <  '12.3' order by t asc;
301 SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc;
302 SELECT * FROM ltreetest WHERE t =  '12.3' order by t asc;
303 SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc;
304 SELECT * FROM ltreetest WHERE t >  '12.3' order by t asc;
305 SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc;
306 SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc;
307 SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc;
308 SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc;
309 SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc;
310 SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc;
311 SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc;
312 SELECT * FROM ltreetest WHERE t ~ '23.*.2' order by t asc;
313 SELECT * FROM ltreetest WHERE t ? '{23.*.1,23.*.2}' order by t asc;
315 create unique index tstidx on ltreetest (t);
316 set enable_seqscan=off;
318 SELECT * FROM ltreetest WHERE t <  '12.3' order by t asc;
319 SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc;
320 SELECT * FROM ltreetest WHERE t =  '12.3' order by t asc;
321 SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc;
322 SELECT * FROM ltreetest WHERE t >  '12.3' order by t asc;
324 drop index tstidx;
325 create index tstidx on ltreetest using gist (t);
326 set enable_seqscan=off;
328 SELECT * FROM ltreetest WHERE t <  '12.3' order by t asc;
329 SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc;
330 SELECT * FROM ltreetest WHERE t =  '12.3' order by t asc;
331 SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc;
332 SELECT * FROM ltreetest WHERE t >  '12.3' order by t asc;
333 SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc;
334 SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc;
335 SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc;
336 SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc;
337 SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc;
338 SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc;
339 SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc;
340 SELECT * FROM ltreetest WHERE t ~ '23.*.2' order by t asc;
341 SELECT * FROM ltreetest WHERE t ? '{23.*.1,23.*.2}' order by t asc;
343 drop index tstidx;
345 --- test hash index
347 create index tstidx on ltreetest using hash (t);
348 set enable_seqscan=off;
349 set enable_bitmapscan=off;
351 EXPLAIN (COSTS OFF)
352 SELECT * FROM ltreetest WHERE t =  '12.3' order by t asc;
353 SELECT * FROM ltreetest WHERE t =  '12.3' order by t asc;
355 reset enable_seqscan;
356 reset enable_bitmapscan;
358 -- test hash aggregate
360 set enable_hashagg=on;
361 set enable_sort=off;
363 EXPLAIN (COSTS OFF)
364 SELECT count(*) FROM (
365 SELECT t FROM (SELECT * FROM ltreetest UNION ALL SELECT * FROM ltreetest) t1 GROUP BY t
366 ) t2;
368 SELECT count(*) FROM (
369 SELECT t FROM (SELECT * FROM ltreetest UNION ALL SELECT * FROM ltreetest) t1 GROUP BY t
370 ) t2;
372 reset enable_hashagg;
373 reset enable_sort;
375 drop index tstidx;
377 -- test gist index
379 create index tstidx on ltreetest using gist (t gist_ltree_ops(siglen=0));
380 create index tstidx on ltreetest using gist (t gist_ltree_ops(siglen=2025));
381 create index tstidx on ltreetest using gist (t gist_ltree_ops(siglen=2028));
382 create index tstidx on ltreetest using gist (t gist_ltree_ops(siglen=2019));
383 create index tstidx on ltreetest using gist (t gist_ltree_ops(siglen=2024));
385 SELECT count(*) FROM ltreetest WHERE t <  '12.3';
386 SELECT count(*) FROM ltreetest WHERE t <= '12.3';
387 SELECT count(*) FROM ltreetest WHERE t =  '12.3';
388 SELECT count(*) FROM ltreetest WHERE t >= '12.3';
389 SELECT count(*) FROM ltreetest WHERE t >  '12.3';
390 SELECT count(*) FROM ltreetest WHERE t @> '1.1.1';
391 SELECT count(*) FROM ltreetest WHERE t <@ '1.1.1';
392 SELECT count(*) FROM ltreetest WHERE t @ '23 & 1';
393 SELECT count(*) FROM ltreetest WHERE t ~ '1.1.1.*';
394 SELECT count(*) FROM ltreetest WHERE t ~ '*.1';
395 SELECT count(*) FROM ltreetest WHERE t ~ '23.*{1}.1';
396 SELECT count(*) FROM ltreetest WHERE t ~ '23.*.1';
397 SELECT count(*) FROM ltreetest WHERE t ~ '23.*.2';
398 SELECT count(*) FROM ltreetest WHERE t ? '{23.*.1,23.*.2}';
400 create table _ltreetest (t ltree[]);
401 \copy _ltreetest FROM 'data/_ltree.data'
403 SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ;
404 SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ;
405 SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ;
406 SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ;
407 SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ;
408 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ;
409 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ;
410 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.2' ;
411 SELECT count(*) FROM _ltreetest WHERE t ? '{23.*.1,23.*.2}' ;
413 create index _tstidx on _ltreetest using gist (t);
414 set enable_seqscan=off;
416 SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ;
417 SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ;
418 SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ;
419 SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ;
420 SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ;
421 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ;
422 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ;
423 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.2' ;
424 SELECT count(*) FROM _ltreetest WHERE t ? '{23.*.1,23.*.2}' ;
426 drop index _tstidx;
427 create index _tstidx on _ltreetest using gist (t gist__ltree_ops(siglen=0));
428 create index _tstidx on _ltreetest using gist (t gist__ltree_ops(siglen=2025));
429 create index _tstidx on _ltreetest using gist (t gist__ltree_ops(siglen=2024));
431 SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ;
432 SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ;
433 SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ;
434 SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ;
435 SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ;
436 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ;
437 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ;
438 SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.2' ;
439 SELECT count(*) FROM _ltreetest WHERE t ? '{23.*.1,23.*.2}' ;
441 -- test non-error-throwing input
443 SELECT str as "value", typ as "type",
444        pg_input_is_valid(str,typ) as ok,
445        errinfo.sql_error_code,
446        errinfo.message,
447        errinfo.detail,
448        errinfo.hint
449 FROM (VALUES ('.2.3', 'ltree'),
450              ('1.2.', 'ltree'),
451              ('1.2.3','ltree'),
452              ('@.2.3','lquery'),
453              (' 2.3', 'lquery'),
454              ('1.2.3','lquery'),
455              ('$tree & aWdf@*','ltxtquery'),
456              ('!tree & aWdf@*','ltxtquery'))
457       AS a(str,typ),
458      LATERAL pg_input_error_info(a.str, a.typ) as errinfo;