pgsql-server: > After all that about numbering centuries and millenia

From: momjian(at)svr1(dot)postgresql(dot)org (Bruce Momjian)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql-server: > After all that about numbering centuries and millenia
Date: 2004-08-20 03:45:14
Message-ID: 20040820034514.5274A5E46CF@svr1.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
> After all that about numbering centuries and millenia correctly,
> why does CVS tip still give me
>
> regression=# select extract(century from now());
> date_part
> -----------
> 20
> (1 row)
> [ ... looks in code ... ]
>
> Apparently it's because you fixed only timestamp_part, and not
> timestamptz_part. I'm not too sure about what timestamp_trunc or
> timestamptz_trunc should do, but they may be wrong as well.

Sigh... as usual, what is not tested does not work:-(

> Could we have a more complete patch?

Please find a submission attached. I hope it really fixes all decade,
century and millenium issues for extract and *_trunc functions on
interval
and other timestamp types. If someone could check that the results
are reasonnable, it would be great.

I indeed overlooked the fact that there were two functions. The patch
fixes the code so that both variants agree.

I added comments to interval extractions, because it relies on the C
division to have a negative remainder: -7/10 = 0 and remains -7.

As for *_trunc functions, I have chosen to put the first year of the
century or millennium: -100, 1, 101... 1001 2001 etc. Indeed, I don't
think it would make sense to put 2000 (last year of the 2nd millennium)
for rounding all years of the third millenium.

I also fixed the code so that all decades last 10 years and decade 199
means the 1990's.

I have added some tests that are relevant to deal with tricky cases. The
formula may be simplified, but all these cases must pass. Please keep
them.

Fabien Coelho

Modified Files:
--------------
pgsql-server/src/backend/utils/adt:
timestamp.c (r1.109 -> r1.110)
(http://developer.postgresql.org/cvsweb.cgi/pgsql-server/src/backend/utils/adt/timestamp.c.diff?r1=1.109&r2=1.110)
pgsql-server/src/test/regress/expected:
date.out (r1.5 -> r1.6)
(http://developer.postgresql.org/cvsweb.cgi/pgsql-server/src/test/regress/expected/date.out.diff?r1=1.5&r2=1.6)
pgsql-server/src/test/regress/sql:
date.sql (r1.3 -> r1.4)
(http://developer.postgresql.org/cvsweb.cgi/pgsql-server/src/test/regress/sql/date.sql.diff?r1=1.3&r2=1.4)

Browse pgsql-committers by date

  From Date Subject
Next Message Bruce Momjian 2004-08-20 04:20:23 pgsql-server: > Please find attached a submission to add a "exit on
Previous Message Bruce Momjian 2004-08-20 03:06:00 pgsql-server: Add: > * Add a function that returns the 'uptime' of the