Re: to_timestamp not stable if date string shorter than - Mailing list pgsql-bugs

From Stephan Szabo
Subject Re: to_timestamp not stable if date string shorter than
Date
Msg-id 20030902184240.T56775-100000@megazone.bigpanda.com
Whole thread Raw
In response to Re: to_timestamp not stable if date string shorter than  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
Responses Re: to_timestamp not stable if date string shorter than  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
Re: to_timestamp not stable if date string shorter than  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
On Tue, 2 Sep 2003, Stephan Szabo wrote:

>
> On Tue, 2 Sep 2003, Tom Lane wrote:
>
> > "Stacy White" <harsh@computer.org> writes:
> > > to_timestamp appears to pick up the time-of-day from the previous call's
> > > return value if a date string has no time component.  For example:
> >
> > Weird.  I do not see that here, on either 7.3.4 or current sources.
> > Can anyone else reproduce it?
> >
> > For the record, I get:
> >
> > regression=#  select to_timestamp('2003-06-01', 'YYYY-MM-DD HH24:MI:SS') ;
> >       to_timestamp
> > ------------------------
> >  2003-06-01 00:00:00-04
> > (1 row)
> >
> > regression=#  select to_timestamp('2003-06-02 12:13:14', 'YYYY-MM-DD HH24:MI:SS') ;
> >       to_timestamp
> > ------------------------
> >  2003-06-02 12:13:14-04
> > (1 row)
> >
> > regression=#  select to_timestamp('2003-06-01', 'YYYY-MM-DD HH24:MI:SS') ;
> >       to_timestamp
> > ------------------------
> >  2003-06-01 00:00:00-04
> > (1 row)
>
> I seem to get the incorrect behavior on my 7.4 beta 1 system.  The
> behavior on my machine is really wierd in fact even without times
> involved:
>
> test=# select to_timestamp('2003-06-04', 'YYYY-MM-DD HH24:MI:SS') ;
>       to_timestamp
> ------------------------
>  2003-06-04 00:00:00-07
> (1 row)
>
> test=# select to_timestamp('2003-06', 'YYYY-MM-DD HH24:MI:SS') ;
>       to_timestamp
> ------------------------
>  2003-06-04 00:00:00-07
> (1 row)
>
> test=# select to_timestamp('2003', 'YYYY-MM-DD HH24:MI:SS') ;
>       to_timestamp
> ------------------------
>  2003-01-01 00:04:00-08
> (1 row)
>
> test=# select to_timestamp('2003-06', 'YYYY-MM-DD HH24:MI:SS') ;
>       to_timestamp
> ------------------------
>  2003-06-04 00:00:00-07
> (1 row)
>
> test=# select to_timestamp('2003-07', 'YYYY-MM-DD HH24:MI:SS') ;
>       to_timestamp
> ------------------------
>  2003-07-04 00:00:00-07
> (1 row)

From my beta1 machine it looks to me that to_timestamp is willing to read
off the end of the input string sometimes:

Breakpoint 3, DCH_processor (node=0x82d8da0, inout=0x8347860 "2003-06",
flag=2, data=0xbfffd080) at formatting.c:1302
1302                            len = n->key->action(n->key->id, s,
n->suffix, flag, n, data);
(gdb) print s
$3 = 0x8347860 "2003-06"
(gdb) cont
Continuing.

Breakpoint 3, DCH_processor (node=0x82d8da0, inout=0x8347860 "2003-06",
flag=2, data=0xbfffd080) at formatting.c:1302
1302                            len = n->key->action(n->key->id, s,
n->suffix, flag, n, data);
(gdb) print s
$4 = 0x8347865 "06"
(gdb) cont
Continuing.


** All of a sudden at this following breakpoint s has more text in it and
is past the \0 which would be at 0x8347867 AFAICS. ***

Breakpoint 3, DCH_processor (node=0x82d8da0, inout=0x8347860 "2003-06",
flag=2, data=0xbfffd080) at formatting.c:1302
1302                            len = n->key->action(n->key->id, s,
n->suffix, flag, n, data);
(gdb) print s
$5 = 0x8347868 "04 02:02:02"
(gdb) cont
Continuing.

Breakpoint 3, DCH_processor (node=0x82d8da0, inout=0x8347860 "2003-06",
flag=2, data=0xbfffd080) at formatting.c:1302
1302                            len = n->key->action(n->key->id, s,
n->suffix, flag, n, data);
(gdb) print s
$6 = 0x834786b "02:02:02"
(gdb)

---
 I don't entirely understand all of what that code is doing, but I think
there's something in there that needs to get fixed.

pgsql-bugs by date:

Previous
From:
Date:
Subject: Returned due to virus; was: Re: Wicked screensaver
Next
From: Stephan Szabo
Date:
Subject: Re: to_timestamp not stable if date string shorter than