Re: Since '2001-09-09 01:46:40'::timestamp microseconds are lost when extracting epoch
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Noah Misch <noah@leadboat.com>
Cc: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>,
Vik Fearing <vik@postgresfriends.org>,
Thomas Munro <thomas.munro@gmail.com>,
Petr Fedorov <petr.fedorov@phystech.edu>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2021-06-06T16:38:26Z
Lists: pgsql-bugs, pgsql-hackers
I wrote: > Noah Misch <noah@leadboat.com> writes: >> equalfuncs.c has been using COMPARE_COERCIONFORM_FIELD() to ignore differences >> in fields of this type. Does this spot have cause to depart from the pattern? > Oversight, I think. Will fix. After looking closer, I see that there are a couple of very very minor ways in which parse analysis changes behavior based on the value of FuncCall.funcformat: * transformRangeFunction won't apply the appropriate transformation to a multiple-argument unnest() unless the format is COERCE_EXPLICIT_CALL. (This is likely a no-op, though, as no grammar production that emits COERCE_SQL_SYNTAX could apply to the function name "unnest".) * ParseFuncOrColumn will not believe that a FuncCall could_be_projection unless the format is COERCE_EXPLICIT_CALL. This is next door to a no-op, since other restrictions such as nargs == 1 would usually suffice to reject COERCE_SQL_SYNTAX calls, but maybe there are corner cases where it'd matter. So if you wanted to be picky you could claim that within FuncCall, funcformat is semantically significant and thus that equalfuncs.c is coded correctly. Nonetheless I'm inclined to think that it'd be better to use COMPARE_COERCIONFORM_FIELD here. I'm quite sure I didn't make the above analysis when I wrote the code; using COMPARE_SCALAR_FIELD was just reflex. We could make use of COMPARE_COERCIONFORM_FIELD 100% correct by removing these two tests of the funcformat value, but on the whole I doubt that would be better. BTW, I'm not sure any of this matters anyway; do we ever use equal() on raw parse trees, except for debug purposes? Thoughts? regards, tom lane
Commits
-
Fix inconsistent equalfuncs.c behavior for FuncCall.funcformat.
- a65e9f3f1405 14.0 landed
-
Doc: fix discussion of how to get real Julian Dates.
- f6171e6843f0 9.6.22 landed
- c93f8f3b8d3b 14.0 landed
- 824df1cccb74 12.7 landed
- 7cd542023056 11.12 landed
- 7bbcfb4d584d 13.3 landed
- 56e234b6aff9 10.17 landed
-
Doc: document EXTRACT(JULIAN ...), improve Julian Date explanation.
- ec5bab9217cd 13.3 landed
- b391db4943dc 9.6.22 landed
- b230618ce875 12.7 landed
- 79a5928ebcb7 14.0 landed
- 64d617de3c59 10.17 landed
- 4b610547c27a 11.12 landed
-
Change return type of EXTRACT to numeric
- a2da77cdb466 14.0 landed
-
Improve our ability to regurgitate SQL-syntax function calls.
- 40c24bfef925 14.0 landed
-
Add more tests for EXTRACT of date type
- 540612fa469e 14.0 landed
-
Expose internal function for converting int64 to numeric
- 0aa8f764088e 14.0 landed
-
Change floating-point output format for improved performance.
- 02ddd499322a 12.0 cited