mirror of
https://github.com/postgres/postgres.git
synced 2026-02-12 07:13:09 -05:00
Our documentation describes four allowed input syntaxes for circles, but the regression tests tried only three ... with predictable consequences. Remarkably, this has been wrong since the circle datatype was added in 1997, but nobody noticed till now. David Zhang, with some help from me Discussion: https://postgr.es/m/332c47fa-d951-7574-b5cc-a8f7f7201202@highgo.ca
57 lines
1.4 KiB
SQL
57 lines
1.4 KiB
SQL
--
|
|
-- CIRCLE
|
|
--
|
|
|
|
-- Back off displayed precision a little bit to reduce platform-to-platform
|
|
-- variation in results.
|
|
SET extra_float_digits = -1;
|
|
|
|
CREATE TABLE CIRCLE_TBL (f1 circle);
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('<(5,1),3>');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('((1,2),100)');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES (' 1 , 3 , 5 ');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES (' ( ( 1 , 2 ) , 3 ) ');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES (' ( 100 , 200 ) , 10 ');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES (' < ( 100 , 1 ) , 115 > ');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('<(3,5),0>'); -- Zero radius
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('<(3,5),NaN>'); -- NaN radius
|
|
|
|
-- bad values
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('<(-100,0),-100>');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('<(100,200),10');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('<(100,200),10> x');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('1abc,3,5');
|
|
|
|
INSERT INTO CIRCLE_TBL VALUES ('(3,(1,2),3)');
|
|
|
|
SELECT * FROM CIRCLE_TBL;
|
|
|
|
SELECT '' AS six, center(f1) AS center
|
|
FROM CIRCLE_TBL;
|
|
|
|
SELECT '' AS six, radius(f1) AS radius
|
|
FROM CIRCLE_TBL;
|
|
|
|
SELECT '' AS six, diameter(f1) AS diameter
|
|
FROM CIRCLE_TBL;
|
|
|
|
SELECT '' AS two, f1 FROM CIRCLE_TBL WHERE radius(f1) < 5;
|
|
|
|
SELECT '' AS four, f1 FROM CIRCLE_TBL WHERE diameter(f1) >= 10;
|
|
|
|
SELECT '' as five, c1.f1 AS one, c2.f1 AS two, (c1.f1 <-> c2.f1) AS distance
|
|
FROM CIRCLE_TBL c1, CIRCLE_TBL c2
|
|
WHERE (c1.f1 < c2.f1) AND ((c1.f1 <-> c2.f1) > 0)
|
|
ORDER BY distance, area(c1.f1), area(c2.f1);
|