|
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/
|