postgres.git / summary / log / commit / refs

commit    13b8a1c19626d425176b1e00a8104db1e339aaf3
Author:   Daniel Gustafsson <dgustafsson@postgresql.org>
Date:     Mon Sep 12 10:59:06 2022 +0000

    Fix NaN comparison in circle_same test
    
    Commit c4c340088 changed geometric operators to use float4 and float8
    functions, and handle NaN's in a better way. The circle sameness test
    had a typo in the code which resulted in all comparisons with the left
    circle having a NaN radius considered same.
    
      postgres=# select '<(0,0),NaN>'::circle ~= '<(0,0),1>'::circle;
      ?column?
      ----------
      t
      (1 row)
    
    This fixes the sameness test to consider the radius of both the left
    and right circle.
    
    Backpatch to v12 where this was introduced.
    
    Author: Ranier Vilela <ranier.vf@gmail.com>
    Discussion: https://postgr.es/m/CAEudQAo8dK=yctg2ZzjJuzV4zgOPBxRU5+Kb+yatFiddtQk6Rw@mail.gmail.com
    Backpatch-through: v12


src/backend/utils/adt/geo_ops.c | 2 +- src/test/regress/expected/geometry.out | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c index bfd9ff6a36c..c93a8441aee 100644 --- a/src/backend/utils/adt/geo_ops.c +++ b/src/backend/utils/adt/geo_ops.c @@ -4763,7 +4763,7 @@ circle_same(PG_FUNCTION_ARGS) CIRCLE *circle1 = PG_GETARG_CIRCLE_P(0); CIRCLE *circle2 = PG_GETARG_CIRCLE_P(1); - PG_RETURN_BOOL(((isnan(circle1->radius) && isnan(circle1->radius)) || + PG_RETURN_BOOL(((isnan(circle1->radius) && isnan(circle2->radius)) || FPeq(circle1->radius, circle2->radius)) && point_eq_point(&circle1->center, &circle2->center)); } diff --git a/src/test/regress/expected/geometry.out b/src/test/regress/expected/geometry.out index 974e2ec43a4..4bb1679157d 100644 --- a/src/test/regress/expected/geometry.out +++ b/src/test/regress/expected/geometry.out @@ -4342,9 +4342,8 @@ SELECT c1.f1, c2.f1 FROM CIRCLE_TBL c1, CIRCLE_TBL c2 WHERE c1.f1 ~= c2.f1; <(100,200),10> | <(100,200),10> <(100,1),115> | <(100,1),115> <(3,5),0> | <(3,5),0> - <(3,5),NaN> | <(3,5),0> <(3,5),NaN> | <(3,5),NaN> -(9 rows) +(8 rows) -- Overlap with circle SELECT c1.f1, c2.f1 FROM CIRCLE_TBL c1, CIRCLE_TBL c2 WHERE c1.f1 && c2.f1; [parent: be0b0528cb64]