Skip to content

Commit 048ecad

Browse files
author
Vitaly Davydov
committed
Add test for sbox BRIN index
1 parent cc67320 commit 048ecad

File tree

3 files changed

+223
-1
lines changed

3 files changed

+223
-1
lines changed

Diff for: Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ REGRESS_9_5 = index_9.5 # experimental for spoint3
4343

4444
TESTS = init_test tables points euler circle line ellipse poly path box \
4545
index contains_ops contains_ops_compat bounding_box_gist gnomo \
46-
epochprop contains overlaps spoint_brin
46+
epochprop contains overlaps spoint_brin sbox_brin
4747

4848
ifneq ($(USE_HEALPIX),0)
4949
TESTS += healpix moc mocautocast

Diff for: expected/sbox_brin.out

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
CREATE TABLE test_boxes (
2+
b sbox
3+
);
4+
COPY test_boxes (b) FROM stdin;
5+
CREATE OR REPLACE FUNCTION qnodes(q text) RETURNS text
6+
LANGUAGE 'plpgsql' AS
7+
$$
8+
DECLARE
9+
exp TEXT;
10+
mat TEXT[];
11+
ret TEXT[];
12+
BEGIN
13+
FOR exp IN EXECUTE 'EXPLAIN ' || q
14+
LOOP
15+
--RAISE NOTICE 'EXP: %', exp;
16+
mat := regexp_matches(exp, ' *(?:-> *)?(.*Scan)');
17+
--RAISE NOTICE 'MAT: %', mat;
18+
IF mat IS NOT NULL THEN
19+
ret := array_append(ret, mat[1]);
20+
END IF;
21+
--RAISE NOTICE 'RET: %', ret;
22+
END LOOP;
23+
RETURN array_to_string(ret,',');
24+
END;
25+
$$;
26+
CREATE INDEX test_boxes_idx ON test_boxes USING brin (b) WITH (pages_per_range = 16);
27+
set enable_indexscan = off;
28+
set enable_bitmapscan = off;
29+
set enable_seqscan = on;
30+
SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )''');
31+
?column? | qnodes
32+
----------+----------
33+
scan_seq | Seq Scan
34+
(1 row)
35+
36+
SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
37+
b
38+
---
39+
(0 rows)
40+
41+
SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )''');
42+
?column? | qnodes
43+
----------+----------
44+
scan_seq | Seq Scan
45+
(1 row)
46+
47+
SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
48+
b
49+
------------------------------------------------------------------------------------
50+
((0.349065850398866 , 0.174532925199433), (0.350065850398866 , 0.174632925199433))
51+
(1 row)
52+
53+
set enable_indexscan = off;
54+
set enable_bitmapscan = on;
55+
set enable_seqscan = off;
56+
SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )''');
57+
?column? | qnodes
58+
----------+----------
59+
scan_idx | Seq Scan
60+
(1 row)
61+
62+
SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
63+
b
64+
---
65+
(0 rows)
66+
67+
SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )''');
68+
?column? | qnodes
69+
----------+----------
70+
scan_idx | Seq Scan
71+
(1 row)
72+
73+
SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
74+
b
75+
------------------------------------------------------------------------------------
76+
((0.349065850398866 , 0.174532925199433), (0.350065850398866 , 0.174632925199433))
77+
(1 row)
78+
79+
---- cleanup
80+
DROP INDEX brin_sbox;
81+
ERROR: index "brin_sbox" does not exist
82+
DROP TABLE test_boxes;
83+
DROP FUNCTION qnodes(text);
84+
set enable_indexscan = on;
85+
set enable_bitmapscan = on;
86+
set enable_seqscan = on;

Diff for: sql/sbox_brin.sql

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
CREATE TABLE test_boxes (
2+
b sbox
3+
);
4+
5+
COPY test_boxes (b) FROM stdin;
6+
( (0.349065850398866, 0.174532925199433), (0.350065850398866, 0.174632925199433) )
7+
( (1.59875999207035, 0.771416330759722), (1.5997599920703498, 0.771516330759722) )
8+
( (1.59876348272885, 0.77141458543047), (1.5997634827288498, 0.77151458543047) )
9+
( (1.59876697338736, 0.771412840101218), (1.5997669733873598, 0.771512840101218) )
10+
( (1.59877046404586, 0.771411094771966), (1.5997704640458599, 0.771511094771966) )
11+
( (1.59877395470437, 0.771409349442714), (1.59977395470437, 0.771509349442714) )
12+
( (1.59877744536287, 0.771407604113461), (1.59977744536287, 0.771507604113461) )
13+
( (1.59878093602137, 0.77140585878421), (1.59978093602137, 0.77150585878421) )
14+
( (1.59878442667988, 0.771404113454958), (1.59978442667988, 0.771504113454958) )
15+
( (1.59878791733838, 0.771402368125706), (1.59978791733838, 0.7715023681257059) )
16+
( (1.59879140799689, 0.771400622796454), (1.5997914079968898, 0.771500622796454) )
17+
( (1.59879489865539, 0.771398877467202), (1.5997948986553898, 0.771498877467202) )
18+
( (1.59879838931389, 0.77139713213795), (1.5997983893138898, 0.77149713213795) )
19+
( (1.5988018799724, 0.771395386808698), (1.5998018799723999, 0.771495386808698) )
20+
( (1.5988053706309, 0.771393641479446), (1.5998053706309, 0.771493641479446) )
21+
( (1.59880886128941, 0.771391896150194), (1.59980886128941, 0.771491896150194) )
22+
( (1.59881235194791, 0.771390150820941), (1.59981235194791, 0.771490150820941) )
23+
( (1.59881584260641, 0.77138840549169), (1.59981584260641, 0.77148840549169) )
24+
( (1.59881933326492, 0.771386660162438), (1.59981933326492, 0.7714866601624379) )
25+
( (1.59882282392342, 0.771384914833186), (1.5998228239234198, 0.771484914833186) )
26+
( (1.59882631458193, 0.771383169503934), (1.5998263145819298, 0.771483169503934) )
27+
( (1.59882980524043, 0.771381424174682), (1.5998298052404298, 0.771481424174682) )
28+
( (1.59883329589893, 0.77137967884543), (1.5998332958989299, 0.77147967884543) )
29+
( (1.59883678655744, 0.771377933516178), (1.5998367865574399, 0.771477933516178) )
30+
( (1.59884027721594, 0.771376188186926), (1.59984027721594, 0.771476188186926) )
31+
( (1.59884376787445, 0.771374442857673), (1.59984376787445, 0.771474442857673) )
32+
( (1.59884725853295, 0.771372697528422), (1.59984725853295, 0.771472697528422) )
33+
( (1.59885074919145, 0.77137095219917), (1.59985074919145, 0.77147095219917) )
34+
( (1.59885423984996, 0.771369206869918), (1.5998542398499598, 0.7714692068699179) )
35+
( (1.59885773050846, 0.771367461540666), (1.5998577305084598, 0.771467461540666) )
36+
( (1.59886122116697, 0.771365716211414), (1.5998612211669698, 0.771465716211414) )
37+
( (1.59886471182547, 0.771363970882162), (1.5998647118254699, 0.771463970882162) )
38+
( (1.59886820248397, 0.77136222555291), (1.5998682024839699, 0.77146222555291) )
39+
( (1.59887169314248, 0.771360480223658), (1.59987169314248, 0.771460480223658) )
40+
( (1.59887518380098, 0.771358734894406), (1.59987518380098, 0.771458734894406) )
41+
( (1.59887867445948, 0.771356989565154), (1.59987867445948, 0.771456989565154) )
42+
( (1.59888216511799, 0.771355244235902), (1.59988216511799, 0.771455244235902) )
43+
( (1.59888565577649, 0.77135349890665), (1.5998856557764898, 0.7714534989066499) )
44+
( (1.598889146435, 0.771351753577398), (1.5998891464349998, 0.771451753577398) )
45+
( (1.5988926370935, 0.771350008248146), (1.5998926370934998, 0.771450008248146) )
46+
( (1.59889612775201, 0.771348262918894), (1.5998961277520098, 0.771448262918894) )
47+
( (1.59889961841051, 0.771346517589642), (1.5998996184105099, 0.771446517589642) )
48+
( (1.59890310906901, 0.77134477226039), (1.59990310906901, 0.77144477226039) )
49+
( (1.59890659972752, 0.771343026931138), (1.59990659972752, 0.771443026931138) )
50+
( (1.59891009038602, 0.771341281601886), (1.59991009038602, 0.771441281601886) )
51+
( (1.59891358104452, 0.771339536272634), (1.59991358104452, 0.771439536272634) )
52+
( (1.59891707170303, 0.771337790943382), (1.59991707170303, 0.7714377909433819) )
53+
( (1.59892056236153, 0.77133604561413), (1.5999205623615298, 0.77143604561413) )
54+
( (1.59892405302004, 0.771334300284878), (1.5999240530200398, 0.771434300284878) )
55+
( (1.59892754367854, 0.771332554955626), (1.5999275436785398, 0.771432554955626) )
56+
( (1.59893103433705, 0.771330809626374), (1.5999310343370499, 0.771430809626374) )
57+
( (1.59893452499555, 0.771329064297122), (1.59993452499555, 0.771429064297122) )
58+
( (1.59893801565405, 0.77132731896787), (1.59993801565405, 0.77142731896787) )
59+
( (1.59894150631256, 0.771325573638618), (1.59994150631256, 0.771425573638618) )
60+
( (1.59894499697106, 0.771323828309366), (1.59994499697106, 0.771423828309366) )
61+
( (1.59894848762957, 0.771322082980114), (1.59994848762957, 0.7714220829801139) )
62+
( (1.59895197828807, 0.771320337650862), (1.5999519782880698, 0.771420337650862) )
63+
( (1.59895546894657, 0.77131859232161), (1.5999554689465698, 0.77141859232161) )
64+
( (3.61121537674092, -1.33598496521933), (3.6122153767409197, -1.33588496521933) )
65+
( (3.61121886739942, -1.33598321989008), (3.6122188673994198, -1.33588321989008) )
66+
( (3.61122235805792, -1.33598147456083), (3.61222235805792, -1.33588147456083) )
67+
( (3.61122584871643, -1.33597972923158), (3.61222584871643, -1.33587972923158) )
68+
( (3.61122933937493, -1.33597798390233), (3.61222933937493, -1.33587798390233) )
69+
( (3.61123283003344, -1.33597623857307), (3.61223283003344, -1.33587623857307) )
70+
( (3.61123632069194, -1.33597449324382), (3.61223632069194, -1.33587449324382) )
71+
( (3.61123981135044, -1.33597274791457), (3.61223981135044, -1.33587274791457) )
72+
( (3.61124330200895, -1.33597100258532), (3.6122433020089497, -1.33587100258532) )
73+
( (3.61124679266745, -1.33596925725607), (3.6122467926674497, -1.33586925725607) )
74+
( (3.61125028332595, -1.33596751192682), (3.6122502833259498, -1.33586751192682) )
75+
( (3.61125377398446, -1.33596576659756), (3.61225377398446, -1.33586576659756) )
76+
( (3.61125726464296, -1.33596402126831), (3.61225726464296, -1.33586402126831) )
77+
( (3.61126075530147, -1.33596227593906), (3.61226075530147, -1.33586227593906) )
78+
( (3.61126424595997, -1.33596053060981), (3.61226424595997, -1.33586053060981) )
79+
( (3.61126773661847, -1.33595878528056), (3.61226773661847, -1.33585878528056) )
80+
( (3.61127122727698, -1.3359570399513), (3.6122712272769797, -1.3358570399513001) )
81+
( (3.61127471793548, -1.33595529462205), (3.6122747179354797, -1.33585529462205) )
82+
( (3.61127820859399, -1.3359535492928), (3.61227820859399, -1.3358535492928) )
83+
\.
84+
85+
CREATE OR REPLACE FUNCTION qnodes(q text) RETURNS text
86+
LANGUAGE 'plpgsql' AS
87+
$$
88+
DECLARE
89+
exp TEXT;
90+
mat TEXT[];
91+
ret TEXT[];
92+
BEGIN
93+
FOR exp IN EXECUTE 'EXPLAIN ' || q
94+
LOOP
95+
--RAISE NOTICE 'EXP: %', exp;
96+
mat := regexp_matches(exp, ' *(?:-> *)?(.*Scan)');
97+
--RAISE NOTICE 'MAT: %', mat;
98+
IF mat IS NOT NULL THEN
99+
ret := array_append(ret, mat[1]);
100+
END IF;
101+
--RAISE NOTICE 'RET: %', ret;
102+
END LOOP;
103+
RETURN array_to_string(ret,',');
104+
END;
105+
$$;
106+
107+
CREATE INDEX test_boxes_idx ON test_boxes USING brin (b) WITH (pages_per_range = 16);
108+
109+
set enable_indexscan = off;
110+
set enable_bitmapscan = off;
111+
set enable_seqscan = on;
112+
113+
SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )''');
114+
SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
115+
116+
SELECT 'scan_seq', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )''');
117+
SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
118+
119+
set enable_indexscan = off;
120+
set enable_bitmapscan = on;
121+
set enable_seqscan = off;
122+
123+
SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b <@ sbox ''( (10d,10d), (20d,20d) )''');
124+
SELECT * FROM test_boxes WHERE b <@ sbox '( (10d,10d), (20d,20d) )';
125+
126+
SELECT 'scan_idx', qnodes('SELECT * FROM test_boxes WHERE b && sbox ''( (10d,10d), (20d,20d) )''');
127+
SELECT * FROM test_boxes WHERE b && sbox '( (10d,10d), (20d,20d) )';
128+
129+
---- cleanup
130+
DROP INDEX brin_sbox;
131+
DROP TABLE test_boxes;
132+
DROP FUNCTION qnodes(text);
133+
134+
set enable_indexscan = on;
135+
set enable_bitmapscan = on;
136+
set enable_seqscan = on;

0 commit comments

Comments
 (0)