From: books at ejurka.com (Kris Jurka) Date: Fri, 25 Jan 2008 05:08:14 -0500 (EST) Subject: [Pljava-dev] R: select CURRENT_TIMESTAMP is wrong In-Reply-To: References: <014401c85dbc$477601d0$16b0a8c0@ASUSSTEFANO> <09DA7761-B2E9-4036-B2B1-84F97418F3D4@mac.com> <014901c85dbf$c92040d0$16b0a8c0@ASUSSTEFANO> <227D74A0-C160-4036-ABBD-75D08B65C44A@mac.com> Message-ID: On Fri, 25 Jan 2008, Lucas Madar wrote: > I didn't post this to the list by mistake, but I found a solution. It appears > that some precision is being lost with certain compilers. The culprit is > this: > mSecs += EPOCH_DIFF * 1000; /* Adjust for diff > between Postgres and Java (Unix) */ > > EPOCH_DIFF is cast as an int32; multiplying it by 1000 yields some 949 > billion. Here's a fix: > > +#define EPOCH_DIFF (((uint64)86400) * (POSTGRES_EPOCH_JDATE - > UNIX_EPOCH_JDATE)) > I'm not sure what the implications of this change are. I see this existing code for the reverse operation and think we should mirror that instead: src/C/pljava/type/Timestamp.c:97 mSecs -= ((jlong)EPOCH_DIFF) * 1000L; Kris Jurka PS: I'm aware of your other reports, but I just haven't found the time to look into them. Keep things coming and we'll get to them eventually.