mirror of https://github.com/postgres/postgres
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
365 lines
5.5 KiB
365 lines
5.5 KiB
set enable_seqscan=off;
|
|
CREATE TABLE test_float4 (
|
|
i float4
|
|
);
|
|
INSERT INTO test_float4 VALUES (-2),(-1),(0),(1),(2),(3);
|
|
CREATE INDEX idx_float4 ON test_float4 USING gin (i);
|
|
SELECT * FROM test_float4 WHERE i<1::float4 ORDER BY i;
|
|
i
|
|
----
|
|
-2
|
|
-1
|
|
0
|
|
(3 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<=1::float4 ORDER BY i;
|
|
i
|
|
----
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
(4 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i=1::float4 ORDER BY i;
|
|
i
|
|
---
|
|
1
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i>=1::float4 ORDER BY i;
|
|
i
|
|
---
|
|
1
|
|
2
|
|
3
|
|
(3 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i>1::float4 ORDER BY i;
|
|
i
|
|
---
|
|
2
|
|
3
|
|
(2 rows)
|
|
|
|
explain (costs off)
|
|
SELECT * FROM test_float4 WHERE i<1::float8 ORDER BY i;
|
|
QUERY PLAN
|
|
-------------------------------------------------------
|
|
Sort
|
|
Sort Key: i
|
|
-> Bitmap Heap Scan on test_float4
|
|
Recheck Cond: (i < '1'::double precision)
|
|
-> Bitmap Index Scan on idx_float4
|
|
Index Cond: (i < '1'::double precision)
|
|
(6 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<1::float8 ORDER BY i;
|
|
i
|
|
----
|
|
-2
|
|
-1
|
|
0
|
|
(3 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<=1::float8 ORDER BY i;
|
|
i
|
|
----
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
(4 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i=1::float8 ORDER BY i;
|
|
i
|
|
---
|
|
1
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i>=1::float8 ORDER BY i;
|
|
i
|
|
---
|
|
1
|
|
2
|
|
3
|
|
(3 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i>1::float8 ORDER BY i;
|
|
i
|
|
---
|
|
2
|
|
3
|
|
(2 rows)
|
|
|
|
-- Check endpoint and out-of-range cases
|
|
INSERT INTO test_float4 VALUES ('NaN'), ('Inf'), ('-Inf');
|
|
SELECT gin_clean_pending_list('idx_float4');
|
|
gin_clean_pending_list
|
|
------------------------
|
|
1
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i<'-Inf'::float8 ORDER BY i;
|
|
i
|
|
---
|
|
(0 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<='-Inf'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i='-Inf'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i>='-Inf'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
NaN
|
|
(9 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i>'-Inf'::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
NaN
|
|
(8 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<'Inf'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
2
|
|
3
|
|
(7 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<='Inf'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
(8 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i='Inf'::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
Infinity
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i>='Inf'::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
Infinity
|
|
NaN
|
|
(2 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i>'Inf'::float8 ORDER BY i;
|
|
i
|
|
-----
|
|
NaN
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i<'1e300'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
2
|
|
3
|
|
(7 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<='1e300'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
2
|
|
3
|
|
(7 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i='1e300'::float8 ORDER BY i;
|
|
i
|
|
---
|
|
(0 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i>='1e300'::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
Infinity
|
|
NaN
|
|
(2 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i>'1e300'::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
Infinity
|
|
NaN
|
|
(2 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<'NaN'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
(8 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i<='NaN'::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
NaN
|
|
(9 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i='NaN'::float8 ORDER BY i;
|
|
i
|
|
-----
|
|
NaN
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i>='NaN'::float8 ORDER BY i;
|
|
i
|
|
-----
|
|
NaN
|
|
(1 row)
|
|
|
|
SELECT * FROM test_float4 WHERE i>'NaN'::float8 ORDER BY i;
|
|
i
|
|
---
|
|
(0 rows)
|
|
|
|
-- Check rounding cases
|
|
-- 1e-300 rounds to 0 for float4 but not for float8
|
|
SELECT * FROM test_float4 WHERE i < -1e-300::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
(3 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i <= -1e-300::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
(3 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i = -1e-300::float8 ORDER BY i;
|
|
i
|
|
---
|
|
(0 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i > -1e-300::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
0
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
NaN
|
|
(6 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i >= -1e-300::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
0
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
NaN
|
|
(6 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i < 1e-300::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
(4 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i <= 1e-300::float8 ORDER BY i;
|
|
i
|
|
-----------
|
|
-Infinity
|
|
-2
|
|
-1
|
|
0
|
|
(4 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i = 1e-300::float8 ORDER BY i;
|
|
i
|
|
---
|
|
(0 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i > 1e-300::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
NaN
|
|
(5 rows)
|
|
|
|
SELECT * FROM test_float4 WHERE i >= 1e-300::float8 ORDER BY i;
|
|
i
|
|
----------
|
|
1
|
|
2
|
|
3
|
|
Infinity
|
|
NaN
|
|
(5 rows)
|
|
|
|
|