Hi,

I got an error when I was trying to insert a circle using the syntax (the 3rd one) specified in the latest document.

https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-CIRCLE
< ( x , y ) , r >
( ( x , y ) , r )
  ( x , y ) , r
    x , y   , r

Here is how to reproduce it.

CREATE TABLE tbl_circle(id serial PRIMARY KEY, a circle);
INSERT INTO tbl_circle(a) VALUES('( 1 , 1 ) , 5'::circle );

ERROR:  invalid input syntax for type circle: "( 1 , 1 ) , 5"
LINE 1: INSERT INTO tbl_circle(a) VALUES('( 1 , 1 ) , 5'::circle );

I made a little change in the "circle_in" function, and then I can enter a circle using the 3rd way.

INSERT INTO tbl_circle(a) VALUES('( 1 , 1 ) , 5'::circle );
INSERT 0 1

The fix does generate the same output as the other three ways.

INSERT INTO tbl_circle(a) VALUES( '< ( 1 , 1 ) , 5 >'::circle );
INSERT INTO tbl_circle(a) VALUES( '( ( 1 , 1 ) , 5 )'::circle );
INSERT INTO tbl_circle(a) VALUES( '1 , 1 , 5'::circle );

select * from tbl_circle;
 id |     a
----+-----------
  1 | <(1,1),5>
  2 | <(1,1),5>
  3 | <(1,1),5>
  4 | <(1,1),5>
(4 rows)

Sor far, no error found during the "make check".

The patch based on tag "REL_12_2" is attached.

--
David

Software Engineer
Highgo Software Inc. (Canada)
www.highgo.ca
diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index 373784fcc1..6efd5bc1f2 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -4528,7 +4528,7 @@ circle_in(PG_FUNCTION_ARGS)
 
        while (depth > 0)
        {
-               if ((*s == RDELIM) || ((*s == RDELIM_C) && (depth == 1)))
+               if ((*s == RDELIM) || (((*s == RDELIM_C) || (*s == '\0')) && 
(depth == 1)))
                {
                        depth--;
                        s++;

Reply via email to