diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c index f57380a4df..49c1608a63 100644 --- a/src/backend/utils/adt/geo_ops.c +++ b/src/backend/utils/adt/geo_ops.c @@ -4525,8 +4525,8 @@ poly_path(PG_FUNCTION_ARGS) /* circle_in - convert a string to internal form. * * External format: (center and radius of circle) - * "((f8,f8))" - * also supports quick entry style "(f8,f8,f8)" + * "<(f8,f8),f8>" + * also supports quick entry style "f8,f8,f8" */ Datum circle_in(PG_FUNCTION_ARGS) @@ -4540,16 +4540,19 @@ circle_in(PG_FUNCTION_ARGS) s = str; while (isspace((unsigned char) *s)) s++; - if ((*s == LDELIM_C) || (*s == LDELIM)) + if (*s == LDELIM_C) + depth++, s++; + else if (*s == LDELIM) { - depth++; + /* If there are two left parens, consume the first one */ cp = (s + 1); while (isspace((unsigned char) *cp)) cp++; if (*cp == LDELIM) - s = cp; + depth++, s = cp; } + /* pair_decode will consume parens around the pair, if any */ pair_decode(s, &circle->center.x, &circle->center.y, &s, "circle", str); if (*s == DELIM) diff --git a/src/test/regress/expected/circle.out b/src/test/regress/expected/circle.out index 9ba4a0495d..047bc35265 100644 --- a/src/test/regress/expected/circle.out +++ b/src/test/regress/expected/circle.out @@ -3,11 +3,11 @@ -- 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 ('((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 > '); -- bad values INSERT INTO CIRCLE_TBL VALUES ('<(-100,0),-100>'); ERROR: invalid input syntax for type circle: "<(-100,0),-100>" diff --git a/src/test/regress/sql/circle.sql b/src/test/regress/sql/circle.sql index c0284b2b59..8dd4445b0e 100644 --- a/src/test/regress/sql/circle.sql +++ b/src/test/regress/sql/circle.sql @@ -6,15 +6,15 @@ 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,2),100)'); -INSERT INTO CIRCLE_TBL VALUES ('1,3,5'); +INSERT INTO CIRCLE_TBL VALUES (' 1 , 3 , 5 '); -INSERT INTO CIRCLE_TBL VALUES ('((1,2),3)'); +INSERT INTO CIRCLE_TBL VALUES (' ( ( 1 , 2 ) , 3 ) '); -INSERT INTO CIRCLE_TBL VALUES ('<(100,200),10>'); +INSERT INTO CIRCLE_TBL VALUES (' ( 100 , 200 ) , 10 '); -INSERT INTO CIRCLE_TBL VALUES ('<(100,1),115>'); +INSERT INTO CIRCLE_TBL VALUES (' < ( 100 , 1 ) , 115 > '); -- bad values