diff options
| author | Bruce Momjian | 2002-10-18 18:41:22 +0000 |
|---|---|---|
| committer | Bruce Momjian | 2002-10-18 18:41:22 +0000 |
| commit | aa4c702eac936964649f905741b4a99f4b489200 (patch) | |
| tree | 517d3c28aa3d28eb95b19c8676c940b5cefe2031 /contrib/ltree | |
| parent | fb9bc342fffc157d6ca4b635aeeaccb3c1370b91 (diff) | |
Update /contrib for "autocommit TO 'on'".
Create objects in public schema.
Make spacing/capitalization consistent.
Remove transaction block use for object creation.
Remove unneeded function GRANTs.
Diffstat (limited to 'contrib/ltree')
| -rw-r--r-- | contrib/ltree/expected/ltree.out | 434 | ||||
| -rw-r--r-- | contrib/ltree/ltree.sql.in | 477 | ||||
| -rw-r--r-- | contrib/ltree/ltreetest.sql | 32 | ||||
| -rw-r--r-- | contrib/ltree/sql/ltree.sql | 446 |
4 files changed, 768 insertions, 621 deletions
diff --git a/contrib/ltree/expected/ltree.out b/contrib/ltree/expected/ltree.out index 4af0260bed..7e710d3335 100644 --- a/contrib/ltree/expected/ltree.out +++ b/contrib/ltree/expected/ltree.out @@ -1,1008 +1,1008 @@ \set ECHO none psql:ltree.sql:9: WARNING: ProcedureCreate: type ltree is not yet defined psql:ltree.sql:14: WARNING: Argument type "ltree" is only a shell -psql:ltree.sql:238: WARNING: ProcedureCreate: type lquery is not yet defined -psql:ltree.sql:243: WARNING: Argument type "lquery" is only a shell -psql:ltree.sql:290: WARNING: ProcedureCreate: type ltxtquery is not yet defined -psql:ltree.sql:295: WARNING: Argument type "ltxtquery" is only a shell -psql:ltree.sql:345: WARNING: ProcedureCreate: type ltree_gist is not yet defined -psql:ltree.sql:350: WARNING: Argument type "ltree_gist" is only a shell -select ''::ltree; +psql:ltree.sql:281: WARNING: ProcedureCreate: type lquery is not yet defined +psql:ltree.sql:286: WARNING: Argument type "lquery" is only a shell +psql:ltree.sql:345: WARNING: ProcedureCreate: type ltxtquery is not yet defined +psql:ltree.sql:350: WARNING: Argument type "ltxtquery" is only a shell +psql:ltree.sql:412: WARNING: ProcedureCreate: type ltree_gist is not yet defined +psql:ltree.sql:417: WARNING: Argument type "ltree_gist" is only a shell +SELECT ''::ltree; ltree ------- (1 row) -select '1'::ltree; +SELECT '1'::ltree; ltree ------- 1 (1 row) -select '1.2'::ltree; +SELECT '1.2'::ltree; ltree ------- 1.2 (1 row) -select '1.2._3'::ltree; +SELECT '1.2._3'::ltree; ltree -------- 1.2._3 (1 row) -select subltree('Top.Child1.Child2',1,2); +SELECT subltree('Top.Child1.Child2',1,2); subltree ---------- Child1 (1 row) -select subpath('Top.Child1.Child2',1,2); +SELECT subpath('Top.Child1.Child2',1,2); subpath --------------- Child1.Child2 (1 row) -select subpath('Top.Child1.Child2',-1,1); +SELECT subpath('Top.Child1.Child2',-1,1); subpath --------- Child2 (1 row) -select subpath('Top.Child1.Child2',0,-2); +SELECT subpath('Top.Child1.Child2',0,-2); subpath --------- Top (1 row) -select subpath('Top.Child1.Child2',0,-1); +SELECT subpath('Top.Child1.Child2',0,-1); subpath ------------ Top.Child1 (1 row) -select subpath('Top.Child1.Child2',0,0); +SELECT subpath('Top.Child1.Child2',0,0); subpath ------------------- Top.Child1.Child2 (1 row) -select subpath('Top.Child1.Child2',1,0); +SELECT subpath('Top.Child1.Child2',1,0); subpath --------------- Child1.Child2 (1 row) -select subpath('Top.Child1.Child2',0); +SELECT subpath('Top.Child1.Child2',0); subpath ------------------- Top.Child1.Child2 (1 row) -select subpath('Top.Child1.Child2',1); +SELECT subpath('Top.Child1.Child2',1); subpath --------------- Child1.Child2 (1 row) -select 'Top.Child1.Child2'::ltree || 'Child3'::text; +SELECT 'Top.Child1.Child2'::ltree || 'Child3'::text; ?column? -------------------------- Top.Child1.Child2.Child3 (1 row) -select 'Top.Child1.Child2'::ltree || 'Child3'::ltree; +SELECT 'Top.Child1.Child2'::ltree || 'Child3'::ltree; ?column? -------------------------- Top.Child1.Child2.Child3 (1 row) -select 'Top_0'::ltree || 'Top.Child1.Child2'::ltree; +SELECT 'Top_0'::ltree || 'Top.Child1.Child2'::ltree; ?column? ------------------------- Top_0.Top.Child1.Child2 (1 row) -select 'Top.Child1.Child2'::ltree || ''::ltree; +SELECT 'Top.Child1.Child2'::ltree || ''::ltree; ?column? ------------------- Top.Child1.Child2 (1 row) -select ''::ltree || 'Top.Child1.Child2'::ltree; +SELECT ''::ltree || 'Top.Child1.Child2'::ltree; ?column? ------------------- Top.Child1.Child2 (1 row) -select lca('{la.2.3,1.2.3.4.5.6,}') is null; +SELECT lca('{la.2.3,1.2.3.4.5.6,}') IS NULL; ?column? ---------- t (1 row) -select lca('{la.2.3,1.2.3.4.5.6}') is null; +SELECT lca('{la.2.3,1.2.3.4.5.6}') IS NULL; ?column? ---------- f (1 row) -select lca('{1.la.2.3,1.2.3.4.5.6}'); +SELECT lca('{1.la.2.3,1.2.3.4.5.6}'); lca ----- 1 (1 row) -select lca('{1.2.3,1.2.3.4.5.6}'); +SELECT lca('{1.2.3,1.2.3.4.5.6}'); lca ----- 1.2 (1 row) -select lca('1.la.2.3','1.2.3.4.5.6'); +SELECT lca('1.la.2.3','1.2.3.4.5.6'); lca ----- 1 (1 row) -select lca('1.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.3','1.2.3.4.5.6'); lca ----- 1.2 (1 row) -select lca('1.2.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.2.3','1.2.3.4.5.6'); lca ----- 1.2 (1 row) -select lca('1.2.2.3','1.2.3.4.5.6',''); +SELECT lca('1.2.2.3','1.2.3.4.5.6',''); lca ----- (1 row) -select lca('1.2.2.3','1.2.3.4.5.6','2'); +SELECT lca('1.2.2.3','1.2.3.4.5.6','2'); lca ----- (1 row) -select lca('1.2.2.3','1.2.3.4.5.6','1'); +SELECT lca('1.2.2.3','1.2.3.4.5.6','1'); lca ----- (1 row) -select '1'::lquery; +SELECT '1'::lquery; lquery -------- 1 (1 row) -select '4|3|2'::lquery; +SELECT '4|3|2'::lquery; lquery -------- 4|3|2 (1 row) -select '1.2'::lquery; +SELECT '1.2'::lquery; lquery -------- 1.2 (1 row) -select '1.4|3|2'::lquery; +SELECT '1.4|3|2'::lquery; lquery --------- 1.4|3|2 (1 row) -select '1.0'::lquery; +SELECT '1.0'::lquery; lquery -------- 1.0 (1 row) -select '4|3|2.0'::lquery; +SELECT '4|3|2.0'::lquery; lquery --------- 4|3|2.0 (1 row) -select '1.2.0'::lquery; +SELECT '1.2.0'::lquery; lquery -------- 1.2.0 (1 row) -select '1.4|3|2.0'::lquery; +SELECT '1.4|3|2.0'::lquery; lquery ----------- 1.4|3|2.0 (1 row) -select '1.*'::lquery; +SELECT '1.*'::lquery; lquery -------- 1.* (1 row) -select '4|3|2.*'::lquery; +SELECT '4|3|2.*'::lquery; lquery --------- 4|3|2.* (1 row) -select '1.2.*'::lquery; +SELECT '1.2.*'::lquery; lquery -------- 1.2.* (1 row) -select '1.4|3|2.*'::lquery; +SELECT '1.4|3|2.*'::lquery; lquery ----------- 1.4|3|2.* (1 row) -select '*.1.*'::lquery; +SELECT '*.1.*'::lquery; lquery -------- *.1.* (1 row) -select '*.4|3|2.*'::lquery; +SELECT '*.4|3|2.*'::lquery; lquery ----------- *.4|3|2.* (1 row) -select '*.1.2.*'::lquery; +SELECT '*.1.2.*'::lquery; lquery --------- *.1.2.* (1 row) -select '*.1.4|3|2.*'::lquery; +SELECT '*.1.4|3|2.*'::lquery; lquery ------------- *.1.4|3|2.* (1 row) -select '1.*.4|3|2'::lquery; +SELECT '1.*.4|3|2'::lquery; lquery ----------- 1.*.4|3|2 (1 row) -select '1.*.4|3|2.0'::lquery; +SELECT '1.*.4|3|2.0'::lquery; lquery ------------- 1.*.4|3|2.0 (1 row) -select '1.*.4|3|2.*{1,4}'::lquery; +SELECT '1.*.4|3|2.*{1,4}'::lquery; lquery ------------------ 1.*.4|3|2.*{1,4} (1 row) -select '1.*.4|3|2.*{,4}'::lquery; +SELECT '1.*.4|3|2.*{,4}'::lquery; lquery ----------------- 1.*.4|3|2.*{,4} (1 row) -select '1.*.4|3|2.*{1,}'::lquery; +SELECT '1.*.4|3|2.*{1,}'::lquery; lquery ----------------- 1.*.4|3|2.*{1,} (1 row) -select '1.*.4|3|2.*{1}'::lquery; +SELECT '1.*.4|3|2.*{1}'::lquery; lquery ---------------- 1.*.4|3|2.*{1} (1 row) -select 'qwerty%@*.tu'::lquery; +SELECT 'qwerty%@*.tu'::lquery; lquery -------------- qwerty%@*.tu (1 row) -select nlevel('1.2.3.4'); +SELECT nlevel('1.2.3.4'); nlevel -------- 4 (1 row) -select '1.2'::ltree < '2.2'::ltree; +SELECT '1.2'::ltree < '2.2'::ltree; ?column? ---------- t (1 row) -select '1.2'::ltree <= '2.2'::ltree; +SELECT '1.2'::ltree <= '2.2'::ltree; ?column? ---------- t (1 row) -select '2.2'::ltree = '2.2'::ltree; +SELECT '2.2'::ltree = '2.2'::ltree; ?column? ---------- t (1 row) -select '3.2'::ltree >= '2.2'::ltree; +SELECT '3.2'::ltree >= '2.2'::ltree; ?column? ---------- t (1 row) -select '3.2'::ltree > '2.2'::ltree; +SELECT '3.2'::ltree > '2.2'::ltree; ?column? ---------- t (1 row) -select '1.2.3'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3'::ltree @> '1.2.3.4'::ltree; ?column? ---------- t (1 row) -select '1.2.3.4'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3.4'::ltree @> '1.2.3.4'::ltree; ?column? ---------- t (1 row) -select '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree; ?column? ---------- f (1 row) -select '1.3.3'::ltree @> '1.2.3.4'::ltree; +SELECT '1.3.3'::ltree @> '1.2.3.4'::ltree; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; ?column? ---------- t (1 row) -select 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; ?column? ---------- f (1 row) -select 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e'; ?column? ---------- f (1 row) -select 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e'; ?column? ---------- t (1 row) -select 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; ?column? ---------- t (1 row) -select 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; +SELECT 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{3}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2}.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{4}.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,3}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,4}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,5}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,5}'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2,3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,3}.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,4}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2,5}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,5}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.e.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.e.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.*.d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!d.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!d'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!d'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!a.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!a.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!e.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!e.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.!e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.!d'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.!f.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!f.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.!d'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.c.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.b.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.b.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*'; ?column? ---------- f (1 row) -select 'QWER_TY'::ltree ~ 'q%@*'; +SELECT 'QWER_TY'::ltree ~ 'q%@*'; ?column? ---------- t (1 row) -select 'QWER_TY'::ltree ~ 'Q_t%@*'; +SELECT 'QWER_TY'::ltree ~ 'Q_t%@*'; ?column? ---------- t (1 row) -select 'QWER_GY'::ltree ~ 'q_t%@*'; +SELECT 'QWER_GY'::ltree ~ 'q_t%@*'; ?column? ---------- f (1 row) --ltxtquery -select '!tree & aWdf@*'::ltxtquery; +SELECT '!tree & aWdf@*'::ltxtquery; ltxtquery ---------------- !tree & aWdf@* (1 row) -select 'tree & aw_qw%*'::ltxtquery; +SELECT 'tree & aw_qw%*'::ltxtquery; ltxtquery ---------------- tree & aw_qw%* (1 row) -select 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; +SELECT 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; ?column? ---------- f (1 row) -select 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery; ?column? ---------- f (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery; ?column? ---------- f (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery; ?column? ---------- f (1 row) -select 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery; +SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery; +SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery; ?column? ---------- f (1 row) --arrays -select '{1.2.3}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{1.2.3.4}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{1.2.3.4.5}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4.5}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{1.3.3}'::ltree[] @> '1.2.3.4'; +SELECT '{1.3.3}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery; +SELECT '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery; ?column? ---------- t (1 row) -select '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e'; +SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e'; ?column? ---------- t (1 row) --exractors -select ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null; +SELECT ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null; ?column? ---------- t (1 row) -select '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4'; +SELECT '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4'; ?column? ---------- 1.2.3 (1 row) -select '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3'; +SELECT '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3'; ?column? ---------- 1.2.3.4 (1 row) -select ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null; +SELECT ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null; ?column? ---------- t (1 row) -select '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery; +SELECT '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery; ?column? ------------ tree.awdfg (1 row) -select '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e'; +SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e'; ?column? ----------- g.b.c.d.e (1 row) -create table ltreetest (t ltree); -\copy ltreetest from 'data/ltree.data' -select * from ltreetest where t < '12.3' order by t asc; +CREATE TABLE ltreetest (t ltree); +\copy ltreetest FROM 'data/ltree.data' +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; t ---------------------------------- @@ -1130,7 +1130,7 @@ select * from ltreetest where t < '12.3' order by t asc; 12.29.26.18.4.21.28.8.13.3 (123 rows) -select * from ltreetest where t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; t ---------------------------------- @@ -1259,13 +1259,13 @@ select * from ltreetest where t <= '12.3' order by t asc; 12.3 (124 rows) -select * from ltreetest where t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; t ------ 12.3 (1 row) -select * from ltreetest where t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; t ---------------------------------- 12.3 @@ -2153,7 +2153,7 @@ select * from ltreetest where t >= '12.3' order by t asc; 9.9.13.9.14.27 (883 rows) -select * from ltreetest where t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; t ---------------------------------- 12.4.10.17.4.10.23.3 @@ -3040,7 +3040,7 @@ select * from ltreetest where t > '12.3' order by t asc; 9.9.13.9.14.27 (882 rows) -select * from ltreetest where t @> '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc; t ------- @@ -3049,7 +3049,7 @@ select * from ltreetest where t @> '1.1.1' order by t asc; 1.1.1 (4 rows) -select * from ltreetest where t <@ '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc; t ----------- 1.1.1 @@ -3058,7 +3058,7 @@ select * from ltreetest where t <@ '1.1.1' order by t asc; 1.1.1.2.1 (4 rows) -select * from ltreetest where t ~ '1.1.1.*' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc; t ----------- 1.1.1 @@ -3067,7 +3067,7 @@ select * from ltreetest where t ~ '1.1.1.*' order by t asc; 1.1.1.2.1 (4 rows) -select * from ltreetest where t ~ '*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc; t -------------------------------- 1 @@ -3097,20 +3097,20 @@ select * from ltreetest where t ~ '*.1' order by t asc; 9.21.20.29.1 (25 rows) -select * from ltreetest where t ~ '23.*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc; t ------------------------- 23.28.1 23.3.32.21.5.14.10.17.1 (2 rows) -select * from ltreetest where t ~ '23.*{1}.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc; t --------- 23.28.1 (1 row) -select * from ltreetest where t @ '23 & 1' order by t asc; +SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc; t -------------------------------- 1.10.23.25.5.11 @@ -3156,7 +3156,7 @@ select * from ltreetest where t @ '23 & 1' order by t asc; create unique index tstidx on ltreetest (t); set enable_seqscan=off; -select * from ltreetest where t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; t ---------------------------------- @@ -3284,7 +3284,7 @@ select * from ltreetest where t < '12.3' order by t asc; 12.29.26.18.4.21.28.8.13.3 (123 rows) -select * from ltreetest where t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; t ---------------------------------- @@ -3413,13 +3413,13 @@ select * from ltreetest where t <= '12.3' order by t asc; 12.3 (124 rows) -select * from ltreetest where t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; t ------ 12.3 (1 row) -select * from ltreetest where t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; t ---------------------------------- 12.3 @@ -4307,7 +4307,7 @@ select * from ltreetest where t >= '12.3' order by t asc; 9.9.13.9.14.27 (883 rows) -select * from ltreetest where t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; t ---------------------------------- 12.4.10.17.4.10.23.3 @@ -5197,7 +5197,7 @@ select * from ltreetest where t > '12.3' order by t asc; drop index tstidx; create index tstidx on ltreetest using gist (t); set enable_seqscan=off; -select * from ltreetest where t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; t ---------------------------------- @@ -5325,7 +5325,7 @@ select * from ltreetest where t < '12.3' order by t asc; 12.29.26.18.4.21.28.8.13.3 (123 rows) -select * from ltreetest where t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; t ---------------------------------- @@ -5454,13 +5454,13 @@ select * from ltreetest where t <= '12.3' order by t asc; 12.3 (124 rows) -select * from ltreetest where t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; t ------ 12.3 (1 row) -select * from ltreetest where t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; t ---------------------------------- 12.3 @@ -6348,7 +6348,7 @@ select * from ltreetest where t >= '12.3' order by t asc; 9.9.13.9.14.27 (883 rows) -select * from ltreetest where t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; t ---------------------------------- 12.4.10.17.4.10.23.3 @@ -7235,7 +7235,7 @@ select * from ltreetest where t > '12.3' order by t asc; 9.9.13.9.14.27 (882 rows) -select * from ltreetest where t @> '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc; t ------- @@ -7244,7 +7244,7 @@ select * from ltreetest where t @> '1.1.1' order by t asc; 1.1.1 (4 rows) -select * from ltreetest where t <@ '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc; t ----------- 1.1.1 @@ -7253,7 +7253,7 @@ select * from ltreetest where t <@ '1.1.1' order by t asc; 1.1.1.2.1 (4 rows) -select * from ltreetest where t ~ '1.1.1.*' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc; t ----------- 1.1.1 @@ -7262,7 +7262,7 @@ select * from ltreetest where t ~ '1.1.1.*' order by t asc; 1.1.1.2.1 (4 rows) -select * from ltreetest where t ~ '*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc; t -------------------------------- 1 @@ -7292,20 +7292,20 @@ select * from ltreetest where t ~ '*.1' order by t asc; 9.21.20.29.1 (25 rows) -select * from ltreetest where t ~ '23.*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc; t ------------------------- 23.28.1 23.3.32.21.5.14.10.17.1 (2 rows) -select * from ltreetest where t ~ '23.*{1}.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc; t --------- 23.28.1 (1 row) -select * from ltreetest where t @ '23 & 1' order by t asc; +SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc; t -------------------------------- 1.10.23.25.5.11 @@ -7350,44 +7350,44 @@ select * from ltreetest where t @ '23 & 1' order by t asc; (39 rows) create table _ltreetest (t ltree[]); -\copy _ltreetest from 'data/_ltree.data' -select count(*) from _ltreetest where t @> '1.1.1' ; +\copy _ltreetest FROM 'data/_ltree.data' +SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ; count ------- 15 (1 row) -select count(*) from _ltreetest where t <@ '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ; count ------- 19 (1 row) -select count(*) from _ltreetest where t ~ '1.1.1.*' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ; count ------- 19 (1 row) -select count(*) from _ltreetest where t ~ '*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ; count ------- 83 (1 row) -select count(*) from _ltreetest where t ~ '23.*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ; count ------- 10 (1 row) -select count(*) from _ltreetest where t ~ '23.*{1}.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ; count ------- 5 (1 row) -select count(*) from _ltreetest where t @ '23 & 1' ; +SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ; count ------- 147 @@ -7395,43 +7395,43 @@ select count(*) from _ltreetest where t @ '23 & 1' ; create index _tstidx on _ltreetest using gist (t); set enable_seqscan=off; -select count(*) from _ltreetest where t @> '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ; count ------- 15 (1 row) -select count(*) from _ltreetest where t <@ '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ; count ------- 19 (1 row) -select count(*) from _ltreetest where t ~ '1.1.1.*' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ; count ------- 19 (1 row) -select count(*) from _ltreetest where t ~ '*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ; count ------- 83 (1 row) -select count(*) from _ltreetest where t ~ '23.*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ; count ------- 10 (1 row) -select count(*) from _ltreetest where t ~ '23.*{1}.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ; count ------- 5 (1 row) -select count(*) from _ltreetest where t @ '23 & 1' ; +SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ; count ------- 147 diff --git a/contrib/ltree/ltree.sql.in b/contrib/ltree/ltree.sql.in index ad7f61472b..eae1454a9a 100644 --- a/contrib/ltree/ltree.sql.in +++ b/contrib/ltree/ltree.sql.in @@ -1,23 +1,23 @@ -BEGIN; - -- Adjust this setting to control where the objects get created. SET search_path = public; +SET autocommit TO 'on'; + CREATE FUNCTION ltree_in(cstring) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE FUNCTION ltree_out(ltree) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE TYPE ltree ( -internallength = -1, -input = ltree_in, -output = ltree_out, -storage = extended + INTERNALLENGTH = -1, + INPUT = ltree_in, + OUTPUT = ltree_out, + STORAGE = extended ); @@ -25,74 +25,99 @@ storage = extended CREATE FUNCTION ltree_cmp(ltree,ltree) RETURNS int4 AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_lt(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_le(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_eq(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_ge(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_gt(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_ne(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR < ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_lt, - COMMUTATOR = '>', NEGATOR = '>=', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_lt, + COMMUTATOR = '>', + NEGATOR = '>=', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR <= ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_le, - COMMUTATOR = '>=', NEGATOR = '>', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_le, + COMMUTATOR = '>=', + NEGATOR = '>', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR >= ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_ge, - COMMUTATOR = '<=', NEGATOR = '<', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_ge, + COMMUTATOR = '<=', + NEGATOR = '<', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR > ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_gt, - COMMUTATOR = '<', NEGATOR = '<=', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_gt, + COMMUTATOR = '<', + NEGATOR = '<=', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR = ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_eq, - COMMUTATOR = '=', NEGATOR = '<>', - RESTRICT = eqsel, JOIN = eqjoinsel, - SORT1 = '<', SORT2 = '<' + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_eq, + COMMUTATOR = '=', + NEGATOR = '<>', + RESTRICT = eqsel, + JOIN = eqjoinsel, + SORT1 = '<', + SORT2 = '<' ); CREATE OPERATOR <> ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_ne, - COMMUTATOR = '<>', NEGATOR = '=', - RESTRICT = neqsel, JOIN = neqjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_ne, + COMMUTATOR = '<>', + NEGATOR = '=', + RESTRICT = neqsel, + JOIN = neqjoinsel ); --util functions @@ -100,122 +125,140 @@ CREATE OPERATOR <> ( CREATE FUNCTION subltree(ltree,int4,int4) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION subpath(ltree,int4,int4) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION subpath(ltree,int4) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION nlevel(ltree) RETURNS int4 AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(_ltree) RETURNS ltree AS 'MODULE_PATHNAME','_lca' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_isparent(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_risparent(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_addltree(ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_addtext(ltree,text) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_textadd(text,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR @> ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_isparent, + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_isparent, COMMUTATOR = '<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@> ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_isparent, + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_isparent, COMMUTATOR = '^<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR <@ ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_risparent, + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_risparent, COMMUTATOR = '@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^<@ ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_risparent, + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_risparent, COMMUTATOR = '^@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR || ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_addltree + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_addltree ); CREATE OPERATOR || ( - LEFTARG = ltree, RIGHTARG = text, PROCEDURE = ltree_addtext + LEFTARG = ltree, + RIGHTARG = text, + PROCEDURE = ltree_addtext ); CREATE OPERATOR || ( - LEFTARG = text, RIGHTARG = ltree, PROCEDURE = ltree_textadd + LEFTARG = text, + RIGHTARG = ltree, + PROCEDURE = ltree_textadd ); @@ -235,135 +278,166 @@ CREATE OPERATOR CLASS ltree_ops CREATE FUNCTION lquery_in(cstring) RETURNS lquery AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE FUNCTION lquery_out(lquery) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE TYPE lquery ( -internallength = -1, -input = lquery_in, -output = lquery_out, -storage = extended + INTERNALLENGTH = -1, + INPUT = lquery_in, + OUTPUT = lquery_out, + STORAGE = extended ); CREATE FUNCTION ltq_regex(ltree,lquery) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltq_rregex(lquery,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ~ ( - LEFTARG = ltree, RIGHTARG = lquery, PROCEDURE = ltq_regex, + LEFTARG = ltree, + RIGHTARG = lquery, + PROCEDURE = ltq_regex, COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = lquery, RIGHTARG = ltree, PROCEDURE = ltq_rregex, + LEFTARG = lquery, + RIGHTARG = ltree, + PROCEDURE = ltq_rregex, COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --not-indexed CREATE OPERATOR ^~ ( - LEFTARG = ltree, RIGHTARG = lquery, PROCEDURE = ltq_regex, + LEFTARG = ltree, + RIGHTARG = lquery, + PROCEDURE = ltq_regex, COMMUTATOR = '^~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^~ ( - LEFTARG = lquery, RIGHTARG = ltree, PROCEDURE = ltq_rregex, + LEFTARG = lquery, + RIGHTARG = ltree, + PROCEDURE = ltq_rregex, COMMUTATOR = '^~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE FUNCTION ltxtq_in(cstring) RETURNS ltxtquery AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE FUNCTION ltxtq_out(ltxtquery) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE TYPE ltxtquery ( -internallength = -1, -input = ltxtq_in, -output = ltxtq_out, -storage = extended + INTERNALLENGTH = -1, + INPUT = ltxtq_in, + OUTPUT = ltxtq_out, + STORAGE = extended ); --- operations with ltxtquery +-- operations WITH ltxtquery CREATE FUNCTION ltxtq_exec(ltree, ltxtquery) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict, iscachable); +LANGUAGE 'C' WITH (isstrict, iscachable); CREATE FUNCTION ltxtq_rexec(ltxtquery, ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict, iscachable); +LANGUAGE 'C' WITH (isstrict, iscachable); CREATE OPERATOR @ ( - LEFTARG = ltree, RIGHTARG = ltxtquery, PROCEDURE = ltxtq_exec, + LEFTARG = ltree, + RIGHTARG = ltxtquery, + PROCEDURE = ltxtq_exec, COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR @ ( - LEFTARG = ltxtquery, RIGHTARG = ltree, PROCEDURE = ltxtq_rexec, + LEFTARG = ltxtquery, + RIGHTARG = ltree, + PROCEDURE = ltxtq_rexec, COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --not-indexed CREATE OPERATOR ^@ ( - LEFTARG = ltree, RIGHTARG = ltxtquery, PROCEDURE = ltxtq_exec, + LEFTARG = ltree, + RIGHTARG = ltxtquery, + PROCEDURE = ltxtq_exec, COMMUTATOR = '^@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@ ( - LEFTARG = ltxtquery, RIGHTARG = ltree, PROCEDURE = ltxtq_rexec, + LEFTARG = ltxtquery, + RIGHTARG = ltree, + PROCEDURE = ltxtq_rexec, COMMUTATOR = '^@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --GiST support for ltree CREATE FUNCTION ltree_gist_in(cstring) RETURNS ltree_gist AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); - +LANGUAGE 'C' WITH (isstrict); + CREATE FUNCTION ltree_gist_out(ltree_gist) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); - +LANGUAGE 'C' WITH (isstrict); + CREATE TYPE ltree_gist ( internallength = -1, input = ltree_gist_in, output = ltree_gist_out, storage = plain -); - - -create function ltree_consistent(internal,internal,int2) returns bool as 'MODULE_PATHNAME' language 'C'; -create function ltree_compress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function ltree_decompress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function ltree_penalty(internal,internal,internal) returns internal as 'MODULE_PATHNAME' language 'C' with(isstrict); -create function ltree_picksplit(internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function ltree_union(bytea, internal) returns int4 as 'MODULE_PATHNAME' language 'C'; -create function ltree_same(internal, internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +); + + +CREATE FUNCTION ltree_consistent(internal,internal,int2) +RETURNS bool as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_compress(internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_decompress(internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_penalty(internal,internal,internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C' with(isstrict); +CREATE FUNCTION ltree_picksplit(internal, internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_union(bytea, internal) +RETURNS int4 as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_same(internal, internal, internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C'; CREATE OPERATOR CLASS gist_ltree_ops DEFAULT FOR TYPE ltree USING gist AS @@ -393,185 +467,259 @@ CREATE OPERATOR CLASS gist_ltree_ops CREATE FUNCTION _ltree_isparent(_ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltree_r_isparent(ltree,_ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltree_risparent(_ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltree_r_risparent(ltree,_ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltq_regex(_ltree,lquery) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltq_rregex(lquery,_ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltxtq_exec(_ltree, ltxtquery) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict, iscachable); +LANGUAGE 'C' WITH (isstrict, iscachable); CREATE FUNCTION _ltxtq_rexec(ltxtquery, _ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict, iscachable); +LANGUAGE 'C' WITH (isstrict, iscachable); CREATE OPERATOR @> ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_isparent, + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_isparent, COMMUTATOR = '<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR <@ ( - LEFTARG = ltree, RIGHTARG = _ltree, PROCEDURE = _ltree_r_isparent, + LEFTARG = ltree, + RIGHTARG = _ltree, + PROCEDURE = _ltree_r_isparent, COMMUTATOR = '@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR <@ ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_risparent, + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_risparent, COMMUTATOR = '@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR @> ( - LEFTARG = ltree, RIGHTARG = _ltree, PROCEDURE = _ltree_r_risparent, + LEFTARG = ltree, + RIGHTARG = _ltree, + PROCEDURE = _ltree_r_risparent, COMMUTATOR = '<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = _ltree, RIGHTARG = lquery, PROCEDURE = _ltq_regex, + LEFTARG = _ltree, + RIGHTARG = lquery, + PROCEDURE = _ltq_regex, COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = lquery, RIGHTARG = _ltree, PROCEDURE = _ltq_rregex, + LEFTARG = lquery, + RIGHTARG = _ltree, + PROCEDURE = _ltq_rregex, COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR @ ( - LEFTARG = _ltree, RIGHTARG = ltxtquery, PROCEDURE = _ltxtq_exec, + LEFTARG = _ltree, + RIGHTARG = ltxtquery, + PROCEDURE = _ltxtq_exec, COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR @ ( - LEFTARG = ltxtquery, RIGHTARG = _ltree, PROCEDURE = _ltxtq_rexec, + LEFTARG = ltxtquery, + RIGHTARG = _ltree, + PROCEDURE = _ltxtq_rexec, COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --not indexed CREATE OPERATOR ^@> ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_isparent, + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_isparent, COMMUTATOR = '^<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^<@ ( - LEFTARG = ltree, RIGHTARG = _ltree, PROCEDURE = _ltree_r_isparent, + LEFTARG = ltree, + RIGHTARG = _ltree, + PROCEDURE = _ltree_r_isparent, COMMUTATOR = '^@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^<@ ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_risparent, + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_risparent, COMMUTATOR = '^@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@> ( - LEFTARG = ltree, RIGHTARG = _ltree, PROCEDURE = _ltree_r_risparent, + LEFTARG = ltree, + RIGHTARG = _ltree, + PROCEDURE = _ltree_r_risparent, COMMUTATOR = '^<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^~ ( - LEFTARG = _ltree, RIGHTARG = lquery, PROCEDURE = _ltq_regex, + LEFTARG = _ltree, + RIGHTARG = lquery, + PROCEDURE = _ltq_regex, COMMUTATOR = '^~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^~ ( - LEFTARG = lquery, RIGHTARG = _ltree, PROCEDURE = _ltq_rregex, + LEFTARG = lquery, + RIGHTARG = _ltree, + PROCEDURE = _ltq_rregex, COMMUTATOR = '^~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@ ( - LEFTARG = _ltree, RIGHTARG = ltxtquery, PROCEDURE = _ltxtq_exec, + LEFTARG = _ltree, + RIGHTARG = ltxtquery, + PROCEDURE = _ltxtq_exec, COMMUTATOR = '^@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@ ( - LEFTARG = ltxtquery, RIGHTARG = _ltree, PROCEDURE = _ltxtq_rexec, + LEFTARG = ltxtquery, + RIGHTARG = _ltree, + PROCEDURE = _ltxtq_rexec, COMMUTATOR = '^@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --extractors CREATE FUNCTION _ltree_extract_isparent(_ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ?@> ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_extract_isparent + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_extract_isparent ); CREATE FUNCTION _ltree_extract_risparent(_ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ?<@ ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_extract_risparent + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_extract_risparent ); CREATE FUNCTION _ltq_extract_regex(_ltree,lquery) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ?~ ( - LEFTARG = _ltree, RIGHTARG = lquery, PROCEDURE = _ltq_extract_regex + LEFTARG = _ltree, + RIGHTARG = lquery, + PROCEDURE = _ltq_extract_regex ); CREATE FUNCTION _ltxtq_extract_exec(_ltree,ltxtquery) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ?@ ( - LEFTARG = _ltree, RIGHTARG = ltxtquery, PROCEDURE = _ltxtq_extract_exec + LEFTARG = _ltree, + RIGHTARG = ltxtquery, + PROCEDURE = _ltxtq_extract_exec ); --GiST support for ltree[] -create function _ltree_consistent(internal,internal,int2) returns bool as 'MODULE_PATHNAME' language 'C'; -create function _ltree_compress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function _ltree_penalty(internal,internal,internal) returns internal as 'MODULE_PATHNAME' language 'C' with(isstrict); -create function _ltree_picksplit(internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function _ltree_union(bytea, internal) returns int4 as 'MODULE_PATHNAME' language 'C'; -create function _ltree_same(internal, internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION _ltree_consistent(internal,internal,int2) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; +CREATE FUNCTION _ltree_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; +CREATE FUNCTION _ltree_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH(isstrict); +CREATE FUNCTION _ltree_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; +CREATE FUNCTION _ltree_union(bytea, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; +CREATE FUNCTION _ltree_same(internal, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; CREATE OPERATOR CLASS gist__ltree_ops DEFAULT FOR TYPE _ltree USING gist AS @@ -589,6 +737,3 @@ CREATE OPERATOR CLASS gist__ltree_ops FUNCTION 6 _ltree_picksplit (internal, internal), FUNCTION 7 _ltree_same (internal, internal, internal), STORAGE ltree_gist; - - -END; diff --git a/contrib/ltree/ltreetest.sql b/contrib/ltree/ltreetest.sql index 0dd6eaa63d..eea5c475ee 100644 --- a/contrib/ltree/ltreetest.sql +++ b/contrib/ltree/ltreetest.sql @@ -1,16 +1,16 @@ -create table test ( path ltree); -insert into test values ('Top'); -insert into test values ('Top.Science'); -insert into test values ('Top.Science.Astronomy'); -insert into test values ('Top.Science.Astronomy.Astrophysics'); -insert into test values ('Top.Science.Astronomy.Cosmology'); -insert into test values ('Top.Hobbies'); -insert into test values ('Top.Hobbies.Amateurs_Astronomy'); -insert into test values ('Top.Collections'); -insert into test values ('Top.Collections.Pictures'); -insert into test values ('Top.Collections.Pictures.Astronomy'); -insert into test values ('Top.Collections.Pictures.Astronomy.Stars'); -insert into test values ('Top.Collections.Pictures.Astronomy.Galaxies'); -insert into test values ('Top.Collections.Pictures.Astronomy.Astronauts'); -create index path_gist_idx on test using gist(path); -create index path_idx on test using btree(path); +CREATE TABLE test ( path ltree); +INSERT INTO test VALUES ('Top'); +INSERT INTO test VALUES ('Top.Science'); +INSERT INTO test VALUES ('Top.Science.Astronomy'); +INSERT INTO test VALUES ('Top.Science.Astronomy.Astrophysics'); +INSERT INTO test VALUES ('Top.Science.Astronomy.Cosmology'); +INSERT INTO test VALUES ('Top.Hobbies'); +INSERT INTO test VALUES ('Top.Hobbies.Amateurs_Astronomy'); +INSERT INTO test VALUES ('Top.Collections'); +INSERT INTO test VALUES ('Top.Collections.Pictures'); +INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy'); +INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Stars'); +INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Galaxies'); +INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Astronauts'); +CREATE INDEX path_gist_idx ON test USING gist(path); +CREATE INDEX path_idx ON test USING btree(path); diff --git a/contrib/ltree/sql/ltree.sql b/contrib/ltree/sql/ltree.sql index 8da7e2841b..0d9defcca4 100644 --- a/contrib/ltree/sql/ltree.sql +++ b/contrib/ltree/sql/ltree.sql @@ -1,250 +1,252 @@ \set ECHO none +SET autocommit TO 'on'; + \i ltree.sql \set ECHO all -select ''::ltree; -select '1'::ltree; -select '1.2'::ltree; -select '1.2._3'::ltree; - -select subltree('Top.Child1.Child2',1,2); -select subpath('Top.Child1.Child2',1,2); -select subpath('Top.Child1.Child2',-1,1); -select subpath('Top.Child1.Child2',0,-2); -select subpath('Top.Child1.Child2',0,-1); -select subpath('Top.Child1.Child2',0,0); -select subpath('Top.Child1.Child2',1,0); -select subpath('Top.Child1.Child2',0); -select subpath('Top.Child1.Child2',1); - -select 'Top.Child1.Child2'::ltree || 'Child3'::text; -select 'Top.Child1.Child2'::ltree || 'Child3'::ltree; -select 'Top_0'::ltree || 'Top.Child1.Child2'::ltree; -select 'Top.Child1.Child2'::ltree || ''::ltree; -select ''::ltree || 'Top.Child1.Child2'::ltree; - -select lca('{la.2.3,1.2.3.4.5.6,}') is null; -select lca('{la.2.3,1.2.3.4.5.6}') is null; -select lca('{1.la.2.3,1.2.3.4.5.6}'); -select lca('{1.2.3,1.2.3.4.5.6}'); -select lca('1.la.2.3','1.2.3.4.5.6'); -select lca('1.2.3','1.2.3.4.5.6'); -select lca('1.2.2.3','1.2.3.4.5.6'); -select lca('1.2.2.3','1.2.3.4.5.6',''); -select lca('1.2.2.3','1.2.3.4.5.6','2'); -select lca('1.2.2.3','1.2.3.4.5.6','1'); - - -select '1'::lquery; -select '4|3|2'::lquery; -select '1.2'::lquery; -select '1.4|3|2'::lquery; -select '1.0'::lquery; -select '4|3|2.0'::lquery; -select '1.2.0'::lquery; -select '1.4|3|2.0'::lquery; -select '1.*'::lquery; -select '4|3|2.*'::lquery; -select '1.2.*'::lquery; -select '1.4|3|2.*'::lquery; -select '*.1.*'::lquery; -select '*.4|3|2.*'::lquery; -select '*.1.2.*'::lquery; -select '*.1.4|3|2.*'::lquery; -select '1.*.4|3|2'::lquery; -select '1.*.4|3|2.0'::lquery; -select '1.*.4|3|2.*{1,4}'::lquery; -select '1.*.4|3|2.*{,4}'::lquery; -select '1.*.4|3|2.*{1,}'::lquery; -select '1.*.4|3|2.*{1}'::lquery; -select 'qwerty%@*.tu'::lquery; - -select nlevel('1.2.3.4'); -select '1.2'::ltree < '2.2'::ltree; -select '1.2'::ltree <= '2.2'::ltree; -select '2.2'::ltree = '2.2'::ltree; -select '3.2'::ltree >= '2.2'::ltree; -select '3.2'::ltree > '2.2'::ltree; - -select '1.2.3'::ltree @> '1.2.3.4'::ltree; -select '1.2.3.4'::ltree @> '1.2.3.4'::ltree; -select '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree; -select '1.3.3'::ltree @> '1.2.3.4'::ltree; - -select 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; -select 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e'; -select 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; -select 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; -select 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e'; -select 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e'; -select 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; -select 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; -select 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{3}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{4}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,3}'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,4}'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,5}'; -select 'a.b.c.d.e'::ltree ~ '*{2,3}.e'; -select 'a.b.c.d.e'::ltree ~ '*{2,4}.e'; -select 'a.b.c.d.e'::ltree ~ '*{2,5}.e'; -select 'a.b.c.d.e'::ltree ~ '*.e'; -select 'a.b.c.d.e'::ltree ~ '*.e.*'; -select 'a.b.c.d.e'::ltree ~ '*.d.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.*.d.*'; -select 'a.b.c.d.e'::ltree ~ '*.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.!d'; -select 'a.b.c.d.e'::ltree ~ '!d.*'; -select 'a.b.c.d.e'::ltree ~ '!a.*'; -select 'a.b.c.d.e'::ltree ~ '*.!e'; -select 'a.b.c.d.e'::ltree ~ '*.!e.*'; -select 'a.b.c.d.e'::ltree ~ 'a.*.!e'; -select 'a.b.c.d.e'::ltree ~ 'a.*.!d'; -select 'a.b.c.d.e'::ltree ~ 'a.*.!d.*'; -select 'a.b.c.d.e'::ltree ~ 'a.*.!f.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.!d'; -select 'a.b.c.d.e'::ltree ~ 'a.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.c.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*'; -select 'a.b.c.d.e'::ltree ~ '!b.*.c.*'; -select 'a.b.c.d.e'::ltree ~ '!b.b.*'; -select 'a.b.c.d.e'::ltree ~ '!b.*.e'; -select 'a.b.c.d.e'::ltree ~ '!b.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '!b.!c.*'; -select 'a.b.c.d.e'::ltree ~ '!b.*.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*'; -select 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*'; -select 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*'; - -select 'QWER_TY'::ltree ~ 'q%@*'; -select 'QWER_TY'::ltree ~ 'Q_t%@*'; -select 'QWER_GY'::ltree ~ 'q_t%@*'; +SELECT ''::ltree; +SELECT '1'::ltree; +SELECT '1.2'::ltree; +SELECT '1.2._3'::ltree; + +SELECT subltree('Top.Child1.Child2',1,2); +SELECT subpath('Top.Child1.Child2',1,2); +SELECT subpath('Top.Child1.Child2',-1,1); +SELECT subpath('Top.Child1.Child2',0,-2); +SELECT subpath('Top.Child1.Child2',0,-1); +SELECT subpath('Top.Child1.Child2',0,0); +SELECT subpath('Top.Child1.Child2',1,0); +SELECT subpath('Top.Child1.Child2',0); +SELECT subpath('Top.Child1.Child2',1); + +SELECT 'Top.Child1.Child2'::ltree || 'Child3'::text; +SELECT 'Top.Child1.Child2'::ltree || 'Child3'::ltree; +SELECT 'Top_0'::ltree || 'Top.Child1.Child2'::ltree; +SELECT 'Top.Child1.Child2'::ltree || ''::ltree; +SELECT ''::ltree || 'Top.Child1.Child2'::ltree; + +SELECT lca('{la.2.3,1.2.3.4.5.6,}') IS NULL; +SELECT lca('{la.2.3,1.2.3.4.5.6}') IS NULL; +SELECT lca('{1.la.2.3,1.2.3.4.5.6}'); +SELECT lca('{1.2.3,1.2.3.4.5.6}'); +SELECT lca('1.la.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.2.3','1.2.3.4.5.6',''); +SELECT lca('1.2.2.3','1.2.3.4.5.6','2'); +SELECT lca('1.2.2.3','1.2.3.4.5.6','1'); + + +SELECT '1'::lquery; +SELECT '4|3|2'::lquery; +SELECT '1.2'::lquery; +SELECT '1.4|3|2'::lquery; +SELECT '1.0'::lquery; +SELECT '4|3|2.0'::lquery; +SELECT '1.2.0'::lquery; +SELECT '1.4|3|2.0'::lquery; +SELECT '1.*'::lquery; +SELECT '4|3|2.*'::lquery; +SELECT '1.2.*'::lquery; +SELECT '1.4|3|2.*'::lquery; +SELECT '*.1.*'::lquery; +SELECT '*.4|3|2.*'::lquery; +SELECT '*.1.2.*'::lquery; +SELECT '*.1.4|3|2.*'::lquery; +SELECT '1.*.4|3|2'::lquery; +SELECT '1.*.4|3|2.0'::lquery; +SELECT '1.*.4|3|2.*{1,4}'::lquery; +SELECT '1.*.4|3|2.*{,4}'::lquery; +SELECT '1.*.4|3|2.*{1,}'::lquery; +SELECT '1.*.4|3|2.*{1}'::lquery; +SELECT 'qwerty%@*.tu'::lquery; + +SELECT nlevel('1.2.3.4'); +SELECT '1.2'::ltree < '2.2'::ltree; +SELECT '1.2'::ltree <= '2.2'::ltree; +SELECT '2.2'::ltree = '2.2'::ltree; +SELECT '3.2'::ltree >= '2.2'::ltree; +SELECT '3.2'::ltree > '2.2'::ltree; + +SELECT '1.2.3'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3.4'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree; +SELECT '1.3.3'::ltree @> '1.2.3.4'::ltree; + +SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; +SELECT 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,5}'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,5}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.e.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!d'; +SELECT 'a.b.c.d.e'::ltree ~ '!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!a.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!e.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!f.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.b.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*'; + +SELECT 'QWER_TY'::ltree ~ 'q%@*'; +SELECT 'QWER_TY'::ltree ~ 'Q_t%@*'; +SELECT 'QWER_GY'::ltree ~ 'q_t%@*'; --ltxtquery -select '!tree & aWdf@*'::ltxtquery; -select 'tree & aw_qw%*'::ltxtquery; -select 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery; -select 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery; -select 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery; +SELECT '!tree & aWdf@*'::ltxtquery; +SELECT 'tree & aw_qw%*'::ltxtquery; +SELECT 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery; +SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery; +SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery; --arrays -select '{1.2.3}'::ltree[] @> '1.2.3.4'; -select '{1.2.3.4}'::ltree[] @> '1.2.3.4'; -select '{1.2.3.4.5}'::ltree[] @> '1.2.3.4'; -select '{1.3.3}'::ltree[] @> '1.2.3.4'; -select '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4'; -select '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4'; -select '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4'; -select '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4'; -select '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; -select '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4'; -select '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4'; -select '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; -select '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery; -select '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e'; +SELECT '{1.2.3}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4.5}'::ltree[] @> '1.2.3.4'; +SELECT '{1.3.3}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery; +SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e'; --exractors -select ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null; -select '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4'; -select '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3'; -select ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null; -select '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery; -select '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e'; - -create table ltreetest (t ltree); -\copy ltreetest from 'data/ltree.data' - -select * from ltreetest where t < '12.3' order by t asc; -select * from ltreetest where t <= '12.3' order by t asc; -select * from ltreetest where t = '12.3' order by t asc; -select * from ltreetest where t >= '12.3' order by t asc; -select * from ltreetest where t > '12.3' order by t asc; -select * from ltreetest where t @> '1.1.1' order by t asc; -select * from ltreetest where t <@ '1.1.1' order by t asc; -select * from ltreetest where t ~ '1.1.1.*' order by t asc; -select * from ltreetest where t ~ '*.1' order by t asc; -select * from ltreetest where t ~ '23.*.1' order by t asc; -select * from ltreetest where t ~ '23.*{1}.1' order by t asc; -select * from ltreetest where t @ '23 & 1' order by t asc; +SELECT ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null; +SELECT '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4'; +SELECT '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3'; +SELECT ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null; +SELECT '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery; +SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e'; + +CREATE TABLE ltreetest (t ltree); +\copy ltreetest FROM 'data/ltree.data' + +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc; +SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc; create unique index tstidx on ltreetest (t); set enable_seqscan=off; -select * from ltreetest where t < '12.3' order by t asc; -select * from ltreetest where t <= '12.3' order by t asc; -select * from ltreetest where t = '12.3' order by t asc; -select * from ltreetest where t >= '12.3' order by t asc; -select * from ltreetest where t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; drop index tstidx; create index tstidx on ltreetest using gist (t); set enable_seqscan=off; -select * from ltreetest where t < '12.3' order by t asc; -select * from ltreetest where t <= '12.3' order by t asc; -select * from ltreetest where t = '12.3' order by t asc; -select * from ltreetest where t >= '12.3' order by t asc; -select * from ltreetest where t > '12.3' order by t asc; -select * from ltreetest where t @> '1.1.1' order by t asc; -select * from ltreetest where t <@ '1.1.1' order by t asc; -select * from ltreetest where t ~ '1.1.1.*' order by t asc; -select * from ltreetest where t ~ '*.1' order by t asc; -select * from ltreetest where t ~ '23.*.1' order by t asc; -select * from ltreetest where t ~ '23.*{1}.1' order by t asc; -select * from ltreetest where t @ '23 & 1' order by t asc; +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc; +SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc; create table _ltreetest (t ltree[]); -\copy _ltreetest from 'data/_ltree.data' +\copy _ltreetest FROM 'data/_ltree.data' -select count(*) from _ltreetest where t @> '1.1.1' ; -select count(*) from _ltreetest where t <@ '1.1.1' ; -select count(*) from _ltreetest where t ~ '1.1.1.*' ; -select count(*) from _ltreetest where t ~ '*.1' ; -select count(*) from _ltreetest where t ~ '23.*.1' ; -select count(*) from _ltreetest where t ~ '23.*{1}.1' ; -select count(*) from _ltreetest where t @ '23 & 1' ; +SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ; +SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ; create index _tstidx on _ltreetest using gist (t); set enable_seqscan=off; -select count(*) from _ltreetest where t @> '1.1.1' ; -select count(*) from _ltreetest where t <@ '1.1.1' ; -select count(*) from _ltreetest where t ~ '1.1.1.*' ; -select count(*) from _ltreetest where t ~ '*.1' ; -select count(*) from _ltreetest where t ~ '23.*.1' ; -select count(*) from _ltreetest where t ~ '23.*{1}.1' ; -select count(*) from _ltreetest where t @ '23 & 1' ; +SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ; +SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ; |
