Re: Issue with point_ops and NaN

From: Julien Rouhaud <rjuju123(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Issue with point_ops and NaN
Date: 2021-03-31 04:04:26
Message-ID: 20210331040426.mmf7fylzeqr3zosm@nol
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Mar 30, 2021 at 11:39:40PM +0800, Julien Rouhaud wrote:
> On Tue, Mar 30, 2021 at 11:02:32AM -0400, Tom Lane wrote:
> > Julien Rouhaud <rjuju123(at)gmail(dot)com> writes:
> > > On Tue, Mar 30, 2021 at 02:47:05PM +0200, Laurenz Albe wrote:
> > >> I'd say that this is certainly wrong:
> > >> SELECT point('NaN','NaN') <@ polygon('(0,0),(1,0),(1,1),(0,0)');
> > >>
> > >> ?column?
> > >> ----------
> > >> t
> > >> (1 row)
> >
> > > Yeah that's what I think too, but I wanted to have confirmation.
> >
> > Agreed --- one could make an argument for either 'false' or NULL
> > result, but surely not 'true'.
>
> I would think that it should return NULL since it's not inside nor outside the
> polygon, but I'm fine with false.
>
> > I wonder if Horiguchi-san's patch [1] improves this case.
>
> Oh I totally missed that patch :(
>
> After a quick look I see this addition in point_inside():
>
> + /* NaN makes the point cannot be inside the polygon */
> + if (unlikely(isnan(x) || isnan(y)))
> + return 0;
>
> So I would assume that it should fix this case too. I'll check tomorrow.

I confirm that this patch fixes the issue, and after looking a bit more at the
thread it's unsurprising since Jesse initially reported the exact same problem.

I'll try to review it as soon as I'll be done with my work duties.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2021-03-31 04:05:03 Re: extra semicolon in postgres_fdw test cases
Previous Message Michael Paquier 2021-03-31 04:03:04 Re: Proposal: Save user's original authenticated identity for logging