Re: proposal: simple date constructor from numeric values - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: proposal: simple date constructor from numeric values
Date
Msg-id CAFj8pRB9WBQ69c4MrFsM4fayPBUK_BfenYSyR775V4Mnw7W5Kw@mail.gmail.com
Whole thread Raw
In response to Re: proposal: simple date constructor from numeric values  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
2013/7/3 Tom Lane <tgl@sss.pgh.pa.us>:
> Alvaro Herrera <alvherre@2ndquadrant.com> writes:
>> Peter Eisentraut escribió:
>>> On 7/1/13 3:47 AM, Pavel Stehule wrote:
>>>> CREATE OR REPLACE FUNCTION construct_time(hour int DEFAULT 0, mi int
>>>> DEFAULT 0, sec int DEFAULT 0, ms float DEFAULT 0.0);
>>>
>>> If we are using integer datetime storage, we shouldn't use floats to
>>> construct them.
>
>> I think this is wrong.  Datetime storage may be int, but since they're
>> microseconds underneath, we'd be unable to specify a full-resolution
>> timestamp if we didn't have float ms or integer ľs.  So either the
>> seconds argument should allow fractions (probably not a good idea), or
>> we should have another integer argument for microseconds (not
>> milliseconds as the above signature implies).
>
> FWIW, I'd vote for allowing the seconds to be fractional.  That's the
> way the user perceives things:
>
> regression=# select '12:34:56.789'::time;
>      time
> --------------
>  12:34:56.789
> (1 row)
>
> Moreover, an integer microseconds argument would be a shortsighted idea
> because it wires the precision limit into the function API.  As long as
> we make the seconds argument be float8, it will work fine even when the
> underlying precision switches to, say, nanoseconds.
>
> And lastly, those default arguments are a bad idea as well.  There's no
> reasonable use-case for make_time(12); that's almost certainly an error.
> Even more so for make_time().  While you could make some case for
> make_time(12,34) being useful, I don't think it buys much compared
> to writing out make_time(12,34,0), and having just one function
> signature is that much less cognitive load on users.
>

I had a plan use DEFAULT only for usec parameter (if it was used).
Seconds was mandatory parameter.

After tests on prototype I think so fractional sec is better. Separate
value (in usec) is really big number - not practical for hand writing

> So my vote is for make_time(hour int, min int, sec float8).

+1

Pavel
>
>                         regards, tom lane



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: preserving forensic information when we freeze
Next
From: Tom Lane
Date:
Subject: Re: Add regression tests for COLLATE