mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-31 10:37:23 +02:00
If autovacuum comes along just after we fill table test_seg with
some data, it will update the stats to the point where we prefer
a plain indexscan over a bitmap scan, breaking the expected
output (as well as the point of the test case). To fix, just
force a bitmap scan to be chosen here.
This has evidently been wrong since commit de1d042f5
. It's not
clear why we just recently saw any buildfarm failures due to it;
but prairiedog has failed twice on this test in the past week.
Hence, backpatch to v11 where this test case came in.
1269 lines
19 KiB
Plaintext
1269 lines
19 KiB
Plaintext
--
|
|
-- Test seg datatype
|
|
--
|
|
CREATE EXTENSION seg;
|
|
-- Check whether any of our opclasses fail amvalidate
|
|
SELECT amname, opcname
|
|
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
|
|
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
|
|
amname | opcname
|
|
--------+---------
|
|
(0 rows)
|
|
|
|
--
|
|
-- testing the input and output functions
|
|
--
|
|
-- Any number
|
|
SELECT '1'::seg AS seg;
|
|
seg
|
|
-----
|
|
1
|
|
(1 row)
|
|
|
|
SELECT '-1'::seg AS seg;
|
|
seg
|
|
-----
|
|
-1
|
|
(1 row)
|
|
|
|
SELECT '1.0'::seg AS seg;
|
|
seg
|
|
-----
|
|
1.0
|
|
(1 row)
|
|
|
|
SELECT '-1.0'::seg AS seg;
|
|
seg
|
|
------
|
|
-1.0
|
|
(1 row)
|
|
|
|
SELECT '1e7'::seg AS seg;
|
|
seg
|
|
-------
|
|
1e+07
|
|
(1 row)
|
|
|
|
SELECT '-1e7'::seg AS seg;
|
|
seg
|
|
--------
|
|
-1e+07
|
|
(1 row)
|
|
|
|
SELECT '1.0e7'::seg AS seg;
|
|
seg
|
|
---------
|
|
1.0e+07
|
|
(1 row)
|
|
|
|
SELECT '-1.0e7'::seg AS seg;
|
|
seg
|
|
----------
|
|
-1.0e+07
|
|
(1 row)
|
|
|
|
SELECT '1e+7'::seg AS seg;
|
|
seg
|
|
-------
|
|
1e+07
|
|
(1 row)
|
|
|
|
SELECT '-1e+7'::seg AS seg;
|
|
seg
|
|
--------
|
|
-1e+07
|
|
(1 row)
|
|
|
|
SELECT '1.0e+7'::seg AS seg;
|
|
seg
|
|
---------
|
|
1.0e+07
|
|
(1 row)
|
|
|
|
SELECT '-1.0e+7'::seg AS seg;
|
|
seg
|
|
----------
|
|
-1.0e+07
|
|
(1 row)
|
|
|
|
SELECT '1e-7'::seg AS seg;
|
|
seg
|
|
-------
|
|
1e-07
|
|
(1 row)
|
|
|
|
SELECT '-1e-7'::seg AS seg;
|
|
seg
|
|
--------
|
|
-1e-07
|
|
(1 row)
|
|
|
|
SELECT '1.0e-7'::seg AS seg;
|
|
seg
|
|
---------
|
|
1.0e-07
|
|
(1 row)
|
|
|
|
SELECT '-1.0e-7'::seg AS seg;
|
|
seg
|
|
----------
|
|
-1.0e-07
|
|
(1 row)
|
|
|
|
SELECT '2e-6'::seg AS seg;
|
|
seg
|
|
-------
|
|
2e-06
|
|
(1 row)
|
|
|
|
SELECT '2e-5'::seg AS seg;
|
|
seg
|
|
-------
|
|
2e-05
|
|
(1 row)
|
|
|
|
SELECT '2e-4'::seg AS seg;
|
|
seg
|
|
--------
|
|
0.0002
|
|
(1 row)
|
|
|
|
SELECT '2e-3'::seg AS seg;
|
|
seg
|
|
-------
|
|
0.002
|
|
(1 row)
|
|
|
|
SELECT '2e-2'::seg AS seg;
|
|
seg
|
|
------
|
|
0.02
|
|
(1 row)
|
|
|
|
SELECT '2e-1'::seg AS seg;
|
|
seg
|
|
-----
|
|
0.2
|
|
(1 row)
|
|
|
|
SELECT '2e-0'::seg AS seg;
|
|
seg
|
|
-----
|
|
2
|
|
(1 row)
|
|
|
|
SELECT '2e+0'::seg AS seg;
|
|
seg
|
|
-----
|
|
2
|
|
(1 row)
|
|
|
|
SELECT '2e+1'::seg AS seg;
|
|
seg
|
|
-----
|
|
2e1
|
|
(1 row)
|
|
|
|
SELECT '2e+2'::seg AS seg;
|
|
seg
|
|
-----
|
|
2e2
|
|
(1 row)
|
|
|
|
SELECT '2e+3'::seg AS seg;
|
|
seg
|
|
-----
|
|
2e3
|
|
(1 row)
|
|
|
|
SELECT '2e+4'::seg AS seg;
|
|
seg
|
|
-----
|
|
2e4
|
|
(1 row)
|
|
|
|
SELECT '2e+5'::seg AS seg;
|
|
seg
|
|
-------
|
|
2e+05
|
|
(1 row)
|
|
|
|
SELECT '2e+6'::seg AS seg;
|
|
seg
|
|
-------
|
|
2e+06
|
|
(1 row)
|
|
|
|
-- Significant digits preserved
|
|
SELECT '1'::seg AS seg;
|
|
seg
|
|
-----
|
|
1
|
|
(1 row)
|
|
|
|
SELECT '1.0'::seg AS seg;
|
|
seg
|
|
-----
|
|
1.0
|
|
(1 row)
|
|
|
|
SELECT '1.00'::seg AS seg;
|
|
seg
|
|
------
|
|
1.00
|
|
(1 row)
|
|
|
|
SELECT '1.000'::seg AS seg;
|
|
seg
|
|
-------
|
|
1.000
|
|
(1 row)
|
|
|
|
SELECT '1.0000'::seg AS seg;
|
|
seg
|
|
--------
|
|
1.0000
|
|
(1 row)
|
|
|
|
SELECT '1.00000'::seg AS seg;
|
|
seg
|
|
---------
|
|
1.00000
|
|
(1 row)
|
|
|
|
SELECT '1.000000'::seg AS seg;
|
|
seg
|
|
---------
|
|
1.00000
|
|
(1 row)
|
|
|
|
SELECT '0.000000120'::seg AS seg;
|
|
seg
|
|
----------
|
|
1.20e-07
|
|
(1 row)
|
|
|
|
SELECT '3.400e5'::seg AS seg;
|
|
seg
|
|
-----------
|
|
3.400e+05
|
|
(1 row)
|
|
|
|
-- Digits truncated
|
|
SELECT '12.34567890123456'::seg AS seg;
|
|
seg
|
|
---------
|
|
12.3457
|
|
(1 row)
|
|
|
|
-- Numbers with certainty indicators
|
|
SELECT '~6.5'::seg AS seg;
|
|
seg
|
|
------
|
|
~6.5
|
|
(1 row)
|
|
|
|
SELECT '<6.5'::seg AS seg;
|
|
seg
|
|
------
|
|
<6.5
|
|
(1 row)
|
|
|
|
SELECT '>6.5'::seg AS seg;
|
|
seg
|
|
------
|
|
>6.5
|
|
(1 row)
|
|
|
|
SELECT '~ 6.5'::seg AS seg;
|
|
seg
|
|
------
|
|
~6.5
|
|
(1 row)
|
|
|
|
SELECT '< 6.5'::seg AS seg;
|
|
seg
|
|
------
|
|
<6.5
|
|
(1 row)
|
|
|
|
SELECT '> 6.5'::seg AS seg;
|
|
seg
|
|
------
|
|
>6.5
|
|
(1 row)
|
|
|
|
-- Open intervals
|
|
SELECT '0..'::seg AS seg;
|
|
seg
|
|
------
|
|
0 ..
|
|
(1 row)
|
|
|
|
SELECT '0...'::seg AS seg;
|
|
seg
|
|
------
|
|
0 ..
|
|
(1 row)
|
|
|
|
SELECT '0 ..'::seg AS seg;
|
|
seg
|
|
------
|
|
0 ..
|
|
(1 row)
|
|
|
|
SELECT '0 ...'::seg AS seg;
|
|
seg
|
|
------
|
|
0 ..
|
|
(1 row)
|
|
|
|
SELECT '..0'::seg AS seg;
|
|
seg
|
|
------
|
|
.. 0
|
|
(1 row)
|
|
|
|
SELECT '...0'::seg AS seg;
|
|
seg
|
|
------
|
|
.. 0
|
|
(1 row)
|
|
|
|
SELECT '.. 0'::seg AS seg;
|
|
seg
|
|
------
|
|
.. 0
|
|
(1 row)
|
|
|
|
SELECT '... 0'::seg AS seg;
|
|
seg
|
|
------
|
|
.. 0
|
|
(1 row)
|
|
|
|
-- Finite intervals
|
|
SELECT '0 .. 1'::seg AS seg;
|
|
seg
|
|
--------
|
|
0 .. 1
|
|
(1 row)
|
|
|
|
SELECT '-1 .. 0'::seg AS seg;
|
|
seg
|
|
---------
|
|
-1 .. 0
|
|
(1 row)
|
|
|
|
SELECT '-1 .. 1'::seg AS seg;
|
|
seg
|
|
---------
|
|
-1 .. 1
|
|
(1 row)
|
|
|
|
-- (+/-) intervals
|
|
SELECT '0(+-)1'::seg AS seg;
|
|
seg
|
|
---------
|
|
-1 .. 1
|
|
(1 row)
|
|
|
|
SELECT '0(+-)1.0'::seg AS seg;
|
|
seg
|
|
-------------
|
|
-1.0 .. 1.0
|
|
(1 row)
|
|
|
|
SELECT '1.0(+-)0.005'::seg AS seg;
|
|
seg
|
|
----------------
|
|
0.995 .. 1.005
|
|
(1 row)
|
|
|
|
SELECT '101(+-)1'::seg AS seg;
|
|
seg
|
|
------------------
|
|
1.00e2 .. 1.02e2
|
|
(1 row)
|
|
|
|
-- incorrect number of significant digits in 99.0:
|
|
SELECT '100(+-)1'::seg AS seg;
|
|
seg
|
|
----------------
|
|
99.0 .. 1.01e2
|
|
(1 row)
|
|
|
|
-- invalid input
|
|
SELECT ''::seg AS seg;
|
|
ERROR: bad seg representation
|
|
LINE 1: SELECT ''::seg AS seg;
|
|
^
|
|
DETAIL: syntax error at end of input
|
|
SELECT 'ABC'::seg AS seg;
|
|
ERROR: bad seg representation
|
|
LINE 1: SELECT 'ABC'::seg AS seg;
|
|
^
|
|
DETAIL: syntax error at or near "A"
|
|
SELECT '1ABC'::seg AS seg;
|
|
ERROR: bad seg representation
|
|
LINE 1: SELECT '1ABC'::seg AS seg;
|
|
^
|
|
DETAIL: syntax error at or near "A"
|
|
SELECT '1.'::seg AS seg;
|
|
ERROR: bad seg representation
|
|
LINE 1: SELECT '1.'::seg AS seg;
|
|
^
|
|
DETAIL: syntax error at or near "."
|
|
SELECT '1.....'::seg AS seg;
|
|
ERROR: bad seg representation
|
|
LINE 1: SELECT '1.....'::seg AS seg;
|
|
^
|
|
DETAIL: syntax error at or near ".."
|
|
SELECT '.1'::seg AS seg;
|
|
ERROR: bad seg representation
|
|
LINE 1: SELECT '.1'::seg AS seg;
|
|
^
|
|
DETAIL: syntax error at or near "."
|
|
SELECT '1..2.'::seg AS seg;
|
|
ERROR: bad seg representation
|
|
LINE 1: SELECT '1..2.'::seg AS seg;
|
|
^
|
|
DETAIL: syntax error at or near "."
|
|
SELECT '1 e7'::seg AS seg;
|
|
ERROR: bad seg representation
|
|
LINE 1: SELECT '1 e7'::seg AS seg;
|
|
^
|
|
DETAIL: syntax error at or near "e"
|
|
SELECT '1e700'::seg AS seg;
|
|
ERROR: "1e700" is out of range for type real
|
|
LINE 1: SELECT '1e700'::seg AS seg;
|
|
^
|
|
--
|
|
-- testing the operators
|
|
--
|
|
-- equality/inequality:
|
|
--
|
|
SELECT '24 .. 33.20'::seg = '24 .. 33.20'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '24 .. 33.20'::seg = '24 .. 33.21'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '24 .. 33.20'::seg != '24 .. 33.20'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '24 .. 33.20'::seg != '24 .. 33.21'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
-- overlap
|
|
--
|
|
SELECT '1'::seg && '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '1'::seg && '2'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 ..'::seg && '0 ..'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg && '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '..0'::seg && '0..'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '-1 .. 0.1'::seg && '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '-1 .. 0'::seg && '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '-1 .. -0.0001'::seg && '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 ..'::seg && '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg && '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg && '2'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 2'::seg && '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '1'::seg && '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '2'::seg && '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '1'::seg && '0 .. 2'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
-- overlap on the left
|
|
--
|
|
SELECT '1'::seg &< '0'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '1'::seg &< '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '1'::seg &< '2'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &< '0'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &< '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &< '2'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &< '0 .. 0.5'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &< '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &< '0 .. 2'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &< '1 .. 2'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &< '2 .. 3'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
-- overlap on the right
|
|
--
|
|
SELECT '0'::seg &> '1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '1'::seg &> '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '2'::seg &> '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0'::seg &> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '1'::seg &> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '2'::seg &> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 0.5'::seg &> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg &> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 2'::seg &> '0 .. 2'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '1 .. 2'::seg &> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '2 .. 3'::seg &> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
-- left
|
|
--
|
|
SELECT '1'::seg << '0'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '1'::seg << '1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '1'::seg << '2'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg << '0'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg << '1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg << '2'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg << '0 .. 0.5'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg << '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg << '0 .. 2'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg << '1 .. 2'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg << '2 .. 3'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
-- right
|
|
--
|
|
SELECT '0'::seg >> '1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '1'::seg >> '1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '2'::seg >> '1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0'::seg >> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '1'::seg >> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '2'::seg >> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. 0.5'::seg >> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 1'::seg >> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0 .. 2'::seg >> '0 .. 2'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '1 .. 2'::seg >> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '2 .. 3'::seg >> '0 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
-- "contained in" (the left value belongs within the interval specified in the right value):
|
|
--
|
|
SELECT '0'::seg <@ '0'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0'::seg <@ '0 ..'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0'::seg <@ '.. 0'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0'::seg <@ '-1 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0'::seg <@ '-1 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '-1'::seg <@ '-1 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '1'::seg <@ '-1 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '-1 .. 1'::seg <@ '-1 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
-- "contains" (the left value contains the interval specified in the right value):
|
|
--
|
|
SELECT '0'::seg @> '0'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '0 .. '::seg <@ '0'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '.. 0'::seg <@ '0'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '-1 .. 1'::seg <@ '0'::seg AS bool;
|
|
bool
|
|
------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT '0'::seg <@ '-1 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '-1'::seg <@ '-1 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT '1'::seg <@ '-1 .. 1'::seg AS bool;
|
|
bool
|
|
------
|
|
t
|
|
(1 row)
|
|
|
|
-- Load some example data and build the index
|
|
--
|
|
CREATE TABLE test_seg (s seg);
|
|
\copy test_seg from 'data/test_seg.data'
|
|
CREATE INDEX test_seg_ix ON test_seg USING gist (s);
|
|
SET enable_indexscan = false;
|
|
EXPLAIN (COSTS OFF)
|
|
SELECT count(*) FROM test_seg WHERE s @> '11..11.3';
|
|
QUERY PLAN
|
|
-------------------------------------------------------
|
|
Aggregate
|
|
-> Bitmap Heap Scan on test_seg
|
|
Recheck Cond: (s @> '1.1e1 .. 11.3'::seg)
|
|
-> Bitmap Index Scan on test_seg_ix
|
|
Index Cond: (s @> '1.1e1 .. 11.3'::seg)
|
|
(5 rows)
|
|
|
|
SELECT count(*) FROM test_seg WHERE s @> '11..11.3';
|
|
count
|
|
-------
|
|
143
|
|
(1 row)
|
|
|
|
RESET enable_indexscan;
|
|
SET enable_bitmapscan = false;
|
|
EXPLAIN (COSTS OFF)
|
|
SELECT count(*) FROM test_seg WHERE s @> '11..11.3';
|
|
QUERY PLAN
|
|
-----------------------------------------------------
|
|
Aggregate
|
|
-> Index Only Scan using test_seg_ix on test_seg
|
|
Index Cond: (s @> '1.1e1 .. 11.3'::seg)
|
|
(3 rows)
|
|
|
|
SELECT count(*) FROM test_seg WHERE s @> '11..11.3';
|
|
count
|
|
-------
|
|
143
|
|
(1 row)
|
|
|
|
RESET enable_bitmapscan;
|
|
-- Test sorting
|
|
SELECT * FROM test_seg WHERE s @> '11..11.3' GROUP BY s;
|
|
s
|
|
-----------------
|
|
.. 4.0e1
|
|
.. >8.2e1
|
|
.. 9.0e1
|
|
<1.0 .. >13.0
|
|
1.3 .. 12.0
|
|
2.0 .. 11.5
|
|
2.1 .. 11.8
|
|
<2.3 ..
|
|
>2.3 ..
|
|
2.4 .. 11.3
|
|
2.5 .. 11.5
|
|
2.5 .. 11.8
|
|
2.6 ..
|
|
2.7 .. 12.0
|
|
<3.0 ..
|
|
3 .. 5.8e1
|
|
3.1 .. 11.5
|
|
3.5 .. 11.5
|
|
3.5 .. 12.2
|
|
<4.0 .. >1.2e1
|
|
<4.0 ..
|
|
4 .. 1.2e1
|
|
4.0 .. 11.7
|
|
4.0 .. 12.5
|
|
4.0 .. 13.0
|
|
4.0 .. 6.0e1
|
|
4.0 ..
|
|
4.2 .. 11.5
|
|
4.2 .. 11.7
|
|
<4.5 .. >1.2e1
|
|
4.5 .. 11.5
|
|
4.5 .. <1.2e1
|
|
4.5 .. >1.2e1
|
|
4.5 .. 12.5
|
|
4.5 .. 1.15e2
|
|
4.7 .. 11.8
|
|
4.8 .. 11.5
|
|
4.8 .. 11.6
|
|
4.8 .. 12.5
|
|
4.8 ..
|
|
4.9 .. >1.2e1
|
|
4.9 ..
|
|
5 .. 11.5
|
|
5 .. 1.2e1
|
|
5 .. 3.0e1
|
|
5.0 .. 11.4
|
|
5.0 .. 11.5
|
|
5.0 .. 11.6
|
|
5.0 .. 11.7
|
|
5.0 .. 12.0
|
|
5.0 .. >12.0
|
|
5.0 .. >1.2e1
|
|
5.2 .. 11.5
|
|
5.2 .. >1.2e1
|
|
5.25 .. >1.2e1
|
|
5.3 .. 11.5
|
|
5.3 .. 1.3e1
|
|
5.3 .. >9.0e1
|
|
5.3 ..
|
|
5.4 ..
|
|
5.5 .. 11.5
|
|
5.5 .. 11.7
|
|
5.5 .. 1.2e1
|
|
5.5 .. >1.2e1
|
|
5.5 .. 12.5
|
|
5.5 .. 13.5
|
|
5.5 ..
|
|
>5.5 ..
|
|
5.7 ..
|
|
5.9 ..
|
|
6 .. 11.5
|
|
6 .. >1.2e1
|
|
6.0 .. 11.5
|
|
6.0 .. 1.3e1
|
|
>6.0 .. <11.5
|
|
6.1 .. >1.2e1
|
|
6.1 ..
|
|
6.2 .. >11.5
|
|
6.3 ..
|
|
6.5 .. 11.5
|
|
6.5 .. 12.0
|
|
6.5 .. >12.0
|
|
6.5 ..
|
|
6.6 ..
|
|
6.7 .. 11.5
|
|
6.7 ..
|
|
6.75 ..
|
|
6.8 ..
|
|
6.9 .. 12.2
|
|
6.9 .. >9.0e1
|
|
6.9 ..
|
|
<7.0 .. >11.5
|
|
7.0 .. 11.5
|
|
7.0 .. >11.5
|
|
7.0 ..
|
|
>7.15 ..
|
|
7.2 .. 13.5
|
|
7.3 .. >9.0e1
|
|
7.3 ..
|
|
>7.3 ..
|
|
7.4 .. 12.1
|
|
7.4 ..
|
|
7.5 .. 11.5
|
|
7.5 .. 12.0
|
|
7.5 ..
|
|
7.7 .. 11.5
|
|
7.7 ..
|
|
7.75 ..
|
|
8.0 .. 11.7
|
|
8.0 .. 12.0
|
|
8.0 .. >13.0
|
|
8.2 ..
|
|
8.3 ..
|
|
8.5 .. >11.5
|
|
8.5 .. 12.5
|
|
8.5 ..
|
|
8.6 .. >9.9e1
|
|
8.7 .. 11.3
|
|
8.7 .. 11.7
|
|
8.9 .. 11.5
|
|
9 .. >1.2e1
|
|
9.0 .. 11.3
|
|
9.0 .. 11.5
|
|
9.0 .. 1.2e1
|
|
9.0 ..
|
|
9.2 .. 1.2e1
|
|
9.4 .. 12.2
|
|
<9.5 .. 1.2e1
|
|
<9.5 .. >12.2
|
|
9.5 ..
|
|
9.6 .. 11.5
|
|
9.7 .. 11.5
|
|
9.7 .. >1.2e1
|
|
9.8 .. >12.5
|
|
<1.0e1 .. >11.6
|
|
10.0 .. 11.5
|
|
10.0 .. 12.5
|
|
10.0 .. >12.5
|
|
10.2 .. 11.8
|
|
<10.5 .. 11.5
|
|
10.5 .. 11.5
|
|
10.5 .. <13.5
|
|
10.7 .. 12.3
|
|
(143 rows)
|
|
|
|
-- Test functions
|
|
SELECT seg_lower(s), seg_center(s), seg_upper(s)
|
|
FROM test_seg WHERE s @> '11.2..11.3' OR s IS NULL ORDER BY s;
|
|
seg_lower | seg_center | seg_upper
|
|
-----------+------------+-----------
|
|
-Infinity | -Infinity | 40
|
|
-Infinity | -Infinity | 82
|
|
-Infinity | -Infinity | 90
|
|
1 | 7 | 13
|
|
1.3 | 6.65 | 12
|
|
2 | 6.75 | 11.5
|
|
2.1 | 6.95 | 11.8
|
|
2.3 | Infinity | Infinity
|
|
2.3 | Infinity | Infinity
|
|
2.4 | 6.8500004 | 11.3
|
|
2.5 | 7 | 11.5
|
|
2.5 | 7.15 | 11.8
|
|
2.6 | Infinity | Infinity
|
|
2.7 | 7.35 | 12
|
|
3 | Infinity | Infinity
|
|
3 | 30.5 | 58
|
|
3.1 | 7.3 | 11.5
|
|
3.5 | 7.5 | 11.5
|
|
3.5 | 7.85 | 12.2
|
|
4 | 8 | 12
|
|
4 | Infinity | Infinity
|
|
4 | 8 | 12
|
|
4 | 7.85 | 11.7
|
|
4 | 8.25 | 12.5
|
|
4 | 8.5 | 13
|
|
4 | 32 | 60
|
|
4 | Infinity | Infinity
|
|
4.2 | 7.85 | 11.5
|
|
4.2 | 7.95 | 11.7
|
|
4.5 | 8.25 | 12
|
|
4.5 | 8 | 11.5
|
|
4.5 | 8.25 | 12
|
|
4.5 | 8.25 | 12
|
|
4.5 | 8.5 | 12.5
|
|
4.5 | 59.75 | 115
|
|
4.7 | 8.25 | 11.8
|
|
4.8 | 8.15 | 11.5
|
|
4.8 | 8.200001 | 11.6
|
|
4.8 | 8.65 | 12.5
|
|
4.8 | Infinity | Infinity
|
|
4.9 | 8.45 | 12
|
|
4.9 | Infinity | Infinity
|
|
5 | 8.25 | 11.5
|
|
5 | 8.5 | 12
|
|
5 | 17.5 | 30
|
|
5 | 8.2 | 11.4
|
|
5 | 8.25 | 11.5
|
|
5 | 8.3 | 11.6
|
|
5 | 8.35 | 11.7
|
|
5 | 8.5 | 12
|
|
5 | 8.5 | 12
|
|
5 | 8.5 | 12
|
|
5.2 | 8.35 | 11.5
|
|
5.2 | 8.6 | 12
|
|
5.25 | 8.625 | 12
|
|
5.3 | 8.4 | 11.5
|
|
5.3 | 9.15 | 13
|
|
5.3 | 47.65 | 90
|
|
5.3 | Infinity | Infinity
|
|
5.4 | Infinity | Infinity
|
|
5.5 | 8.5 | 11.5
|
|
5.5 | 8.6 | 11.7
|
|
5.5 | 8.75 | 12
|
|
5.5 | 8.75 | 12
|
|
5.5 | 9 | 12.5
|
|
5.5 | 9.5 | 13.5
|
|
5.5 | Infinity | Infinity
|
|
5.5 | Infinity | Infinity
|
|
5.7 | Infinity | Infinity
|
|
5.9 | Infinity | Infinity
|
|
6 | 8.75 | 11.5
|
|
6 | 9 | 12
|
|
6 | 8.75 | 11.5
|
|
6 | 9.5 | 13
|
|
6 | 8.75 | 11.5
|
|
6.1 | 9.05 | 12
|
|
6.1 | Infinity | Infinity
|
|
6.2 | 8.85 | 11.5
|
|
6.3 | Infinity | Infinity
|
|
6.5 | 9 | 11.5
|
|
6.5 | 9.25 | 12
|
|
6.5 | 9.25 | 12
|
|
6.5 | Infinity | Infinity
|
|
6.6 | Infinity | Infinity
|
|
6.7 | 9.1 | 11.5
|
|
6.7 | Infinity | Infinity
|
|
6.75 | Infinity | Infinity
|
|
6.8 | Infinity | Infinity
|
|
6.9 | 9.55 | 12.2
|
|
6.9 | 48.45 | 90
|
|
6.9 | Infinity | Infinity
|
|
7 | 9.25 | 11.5
|
|
7 | 9.25 | 11.5
|
|
7 | 9.25 | 11.5
|
|
7 | Infinity | Infinity
|
|
7.15 | Infinity | Infinity
|
|
7.2 | 10.35 | 13.5
|
|
7.3 | 48.65 | 90
|
|
7.3 | Infinity | Infinity
|
|
7.3 | Infinity | Infinity
|
|
7.4 | 9.75 | 12.1
|
|
7.4 | Infinity | Infinity
|
|
7.5 | 9.5 | 11.5
|
|
7.5 | 9.75 | 12
|
|
7.5 | Infinity | Infinity
|
|
7.7 | 9.6 | 11.5
|
|
7.7 | Infinity | Infinity
|
|
7.75 | Infinity | Infinity
|
|
8 | 9.85 | 11.7
|
|
8 | 10 | 12
|
|
8 | 10.5 | 13
|
|
8.2 | Infinity | Infinity
|
|
8.3 | Infinity | Infinity
|
|
8.5 | 10 | 11.5
|
|
8.5 | 10.5 | 12.5
|
|
8.5 | Infinity | Infinity
|
|
8.6 | 53.8 | 99
|
|
8.7 | 10 | 11.3
|
|
8.7 | 10.2 | 11.7
|
|
8.9 | 10.2 | 11.5
|
|
9 | 10.5 | 12
|
|
9 | 10.15 | 11.3
|
|
9 | 10.25 | 11.5
|
|
9 | 10.5 | 12
|
|
9 | Infinity | Infinity
|
|
9.2 | 10.6 | 12
|
|
9.4 | 10.799999 | 12.2
|
|
9.5 | 10.75 | 12
|
|
9.5 | 10.85 | 12.2
|
|
9.5 | Infinity | Infinity
|
|
9.6 | 10.55 | 11.5
|
|
9.7 | 10.6 | 11.5
|
|
9.7 | 10.85 | 12
|
|
9.8 | 11.15 | 12.5
|
|
10 | 10.8 | 11.6
|
|
10 | 10.75 | 11.5
|
|
10 | 11.25 | 12.5
|
|
10 | 11.25 | 12.5
|
|
10.2 | 11 | 11.8
|
|
10.5 | 11 | 11.5
|
|
10.5 | 11 | 11.5
|
|
10.5 | 12 | 13.5
|
|
10.7 | 11.5 | 12.3
|
|
| |
|
|
(144 rows)
|
|
|