From: Frederik E. <fre...@a5...> - 2006-08-17 21:10:50
|
Hi, Oops, sorry, there was a bug. Here's a more-tested patch. Stay tuned! (if you've already applied the last one, change HSQL.hsc's ctMonth =3D toEnum $ mon, to ctMonth =3D toEnum $ (mon-1), ) Frederik On Thu, Aug 17, 2006 at 01:49:40AM +0100, Frederik Eaton wrote: > I'm attaching a patch which I've tested. >=20 > I'm also attaching a Makefile derived from Bulat's IIRC, it might be > good to include it in those directories which contain a .cabal file. >=20 > Thanks, >=20 > Frederik >=20 > On Thu, Aug 17, 2006 at 01:17:11AM +0100, Frederik Eaton wrote: > > Hi, in > >=20 > > HSQL/Database/HSQL.hsc > >=20 > > instance SqlBind ClockTime where > > ... > >=20 > > all of the 'fromSqlValue' functions convert with respect to the local > > timezone, while 'toSqlValue' converts with respect to UTC. Thus the > > values being written are not the same, it would seem, as those being > > read. Certainly that is the case for me. > >=20 > > If the three appearances of currTZ within the body of that instance > > (and not elsewhere) are changed to 0, it should fix the problem (but = I > > haven't tested). > >=20 > > Also, I don't understand why a custom function 'mkClockTime' has been > > written in that module (it calls 'mktime' via FFI), rather than > > calling the standard library function toClockTime which seems to do > > the same thing. > >=20 > > Frederik > >=20 > > On Thu, Aug 10, 2006 at 04:19:36PM +0100, Frederik Eaton wrote: > > > In HSQL, why are 'datetime' columns interpreted as being in the loc= al > > > timezone? > > >=20 > > > I would think that UTC would be more useful. If the local timezone = is > > > used, then it makes it more difficult to move a server between > > > timezones, or to have multiple servers in multiple timezones. > > >=20 > > > Frederik > > >=20 > > > On Sat, Aug 05, 2006 at 06:59:21PM +0100, Frederik Eaton wrote: > > > > Thanks! > > > >=20 > > > > On Sat, Aug 05, 2006 at 05:27:04PM +0200, Bjorn Bringert wrote: > > > > > On Aug 5, 2006, at 3:34 PM, Frederik Eaton wrote: > > > > >=20 > > > > > >On Sat, Aug 05, 2006 at 11:15:19AM +0200, Bjorn Bringert wrote= : > > > > > >>On Jul 31, 2006, at 12:55 PM, Frederik Eaton wrote: > > > > > >> > > > > > >>>Hi, > > > > > >>> > > > > > >>>I'm attaching another HSQL patch. > > > > > >>> > > > > > >>>It allows users to specify a port number with the server nam= e in the > > > > > >>>MySQL client. > > > > > >>> > > > > > >>>Frederik > > > > > >> > > > > > >>Hi Frederik, > > > > > >> > > > > > >>the patch doesn't apply cleanly against the current CVS versi= on. Is > > > > > >>there any chance you could make a patch against the CVS versi= on > > > > > >>instead? > > > > > > > > > > > >It's a very simple modification, can't you just copy and paste= from > > > > > >the patch? > > > > >=20 > > > > > It appears to have been a simple whitespace mismatch problem (t= abs in the original HSQL source). I=20 > > > > > have committed your patch to CVS. > > > > >=20 > > > > > Thanks! > > > > >=20 > > > > > /Bj=F6rn >=20 > --=20 > http://ofb.net/~frederik/ > diff -ur HSQL-1.7-modified/HSQL/Database/HSQL.hsc HSQL-1.7-modified-2/H= SQL/Database/HSQL.hsc > --- HSQL-1.7-modified/HSQL/Database/HSQL.hsc 2005-12-15 20:57:18.000000= 000 +0000 > +++ HSQL-1.7-modified-2/HSQL/Database/HSQL.hsc 2006-08-17 01:43:19.0000= 00000 +0100 > @@ -304,28 +304,17 @@ > =20 > toSqlValue d =3D show d > =20 > -mkClockTime :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> ClockT= ime > mkClockTime year mon mday hour min sec tz =3D > - unsafePerformIO $ do > - allocaBytes (#const sizeof(struct tm)) $ \ p_tm -> do > - (#poke struct tm,tm_sec ) p_tm (fromIntegral sec :: CInt) > - (#poke struct tm,tm_min ) p_tm (fromIntegral min :: CInt) > - (#poke struct tm,tm_hour ) p_tm (fromIntegral hour :: CInt) > - (#poke struct tm,tm_mday ) p_tm (fromIntegral mday :: CInt) > - (#poke struct tm,tm_mon ) p_tm (fromIntegral (mon-1) :: CInt) > - (#poke struct tm,tm_year ) p_tm (fromIntegral (year-1900) :: CInt) > - (#poke struct tm,tm_isdst) p_tm (-1 :: CInt) > - t <- mktime p_tm > -#if __GLASGOW_HASKELL__ >=3D 603 > - return (TOD (fromIntegral (fromEnum t) + fromIntegral (tz-currTZ)) = 0) > -#else > - return (TOD (fromIntegral t + fromIntegral (tz-currTZ)) 0) > -#endif > -foreign import ccall unsafe mktime :: Ptr () -> IO CTime > - > -{-# NOINLINE currTZ #-} > -currTZ :: Int > -currTZ =3D ctTZ (unsafePerformIO (getClockTime >>=3D toCalendarTime)) = -- Hack > + toClockTime $ CalendarTime { > + ctYear =3D year, > + ctMonth =3D toEnum $ mon, > + ctDay =3D mday, > + ctHour =3D hour, > + ctMin =3D min, > + ctSec =3D sec, > + ctPicosec =3D 0, > + ctTZ =3D tz > + } > =20 > parseTZ :: ReadP Int > parseTZ =3D (char '+' >> readDecP) `mplus` (char '-' >> fmap negate r= eadDecP) > @@ -373,14 +362,14 @@ > getTime :: ReadP ClockTime > getTime =3D do > (hour, minutes, seconds) <- readHMS > - return (mkClockTime 1970 1 1 hour minutes seconds currTZ) > + return (mkClockTime 1970 1 1 hour minutes seconds 0) > =20 > fromSqlValue SqlDate s =3D f_read getDate s > where > getDate :: ReadP ClockTime > getDate =3D do > (year, month, day) <- readYMD > - return (mkClockTime year month day 0 0 0 currTZ) > + return (mkClockTime year month day 0 0 0 0) > =20 > fromSqlValue SqlDateTimeTZ s =3D f_read getDateTimeTZ s > where > @@ -400,7 +389,7 @@ > getDateTime :: ReadP ClockTime > getDateTime =3D do > (year, month, day, hour, minutes, seconds) <- readDateTime > - return (mkClockTime year month day hour minutes seconds currTZ) > + return (mkClockTime year month day hour minutes seconds 0) > =20 > fromSqlValue _ _ =3D Nothing > =20 > # This Makefile is mostly a wrapper around Setup.hs for people who > # just want to type make. >=20 > CAS=3Drunhaskell Setup.lhs > CONFOPTS ?=3D --user --prefix=3D${HOME} > INSTOPTS ?=3D --user >=20 > all: build >=20 > configure: .setup-config > .setup-config: HSQL.cabal > ${CAS} configure ${CONFOPTS} >=20 > build: configure > ${CAS} build >=20 > install: build > ${CAS} install ${INSTOPTS} >=20 > uninstall: unregister > unregister: configure > ${CAS} unregister >=20 > clean: > -runhaskell Setup.hs clean > -rm -rf dist > -rm -f .setup-config >=20 > .PHONY: all configure build install uninstall unregister clean --=20 http://ofb.net/~frederik/ |