
Hello all, Is there going to be a new maintainer for HSQL? I have submitted a number of patches to fix some painful bugs. It's been almost a year since my previous enquiry and the last release was December 15, 2005, over two years ago: https://sourceforge.net/project/showfiles.php?group_id=65248 The software no longer compiles with the latest version of GHC, due to some (seemingly gratuitous) changes in the Cabal libraries (I see there is a September 2007 thread on libraries@). Unfortunately, I am too busy to maintain it myself; I was probably even too busy to write the patches in the first place, but it is sad to see them go to waste... Frederik P.S. Quan Ta: regarding your July 20, 2006 query, "HSQL-MySQL: non-standard port", my first patch adds the ability to specify a non-standard port with the server host name, if you are still interested I can send it. On Sun, Mar 25, 2007 at 06:55:21PM +0200, Björn Bringert wrote:
I found this very old mail in my inbox, sorry for not responding sooner. Yeah, a new HSQL release would be a good idea, IMO. Krasimir is the maintainer, so it's really up to him.
/Björn
Frederik Eaton wrote:
Hi Bjorn,
The sourceforge page for HSQL shows a most recent release date of December 15, 2005 - over a year ago, presumably not including the timezone patch which I think fixes a rather serious bug, which caused a lot of problems for me when I tried to use HSQL for my master's project. Perhaps it might be helpful to other users if the fix were made available to them as well?
Thanks,
Frederik
On Fri, Aug 25, 2006 at 11:20:55AM +0200, Björn Bringert wrote:
Sorry for the delay, I've been on vacation. The timezone patch has been committed. I haven't added the Makefile, since I think that some cabal tools that will come with GHC 6.6 could make it obsolete.
/Björn
Frederik Eaton wrote:
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 = toEnum $ mon,
to
ctMonth = 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.
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 from >>>> the patch? >>> It appears to have been a simple whitespace mismatch problem (tabs in the original HSQL source). I >>> have committed your patch to CVS. >>> >>> Thanks! >>> >>> /Björn -- http://ofb.net/~frederik/
diff -ur HSQL-1.7-modified/HSQL/Database/HSQL.hsc HSQL-1.7-modified-2/HSQL/Database/HSQL.hsc --- HSQL-1.7-modified/HSQL/Database/HSQL.hsc 2005-12-15 20:57:18.000000000 +0000 +++ HSQL-1.7-modified-2/HSQL/Database/HSQL.hsc 2006-08-17 01:43:19.000000000 +0100 @@ -304,28 +304,17 @@
toSqlValue d = show d
-mkClockTime :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> ClockTime mkClockTime year mon mday hour min sec tz = - 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__ >= 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 = ctTZ (unsafePerformIO (getClockTime >>= toCalendarTime)) -- Hack + toClockTime $ CalendarTime { + ctYear = year, + ctMonth = toEnum $ mon, + ctDay = mday, + ctHour = hour, + ctMin = min, + ctSec = sec, + ctPicosec = 0, + ctTZ = tz + }
parseTZ :: ReadP Int parseTZ = (char '+' >> readDecP) `mplus` (char '-' >> fmap negate readDecP) @@ -373,14 +362,14 @@ getTime :: ReadP ClockTime getTime = do (hour, minutes, seconds) <- readHMS - return (mkClockTime 1970 1 1 hour minutes seconds currTZ) + return (mkClockTime 1970 1 1 hour minutes seconds 0)
fromSqlValue SqlDate s = f_read getDate s where getDate :: ReadP ClockTime getDate = do (year, month, day) <- readYMD - return (mkClockTime year month day 0 0 0 currTZ) + return (mkClockTime year month day 0 0 0 0)
fromSqlValue SqlDateTimeTZ s = f_read getDateTimeTZ s where @@ -400,7 +389,7 @@ getDateTime :: ReadP ClockTime getDateTime = 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)
fromSqlValue _ _ = Nothing
# This Makefile is mostly a wrapper around Setup.hs for people who # just want to type make.
CAS=runhaskell Setup.lhs CONFOPTS ?= --user --prefix=${HOME} INSTOPTS ?= --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
------------------------------------------------------------------------
diff -ur HSQL-1.7-modified/HSQL/Database/HSQL.hsc HSQL-1.7-modified-2/HSQL/Database/HSQL.hsc --- HSQL-1.7-modified/HSQL/Database/HSQL.hsc 2005-12-15 20:57:18.000000000 +0000 +++ HSQL-1.7-modified-2/HSQL/Database/HSQL.hsc 2006-08-17 22:04:23.000000000 +0100 @@ -304,28 +304,17 @@
toSqlValue d = show d
-mkClockTime :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> ClockTime mkClockTime year mon mday hour min sec tz = - 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__ >= 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 = ctTZ (unsafePerformIO (getClockTime >>= toCalendarTime)) -- Hack + toClockTime $ CalendarTime { + ctYear = year, + ctMonth = toEnum $ (mon-1), + ctDay = mday, + ctHour = hour, + ctMin = min, + ctSec = sec, + ctPicosec = 0, + ctTZ = tz + }
parseTZ :: ReadP Int parseTZ = (char '+' >> readDecP) `mplus` (char '-' >> fmap negate readDecP) @@ -373,14 +362,14 @@ getTime :: ReadP ClockTime getTime = do (hour, minutes, seconds) <- readHMS - return (mkClockTime 1970 1 1 hour minutes seconds currTZ) + return (mkClockTime 1970 1 1 hour minutes seconds 0)
fromSqlValue SqlDate s = f_read getDate s where getDate :: ReadP ClockTime getDate = do (year, month, day) <- readYMD - return (mkClockTime year month day 0 0 0 currTZ) + return (mkClockTime year month day 0 0 0 0)
fromSqlValue SqlDateTimeTZ s = f_read getDateTimeTZ s where @@ -400,7 +389,7 @@ getDateTime :: ReadP ClockTime getDateTime = 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)
fromSqlValue _ _ = Nothing
------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ htoolkit-users mailing list htoolkit-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/htoolkit-users