On Tue, 29 Jul 2003, Dmitry Tkach wrote:
> Stephan Szabo wrote:
>
> >On Tue, 29 Jul 2003, Dmitry Tkach wrote:
> >
> >
> >
> >>Yeah... Looks weird.
> >>For some reason, even date_pli(now(), 2) doesn't work any more - you
> >>have to do date_pli(now()::date,2)
> >>I guess, the now()+2 has the same problem - for some reason, it fails to
> >>coerce timestamptz into date automatically :-(
> >>Why is that? There is only one function called date_pli(), and there is
> >>an unambigous conversion date(timestamptz)... Why does it now force the
> >>user to cast explicitly???
> >>
> >>
> >
> >It's not an implicit cast any longer (see pg_cast). Implicit casts often
> >result in unexpected behavior.
> >
> >For example, what should now()+2 mean? Converting to date and adding two
> >days is fairly wierd behavior, I'd much more expect it to say add 2
> >seconds or error. now() + interval '2 days' or cast(now() as date)+2 both
> >express the intent of adding 2 days much better.
> >
> >
> Ok, granted that, but what's wrong with date_pli (now(), 2)?
It's a similar issue. As a potential counter example, what about
date_pli('foo', 2) or date_pli(inet '1.1.1.1', 2)? There's a cast
from text->date and a cast inet->text. If you allow downcasts and
arbitrary casts you can get some really odd behavior.