From: <bri...@cs...> - 2006-08-25 09:18:46
|
Sorry for the delay, I've been on vacation. The timezone patch has been=20 committed. I haven't added the Makefile, since I think that some cabal=20 tools that will come with GHC 6.6 could make it obsolete. /Bj=F6rn Frederik Eaton wrote: > Hi, >=20 > Oops, sorry, there was a bug. Here's a more-tested patch. Stay tuned! >=20 > (if you've already applied the last one, change HSQL.hsc's >=20 > ctMonth =3D toEnum $ mon, >=20 > to >=20 > ctMonth =3D toEnum $ (mon-1), >=20 > ) >=20 > Frederik >=20 > On Thu, Aug 17, 2006 at 01:49:40AM +0100, Frederik Eaton wrote: >=20 >>I'm attaching a patch which I've tested. >> >>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. >> >>Thanks, >> >>Frederik >> >>On Thu, Aug 17, 2006 at 01:17:11AM +0100, Frederik Eaton wrote: >> >>>Hi, in >>> >>>HSQL/Database/HSQL.hsc >>> >>>instance SqlBind ClockTime where >>>... >>> >>>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. >>> >>>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). >>> >>>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. >>> >>>Frederik >>> >>>On Thu, Aug 10, 2006 at 04:19:36PM +0100, Frederik Eaton wrote: >>> >>>>In HSQL, why are 'datetime' columns interpreted as being in the local >>>>timezone? >>>> >>>>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. >>>> >>>>Frederik >>>> >>>>On Sat, Aug 05, 2006 at 06:59:21PM +0100, Frederik Eaton wrote: >>>> >>>>>Thanks! >>>>> >>>>>On Sat, Aug 05, 2006 at 05:27:04PM +0200, Bjorn Bringert wrote: >>>>> >>>>>>On Aug 5, 2006, at 3:34 PM, Frederik Eaton wrote: >>>>>> >>>>>> >>>>>>>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 name in= the >>>>>>>>>MySQL client. >>>>>>>>> >>>>>>>>>Frederik >>>>>>>> >>>>>>>>Hi Frederik, >>>>>>>> >>>>>>>>the patch doesn't apply cleanly against the current CVS version. = Is >>>>>>>>there any chance you could make a patch against the CVS version >>>>>>>>instead? >>>>>>> >>>>>>>It's a very simple modification, can't you just copy and paste fro= m >>>>>>>the patch? >>>>>> >>>>>>It appears to have been a simple whitespace mismatch problem (tabs = in the original HSQL source). I=20 >>>>>>have committed your patch to CVS. >>>>>> >>>>>>Thanks! >>>>>> >>>>>>/Bj=F6rn >> >>--=20 >>http://ofb.net/~frederik/ >=20 >=20 >>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 >=20 >=20 >># This Makefile is mostly a wrapper around Setup.hs for people who >># just want to type make. >> >>CAS=3Drunhaskell Setup.lhs >>CONFOPTS ?=3D --user --prefix=3D${HOME} >>INSTOPTS ?=3D --user >> >>all: build >> >>configure: .setup-config >>.setup-config: HSQL.cabal >> ${CAS} configure ${CONFOPTS} >> >>build: configure >> ${CAS} build >> >>install: build >> ${CAS} install ${INSTOPTS} >> >>uninstall: unregister >>unregister: configure >> ${CAS} unregister >> >>clean: >> -runhaskell Setup.hs clean >> -rm -rf dist >> -rm -f .setup-config >> >>.PHONY: all configure build install uninstall unregister clean >=20 >=20 >=20 >=20 > -----------------------------------------------------------------------= - >=20 > 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 22:04:23.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-1), > + 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 >=20 >=20 > -----------------------------------------------------------------------= - >=20 > -----------------------------------------------------------------------= -- > Using Tomcat but need to do more? Need to support web services, securit= y? > Get stuff done quickly with pre-integrated technology to make your job = easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geron= imo > http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat= =3D121642 >=20 >=20 > -----------------------------------------------------------------------= - >=20 > _______________________________________________ > htoolkit-users mailing list > hto...@li... > https://lists.sourceforge.net/lists/listinfo/htoolkit-users |