On Wed, Feb 26, 2020 at 06:38:57PM +0800, John Naylor wrote: > On Wed, Feb 26, 2020 at 3:51 PM David Fetter <da...@fetter.org> wrote: > > > > I believe the following should error out, but doesn't. > > > > # SELECT date_trunc_interval('1 year 1 ms', TIMESTAMP '2001-02-16 > > 20:38:40'); > > date_trunc_interval > > ═════════════════════ > > 2001-01-01 00:00:00 > > (1 row) > > You're quite right. I forgot to add error checking for > second-and-below units. I've added your example to the tests. (I > neglected to mention in my first email that because I chose to convert > the interval to the pg_tm struct (seemed easiest), it's not > straightforward how to allow multiple unit types, and I imagine the > use case is small, so I had it throw an error.)
I suspect that this could be sanely expanded to span some sets of adjacent types in a future patch, e.g. year + month or hour + minute. > > Please find attached an update that I believe fixes the bug I found in > > a principled way. > > Thanks for that! I made a couple adjustments and incorporated your fix > into v3: While working on v1, I noticed the DTK_FOO macros already had > an idiom for bitmasking (see utils/datetime.h), Oops! Sorry I missed that. Best, David. -- David Fetter <david(at)fetter(dot)org> http://fetter.org/ Phone: +1 415 235 3778 Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate