postgresql/src/test/regress/expected/geometry.out
Tom Lane 20ab467d76 Improve parser so that we can show an error cursor position for errors
during parse analysis, not only errors detected in the flex/bison stages.
This is per my earlier proposal.  This commit includes all the basic
infrastructure, but locations are only tracked and reported for errors
involving column references, function calls, and operators.  More could
be done later but this seems like a good set to start with.  I've also
moved the ReportSyntaxErrorPosition logic out of psql and into libpq,
which should make it available to more people --- even within psql this
is an improvement because warnings weren't handled by ReportSyntaxErrorPosition.
2006-03-14 22:48:25 +00:00

535 lines
20 KiB
Plaintext

--
-- GEOMETRY
--
-- Back off displayed precision a little bit to reduce platform-to-platform
-- variation in results.
SET extra_float_digits TO -3;
--
-- Points
--
SELECT '' AS four, center(f1) AS center
FROM BOX_TBL;
four | center
------+---------
| (1,1)
| (2,2)
| (2.5,3)
| (3,3)
(4 rows)
SELECT '' AS four, (@@ f1) AS center
FROM BOX_TBL;
four | center
------+---------
| (1,1)
| (2,2)
| (2.5,3)
| (3,3)
(4 rows)
SELECT '' AS six, point(f1) AS center
FROM CIRCLE_TBL;
six | center
-----+-----------
| (5,1)
| (1,2)
| (1,3)
| (1,2)
| (100,200)
| (100,1)
(6 rows)
SELECT '' AS six, (@@ f1) AS center
FROM CIRCLE_TBL;
six | center
-----+-----------
| (5,1)
| (1,2)
| (1,3)
| (1,2)
| (100,200)
| (100,1)
(6 rows)
SELECT '' AS two, (@@ f1) AS center
FROM POLYGON_TBL
WHERE (# f1) > 2;
two | center
-----+-------------------------------
| (1.33333333333,1.33333333333)
| (2.33333333333,1.33333333333)
(2 rows)
-- "is horizontal" function
SELECT '' AS two, p1.f1
FROM POINT_TBL p1
WHERE ishorizontal(p1.f1, point '(0,0)');
two | f1
-----+---------
| (0,0)
| (-10,0)
(2 rows)
-- "is horizontal" operator
SELECT '' AS two, p1.f1
FROM POINT_TBL p1
WHERE p1.f1 ?- point '(0,0)';
two | f1
-----+---------
| (0,0)
| (-10,0)
(2 rows)
-- "is vertical" function
SELECT '' AS one, p1.f1
FROM POINT_TBL p1
WHERE isvertical(p1.f1, point '(5.1,34.5)');
one | f1
-----+------------
| (5.1,34.5)
(1 row)
-- "is vertical" operator
SELECT '' AS one, p1.f1
FROM POINT_TBL p1
WHERE p1.f1 ?| point '(5.1,34.5)';
one | f1
-----+------------
| (5.1,34.5)
(1 row)
--
-- Line segments
--
-- intersection
SELECT '' AS count, p.f1, l.s, l.s # p.f1 AS intersection
FROM LSEG_TBL l, POINT_TBL p;
ERROR: operator does not exist: lseg # point
LINE 1: SELECT '' AS count, p.f1, l.s, l.s # p.f1 AS intersection
^
HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts.
-- closest point
SELECT '' AS thirty, p.f1, l.s, p.f1 ## l.s AS closest
FROM LSEG_TBL l, POINT_TBL p;
thirty | f1 | s | closest
--------+------------+-------------------------------+----------------------------------
| (0,0) | [(1,2),(3,4)] | (1,2)
| (0,0) | [(0,0),(6,6)] | (-0,0)
| (0,0) | [(10,-10),(-3,-4)] | (-2.0487804878,-4.43902439024)
| (0,0) | [(-1000000,200),(300000,-40)] | (0.00284023658959,15.3846148603)
| (0,0) | [(11,22),(33,44)] | (11,22)
| (-10,0) | [(1,2),(3,4)] | (1,2)
| (-10,0) | [(0,0),(6,6)] | (0,0)
| (-10,0) | [(10,-10),(-3,-4)] | (-3,-4)
| (-10,0) | [(-1000000,200),(300000,-40)] | (-9.99715942258,15.386461014)
| (-10,0) | [(11,22),(33,44)] | (11,22)
| (-3,4) | [(1,2),(3,4)] | (1,2)
| (-3,4) | [(0,0),(6,6)] | (0.5,0.5)
| (-3,4) | [(10,-10),(-3,-4)] | (-3,-4)
| (-3,4) | [(-1000000,200),(300000,-40)] | (-2.99789812268,15.3851688427)
| (-3,4) | [(11,22),(33,44)] | (11,22)
| (5.1,34.5) | [(1,2),(3,4)] | (3,4)
| (5.1,34.5) | [(0,0),(6,6)] | (6,6)
| (5.1,34.5) | [(10,-10),(-3,-4)] | (-3,-4)
| (5.1,34.5) | [(-1000000,200),(300000,-40)] | (5.09647083221,15.3836744977)
| (5.1,34.5) | [(11,22),(33,44)] | (14.3,25.3)
| (-5,-12) | [(1,2),(3,4)] | (1,2)
| (-5,-12) | [(0,0),(6,6)] | (0,0)
| (-5,-12) | [(10,-10),(-3,-4)] | (-1.60487804878,-4.64390243902)
| (-5,-12) | [(-1000000,200),(300000,-40)] | (-4.99494420846,15.3855375282)
| (-5,-12) | [(11,22),(33,44)] | (11,22)
| (10,10) | [(1,2),(3,4)] | (3,4)
| (10,10) | [(0,0),(6,6)] | (6,6)
| (10,10) | [(10,-10),(-3,-4)] | (2.39024390244,-6.48780487805)
| (10,10) | [(-1000000,200),(300000,-40)] | (10.000993742,15.3827690473)
| (10,10) | [(11,22),(33,44)] | (11,22)
(30 rows)
--
-- Lines
--
--
-- Boxes
--
SELECT '' as six, box(f1) AS box FROM CIRCLE_TBL;
six | box
-----+----------------------------------------------------------------
| (7.12132034356,3.12132034356),(2.87867965644,-1.12132034356)
| (71.7106781187,72.7106781187),(-69.7106781187,-68.7106781187)
| (4.53553390593,6.53553390593),(-2.53553390593,-0.535533905933)
| (3.12132034356,4.12132034356),(-1.12132034356,-0.12132034356)
| (107.071067812,207.071067812),(92.9289321881,192.928932188)
| (181.317279836,82.3172798365),(18.6827201635,-80.3172798365)
(6 rows)
-- translation
SELECT '' AS twentyfour, b.f1 + p.f1 AS translation
FROM BOX_TBL b, POINT_TBL p;
twentyfour | translation
------------+-------------------------
| (2,2),(0,0)
| (3,3),(1,1)
| (2.5,3.5),(2.5,2.5)
| (3,3),(3,3)
| (-8,2),(-10,0)
| (-7,3),(-9,1)
| (-7.5,3.5),(-7.5,2.5)
| (-7,3),(-7,3)
| (-1,6),(-3,4)
| (0,7),(-2,5)
| (-0.5,7.5),(-0.5,6.5)
| (0,7),(0,7)
| (7.1,36.5),(5.1,34.5)
| (8.1,37.5),(6.1,35.5)
| (7.6,38),(7.6,37)
| (8.1,37.5),(8.1,37.5)
| (-3,-10),(-5,-12)
| (-2,-9),(-4,-11)
| (-2.5,-8.5),(-2.5,-9.5)
| (-2,-9),(-2,-9)
| (12,12),(10,10)
| (13,13),(11,11)
| (12.5,13.5),(12.5,12.5)
| (13,13),(13,13)
(24 rows)
SELECT '' AS twentyfour, b.f1 - p.f1 AS translation
FROM BOX_TBL b, POINT_TBL p;
twentyfour | translation
------------+---------------------------
| (2,2),(0,0)
| (3,3),(1,1)
| (2.5,3.5),(2.5,2.5)
| (3,3),(3,3)
| (12,2),(10,0)
| (13,3),(11,1)
| (12.5,3.5),(12.5,2.5)
| (13,3),(13,3)
| (5,-2),(3,-4)
| (6,-1),(4,-3)
| (5.5,-0.5),(5.5,-1.5)
| (6,-1),(6,-1)
| (-3.1,-32.5),(-5.1,-34.5)
| (-2.1,-31.5),(-4.1,-33.5)
| (-2.6,-31),(-2.6,-32)
| (-2.1,-31.5),(-2.1,-31.5)
| (7,14),(5,12)
| (8,15),(6,13)
| (7.5,15.5),(7.5,14.5)
| (8,15),(8,15)
| (-8,-8),(-10,-10)
| (-7,-7),(-9,-9)
| (-7.5,-6.5),(-7.5,-7.5)
| (-7,-7),(-7,-7)
(24 rows)
-- scaling and rotation
SELECT '' AS twentyfour, b.f1 * p.f1 AS rotation
FROM BOX_TBL b, POINT_TBL p;
twentyfour | rotation
------------+-----------------------------
| (0,0),(0,0)
| (0,0),(0,0)
| (0,0),(0,0)
| (0,0),(0,0)
| (-0,0),(-20,-20)
| (-10,-10),(-30,-30)
| (-25,-25),(-25,-35)
| (-30,-30),(-30,-30)
| (-0,2),(-14,0)
| (-7,3),(-21,1)
| (-17.5,2.5),(-21.5,-0.5)
| (-21,3),(-21,3)
| (0,79.2),(-58.8,0)
| (-29.4,118.8),(-88.2,39.6)
| (-73.5,104.1),(-108,99)
| (-88.2,118.8),(-88.2,118.8)
| (14,-0),(0,-34)
| (21,-17),(7,-51)
| (29.5,-42.5),(17.5,-47.5)
| (21,-51),(21,-51)
| (0,40),(0,0)
| (0,60),(0,20)
| (0,60),(-10,50)
| (0,60),(0,60)
(24 rows)
SELECT '' AS twenty, b.f1 / p.f1 AS rotation
FROM BOX_TBL b, POINT_TBL p
WHERE (p.f1 <-> point '(0,0)') >= 1;
twenty | rotation
--------+----------------------------------------------------------------------
| (0,-0),(-0.2,-0.2)
| (-0.1,-0.1),(-0.3,-0.3)
| (-0.25,-0.25),(-0.25,-0.35)
| (-0.3,-0.3),(-0.3,-0.3)
| (0.08,-0),(0,-0.56)
| (0.12,-0.28),(0.04,-0.84)
| (0.26,-0.7),(0.1,-0.82)
| (0.12,-0.84),(0.12,-0.84)
| (0.0651176557644,0),(0,-0.0483449262493)
| (0.0976764836466,-0.0241724631247),(0.0325588278822,-0.072517389374)
| (0.109762715209,-0.0562379754329),(0.0813970697055,-0.0604311578117)
| (0.0976764836466,-0.072517389374),(0.0976764836466,-0.072517389374)
| (-0,0.0828402366864),(-0.201183431953,0)
| (-0.100591715976,0.12426035503),(-0.301775147929,0.0414201183432)
| (-0.251479289941,0.103550295858),(-0.322485207101,0.0739644970414)
| (-0.301775147929,0.12426035503),(-0.301775147929,0.12426035503)
| (0.2,0),(0,0)
| (0.3,0),(0.1,0)
| (0.3,0.05),(0.25,0)
| (0.3,0),(0.3,0)
(20 rows)
--
-- Paths
--
SET geqo TO 'off';
SELECT '' AS eight, npoints(f1) AS npoints, f1 AS path FROM PATH_TBL;
eight | npoints | path
-------+---------+---------------------------
| 2 | [(1,2),(3,4)]
| 2 | ((1,2),(3,4))
| 4 | [(0,0),(3,0),(4,5),(1,6)]
| 2 | ((1,2),(3,4))
| 2 | ((1,2),(3,4))
| 2 | [(1,2),(3,4)]
| 2 | [(11,12),(13,14)]
| 2 | ((11,12),(13,14))
(8 rows)
SELECT '' AS four, path(f1) FROM POLYGON_TBL;
four | path
------+---------------------
| ((2,0),(2,4),(0,0))
| ((3,1),(3,3),(1,0))
| ((0,0))
| ((0,1),(0,1))
(4 rows)
-- translation
SELECT '' AS eight, p1.f1 + point '(10,10)' AS dist_add
FROM PATH_TBL p1;
eight | dist_add
-------+-----------------------------------
| [(11,12),(13,14)]
| ((11,12),(13,14))
| [(10,10),(13,10),(14,15),(11,16)]
| ((11,12),(13,14))
| ((11,12),(13,14))
| [(11,12),(13,14)]
| [(21,22),(23,24)]
| ((21,22),(23,24))
(8 rows)
-- scaling and rotation
SELECT '' AS eight, p1.f1 * point '(2,-1)' AS dist_mul
FROM PATH_TBL p1;
eight | dist_mul
-------+------------------------------
| [(4,3),(10,5)]
| ((4,3),(10,5))
| [(0,0),(6,-3),(13,6),(8,11)]
| ((4,3),(10,5))
| ((4,3),(10,5))
| [(4,3),(10,5)]
| [(34,13),(40,15)]
| ((34,13),(40,15))
(8 rows)
RESET geqo;
--
-- Polygons
--
-- containment
SELECT '' AS twentyfour, p.f1, poly.f1, poly.f1 ~ p.f1 AS contains
FROM POLYGON_TBL poly, POINT_TBL p;
twentyfour | f1 | f1 | contains
------------+------------+---------------------+----------
| (0,0) | ((2,0),(2,4),(0,0)) | t
| (0,0) | ((3,1),(3,3),(1,0)) | f
| (0,0) | ((0,0)) | t
| (0,0) | ((0,1),(0,1)) | f
| (-10,0) | ((2,0),(2,4),(0,0)) | f
| (-10,0) | ((3,1),(3,3),(1,0)) | f
| (-10,0) | ((0,0)) | f
| (-10,0) | ((0,1),(0,1)) | f
| (-3,4) | ((2,0),(2,4),(0,0)) | f
| (-3,4) | ((3,1),(3,3),(1,0)) | f
| (-3,4) | ((0,0)) | f
| (-3,4) | ((0,1),(0,1)) | f
| (5.1,34.5) | ((2,0),(2,4),(0,0)) | f
| (5.1,34.5) | ((3,1),(3,3),(1,0)) | f
| (5.1,34.5) | ((0,0)) | f
| (5.1,34.5) | ((0,1),(0,1)) | f
| (-5,-12) | ((2,0),(2,4),(0,0)) | f
| (-5,-12) | ((3,1),(3,3),(1,0)) | f
| (-5,-12) | ((0,0)) | f
| (-5,-12) | ((0,1),(0,1)) | f
| (10,10) | ((2,0),(2,4),(0,0)) | f
| (10,10) | ((3,1),(3,3),(1,0)) | f
| (10,10) | ((0,0)) | f
| (10,10) | ((0,1),(0,1)) | f
(24 rows)
SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 @ poly.f1 AS contained
FROM POLYGON_TBL poly, POINT_TBL p;
twentyfour | f1 | f1 | contained
------------+------------+---------------------+-----------
| (0,0) | ((2,0),(2,4),(0,0)) | t
| (0,0) | ((3,1),(3,3),(1,0)) | f
| (0,0) | ((0,0)) | t
| (0,0) | ((0,1),(0,1)) | f
| (-10,0) | ((2,0),(2,4),(0,0)) | f
| (-10,0) | ((3,1),(3,3),(1,0)) | f
| (-10,0) | ((0,0)) | f
| (-10,0) | ((0,1),(0,1)) | f
| (-3,4) | ((2,0),(2,4),(0,0)) | f
| (-3,4) | ((3,1),(3,3),(1,0)) | f
| (-3,4) | ((0,0)) | f
| (-3,4) | ((0,1),(0,1)) | f
| (5.1,34.5) | ((2,0),(2,4),(0,0)) | f
| (5.1,34.5) | ((3,1),(3,3),(1,0)) | f
| (5.1,34.5) | ((0,0)) | f
| (5.1,34.5) | ((0,1),(0,1)) | f
| (-5,-12) | ((2,0),(2,4),(0,0)) | f
| (-5,-12) | ((3,1),(3,3),(1,0)) | f
| (-5,-12) | ((0,0)) | f
| (-5,-12) | ((0,1),(0,1)) | f
| (10,10) | ((2,0),(2,4),(0,0)) | f
| (10,10) | ((3,1),(3,3),(1,0)) | f
| (10,10) | ((0,0)) | f
| (10,10) | ((0,1),(0,1)) | f
(24 rows)
SELECT '' AS four, npoints(f1) AS npoints, f1 AS polygon
FROM POLYGON_TBL;
four | npoints | polygon
------+---------+---------------------
| 3 | ((2,0),(2,4),(0,0))
| 3 | ((3,1),(3,3),(1,0))
| 1 | ((0,0))
| 2 | ((0,1),(0,1))
(4 rows)
SELECT '' AS four, polygon(f1)
FROM BOX_TBL;
four | polygon
------+-------------------------------------------
| ((0,0),(0,2),(2,2),(2,0))
| ((1,1),(1,3),(3,3),(3,1))
| ((2.5,2.5),(2.5,3.5),(2.5,3.5),(2.5,2.5))
| ((3,3),(3,3),(3,3),(3,3))
(4 rows)
SELECT '' AS four, polygon(f1)
FROM PATH_TBL WHERE isclosed(f1);
four | polygon
------+-------------------
| ((1,2),(3,4))
| ((1,2),(3,4))
| ((1,2),(3,4))
| ((11,12),(13,14))
(4 rows)
SELECT '' AS four, f1 AS open_path, polygon( pclose(f1)) AS polygon
FROM PATH_TBL
WHERE isopen(f1);
four | open_path | polygon
------+---------------------------+---------------------------
| [(1,2),(3,4)] | ((1,2),(3,4))
| [(0,0),(3,0),(4,5),(1,6)] | ((0,0),(3,0),(4,5),(1,6))
| [(1,2),(3,4)] | ((1,2),(3,4))
| [(11,12),(13,14)] | ((11,12),(13,14))
(4 rows)
-- convert circles to polygons using the default number of points
SELECT '' AS six, polygon(f1)
FROM CIRCLE_TBL;
six | polygon
-----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| ((2,1),(2.40192378865,2.5),(3.5,3.59807621135),(5,4),(6.5,3.59807621135),(7.59807621135,2.5),(8,1),(7.59807621135,-0.5),(6.5,-1.59807621135),(5,-2),(3.5,-1.59807621135),(2.40192378865,-0.5))
| ((-99,2),(-85.6025403784,52),(-49,88.6025403784),(1,102),(51,88.6025403784),(87.6025403784,52),(101,2),(87.6025403784,-48),(51,-84.6025403784),(1,-98),(-49,-84.6025403784),(-85.6025403784,-48))
| ((-4,3),(-3.33012701892,5.5),(-1.5,7.33012701892),(1,8),(3.5,7.33012701892),(5.33012701892,5.5),(6,3),(5.33012701892,0.5),(3.5,-1.33012701892),(1,-2),(-1.5,-1.33012701892),(-3.33012701892,0.5))
| ((-2,2),(-1.59807621135,3.5),(-0.5,4.59807621135),(1,5),(2.5,4.59807621135),(3.59807621135,3.5),(4,2),(3.59807621135,0.5),(2.5,-0.598076211353),(1,-1),(-0.5,-0.598076211353),(-1.59807621135,0.5))
| ((90,200),(91.3397459622,205),(95,208.660254038),(100,210),(105,208.660254038),(108.660254038,205),(110,200),(108.660254038,195),(105,191.339745962),(100,190),(95,191.339745962),(91.3397459622,195))
| ((-15,1),(0.40707856479,58.5),(42.5,100.592921435),(100,116),(157.5,100.592921435),(199.592921435,58.5),(215,1),(199.592921435,-56.5),(157.5,-98.5929214352),(100,-114),(42.5,-98.5929214352),(0.40707856479,-56.5))
(6 rows)
-- convert the circle to an 8-point polygon
SELECT '' AS six, polygon(8, f1)
FROM CIRCLE_TBL;
six | polygon
-----+------------------------------------------------------------------------------------------------------------------------------------------------------------------
| ((2,1),(2.87867965644,3.12132034356),(5,4),(7.12132034356,3.12132034356),(8,1),(7.12132034356,-1.12132034356),(5,-2),(2.87867965644,-1.12132034356))
| ((-99,2),(-69.7106781187,72.7106781187),(1,102),(71.7106781187,72.7106781187),(101,2),(71.7106781187,-68.7106781187),(1,-98),(-69.7106781187,-68.7106781187))
| ((-4,3),(-2.53553390593,6.53553390593),(1,8),(4.53553390593,6.53553390593),(6,3),(4.53553390593,-0.535533905933),(1,-2),(-2.53553390593,-0.535533905933))
| ((-2,2),(-1.12132034356,4.12132034356),(1,5),(3.12132034356,4.12132034356),(4,2),(3.12132034356,-0.12132034356),(1,-1),(-1.12132034356,-0.12132034356))
| ((90,200),(92.9289321881,207.071067812),(100,210),(107.071067812,207.071067812),(110,200),(107.071067812,192.928932188),(100,190),(92.9289321881,192.928932188))
| ((-15,1),(18.6827201635,82.3172798365),(100,116),(181.317279836,82.3172798365),(215,1),(181.317279836,-80.3172798365),(100,-114),(18.6827201635,-80.3172798365))
(6 rows)
--
-- Circles
--
SELECT '' AS six, circle(f1, 50.0)
FROM POINT_TBL;
six | circle
-----+-----------------
| <(0,0),50>
| <(-10,0),50>
| <(-3,4),50>
| <(5.1,34.5),50>
| <(-5,-12),50>
| <(10,10),50>
(6 rows)
SELECT '' AS four, circle(f1)
FROM BOX_TBL;
four | circle
------+-----------------------
| <(1,1),1.41421356237>
| <(2,2),1.41421356237>
| <(2.5,3),0.5>
| <(3,3),0>
(4 rows)
SELECT '' AS two, circle(f1)
FROM POLYGON_TBL
WHERE (# f1) >= 3;
two | circle
-----+-----------------------------------------------
| <(1.33333333333,1.33333333333),2.04168905064>
| <(2.33333333333,1.33333333333),1.47534300379>
(2 rows)
SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS distance
FROM CIRCLE_TBL c1, POINT_TBL p1
WHERE (p1.f1 <-> c1.f1) > 0
ORDER BY distance, circle using <, point using <<;
twentyfour | circle | point | distance
------------+----------------+------------+---------------
| <(1,2),3> | (-3,4) | 1.472135955
| <(5,1),3> | (0,0) | 2.09901951359
| <(5,1),3> | (-3,4) | 5.54400374532
| <(1,3),5> | (-10,0) | 6.40175425099
| <(1,3),5> | (10,10) | 6.40175425099
| <(5,1),3> | (10,10) | 7.29563014099
| <(1,2),3> | (-10,0) | 8.1803398875
| <(1,2),3> | (10,10) | 9.04159457879
| <(1,3),5> | (-5,-12) | 11.1554944214
| <(5,1),3> | (-10,0) | 12.0332963784
| <(1,2),3> | (-5,-12) | 12.2315462117
| <(5,1),3> | (-5,-12) | 13.4012194669
| <(1,3),5> | (5.1,34.5) | 26.7657047773
| <(1,2),3> | (5.1,34.5) | 29.7575945393
| <(5,1),3> | (5.1,34.5) | 30.5001492534
| <(100,200),10> | (5.1,34.5) | 180.778038568
| <(100,200),10> | (10,10) | 200.237960416
| <(100,200),10> | (-3,4) | 211.415898255
| <(100,200),10> | (0,0) | 213.60679775
| <(100,200),10> | (-10,0) | 218.25424421
| <(100,200),10> | (-5,-12) | 226.577682802
(21 rows)