Re: jsonpath versus NaN
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alexander Korotkov <a.korotkov@postgrespro.ru>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-06-17T15:33:04Z
Lists: pgsql-hackers
Alexander Korotkov <a.korotkov@postgrespro.ru> writes: > On Thu, Jun 11, 2020 at 10:00 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> I don't think this is very relevant. The SQL standard has not got the >> concepts of Inf or NaN either (see 4.4.2 Characteristics of numbers), >> therefore their definition is only envisioning that a string representing >> a normal finite number should be castable to DOUBLE PRECISION. Thus, >> both of the relevant standards think that "numbers" are just finite >> numbers. > Yes, I see. No standard insists we should support NaN. However, > standard claims .double() should behave the same as CAST to double. > So, I think if CAST supports NaN, but .double() doesn't, it's still a > violation. No, I think you are completely misunderstanding the standard. They are saying that strings that look like legal numbers according to SQL should be castable into numbers. But NaN and Inf are not legal numbers according to SQL, so there is nothing in that text that justifies accepting "NaN". Nor does the JSON standard provide any support for that position. So I think it is fine to leave NaN/Inf out of the world of what you can write in jsonpath. I'd be more willing to let the code do this if it didn't require such a horrid, dangerous kluge to do so. But it does, and I don't see any easy way around that, so I think we should just take out the kluge. And do so sooner not later, before some misguided user starts to depend on it. regards, tom lane
Commits
-
Forbid numeric NaN in jsonpath
- f4ae676e3178 12.4 landed
- 89a0b1a7ca0a 13.0 landed
- df646509f371 14.0 landed
-
Improve error reporting for jsonpath .double() method
- 3ec5f6b53dfb 12.4 landed
- b9a04a9bc665 13.0 landed
- 065718116746 14.0 landed
-
Partial implementation of SQL/JSON path language
- 72b6460336e8 12.0 cited