Extend the geometric regression test cases a little.

Add another edge-case value to "point_tbl", and add a test for
the line(point, point) function.

Some of the behaviors exposed here are wrong, but the idea of
committing this separately is to memorialize what we were getting,
and to allow easier inspection of the behavior changes caused by
upcoming patches.

Kyotaro Horiguchi (line() test added by me)

Discussion: https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com
This commit is contained in:
Tom Lane 2020-11-21 16:34:22 -05:00
parent 878f3a19c6
commit a45272b25d
5 changed files with 453 additions and 83 deletions

View File

@ -157,7 +157,7 @@ SELECT count(*) FROM point_tbl p WHERE p.f1 << '(0.0, 0.0)';
SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
count
-------
3
4
(1 row)
SELECT count(*) FROM point_tbl p WHERE p.f1 <^ '(0.0, 0.0)';
@ -169,7 +169,7 @@ SELECT count(*) FROM point_tbl p WHERE p.f1 <^ '(0.0, 0.0)';
SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
count
-------
4
5
(1 row)
SELECT count(*) FROM point_tbl p WHERE p.f1 ~= '(-5, -12)';
@ -188,10 +188,11 @@ SELECT * FROM point_tbl ORDER BY f1 <-> '0,1';
(10,10)
(-5,-12)
(5.1,34.5)
(Infinity,1e+300)
(1e+300,Infinity)
(NaN,NaN)
(10 rows)
(11 rows)
SELECT * FROM point_tbl WHERE f1 IS NULL;
f1
@ -202,16 +203,17 @@ SELECT * FROM point_tbl WHERE f1 IS NULL;
SELECT * FROM point_tbl WHERE f1 IS NOT NULL ORDER BY f1 <-> '0,1';
f1
-------------------
(1e-300,-1e-300)
(0,0)
(1e-300,-1e-300)
(-3,4)
(-10,0)
(10,10)
(-5,-12)
(5.1,34.5)
(1e+300,Infinity)
(Infinity,1e+300)
(NaN,NaN)
(9 rows)
(10 rows)
SELECT * FROM point_tbl WHERE f1 <@ '(-10,-10),(10,10)':: box ORDER BY f1 <-> '0,1';
f1
@ -464,7 +466,7 @@ SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
count
-------
3
4
(1 row)
EXPLAIN (COSTS OFF)
@ -494,7 +496,7 @@ SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
count
-------
4
5
(1 row)
EXPLAIN (COSTS OFF)
@ -530,10 +532,11 @@ SELECT * FROM point_tbl ORDER BY f1 <-> '0,1';
(10,10)
(-5,-12)
(5.1,34.5)
(Infinity,1e+300)
(1e+300,Infinity)
(NaN,NaN)
(10 rows)
(11 rows)
EXPLAIN (COSTS OFF)
SELECT * FROM point_tbl WHERE f1 IS NULL;
@ -568,9 +571,10 @@ SELECT * FROM point_tbl WHERE f1 IS NOT NULL ORDER BY f1 <-> '0,1';
(10,10)
(-5,-12)
(5.1,34.5)
(Infinity,1e+300)
(1e+300,Infinity)
(NaN,NaN)
(9 rows)
(10 rows)
EXPLAIN (COSTS OFF)
SELECT * FROM point_tbl WHERE f1 <@ '(-10,-10),(10,10)':: box ORDER BY f1 <-> '0,1';

View File

@ -120,6 +120,7 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(0,0) | (-5,-12) | 2.4
(0,0) | (1e-300,-1e-300) | 1.79769313486e+308
(0,0) | (1e+300,Infinity) | Infinity
(0,0) | (Infinity,1e+300) | 0
(0,0) | (NaN,NaN) | NaN
(0,0) | (10,10) | 1
(-10,0) | (0,0) | 0
@ -129,6 +130,7 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(-10,0) | (-5,-12) | -2.4
(-10,0) | (1e-300,-1e-300) | 0
(-10,0) | (1e+300,Infinity) | Infinity
(-10,0) | (Infinity,1e+300) | 0
(-10,0) | (NaN,NaN) | NaN
(-10,0) | (10,10) | 0.5
(-3,4) | (0,0) | -1.33333333333
@ -138,6 +140,7 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(-3,4) | (-5,-12) | 8
(-3,4) | (1e-300,-1e-300) | -1.33333333333
(-3,4) | (1e+300,Infinity) | Infinity
(-3,4) | (Infinity,1e+300) | 0
(-3,4) | (NaN,NaN) | NaN
(-3,4) | (10,10) | 0.461538461538
(5.1,34.5) | (0,0) | 6.76470588235
@ -147,6 +150,7 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(5.1,34.5) | (-5,-12) | 4.60396039604
(5.1,34.5) | (1e-300,-1e-300) | 6.76470588235
(5.1,34.5) | (1e+300,Infinity) | Infinity
(5.1,34.5) | (Infinity,1e+300) | 0
(5.1,34.5) | (NaN,NaN) | NaN
(5.1,34.5) | (10,10) | -5
(-5,-12) | (0,0) | 2.4
@ -156,6 +160,7 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(-5,-12) | (-5,-12) | 1.79769313486e+308
(-5,-12) | (1e-300,-1e-300) | 2.4
(-5,-12) | (1e+300,Infinity) | Infinity
(-5,-12) | (Infinity,1e+300) | 0
(-5,-12) | (NaN,NaN) | NaN
(-5,-12) | (10,10) | 1.46666666667
(1e-300,-1e-300) | (0,0) | 1.79769313486e+308
@ -165,6 +170,7 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(1e-300,-1e-300) | (-5,-12) | 2.4
(1e-300,-1e-300) | (1e-300,-1e-300) | 1.79769313486e+308
(1e-300,-1e-300) | (1e+300,Infinity) | Infinity
(1e-300,-1e-300) | (Infinity,1e+300) | 0
(1e-300,-1e-300) | (NaN,NaN) | NaN
(1e-300,-1e-300) | (10,10) | 1
(1e+300,Infinity) | (0,0) | Infinity
@ -174,8 +180,19 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(1e+300,Infinity) | (-5,-12) | Infinity
(1e+300,Infinity) | (1e-300,-1e-300) | Infinity
(1e+300,Infinity) | (1e+300,Infinity) | 1.79769313486e+308
(1e+300,Infinity) | (Infinity,1e+300) | NaN
(1e+300,Infinity) | (NaN,NaN) | NaN
(1e+300,Infinity) | (10,10) | Infinity
(Infinity,1e+300) | (0,0) | 0
(Infinity,1e+300) | (-10,0) | 0
(Infinity,1e+300) | (-3,4) | 0
(Infinity,1e+300) | (5.1,34.5) | 0
(Infinity,1e+300) | (-5,-12) | 0
(Infinity,1e+300) | (1e-300,-1e-300) | 0
(Infinity,1e+300) | (1e+300,Infinity) | NaN
(Infinity,1e+300) | (Infinity,1e+300) | 0
(Infinity,1e+300) | (NaN,NaN) | NaN
(Infinity,1e+300) | (10,10) | 0
(NaN,NaN) | (0,0) | NaN
(NaN,NaN) | (-10,0) | NaN
(NaN,NaN) | (-3,4) | NaN
@ -183,6 +200,7 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(NaN,NaN) | (-5,-12) | NaN
(NaN,NaN) | (1e-300,-1e-300) | NaN
(NaN,NaN) | (1e+300,Infinity) | NaN
(NaN,NaN) | (Infinity,1e+300) | NaN
(NaN,NaN) | (NaN,NaN) | NaN
(NaN,NaN) | (10,10) | NaN
(10,10) | (0,0) | 1
@ -192,14 +210,15 @@ SELECT p1.f1, p2.f1, slope(p1.f1, p2.f1) FROM POINT_TBL p1, POINT_TBL p2;
(10,10) | (-5,-12) | 1.46666666667
(10,10) | (1e-300,-1e-300) | 1
(10,10) | (1e+300,Infinity) | Infinity
(10,10) | (Infinity,1e+300) | 0
(10,10) | (NaN,NaN) | NaN
(10,10) | (10,10) | 1.79769313486e+308
(81 rows)
(100 rows)
-- Add point
SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
f1 | f1 | ?column?
-------------------+-------------------+-------------------
-------------------+-------------------+---------------------
(0,0) | (0,0) | (0,0)
(0,0) | (-10,0) | (-10,0)
(0,0) | (-3,4) | (-3,4)
@ -207,6 +226,7 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(0,0) | (-5,-12) | (-5,-12)
(0,0) | (1e-300,-1e-300) | (1e-300,-1e-300)
(0,0) | (1e+300,Infinity) | (1e+300,Infinity)
(0,0) | (Infinity,1e+300) | (Infinity,1e+300)
(0,0) | (NaN,NaN) | (NaN,NaN)
(0,0) | (10,10) | (10,10)
(-10,0) | (0,0) | (-10,0)
@ -216,6 +236,7 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(-10,0) | (-5,-12) | (-15,-12)
(-10,0) | (1e-300,-1e-300) | (-10,-1e-300)
(-10,0) | (1e+300,Infinity) | (1e+300,Infinity)
(-10,0) | (Infinity,1e+300) | (Infinity,1e+300)
(-10,0) | (NaN,NaN) | (NaN,NaN)
(-10,0) | (10,10) | (0,10)
(-3,4) | (0,0) | (-3,4)
@ -225,6 +246,7 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(-3,4) | (-5,-12) | (-8,-8)
(-3,4) | (1e-300,-1e-300) | (-3,4)
(-3,4) | (1e+300,Infinity) | (1e+300,Infinity)
(-3,4) | (Infinity,1e+300) | (Infinity,1e+300)
(-3,4) | (NaN,NaN) | (NaN,NaN)
(-3,4) | (10,10) | (7,14)
(5.1,34.5) | (0,0) | (5.1,34.5)
@ -234,6 +256,7 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(5.1,34.5) | (-5,-12) | (0.1,22.5)
(5.1,34.5) | (1e-300,-1e-300) | (5.1,34.5)
(5.1,34.5) | (1e+300,Infinity) | (1e+300,Infinity)
(5.1,34.5) | (Infinity,1e+300) | (Infinity,1e+300)
(5.1,34.5) | (NaN,NaN) | (NaN,NaN)
(5.1,34.5) | (10,10) | (15.1,44.5)
(-5,-12) | (0,0) | (-5,-12)
@ -243,6 +266,7 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(-5,-12) | (-5,-12) | (-10,-24)
(-5,-12) | (1e-300,-1e-300) | (-5,-12)
(-5,-12) | (1e+300,Infinity) | (1e+300,Infinity)
(-5,-12) | (Infinity,1e+300) | (Infinity,1e+300)
(-5,-12) | (NaN,NaN) | (NaN,NaN)
(-5,-12) | (10,10) | (5,-2)
(1e-300,-1e-300) | (0,0) | (1e-300,-1e-300)
@ -252,6 +276,7 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(1e-300,-1e-300) | (-5,-12) | (-5,-12)
(1e-300,-1e-300) | (1e-300,-1e-300) | (2e-300,-2e-300)
(1e-300,-1e-300) | (1e+300,Infinity) | (1e+300,Infinity)
(1e-300,-1e-300) | (Infinity,1e+300) | (Infinity,1e+300)
(1e-300,-1e-300) | (NaN,NaN) | (NaN,NaN)
(1e-300,-1e-300) | (10,10) | (10,10)
(1e+300,Infinity) | (0,0) | (1e+300,Infinity)
@ -261,8 +286,19 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(1e+300,Infinity) | (-5,-12) | (1e+300,Infinity)
(1e+300,Infinity) | (1e-300,-1e-300) | (1e+300,Infinity)
(1e+300,Infinity) | (1e+300,Infinity) | (2e+300,Infinity)
(1e+300,Infinity) | (Infinity,1e+300) | (Infinity,Infinity)
(1e+300,Infinity) | (NaN,NaN) | (NaN,NaN)
(1e+300,Infinity) | (10,10) | (1e+300,Infinity)
(Infinity,1e+300) | (0,0) | (Infinity,1e+300)
(Infinity,1e+300) | (-10,0) | (Infinity,1e+300)
(Infinity,1e+300) | (-3,4) | (Infinity,1e+300)
(Infinity,1e+300) | (5.1,34.5) | (Infinity,1e+300)
(Infinity,1e+300) | (-5,-12) | (Infinity,1e+300)
(Infinity,1e+300) | (1e-300,-1e-300) | (Infinity,1e+300)
(Infinity,1e+300) | (1e+300,Infinity) | (Infinity,Infinity)
(Infinity,1e+300) | (Infinity,1e+300) | (Infinity,2e+300)
(Infinity,1e+300) | (NaN,NaN) | (NaN,NaN)
(Infinity,1e+300) | (10,10) | (Infinity,1e+300)
(NaN,NaN) | (0,0) | (NaN,NaN)
(NaN,NaN) | (-10,0) | (NaN,NaN)
(NaN,NaN) | (-3,4) | (NaN,NaN)
@ -270,6 +306,7 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(NaN,NaN) | (-5,-12) | (NaN,NaN)
(NaN,NaN) | (1e-300,-1e-300) | (NaN,NaN)
(NaN,NaN) | (1e+300,Infinity) | (NaN,NaN)
(NaN,NaN) | (Infinity,1e+300) | (NaN,NaN)
(NaN,NaN) | (NaN,NaN) | (NaN,NaN)
(NaN,NaN) | (10,10) | (NaN,NaN)
(10,10) | (0,0) | (10,10)
@ -279,14 +316,15 @@ SELECT p1.f1, p2.f1, p1.f1 + p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(10,10) | (-5,-12) | (5,-2)
(10,10) | (1e-300,-1e-300) | (10,10)
(10,10) | (1e+300,Infinity) | (1e+300,Infinity)
(10,10) | (Infinity,1e+300) | (Infinity,1e+300)
(10,10) | (NaN,NaN) | (NaN,NaN)
(10,10) | (10,10) | (20,20)
(81 rows)
(100 rows)
-- Subtract point
SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
f1 | f1 | ?column?
-------------------+-------------------+---------------------
-------------------+-------------------+----------------------
(0,0) | (0,0) | (0,0)
(0,0) | (-10,0) | (10,0)
(0,0) | (-3,4) | (3,-4)
@ -294,6 +332,7 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(0,0) | (-5,-12) | (5,12)
(0,0) | (1e-300,-1e-300) | (-1e-300,1e-300)
(0,0) | (1e+300,Infinity) | (-1e+300,-Infinity)
(0,0) | (Infinity,1e+300) | (-Infinity,-1e+300)
(0,0) | (NaN,NaN) | (NaN,NaN)
(0,0) | (10,10) | (-10,-10)
(-10,0) | (0,0) | (-10,0)
@ -303,6 +342,7 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(-10,0) | (-5,-12) | (-5,12)
(-10,0) | (1e-300,-1e-300) | (-10,1e-300)
(-10,0) | (1e+300,Infinity) | (-1e+300,-Infinity)
(-10,0) | (Infinity,1e+300) | (-Infinity,-1e+300)
(-10,0) | (NaN,NaN) | (NaN,NaN)
(-10,0) | (10,10) | (-20,-10)
(-3,4) | (0,0) | (-3,4)
@ -312,6 +352,7 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(-3,4) | (-5,-12) | (2,16)
(-3,4) | (1e-300,-1e-300) | (-3,4)
(-3,4) | (1e+300,Infinity) | (-1e+300,-Infinity)
(-3,4) | (Infinity,1e+300) | (-Infinity,-1e+300)
(-3,4) | (NaN,NaN) | (NaN,NaN)
(-3,4) | (10,10) | (-13,-6)
(5.1,34.5) | (0,0) | (5.1,34.5)
@ -321,6 +362,7 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(5.1,34.5) | (-5,-12) | (10.1,46.5)
(5.1,34.5) | (1e-300,-1e-300) | (5.1,34.5)
(5.1,34.5) | (1e+300,Infinity) | (-1e+300,-Infinity)
(5.1,34.5) | (Infinity,1e+300) | (-Infinity,-1e+300)
(5.1,34.5) | (NaN,NaN) | (NaN,NaN)
(5.1,34.5) | (10,10) | (-4.9,24.5)
(-5,-12) | (0,0) | (-5,-12)
@ -330,6 +372,7 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(-5,-12) | (-5,-12) | (0,0)
(-5,-12) | (1e-300,-1e-300) | (-5,-12)
(-5,-12) | (1e+300,Infinity) | (-1e+300,-Infinity)
(-5,-12) | (Infinity,1e+300) | (-Infinity,-1e+300)
(-5,-12) | (NaN,NaN) | (NaN,NaN)
(-5,-12) | (10,10) | (-15,-22)
(1e-300,-1e-300) | (0,0) | (1e-300,-1e-300)
@ -339,6 +382,7 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(1e-300,-1e-300) | (-5,-12) | (5,12)
(1e-300,-1e-300) | (1e-300,-1e-300) | (0,0)
(1e-300,-1e-300) | (1e+300,Infinity) | (-1e+300,-Infinity)
(1e-300,-1e-300) | (Infinity,1e+300) | (-Infinity,-1e+300)
(1e-300,-1e-300) | (NaN,NaN) | (NaN,NaN)
(1e-300,-1e-300) | (10,10) | (-10,-10)
(1e+300,Infinity) | (0,0) | (1e+300,Infinity)
@ -348,8 +392,19 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(1e+300,Infinity) | (-5,-12) | (1e+300,Infinity)
(1e+300,Infinity) | (1e-300,-1e-300) | (1e+300,Infinity)
(1e+300,Infinity) | (1e+300,Infinity) | (0,NaN)
(1e+300,Infinity) | (Infinity,1e+300) | (-Infinity,Infinity)
(1e+300,Infinity) | (NaN,NaN) | (NaN,NaN)
(1e+300,Infinity) | (10,10) | (1e+300,Infinity)
(Infinity,1e+300) | (0,0) | (Infinity,1e+300)
(Infinity,1e+300) | (-10,0) | (Infinity,1e+300)
(Infinity,1e+300) | (-3,4) | (Infinity,1e+300)
(Infinity,1e+300) | (5.1,34.5) | (Infinity,1e+300)
(Infinity,1e+300) | (-5,-12) | (Infinity,1e+300)
(Infinity,1e+300) | (1e-300,-1e-300) | (Infinity,1e+300)
(Infinity,1e+300) | (1e+300,Infinity) | (Infinity,-Infinity)
(Infinity,1e+300) | (Infinity,1e+300) | (NaN,0)
(Infinity,1e+300) | (NaN,NaN) | (NaN,NaN)
(Infinity,1e+300) | (10,10) | (Infinity,1e+300)
(NaN,NaN) | (0,0) | (NaN,NaN)
(NaN,NaN) | (-10,0) | (NaN,NaN)
(NaN,NaN) | (-3,4) | (NaN,NaN)
@ -357,6 +412,7 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(NaN,NaN) | (-5,-12) | (NaN,NaN)
(NaN,NaN) | (1e-300,-1e-300) | (NaN,NaN)
(NaN,NaN) | (1e+300,Infinity) | (NaN,NaN)
(NaN,NaN) | (Infinity,1e+300) | (NaN,NaN)
(NaN,NaN) | (NaN,NaN) | (NaN,NaN)
(NaN,NaN) | (10,10) | (NaN,NaN)
(10,10) | (0,0) | (10,10)
@ -366,9 +422,10 @@ SELECT p1.f1, p2.f1, p1.f1 - p2.f1 FROM POINT_TBL p1, POINT_TBL p2;
(10,10) | (-5,-12) | (15,22)
(10,10) | (1e-300,-1e-300) | (10,10)
(10,10) | (1e+300,Infinity) | (-1e+300,-Infinity)
(10,10) | (Infinity,1e+300) | (-Infinity,-1e+300)
(10,10) | (NaN,NaN) | (NaN,NaN)
(10,10) | (10,10) | (0,0)
(81 rows)
(100 rows)
-- Multiply with point
SELECT p1.f1, p2.f1, p1.f1 * p2.f1 FROM POINT_TBL p1, POINT_TBL p2 WHERE p1.f1[0] BETWEEN 1 AND 1000;
@ -388,11 +445,13 @@ SELECT p1.f1, p2.f1, p1.f1 * p2.f1 FROM POINT_TBL p1, POINT_TBL p2 WHERE p1.f1[0
(10,10) | (1e-300,-1e-300) | (2e-299,0)
(5.1,34.5) | (1e+300,Infinity) | (-Infinity,Infinity)
(10,10) | (1e+300,Infinity) | (-Infinity,Infinity)
(5.1,34.5) | (Infinity,1e+300) | (Infinity,Infinity)
(10,10) | (Infinity,1e+300) | (Infinity,Infinity)
(5.1,34.5) | (NaN,NaN) | (NaN,NaN)
(10,10) | (NaN,NaN) | (NaN,NaN)
(5.1,34.5) | (10,10) | (-294,396)
(10,10) | (10,10) | (0,200)
(18 rows)
(20 rows)
-- Underflow error
SELECT p1.f1, p2.f1, p1.f1 * p2.f1 FROM POINT_TBL p1, POINT_TBL p2 WHERE p1.f1[0] < 1;
@ -415,11 +474,13 @@ SELECT p1.f1, p2.f1, p1.f1 / p2.f1 FROM POINT_TBL p1, POINT_TBL p2 WHERE p2.f1[0
(1e-300,-1e-300) | (10,10) | (0,-1e-301)
(1e+300,Infinity) | (5.1,34.5) | (Infinity,Infinity)
(1e+300,Infinity) | (10,10) | (Infinity,Infinity)
(Infinity,1e+300) | (5.1,34.5) | (Infinity,-Infinity)
(Infinity,1e+300) | (10,10) | (Infinity,-Infinity)
(NaN,NaN) | (5.1,34.5) | (NaN,NaN)
(NaN,NaN) | (10,10) | (NaN,NaN)
(10,10) | (5.1,34.5) | (0.325588278822,-0.241724631247)
(10,10) | (10,10) | (1,0)
(18 rows)
(20 rows)
-- Overflow error
SELECT p1.f1, p2.f1, p1.f1 / p2.f1 FROM POINT_TBL p1, POINT_TBL p2 WHERE p2.f1[0] > 1000;
@ -501,6 +562,16 @@ SELECT p.f1, l.s, p.f1 <-> l.s AS dist_pl, l.s <-> p.f1 AS dist_lp FROM POINT_TB
(1e+300,Infinity) | {NaN,NaN,NaN} | NaN | NaN
(1e+300,Infinity) | {0,-1,3} | Infinity | Infinity
(1e+300,Infinity) | {-1,0,3} | NaN | NaN
(Infinity,1e+300) | {0,-1,5} | NaN | NaN
(Infinity,1e+300) | {1,0,5} | NaN | NaN
(Infinity,1e+300) | {0,3,0} | NaN | NaN
(Infinity,1e+300) | {1,-1,0} | NaN | NaN
(Infinity,1e+300) | {-0.4,-1,-6} | NaN | NaN
(Infinity,1e+300) | {-0.000184615384615,-1,15.3846153846} | NaN | NaN
(Infinity,1e+300) | {3,NaN,5} | NaN | NaN
(Infinity,1e+300) | {NaN,NaN,NaN} | NaN | NaN
(Infinity,1e+300) | {0,-1,3} | NaN | NaN
(Infinity,1e+300) | {-1,0,3} | NaN | NaN
(NaN,NaN) | {0,-1,5} | NaN | NaN
(NaN,NaN) | {1,0,5} | NaN | NaN
(NaN,NaN) | {0,3,0} | NaN | NaN
@ -521,7 +592,7 @@ SELECT p.f1, l.s, p.f1 <-> l.s AS dist_pl, l.s <-> p.f1 AS dist_lp FROM POINT_TB
(10,10) | {NaN,NaN,NaN} | NaN | NaN
(10,10) | {0,-1,3} | 7 | 7
(10,10) | {-1,0,3} | 7 | 7
(90 rows)
(100 rows)
-- Distance to line segment
SELECT p.f1, l.s, p.f1 <-> l.s AS dist_ps, l.s <-> p.f1 AS dist_sp FROM POINT_TBL p, LSEG_TBL l;
@ -583,6 +654,14 @@ SELECT p.f1, l.s, p.f1 <-> l.s AS dist_ps, l.s <-> p.f1 AS dist_sp FROM POINT_TB
(1e+300,Infinity) | [(-10,2),(-10,3)] | Infinity | Infinity
(1e+300,Infinity) | [(0,-20),(30,-20)] | Infinity | Infinity
(1e+300,Infinity) | [(NaN,1),(NaN,90)] | Infinity | Infinity
(Infinity,1e+300) | [(1,2),(3,4)] | Infinity | Infinity
(Infinity,1e+300) | [(0,0),(6,6)] | Infinity | Infinity
(Infinity,1e+300) | [(10,-10),(-3,-4)] | Infinity | Infinity
(Infinity,1e+300) | [(-1000000,200),(300000,-40)] | Infinity | Infinity
(Infinity,1e+300) | [(11,22),(33,44)] | Infinity | Infinity
(Infinity,1e+300) | [(-10,2),(-10,3)] | Infinity | Infinity
(Infinity,1e+300) | [(0,-20),(30,-20)] | Infinity | Infinity
(Infinity,1e+300) | [(NaN,1),(NaN,90)] | NaN | NaN
(NaN,NaN) | [(1,2),(3,4)] | NaN | NaN
(NaN,NaN) | [(0,0),(6,6)] | NaN | NaN
(NaN,NaN) | [(10,-10),(-3,-4)] | NaN | NaN
@ -599,7 +678,7 @@ SELECT p.f1, l.s, p.f1 <-> l.s AS dist_ps, l.s <-> p.f1 AS dist_sp FROM POINT_TB
(10,10) | [(-10,2),(-10,3)] | 21.1896201004 | 21.1896201004
(10,10) | [(0,-20),(30,-20)] | 30 | 30
(10,10) | [(NaN,1),(NaN,90)] | NaN | NaN
(72 rows)
(80 rows)
-- Distance to box
SELECT p.f1, b.f1, p.f1 <-> b.f1 AS dist_pb, b.f1 <-> p.f1 AS dist_bp FROM POINT_TBL p, BOX_TBL b;
@ -640,6 +719,11 @@ SELECT p.f1, b.f1, p.f1 <-> b.f1 AS dist_pb, b.f1 <-> p.f1 AS dist_bp FROM POINT
(1e+300,Infinity) | (-2,2),(-8,-10) | Infinity | Infinity
(1e+300,Infinity) | (2.5,3.5),(2.5,2.5) | Infinity | Infinity
(1e+300,Infinity) | (3,3),(3,3) | Infinity | Infinity
(Infinity,1e+300) | (2,2),(0,0) | Infinity | Infinity
(Infinity,1e+300) | (3,3),(1,1) | Infinity | Infinity
(Infinity,1e+300) | (-2,2),(-8,-10) | Infinity | Infinity
(Infinity,1e+300) | (2.5,3.5),(2.5,2.5) | Infinity | Infinity
(Infinity,1e+300) | (3,3),(3,3) | Infinity | Infinity
(NaN,NaN) | (2,2),(0,0) | NaN | NaN
(NaN,NaN) | (3,3),(1,1) | NaN | NaN
(NaN,NaN) | (-2,2),(-8,-10) | NaN | NaN
@ -650,7 +734,7 @@ SELECT p.f1, b.f1, p.f1 <-> b.f1 AS dist_pb, b.f1 <-> p.f1 AS dist_bp FROM POINT
(10,10) | (-2,2),(-8,-10) | 14.4222051019 | 14.4222051019
(10,10) | (2.5,3.5),(2.5,2.5) | 9.92471662064 | 9.92471662064
(10,10) | (3,3),(3,3) | 9.89949493661 | 9.89949493661
(45 rows)
(50 rows)
-- Distance to path
SELECT p.f1, p1.f1, p.f1 <-> p1.f1 AS dist_ppath, p1.f1 <-> p.f1 AS dist_pathp FROM POINT_TBL p, PATH_TBL p1;
@ -719,6 +803,15 @@ SELECT p.f1, p1.f1, p.f1 <-> p1.f1 AS dist_ppath, p1.f1 <-> p.f1 AS dist_pathp F
(1e+300,Infinity) | ((10,20)) | Infinity | Infinity
(1e+300,Infinity) | [(11,12),(13,14)] | Infinity | Infinity
(1e+300,Infinity) | ((11,12),(13,14)) | Infinity | Infinity
(Infinity,1e+300) | [(1,2),(3,4)] | Infinity | Infinity
(Infinity,1e+300) | ((1,2),(3,4)) | Infinity | Infinity
(Infinity,1e+300) | [(0,0),(3,0),(4,5),(1,6)] | Infinity | Infinity
(Infinity,1e+300) | ((1,2),(3,4)) | Infinity | Infinity
(Infinity,1e+300) | ((1,2),(3,4)) | Infinity | Infinity
(Infinity,1e+300) | [(1,2),(3,4)] | Infinity | Infinity
(Infinity,1e+300) | ((10,20)) | Infinity | Infinity
(Infinity,1e+300) | [(11,12),(13,14)] | Infinity | Infinity
(Infinity,1e+300) | ((11,12),(13,14)) | Infinity | Infinity
(NaN,NaN) | [(1,2),(3,4)] | NaN | NaN
(NaN,NaN) | ((1,2),(3,4)) | NaN | NaN
(NaN,NaN) | [(0,0),(3,0),(4,5),(1,6)] | NaN | NaN
@ -737,7 +830,7 @@ SELECT p.f1, p1.f1, p.f1 <-> p1.f1 AS dist_ppath, p1.f1 <-> p.f1 AS dist_pathp F
(10,10) | ((10,20)) | 10 | 10
(10,10) | [(11,12),(13,14)] | 2.2360679775 | 2.2360679775
(10,10) | ((11,12),(13,14)) | 2.2360679775 | 2.2360679775
(81 rows)
(90 rows)
-- Distance to polygon
SELECT p.f1, p1.f1, p.f1 <-> p1.f1 AS dist_ppoly, p1.f1 <-> p.f1 AS dist_polyp FROM POINT_TBL p, POLYGON_TBL p1;
@ -792,6 +885,13 @@ SELECT p.f1, p1.f1, p.f1 <-> p1.f1 AS dist_ppoly, p1.f1 <-> p.f1 AS dist_polyp F
(1e+300,Infinity) | ((1,2),(7,8),(5,6),(3,-4)) | Infinity | Infinity
(1e+300,Infinity) | ((0,0)) | Infinity | Infinity
(1e+300,Infinity) | ((0,1),(0,1)) | Infinity | Infinity
(Infinity,1e+300) | ((2,0),(2,4),(0,0)) | Infinity | Infinity
(Infinity,1e+300) | ((3,1),(3,3),(1,0)) | Infinity | Infinity
(Infinity,1e+300) | ((1,2),(3,4),(5,6),(7,8)) | Infinity | Infinity
(Infinity,1e+300) | ((7,8),(5,6),(3,4),(1,2)) | Infinity | Infinity
(Infinity,1e+300) | ((1,2),(7,8),(5,6),(3,-4)) | Infinity | Infinity
(Infinity,1e+300) | ((0,0)) | Infinity | Infinity
(Infinity,1e+300) | ((0,1),(0,1)) | Infinity | Infinity
(NaN,NaN) | ((2,0),(2,4),(0,0)) | 0 | 0
(NaN,NaN) | ((3,1),(3,3),(1,0)) | 0 | 0
(NaN,NaN) | ((1,2),(3,4),(5,6),(7,8)) | 0 | 0
@ -806,7 +906,102 @@ SELECT p.f1, p1.f1, p.f1 <-> p1.f1 AS dist_ppoly, p1.f1 <-> p.f1 AS dist_polyp F
(10,10) | ((1,2),(7,8),(5,6),(3,-4)) | 3.60555127546 | 3.60555127546
(10,10) | ((0,0)) | 14.1421356237 | 14.1421356237
(10,10) | ((0,1),(0,1)) | 13.4536240471 | 13.4536240471
(63 rows)
(70 rows)
-- Construct line through two points
SELECT p1.f1, p2.f1, line(p1.f1, p2.f1)
FROM POINT_TBL p1, POINT_TBL p2 WHERE p1.f1 <> p2.f1;
f1 | f1 | line
-------------------+-------------------+----------------------------------------
(0,0) | (-10,0) | {0,-1,0}
(0,0) | (-3,4) | {-1.33333333333,-1,0}
(0,0) | (5.1,34.5) | {6.76470588235,-1,0}
(0,0) | (-5,-12) | {2.4,-1,0}
(0,0) | (1e+300,Infinity) | {Infinity,-1,NaN}
(0,0) | (Infinity,1e+300) | {0,-1,0}
(0,0) | (NaN,NaN) | {NaN,-1,NaN}
(0,0) | (10,10) | {1,-1,0}
(-10,0) | (0,0) | {0,-1,0}
(-10,0) | (-3,4) | {0.571428571429,-1,5.71428571429}
(-10,0) | (5.1,34.5) | {2.28476821192,-1,22.8476821192}
(-10,0) | (-5,-12) | {-2.4,-1,-24}
(-10,0) | (1e-300,-1e-300) | {0,-1,0}
(-10,0) | (1e+300,Infinity) | {Infinity,-1,Infinity}
(-10,0) | (Infinity,1e+300) | {0,-1,0}
(-10,0) | (NaN,NaN) | {NaN,-1,NaN}
(-10,0) | (10,10) | {0.5,-1,5}
(-3,4) | (0,0) | {-1.33333333333,-1,0}
(-3,4) | (-10,0) | {0.571428571429,-1,5.71428571429}
(-3,4) | (5.1,34.5) | {3.76543209877,-1,15.2962962963}
(-3,4) | (-5,-12) | {8,-1,28}
(-3,4) | (1e-300,-1e-300) | {-1.33333333333,-1,0}
(-3,4) | (1e+300,Infinity) | {Infinity,-1,Infinity}
(-3,4) | (Infinity,1e+300) | {0,-1,4}
(-3,4) | (NaN,NaN) | {NaN,-1,NaN}
(-3,4) | (10,10) | {0.461538461538,-1,5.38461538462}
(5.1,34.5) | (0,0) | {6.76470588235,-1,0}
(5.1,34.5) | (-10,0) | {2.28476821192,-1,22.8476821192}
(5.1,34.5) | (-3,4) | {3.76543209877,-1,15.2962962963}
(5.1,34.5) | (-5,-12) | {4.60396039604,-1,11.0198019802}
(5.1,34.5) | (1e-300,-1e-300) | {6.76470588235,-1,0}
(5.1,34.5) | (1e+300,Infinity) | {Infinity,-1,-Infinity}
(5.1,34.5) | (Infinity,1e+300) | {0,-1,34.5}
(5.1,34.5) | (NaN,NaN) | {NaN,-1,NaN}
(5.1,34.5) | (10,10) | {-5,-1,60}
(-5,-12) | (0,0) | {2.4,-1,0}
(-5,-12) | (-10,0) | {-2.4,-1,-24}
(-5,-12) | (-3,4) | {8,-1,28}
(-5,-12) | (5.1,34.5) | {4.60396039604,-1,11.0198019802}
(-5,-12) | (1e-300,-1e-300) | {2.4,-1,0}
(-5,-12) | (1e+300,Infinity) | {Infinity,-1,Infinity}
(-5,-12) | (Infinity,1e+300) | {0,-1,-12}
(-5,-12) | (NaN,NaN) | {NaN,-1,NaN}
(-5,-12) | (10,10) | {1.46666666667,-1,-4.66666666667}
(1e-300,-1e-300) | (-10,0) | {0,-1,-1e-300}
(1e-300,-1e-300) | (-3,4) | {-1.33333333333,-1,3.33333333333e-301}
(1e-300,-1e-300) | (5.1,34.5) | {6.76470588235,-1,-7.76470588235e-300}
(1e-300,-1e-300) | (-5,-12) | {2.4,-1,-3.4e-300}
(1e-300,-1e-300) | (1e+300,Infinity) | {Infinity,-1,-Infinity}
(1e-300,-1e-300) | (Infinity,1e+300) | {0,-1,-1e-300}
(1e-300,-1e-300) | (NaN,NaN) | {NaN,-1,NaN}
(1e-300,-1e-300) | (10,10) | {1,-1,-2e-300}
(1e+300,Infinity) | (0,0) | {Infinity,-1,NaN}
(1e+300,Infinity) | (-10,0) | {Infinity,-1,NaN}
(1e+300,Infinity) | (-3,4) | {Infinity,-1,NaN}
(1e+300,Infinity) | (5.1,34.5) | {Infinity,-1,NaN}
(1e+300,Infinity) | (-5,-12) | {Infinity,-1,NaN}
(1e+300,Infinity) | (1e-300,-1e-300) | {Infinity,-1,NaN}
(1e+300,Infinity) | (Infinity,1e+300) | {NaN,-1,NaN}
(1e+300,Infinity) | (NaN,NaN) | {NaN,-1,NaN}
(1e+300,Infinity) | (10,10) | {Infinity,-1,NaN}
(Infinity,1e+300) | (0,0) | {0,-1,NaN}
(Infinity,1e+300) | (-10,0) | {0,-1,NaN}
(Infinity,1e+300) | (-3,4) | {0,-1,NaN}
(Infinity,1e+300) | (5.1,34.5) | {0,-1,NaN}
(Infinity,1e+300) | (-5,-12) | {0,-1,NaN}
(Infinity,1e+300) | (1e-300,-1e-300) | {0,-1,NaN}
(Infinity,1e+300) | (1e+300,Infinity) | {NaN,-1,NaN}
(Infinity,1e+300) | (NaN,NaN) | {NaN,-1,NaN}
(Infinity,1e+300) | (10,10) | {0,-1,NaN}
(NaN,NaN) | (0,0) | {NaN,-1,NaN}
(NaN,NaN) | (-10,0) | {NaN,-1,NaN}
(NaN,NaN) | (-3,4) | {NaN,-1,NaN}
(NaN,NaN) | (5.1,34.5) | {NaN,-1,NaN}
(NaN,NaN) | (-5,-12) | {NaN,-1,NaN}
(NaN,NaN) | (1e-300,-1e-300) | {NaN,-1,NaN}
(NaN,NaN) | (1e+300,Infinity) | {NaN,-1,NaN}
(NaN,NaN) | (Infinity,1e+300) | {NaN,-1,NaN}
(NaN,NaN) | (10,10) | {NaN,-1,NaN}
(10,10) | (0,0) | {1,-1,0}
(10,10) | (-10,0) | {0.5,-1,5}
(10,10) | (-3,4) | {0.461538461538,-1,5.38461538462}
(10,10) | (5.1,34.5) | {-5,-1,60}
(10,10) | (-5,-12) | {1.46666666667,-1,-4.66666666667}
(10,10) | (1e-300,-1e-300) | {1,-1,0}
(10,10) | (1e+300,Infinity) | {Infinity,-1,-Infinity}
(10,10) | (Infinity,1e+300) | {0,-1,10}
(10,10) | (NaN,NaN) | {NaN,-1,NaN}
(88 rows)
-- Closest point to line
SELECT p.f1, l.s, p.f1 ## l.s FROM POINT_TBL p, LINE_TBL l;
@ -882,6 +1077,16 @@ SELECT p.f1, l.s, p.f1 ## l.s FROM POINT_TBL p, LINE_TBL l;
(1e+300,Infinity) | {NaN,NaN,NaN} |
(1e+300,Infinity) | {0,-1,3} | (1e+300,3)
(1e+300,Infinity) | {-1,0,3} |
(Infinity,1e+300) | {0,-1,5} |
(Infinity,1e+300) | {1,0,5} |
(Infinity,1e+300) | {0,3,0} |
(Infinity,1e+300) | {1,-1,0} |
(Infinity,1e+300) | {-0.4,-1,-6} |
(Infinity,1e+300) | {-0.000184615384615,-1,15.3846153846} |
(Infinity,1e+300) | {3,NaN,5} |
(Infinity,1e+300) | {NaN,NaN,NaN} |
(Infinity,1e+300) | {0,-1,3} |
(Infinity,1e+300) | {-1,0,3} |
(NaN,NaN) | {0,-1,5} |
(NaN,NaN) | {1,0,5} |
(NaN,NaN) | {0,3,0} |
@ -902,7 +1107,7 @@ SELECT p.f1, l.s, p.f1 ## l.s FROM POINT_TBL p, LINE_TBL l;
(10,10) | {NaN,NaN,NaN} |
(10,10) | {0,-1,3} | (10,3)
(10,10) | {-1,0,3} | (3,10)
(90 rows)
(100 rows)
-- Closest point to line segment
SELECT p.f1, l.s, p.f1 ## l.s FROM POINT_TBL p, LSEG_TBL l;
@ -964,6 +1169,14 @@ SELECT p.f1, l.s, p.f1 ## l.s FROM POINT_TBL p, LSEG_TBL l;
(1e+300,Infinity) | [(-10,2),(-10,3)] | (-10,3)
(1e+300,Infinity) | [(0,-20),(30,-20)] | (30,-20)
(1e+300,Infinity) | [(NaN,1),(NaN,90)] | (NaN,90)
(Infinity,1e+300) | [(1,2),(3,4)] | (3,4)
(Infinity,1e+300) | [(0,0),(6,6)] | (6,6)
(Infinity,1e+300) | [(10,-10),(-3,-4)] | (-3,-4)
(Infinity,1e+300) | [(-1000000,200),(300000,-40)] | (300000,-40)
(Infinity,1e+300) | [(11,22),(33,44)] | (33,44)
(Infinity,1e+300) | [(-10,2),(-10,3)] | (-10,3)
(Infinity,1e+300) | [(0,-20),(30,-20)] | (30,-20)
(Infinity,1e+300) | [(NaN,1),(NaN,90)] |
(NaN,NaN) | [(1,2),(3,4)] |
(NaN,NaN) | [(0,0),(6,6)] |
(NaN,NaN) | [(10,-10),(-3,-4)] |
@ -980,7 +1193,7 @@ SELECT p.f1, l.s, p.f1 ## l.s FROM POINT_TBL p, LSEG_TBL l;
(10,10) | [(-10,2),(-10,3)] | (-10,3)
(10,10) | [(0,-20),(30,-20)] | (10,-20)
(10,10) | [(NaN,1),(NaN,90)] |
(72 rows)
(80 rows)
-- Closest point to box
SELECT p.f1, b.f1, p.f1 ## b.f1 FROM POINT_TBL p, BOX_TBL b;
@ -1021,6 +1234,11 @@ SELECT p.f1, b.f1, p.f1 ## b.f1 FROM POINT_TBL p, BOX_TBL b;
(1e+300,Infinity) | (-2,2),(-8,-10) | (-8,2)
(1e+300,Infinity) | (2.5,3.5),(2.5,2.5) | (2.5,3.5)
(1e+300,Infinity) | (3,3),(3,3) | (3,3)
(Infinity,1e+300) | (2,2),(0,0) | (0,2)
(Infinity,1e+300) | (3,3),(1,1) | (1,3)
(Infinity,1e+300) | (-2,2),(-8,-10) | (-8,2)
(Infinity,1e+300) | (2.5,3.5),(2.5,2.5) | (2.5,3.5)
(Infinity,1e+300) | (3,3),(3,3) | (3,3)
(NaN,NaN) | (2,2),(0,0) |
(NaN,NaN) | (3,3),(1,1) |
(NaN,NaN) | (-2,2),(-8,-10) |
@ -1031,7 +1249,7 @@ SELECT p.f1, b.f1, p.f1 ## b.f1 FROM POINT_TBL p, BOX_TBL b;
(10,10) | (-2,2),(-8,-10) | (-2,2)
(10,10) | (2.5,3.5),(2.5,2.5) | (2.5,3.5)
(10,10) | (3,3),(3,3) | (3,3)
(45 rows)
(50 rows)
-- On line
SELECT p.f1, l.s FROM POINT_TBL p, LINE_TBL l WHERE p.f1 <@ l.s;
@ -2347,6 +2565,11 @@ SELECT '' AS twentyfour, b.f1 + p.f1 AS translation
| (1e+300,Infinity),(1e+300,Infinity)
| (1e+300,Infinity),(1e+300,Infinity)
| (1e+300,Infinity),(1e+300,Infinity)
| (Infinity,1e+300),(Infinity,1e+300)
| (Infinity,1e+300),(Infinity,1e+300)
| (Infinity,1e+300),(Infinity,1e+300)
| (Infinity,1e+300),(Infinity,1e+300)
| (Infinity,1e+300),(Infinity,1e+300)
| (NaN,NaN),(NaN,NaN)
| (NaN,NaN),(NaN,NaN)
| (NaN,NaN),(NaN,NaN)
@ -2357,7 +2580,7 @@ SELECT '' AS twentyfour, b.f1 + p.f1 AS translation
| (8,12),(2,0)
| (12.5,13.5),(12.5,12.5)
| (13,13),(13,13)
(45 rows)
(50 rows)
SELECT '' AS twentyfour, b.f1 - p.f1 AS translation
FROM BOX_TBL b, POINT_TBL p;
@ -2398,6 +2621,11 @@ SELECT '' AS twentyfour, b.f1 - p.f1 AS translation
| (-1e+300,-Infinity),(-1e+300,-Infinity)
| (-1e+300,-Infinity),(-1e+300,-Infinity)
| (-1e+300,-Infinity),(-1e+300,-Infinity)
| (-Infinity,-1e+300),(-Infinity,-1e+300)
| (-Infinity,-1e+300),(-Infinity,-1e+300)
| (-Infinity,-1e+300),(-Infinity,-1e+300)
| (-Infinity,-1e+300),(-Infinity,-1e+300)
| (-Infinity,-1e+300),(-Infinity,-1e+300)
| (NaN,NaN),(NaN,NaN)
| (NaN,NaN),(NaN,NaN)
| (NaN,NaN),(NaN,NaN)
@ -2408,7 +2636,7 @@ SELECT '' AS twentyfour, b.f1 - p.f1 AS translation
| (-12,-8),(-18,-20)
| (-7.5,-6.5),(-7.5,-7.5)
| (-7,-7),(-7,-7)
(45 rows)
(50 rows)
-- Multiply with point
SELECT b.f1, p.f1, b.f1 * p.f1 FROM BOX_TBL b, POINT_TBL p WHERE p.f1[0] BETWEEN 1 AND 1000;
@ -2431,16 +2659,21 @@ SELECT b.f1, p.f1, b.f1 * p.f1 FROM BOX_TBL b, POINT_TBL p WHERE p.f1[0] > 1000;
f1 | f1 | ?column?
---------------------+-------------------+--------------------------------------------
(2,2),(0,0) | (1e+300,Infinity) | (NaN,NaN),(-Infinity,Infinity)
(2,2),(0,0) | (Infinity,1e+300) | (NaN,NaN),(Infinity,Infinity)
(2,2),(0,0) | (NaN,NaN) | (NaN,NaN),(NaN,NaN)
(3,3),(1,1) | (1e+300,Infinity) | (-Infinity,Infinity),(-Infinity,Infinity)
(3,3),(1,1) | (Infinity,1e+300) | (Infinity,Infinity),(Infinity,Infinity)
(3,3),(1,1) | (NaN,NaN) | (NaN,NaN),(NaN,NaN)
(-2,2),(-8,-10) | (1e+300,Infinity) | (Infinity,-Infinity),(-Infinity,-Infinity)
(-2,2),(-8,-10) | (Infinity,1e+300) | (-Infinity,Infinity),(-Infinity,-Infinity)
(-2,2),(-8,-10) | (NaN,NaN) | (NaN,NaN),(NaN,NaN)
(2.5,3.5),(2.5,2.5) | (1e+300,Infinity) | (-Infinity,Infinity),(-Infinity,Infinity)
(2.5,3.5),(2.5,2.5) | (Infinity,1e+300) | (Infinity,Infinity),(Infinity,Infinity)
(2.5,3.5),(2.5,2.5) | (NaN,NaN) | (NaN,NaN),(NaN,NaN)
(3,3),(3,3) | (1e+300,Infinity) | (-Infinity,Infinity),(-Infinity,Infinity)
(3,3),(3,3) | (Infinity,1e+300) | (Infinity,Infinity),(Infinity,Infinity)
(3,3),(3,3) | (NaN,NaN) | (NaN,NaN),(NaN,NaN)
(10 rows)
(15 rows)
-- Divide by point
SELECT b.f1, p.f1, b.f1 / p.f1 FROM BOX_TBL b, POINT_TBL p WHERE p.f1[0] BETWEEN 1 AND 1000;
@ -2470,9 +2703,10 @@ SELECT f1::box
(-5,-12),(-5,-12)
(1e-300,-1e-300),(1e-300,-1e-300)
(1e+300,Infinity),(1e+300,Infinity)
(Infinity,1e+300),(Infinity,1e+300)
(NaN,NaN),(NaN,NaN)
(10,10),(10,10)
(9 rows)
(10 rows)
SELECT bound_box(a.f1, b.f1)
FROM BOX_TBL a, BOX_TBL b;
@ -3102,6 +3336,15 @@ SELECT p.f1, p1.f1, p.f1 + p1.f1 FROM PATH_TBL p, POINT_TBL p1;
((10,20)) | (1e+300,Infinity) | ((1e+300,Infinity))
[(11,12),(13,14)] | (1e+300,Infinity) | [(1e+300,Infinity),(1e+300,Infinity)]
((11,12),(13,14)) | (1e+300,Infinity) | ((1e+300,Infinity),(1e+300,Infinity))
[(1,2),(3,4)] | (Infinity,1e+300) | [(Infinity,1e+300),(Infinity,1e+300)]
((1,2),(3,4)) | (Infinity,1e+300) | ((Infinity,1e+300),(Infinity,1e+300))
[(0,0),(3,0),(4,5),(1,6)] | (Infinity,1e+300) | [(Infinity,1e+300),(Infinity,1e+300),(Infinity,1e+300),(Infinity,1e+300)]
((1,2),(3,4)) | (Infinity,1e+300) | ((Infinity,1e+300),(Infinity,1e+300))
((1,2),(3,4)) | (Infinity,1e+300) | ((Infinity,1e+300),(Infinity,1e+300))
[(1,2),(3,4)] | (Infinity,1e+300) | [(Infinity,1e+300),(Infinity,1e+300)]
((10,20)) | (Infinity,1e+300) | ((Infinity,1e+300))
[(11,12),(13,14)] | (Infinity,1e+300) | [(Infinity,1e+300),(Infinity,1e+300)]
((11,12),(13,14)) | (Infinity,1e+300) | ((Infinity,1e+300),(Infinity,1e+300))
[(1,2),(3,4)] | (NaN,NaN) | [(NaN,NaN),(NaN,NaN)]
((1,2),(3,4)) | (NaN,NaN) | ((NaN,NaN),(NaN,NaN))
[(0,0),(3,0),(4,5),(1,6)] | (NaN,NaN) | [(NaN,NaN),(NaN,NaN),(NaN,NaN),(NaN,NaN)]
@ -3120,7 +3363,7 @@ SELECT p.f1, p1.f1, p.f1 + p1.f1 FROM PATH_TBL p, POINT_TBL p1;
((10,20)) | (10,10) | ((20,30))
[(11,12),(13,14)] | (10,10) | [(21,22),(23,24)]
((11,12),(13,14)) | (10,10) | ((21,22),(23,24))
(81 rows)
(90 rows)
-- Subtract point
SELECT p.f1, p1.f1, p.f1 - p1.f1 FROM PATH_TBL p, POINT_TBL p1;
@ -3189,6 +3432,15 @@ SELECT p.f1, p1.f1, p.f1 - p1.f1 FROM PATH_TBL p, POINT_TBL p1;
((10,20)) | (1e+300,Infinity) | ((-1e+300,-Infinity))
[(11,12),(13,14)] | (1e+300,Infinity) | [(-1e+300,-Infinity),(-1e+300,-Infinity)]
((11,12),(13,14)) | (1e+300,Infinity) | ((-1e+300,-Infinity),(-1e+300,-Infinity))
[(1,2),(3,4)] | (Infinity,1e+300) | [(-Infinity,-1e+300),(-Infinity,-1e+300)]
((1,2),(3,4)) | (Infinity,1e+300) | ((-Infinity,-1e+300),(-Infinity,-1e+300))
[(0,0),(3,0),(4,5),(1,6)] | (Infinity,1e+300) | [(-Infinity,-1e+300),(-Infinity,-1e+300),(-Infinity,-1e+300),(-Infinity,-1e+300)]
((1,2),(3,4)) | (Infinity,1e+300) | ((-Infinity,-1e+300),(-Infinity,-1e+300))
((1,2),(3,4)) | (Infinity,1e+300) | ((-Infinity,-1e+300),(-Infinity,-1e+300))
[(1,2),(3,4)] | (Infinity,1e+300) | [(-Infinity,-1e+300),(-Infinity,-1e+300)]
((10,20)) | (Infinity,1e+300) | ((-Infinity,-1e+300))
[(11,12),(13,14)] | (Infinity,1e+300) | [(-Infinity,-1e+300),(-Infinity,-1e+300)]
((11,12),(13,14)) | (Infinity,1e+300) | ((-Infinity,-1e+300),(-Infinity,-1e+300))
[(1,2),(3,4)] | (NaN,NaN) | [(NaN,NaN),(NaN,NaN)]
((1,2),(3,4)) | (NaN,NaN) | ((NaN,NaN),(NaN,NaN))
[(0,0),(3,0),(4,5),(1,6)] | (NaN,NaN) | [(NaN,NaN),(NaN,NaN),(NaN,NaN),(NaN,NaN)]
@ -3207,7 +3459,7 @@ SELECT p.f1, p1.f1, p.f1 - p1.f1 FROM PATH_TBL p, POINT_TBL p1;
((10,20)) | (10,10) | ((0,10))
[(11,12),(13,14)] | (10,10) | [(1,2),(3,4)]
((11,12),(13,14)) | (10,10) | ((1,2),(3,4))
(81 rows)
(90 rows)
-- Multiply with point
SELECT p.f1, p1.f1, p.f1 * p1.f1 FROM PATH_TBL p, POINT_TBL p1;
@ -3276,6 +3528,15 @@ SELECT p.f1, p1.f1, p.f1 * p1.f1 FROM PATH_TBL p, POINT_TBL p1;
((10,20)) | (1e+300,Infinity) | ((-Infinity,Infinity))
[(11,12),(13,14)] | (1e+300,Infinity) | [(-Infinity,Infinity),(-Infinity,Infinity)]
((11,12),(13,14)) | (1e+300,Infinity) | ((-Infinity,Infinity),(-Infinity,Infinity))
[(1,2),(3,4)] | (Infinity,1e+300) | [(Infinity,Infinity),(Infinity,Infinity)]
((1,2),(3,4)) | (Infinity,1e+300) | ((Infinity,Infinity),(Infinity,Infinity))
[(0,0),(3,0),(4,5),(1,6)] | (Infinity,1e+300) | [(NaN,NaN),(Infinity,NaN),(Infinity,Infinity),(Infinity,Infinity)]
((1,2),(3,4)) | (Infinity,1e+300) | ((Infinity,Infinity),(Infinity,Infinity))
((1,2),(3,4)) | (Infinity,1e+300) | ((Infinity,Infinity),(Infinity,Infinity))
[(1,2),(3,4)] | (Infinity,1e+300) | [(Infinity,Infinity),(Infinity,Infinity)]
((10,20)) | (Infinity,1e+300) | ((Infinity,Infinity))
[(11,12),(13,14)] | (Infinity,1e+300) | [(Infinity,Infinity),(Infinity,Infinity)]
((11,12),(13,14)) | (Infinity,1e+300) | ((Infinity,Infinity),(Infinity,Infinity))
[(1,2),(3,4)] | (NaN,NaN) | [(NaN,NaN),(NaN,NaN)]
((1,2),(3,4)) | (NaN,NaN) | ((NaN,NaN),(NaN,NaN))
[(0,0),(3,0),(4,5),(1,6)] | (NaN,NaN) | [(NaN,NaN),(NaN,NaN),(NaN,NaN),(NaN,NaN)]
@ -3294,7 +3555,7 @@ SELECT p.f1, p1.f1, p.f1 * p1.f1 FROM PATH_TBL p, POINT_TBL p1;
((10,20)) | (10,10) | ((-100,300))
[(11,12),(13,14)] | (10,10) | [(-10,230),(-10,270)]
((11,12),(13,14)) | (10,10) | ((-10,230),(-10,270))
(81 rows)
(90 rows)
-- Divide by point
SELECT p.f1, p1.f1, p.f1 / p1.f1 FROM PATH_TBL p, POINT_TBL p1 WHERE p1.f1[0] BETWEEN 1 AND 1000;
@ -3467,6 +3728,13 @@ SELECT '' AS twentyfour, p.f1, poly.f1, poly.f1 @> p.f1 AS contains
| (1e+300,Infinity) | ((1,2),(7,8),(5,6),(3,-4)) | f
| (1e+300,Infinity) | ((0,0)) | f
| (1e+300,Infinity) | ((0,1),(0,1)) | f
| (Infinity,1e+300) | ((2,0),(2,4),(0,0)) | f
| (Infinity,1e+300) | ((3,1),(3,3),(1,0)) | f
| (Infinity,1e+300) | ((1,2),(3,4),(5,6),(7,8)) | f
| (Infinity,1e+300) | ((7,8),(5,6),(3,4),(1,2)) | f
| (Infinity,1e+300) | ((1,2),(7,8),(5,6),(3,-4)) | f
| (Infinity,1e+300) | ((0,0)) | f
| (Infinity,1e+300) | ((0,1),(0,1)) | f
| (NaN,NaN) | ((2,0),(2,4),(0,0)) | t
| (NaN,NaN) | ((3,1),(3,3),(1,0)) | t
| (NaN,NaN) | ((1,2),(3,4),(5,6),(7,8)) | t
@ -3481,7 +3749,7 @@ SELECT '' AS twentyfour, p.f1, poly.f1, poly.f1 @> p.f1 AS contains
| (10,10) | ((1,2),(7,8),(5,6),(3,-4)) | f
| (10,10) | ((0,0)) | f
| (10,10) | ((0,1),(0,1)) | f
(63 rows)
(70 rows)
SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 <@ poly.f1 AS contained
FROM POLYGON_TBL poly, POINT_TBL p;
@ -3536,6 +3804,13 @@ SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 <@ poly.f1 AS contained
| (1e+300,Infinity) | ((1,2),(7,8),(5,6),(3,-4)) | f
| (1e+300,Infinity) | ((0,0)) | f
| (1e+300,Infinity) | ((0,1),(0,1)) | f
| (Infinity,1e+300) | ((2,0),(2,4),(0,0)) | f
| (Infinity,1e+300) | ((3,1),(3,3),(1,0)) | f
| (Infinity,1e+300) | ((1,2),(3,4),(5,6),(7,8)) | f
| (Infinity,1e+300) | ((7,8),(5,6),(3,4),(1,2)) | f
| (Infinity,1e+300) | ((1,2),(7,8),(5,6),(3,-4)) | f
| (Infinity,1e+300) | ((0,0)) | f
| (Infinity,1e+300) | ((0,1),(0,1)) | f
| (NaN,NaN) | ((2,0),(2,4),(0,0)) | t
| (NaN,NaN) | ((3,1),(3,3),(1,0)) | t
| (NaN,NaN) | ((1,2),(3,4),(5,6),(7,8)) | t
@ -3550,7 +3825,7 @@ SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 <@ poly.f1 AS contained
| (10,10) | ((1,2),(7,8),(5,6),(3,-4)) | f
| (10,10) | ((0,0)) | f
| (10,10) | ((0,1),(0,1)) | f
(63 rows)
(70 rows)
SELECT '' AS four, npoints(f1) AS npoints, f1 AS polygon
FROM POLYGON_TBL;
@ -3929,9 +4204,10 @@ SELECT '' AS six, circle(f1, 50.0)
| <(-5,-12),50>
| <(1e-300,-1e-300),50>
| <(1e+300,Infinity),50>
| <(Infinity,1e+300),50>
| <(NaN,NaN),50>
| <(10,10),50>
(9 rows)
(10 rows)
SELECT '' AS four, circle(f1)
FROM BOX_TBL;
@ -3993,12 +4269,19 @@ SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS d
| <(100,200),10> | (-10,0) | 218.25424421
| <(100,200),10> | (-5,-12) | 226.577682802
| <(3,5),0> | (1e+300,Infinity) | Infinity
| <(3,5),0> | (Infinity,1e+300) | Infinity
| <(1,2),3> | (1e+300,Infinity) | Infinity
| <(5,1),3> | (1e+300,Infinity) | Infinity
| <(5,1),3> | (Infinity,1e+300) | Infinity
| <(1,2),3> | (Infinity,1e+300) | Infinity
| <(1,3),5> | (1e+300,Infinity) | Infinity
| <(1,3),5> | (Infinity,1e+300) | Infinity
| <(100,200),10> | (1e+300,Infinity) | Infinity
| <(100,200),10> | (Infinity,1e+300) | Infinity
| <(1,2),100> | (1e+300,Infinity) | Infinity
| <(1,2),100> | (Infinity,1e+300) | Infinity
| <(100,1),115> | (1e+300,Infinity) | Infinity
| <(100,1),115> | (Infinity,1e+300) | Infinity
| <(3,5),0> | (NaN,NaN) | NaN
| <(1,2),3> | (NaN,NaN) | NaN
| <(5,1),3> | (NaN,NaN) | NaN
@ -4014,8 +4297,9 @@ SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS d
| <(3,5),NaN> | (5.1,34.5) | NaN
| <(3,5),NaN> | (10,10) | NaN
| <(3,5),NaN> | (1e+300,Infinity) | NaN
| <(3,5),NaN> | (Infinity,1e+300) | NaN
| <(3,5),NaN> | (NaN,NaN) | NaN
(53 rows)
(61 rows)
-- To polygon
SELECT f1, f1::polygon FROM CIRCLE_TBL WHERE f1 >= '<(0,0),1>';
@ -4626,6 +4910,14 @@ SELECT c.f1, p.f1, c.f1 + p.f1 FROM CIRCLE_TBL c, POINT_TBL p;
<(100,1),115> | (1e+300,Infinity) | <(1e+300,Infinity),115>
<(3,5),0> | (1e+300,Infinity) | <(1e+300,Infinity),0>
<(3,5),NaN> | (1e+300,Infinity) | <(1e+300,Infinity),NaN>
<(5,1),3> | (Infinity,1e+300) | <(Infinity,1e+300),3>
<(1,2),100> | (Infinity,1e+300) | <(Infinity,1e+300),100>
<(1,3),5> | (Infinity,1e+300) | <(Infinity,1e+300),5>
<(1,2),3> | (Infinity,1e+300) | <(Infinity,1e+300),3>
<(100,200),10> | (Infinity,1e+300) | <(Infinity,1e+300),10>
<(100,1),115> | (Infinity,1e+300) | <(Infinity,1e+300),115>
<(3,5),0> | (Infinity,1e+300) | <(Infinity,1e+300),0>
<(3,5),NaN> | (Infinity,1e+300) | <(Infinity,1e+300),NaN>
<(5,1),3> | (NaN,NaN) | <(NaN,NaN),3>
<(1,2),100> | (NaN,NaN) | <(NaN,NaN),100>
<(1,3),5> | (NaN,NaN) | <(NaN,NaN),5>
@ -4642,7 +4934,7 @@ SELECT c.f1, p.f1, c.f1 + p.f1 FROM CIRCLE_TBL c, POINT_TBL p;
<(100,1),115> | (10,10) | <(110,11),115>
<(3,5),0> | (10,10) | <(13,15),0>
<(3,5),NaN> | (10,10) | <(13,15),NaN>
(72 rows)
(80 rows)
-- Subtract point
SELECT c.f1, p.f1, c.f1 - p.f1 FROM CIRCLE_TBL c, POINT_TBL p;
@ -4704,6 +4996,14 @@ SELECT c.f1, p.f1, c.f1 - p.f1 FROM CIRCLE_TBL c, POINT_TBL p;
<(100,1),115> | (1e+300,Infinity) | <(-1e+300,-Infinity),115>
<(3,5),0> | (1e+300,Infinity) | <(-1e+300,-Infinity),0>
<(3,5),NaN> | (1e+300,Infinity) | <(-1e+300,-Infinity),NaN>
<(5,1),3> | (Infinity,1e+300) | <(-Infinity,-1e+300),3>
<(1,2),100> | (Infinity,1e+300) | <(-Infinity,-1e+300),100>
<(1,3),5> | (Infinity,1e+300) | <(-Infinity,-1e+300),5>
<(1,2),3> | (Infinity,1e+300) | <(-Infinity,-1e+300),3>
<(100,200),10> | (Infinity,1e+300) | <(-Infinity,-1e+300),10>
<(100,1),115> | (Infinity,1e+300) | <(-Infinity,-1e+300),115>
<(3,5),0> | (Infinity,1e+300) | <(-Infinity,-1e+300),0>
<(3,5),NaN> | (Infinity,1e+300) | <(-Infinity,-1e+300),NaN>
<(5,1),3> | (NaN,NaN) | <(NaN,NaN),3>
<(1,2),100> | (NaN,NaN) | <(NaN,NaN),100>
<(1,3),5> | (NaN,NaN) | <(NaN,NaN),5>
@ -4720,7 +5020,7 @@ SELECT c.f1, p.f1, c.f1 - p.f1 FROM CIRCLE_TBL c, POINT_TBL p;
<(100,1),115> | (10,10) | <(90,-9),115>
<(3,5),0> | (10,10) | <(-7,-5),0>
<(3,5),NaN> | (10,10) | <(-7,-5),NaN>
(72 rows)
(80 rows)
-- Multiply with point
SELECT c.f1, p.f1, c.f1 * p.f1 FROM CIRCLE_TBL c, POINT_TBL p;
@ -4782,6 +5082,14 @@ SELECT c.f1, p.f1, c.f1 * p.f1 FROM CIRCLE_TBL c, POINT_TBL p;
<(100,1),115> | (1e+300,Infinity) | <(-Infinity,Infinity),Infinity>
<(3,5),0> | (1e+300,Infinity) | <(-Infinity,Infinity),NaN>
<(3,5),NaN> | (1e+300,Infinity) | <(-Infinity,Infinity),NaN>
<(5,1),3> | (Infinity,1e+300) | <(Infinity,Infinity),Infinity>
<(1,2),100> | (Infinity,1e+300) | <(Infinity,Infinity),Infinity>
<(1,3),5> | (Infinity,1e+300) | <(Infinity,Infinity),Infinity>
<(1,2),3> | (Infinity,1e+300) | <(Infinity,Infinity),Infinity>
<(100,200),10> | (Infinity,1e+300) | <(Infinity,Infinity),Infinity>
<(100,1),115> | (Infinity,1e+300) | <(Infinity,Infinity),Infinity>
<(3,5),0> | (Infinity,1e+300) | <(Infinity,Infinity),NaN>
<(3,5),NaN> | (Infinity,1e+300) | <(Infinity,Infinity),NaN>
<(5,1),3> | (NaN,NaN) | <(NaN,NaN),NaN>
<(1,2),100> | (NaN,NaN) | <(NaN,NaN),NaN>
<(1,3),5> | (NaN,NaN) | <(NaN,NaN),NaN>
@ -4798,7 +5106,7 @@ SELECT c.f1, p.f1, c.f1 * p.f1 FROM CIRCLE_TBL c, POINT_TBL p;
<(100,1),115> | (10,10) | <(990,1010),1626.34559673>
<(3,5),0> | (10,10) | <(-20,80),0>
<(3,5),NaN> | (10,10) | <(-20,80),NaN>
(72 rows)
(80 rows)
-- Divide by point
SELECT c.f1, p.f1, c.f1 / p.f1 FROM CIRCLE_TBL c, POINT_TBL p WHERE p.f1[0] BETWEEN 1 AND 1000;

View File

@ -11,6 +11,7 @@ INSERT INTO POINT_TBL(f1) VALUES ('(5.1, 34.5)');
INSERT INTO POINT_TBL(f1) VALUES ('(-5.0,-12.0)');
INSERT INTO POINT_TBL(f1) VALUES ('(1e-300,-1e-300)'); -- To underflow
INSERT INTO POINT_TBL(f1) VALUES ('(1e+300,Inf)'); -- To overflow
INSERT INTO POINT_TBL(f1) VALUES ('(Inf,1e+300)'); -- Transposed
INSERT INTO POINT_TBL(f1) VALUES (' ( Nan , NaN ) ');
-- bad format points
INSERT INTO POINT_TBL(f1) VALUES ('asdfasdf');
@ -44,9 +45,10 @@ SELECT '' AS six, * FROM POINT_TBL;
| (-5,-12)
| (1e-300,-1e-300)
| (1e+300,Infinity)
| (Infinity,1e+300)
| (NaN,NaN)
| (10,10)
(9 rows)
(10 rows)
-- left of
SELECT '' AS three, p.* FROM POINT_TBL p WHERE p.f1 << '(0.0, 0.0)';
@ -115,8 +117,9 @@ SELECT '' AS three, p.* FROM POINT_TBL p
| (-5,-12)
| (1e-300,-1e-300)
| (1e+300,Infinity)
| (Infinity,1e+300)
| (NaN,NaN)
(6 rows)
(7 rows)
SELECT '' AS two, p.* FROM POINT_TBL p
WHERE p.f1 <@ path '[(0,0),(-10,0),(-10,10)]';
@ -136,8 +139,9 @@ SELECT '' AS three, p.* FROM POINT_TBL p
| (-5,-12)
| (1e-300,-1e-300)
| (1e+300,Infinity)
| (Infinity,1e+300)
| (NaN,NaN)
(6 rows)
(7 rows)
SELECT '' AS six, p.f1, p.f1 <-> point '(0,0)' AS dist
FROM POINT_TBL p
@ -152,8 +156,9 @@ SELECT '' AS six, p.f1, p.f1 <-> point '(0,0)' AS dist
| (10,10) | 14.142135623731
| (5.1,34.5) | 34.8749193547455
| (1e+300,Infinity) | Infinity
| (Infinity,1e+300) | Infinity
| (NaN,NaN) | NaN
(9 rows)
(10 rows)
SELECT '' AS thirtysix, p1.f1 AS point1, p2.f1 AS point2, p1.f1 <-> p2.f1 AS dist
FROM POINT_TBL p1, POINT_TBL p2
@ -210,12 +215,19 @@ SELECT '' AS thirtysix, p1.f1 AS point1, p2.f1 AS point2, p1.f1 <-> p2.f1 AS dis
| (-5,-12) | (5.1,34.5) | 47.5842410888311
| (5.1,34.5) | (-5,-12) | 47.5842410888311
| (-10,0) | (1e+300,Infinity) | Infinity
| (-10,0) | (Infinity,1e+300) | Infinity
| (-5,-12) | (1e+300,Infinity) | Infinity
| (-5,-12) | (Infinity,1e+300) | Infinity
| (-3,4) | (1e+300,Infinity) | Infinity
| (-3,4) | (Infinity,1e+300) | Infinity
| (0,0) | (1e+300,Infinity) | Infinity
| (0,0) | (Infinity,1e+300) | Infinity
| (1e-300,-1e-300) | (1e+300,Infinity) | Infinity
| (1e-300,-1e-300) | (Infinity,1e+300) | Infinity
| (5.1,34.5) | (1e+300,Infinity) | Infinity
| (5.1,34.5) | (Infinity,1e+300) | Infinity
| (10,10) | (1e+300,Infinity) | Infinity
| (10,10) | (Infinity,1e+300) | Infinity
| (1e+300,Infinity) | (-10,0) | Infinity
| (1e+300,Infinity) | (-5,-12) | Infinity
| (1e+300,Infinity) | (-3,4) | Infinity
@ -223,6 +235,15 @@ SELECT '' AS thirtysix, p1.f1 AS point1, p2.f1 AS point2, p1.f1 <-> p2.f1 AS dis
| (1e+300,Infinity) | (1e-300,-1e-300) | Infinity
| (1e+300,Infinity) | (5.1,34.5) | Infinity
| (1e+300,Infinity) | (10,10) | Infinity
| (1e+300,Infinity) | (Infinity,1e+300) | Infinity
| (Infinity,1e+300) | (-10,0) | Infinity
| (Infinity,1e+300) | (-5,-12) | Infinity
| (Infinity,1e+300) | (-3,4) | Infinity
| (Infinity,1e+300) | (0,0) | Infinity
| (Infinity,1e+300) | (1e-300,-1e-300) | Infinity
| (Infinity,1e+300) | (5.1,34.5) | Infinity
| (Infinity,1e+300) | (10,10) | Infinity
| (Infinity,1e+300) | (1e+300,Infinity) | Infinity
| (-10,0) | (NaN,NaN) | NaN
| (-5,-12) | (NaN,NaN) | NaN
| (-3,4) | (NaN,NaN) | NaN
@ -232,6 +253,8 @@ SELECT '' AS thirtysix, p1.f1 AS point1, p2.f1 AS point2, p1.f1 <-> p2.f1 AS dis
| (10,10) | (NaN,NaN) | NaN
| (1e+300,Infinity) | (1e+300,Infinity) | NaN
| (1e+300,Infinity) | (NaN,NaN) | NaN
| (Infinity,1e+300) | (Infinity,1e+300) | NaN
| (Infinity,1e+300) | (NaN,NaN) | NaN
| (NaN,NaN) | (-10,0) | NaN
| (NaN,NaN) | (-5,-12) | NaN
| (NaN,NaN) | (-3,4) | NaN
@ -240,8 +263,9 @@ SELECT '' AS thirtysix, p1.f1 AS point1, p2.f1 AS point2, p1.f1 <-> p2.f1 AS dis
| (NaN,NaN) | (5.1,34.5) | NaN
| (NaN,NaN) | (10,10) | NaN
| (NaN,NaN) | (1e+300,Infinity) | NaN
| (NaN,NaN) | (Infinity,1e+300) | NaN
| (NaN,NaN) | (NaN,NaN) | NaN
(81 rows)
(100 rows)
SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
FROM POINT_TBL p1, POINT_TBL p2
@ -253,6 +277,7 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (0,0) | (5.1,34.5)
| (0,0) | (-5,-12)
| (0,0) | (1e+300,Infinity)
| (0,0) | (Infinity,1e+300)
| (0,0) | (NaN,NaN)
| (0,0) | (10,10)
| (-10,0) | (0,0)
@ -261,6 +286,7 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (-10,0) | (-5,-12)
| (-10,0) | (1e-300,-1e-300)
| (-10,0) | (1e+300,Infinity)
| (-10,0) | (Infinity,1e+300)
| (-10,0) | (NaN,NaN)
| (-10,0) | (10,10)
| (-3,4) | (0,0)
@ -269,6 +295,7 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (-3,4) | (-5,-12)
| (-3,4) | (1e-300,-1e-300)
| (-3,4) | (1e+300,Infinity)
| (-3,4) | (Infinity,1e+300)
| (-3,4) | (NaN,NaN)
| (-3,4) | (10,10)
| (5.1,34.5) | (0,0)
@ -277,6 +304,7 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (5.1,34.5) | (-5,-12)
| (5.1,34.5) | (1e-300,-1e-300)
| (5.1,34.5) | (1e+300,Infinity)
| (5.1,34.5) | (Infinity,1e+300)
| (5.1,34.5) | (NaN,NaN)
| (5.1,34.5) | (10,10)
| (-5,-12) | (0,0)
@ -285,6 +313,7 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (-5,-12) | (5.1,34.5)
| (-5,-12) | (1e-300,-1e-300)
| (-5,-12) | (1e+300,Infinity)
| (-5,-12) | (Infinity,1e+300)
| (-5,-12) | (NaN,NaN)
| (-5,-12) | (10,10)
| (1e-300,-1e-300) | (-10,0)
@ -292,6 +321,7 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (1e-300,-1e-300) | (5.1,34.5)
| (1e-300,-1e-300) | (-5,-12)
| (1e-300,-1e-300) | (1e+300,Infinity)
| (1e-300,-1e-300) | (Infinity,1e+300)
| (1e-300,-1e-300) | (NaN,NaN)
| (1e-300,-1e-300) | (10,10)
| (1e+300,Infinity) | (0,0)
@ -301,8 +331,19 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (1e+300,Infinity) | (-5,-12)
| (1e+300,Infinity) | (1e-300,-1e-300)
| (1e+300,Infinity) | (1e+300,Infinity)
| (1e+300,Infinity) | (Infinity,1e+300)
| (1e+300,Infinity) | (NaN,NaN)
| (1e+300,Infinity) | (10,10)
| (Infinity,1e+300) | (0,0)
| (Infinity,1e+300) | (-10,0)
| (Infinity,1e+300) | (-3,4)
| (Infinity,1e+300) | (5.1,34.5)
| (Infinity,1e+300) | (-5,-12)
| (Infinity,1e+300) | (1e-300,-1e-300)
| (Infinity,1e+300) | (1e+300,Infinity)
| (Infinity,1e+300) | (Infinity,1e+300)
| (Infinity,1e+300) | (NaN,NaN)
| (Infinity,1e+300) | (10,10)
| (NaN,NaN) | (0,0)
| (NaN,NaN) | (-10,0)
| (NaN,NaN) | (-3,4)
@ -310,6 +351,7 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (NaN,NaN) | (-5,-12)
| (NaN,NaN) | (1e-300,-1e-300)
| (NaN,NaN) | (1e+300,Infinity)
| (NaN,NaN) | (Infinity,1e+300)
| (NaN,NaN) | (NaN,NaN)
| (NaN,NaN) | (10,10)
| (10,10) | (0,0)
@ -319,8 +361,9 @@ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
| (10,10) | (-5,-12)
| (10,10) | (1e-300,-1e-300)
| (10,10) | (1e+300,Infinity)
| (10,10) | (Infinity,1e+300)
| (10,10) | (NaN,NaN)
(72 rows)
(91 rows)
-- put distance result into output to allow sorting with GEQ optimizer - tgl 97/05/10
SELECT '' AS fifteen, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS distance
@ -328,7 +371,7 @@ SELECT '' AS fifteen, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS dis
WHERE (p1.f1 <-> p2.f1) > 3 and p1.f1 << p2.f1
ORDER BY distance, p1.f1[0], p2.f1[0];
fifteen | point1 | point2 | distance
---------+------------------+-------------------+------------------
---------+-------------------+-------------------+------------------
| (-3,4) | (0,0) | 5
| (-3,4) | (1e-300,-1e-300) | 5
| (-10,0) | (-3,4) | 8.06225774829855
@ -350,13 +393,21 @@ SELECT '' AS fifteen, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS dis
| (-10,0) | (5.1,34.5) | 37.6597928831267
| (-5,-12) | (5.1,34.5) | 47.5842410888311
| (-10,0) | (1e+300,Infinity) | Infinity
| (-10,0) | (Infinity,1e+300) | Infinity
| (-5,-12) | (1e+300,Infinity) | Infinity
| (-5,-12) | (Infinity,1e+300) | Infinity
| (-3,4) | (1e+300,Infinity) | Infinity
| (-3,4) | (Infinity,1e+300) | Infinity
| (0,0) | (1e+300,Infinity) | Infinity
| (0,0) | (Infinity,1e+300) | Infinity
| (1e-300,-1e-300) | (1e+300,Infinity) | Infinity
| (1e-300,-1e-300) | (Infinity,1e+300) | Infinity
| (5.1,34.5) | (1e+300,Infinity) | Infinity
| (5.1,34.5) | (Infinity,1e+300) | Infinity
| (10,10) | (1e+300,Infinity) | Infinity
(27 rows)
| (10,10) | (Infinity,1e+300) | Infinity
| (1e+300,Infinity) | (Infinity,1e+300) | Infinity
(35 rows)
-- put distance result into output to allow sorting with GEQ optimizer - tgl 97/05/10
SELECT '' AS three, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS distance
@ -364,12 +415,13 @@ SELECT '' AS three, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS dista
WHERE (p1.f1 <-> p2.f1) > 3 and p1.f1 << p2.f1 and p1.f1 >^ p2.f1
ORDER BY distance;
three | point1 | point2 | distance
-------+------------+------------------+------------------
-------+-------------------+-------------------+------------------
| (-3,4) | (0,0) | 5
| (-3,4) | (1e-300,-1e-300) | 5
| (-10,0) | (-5,-12) | 13
| (5.1,34.5) | (10,10) | 24.9851956166046
(4 rows)
| (1e+300,Infinity) | (Infinity,1e+300) | Infinity
(5 rows)
-- Test that GiST indexes provide same behavior as sequential scan
CREATE TEMP TABLE point_gist_tbl(f1 point);

View File

@ -85,6 +85,10 @@ SELECT p.f1, p1.f1, p.f1 <-> p1.f1 AS dist_ppath, p1.f1 <-> p.f1 AS dist_pathp F
-- Distance to polygon
SELECT p.f1, p1.f1, p.f1 <-> p1.f1 AS dist_ppoly, p1.f1 <-> p.f1 AS dist_polyp FROM POINT_TBL p, POLYGON_TBL p1;
-- Construct line through two points
SELECT p1.f1, p2.f1, line(p1.f1, p2.f1)
FROM POINT_TBL p1, POINT_TBL p2 WHERE p1.f1 <> p2.f1;
-- Closest point to line
SELECT p.f1, l.s, p.f1 ## l.s FROM POINT_TBL p, LINE_TBL l;

View File

@ -21,6 +21,8 @@ INSERT INTO POINT_TBL(f1) VALUES ('(1e-300,-1e-300)'); -- To underflow
INSERT INTO POINT_TBL(f1) VALUES ('(1e+300,Inf)'); -- To overflow
INSERT INTO POINT_TBL(f1) VALUES ('(Inf,1e+300)'); -- Transposed
INSERT INTO POINT_TBL(f1) VALUES (' ( Nan , NaN ) ');
-- bad format points