@@ -1433,8 +1433,27 @@ SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e';
1433
1433
g.b.c.d.e
1434
1434
(1 row)
1435
1435
1436
+ -- Check that the hash_ltree() and hash_ltree_extended() function's lower
1437
+ -- 32 bits match when the seed is 0 and do not match when the seed != 0
1438
+ SELECT v as value, hash_ltree(v)::bit(32) as standard,
1439
+ hash_ltree_extended(v, 0)::bit(32) as extended0,
1440
+ hash_ltree_extended(v, 1)::bit(32) as extended1
1441
+ FROM (VALUES (NULL::ltree), (''::ltree), ('0'::ltree), ('0.1'::ltree),
1442
+ ('0.1.2'::ltree), ('0'::ltree), ('0_asd.1_ASD'::ltree)) x(v)
1443
+ WHERE hash_ltree(v)::bit(32) != hash_ltree_extended(v, 0)::bit(32)
1444
+ OR hash_ltree(v)::bit(32) = hash_ltree_extended(v, 1)::bit(32);
1445
+ value | standard | extended0 | extended1
1446
+ -------+----------+-----------+-----------
1447
+ (0 rows)
1448
+
1436
1449
CREATE TABLE ltreetest (t ltree);
1437
1450
\copy ltreetest FROM 'data/ltree.data'
1451
+ SELECT count(*) from ltreetest;
1452
+ count
1453
+ -------
1454
+ 1006
1455
+ (1 row)
1456
+
1438
1457
SELECT * FROM ltreetest WHERE t < '12.3' order by t asc;
1439
1458
t
1440
1459
----------------------------------
@@ -7833,6 +7852,55 @@ SELECT * FROM ltreetest WHERE t ? '{23.*.1,23.*.2}' order by t asc;
7833
7852
(4 rows)
7834
7853
7835
7854
drop index tstidx;
7855
+ --- test hash index
7856
+ create index tstidx on ltreetest using hash (t);
7857
+ set enable_seqscan=off;
7858
+ set enable_bitmapscan=off;
7859
+ EXPLAIN (COSTS OFF)
7860
+ SELECT * FROM ltreetest WHERE t = '12.3' order by t asc;
7861
+ QUERY PLAN
7862
+ --------------------------------------
7863
+ Index Scan using tstidx on ltreetest
7864
+ Index Cond: (t = '12.3'::ltree)
7865
+ (2 rows)
7866
+
7867
+ SELECT * FROM ltreetest WHERE t = '12.3' order by t asc;
7868
+ t
7869
+ ------
7870
+ 12.3
7871
+ (1 row)
7872
+
7873
+ reset enable_seqscan;
7874
+ reset enable_bitmapscan;
7875
+ -- test hash aggregate
7876
+ set enable_hashagg=on;
7877
+ set enable_sort=off;
7878
+ EXPLAIN (COSTS OFF)
7879
+ SELECT count(*) FROM (
7880
+ SELECT t FROM (SELECT * FROM ltreetest UNION ALL SELECT * FROM ltreetest) t1 GROUP BY t
7881
+ ) t2;
7882
+ QUERY PLAN
7883
+ -----------------------------------------------------
7884
+ Aggregate
7885
+ -> HashAggregate
7886
+ Group Key: ltreetest.t
7887
+ -> Append
7888
+ -> Seq Scan on ltreetest
7889
+ -> Seq Scan on ltreetest ltreetest_1
7890
+ (6 rows)
7891
+
7892
+ SELECT count(*) FROM (
7893
+ SELECT t FROM (SELECT * FROM ltreetest UNION ALL SELECT * FROM ltreetest) t1 GROUP BY t
7894
+ ) t2;
7895
+ count
7896
+ -------
7897
+ 1006
7898
+ (1 row)
7899
+
7900
+ reset enable_hashagg;
7901
+ reset enable_sort;
7902
+ drop index tstidx;
7903
+ -- test gist index
7836
7904
create index tstidx on ltreetest using gist (t gist_ltree_ops(siglen=0));
7837
7905
ERROR: value 0 out of bounds for option "siglen"
7838
7906
DETAIL: Valid values are between "4" and "2024".