From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Amit Kapila <amit(dot)kapila(at)huawei(dot)com> |
Cc: | "'PG Hackers'" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Issue in Behavior of Interval Datatype |
Date: | 2012-08-03 20:18:03 |
Message-ID: | 10515.1344025083@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Amit Kapila <amit(dot)kapila(at)huawei(dot)com> writes:
> select (interval '56:48' minute to second);
> result$B!'(B00:56:48
> select (interval '-56:48' minute to second);
> result$B!'(B-56:48:00
> select (interval '+56:48' minute to second);
> result$B!'(B56:48:00
> I have checked the code and found that in function DecodeInterval(), for
> timezone case (DTK_TZ) it uses INTERVAL_FULL_RANGE irrespective of range
> passed by user.
> However if use the range passed as argument in function DecodeInterval(),
> the result of using $B!F(B+$B!G(B or $B!F(B-$B!F(B is same as without using it.
> Is there any particular reason for ignoring the range for DTK_TZ case in
> DecodeInterval() function?
I think you are right; this if-block should be exactly like the DTK_TIME
case except for handling the prepended sign. That also raises the
question why it is changing the tmask value returned by DecodeTime.
It seems to be doing exactly the wrong thing there. Test case:
regression=# select (interval '56:48 56:48' );
ERROR: invalid input syntax for type interval: "56:48 56:48"
LINE 1: select (interval '56:48 56:48' );
^
regression=# select (interval '56:48 +56:48' );
interval
----------
56:48:00
(1 row)
The second one fails to fail because an inappropriate tmask value got
included into fmask.
Will fix.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Craig Ringer | 2012-08-04 04:56:28 | Re: [PATCH] Docs: Make notes on sequences and rollback more obvious |
Previous Message | Kevin Grittner | 2012-08-03 20:12:57 | Re: [PATCH] Docs: Make notes on sequences and rollback more obvious |