[Haskell-cafe] Re: HDBC or HSQL

Alex Jacobson alex at alexjacobson.com
Fri Aug 3 18:04:10 EDT 2007


Have you looked at the HAppS.DBMS.IxSet?  It gives you a type safe way 
to query indexed collections.

-Alex-

Isto Aho wrote:
> Hi,
> 
> I'd like to store small matrices into a db. Number of rows and columns 
> may vary in a way not
> known in advance. One might use a relation (matrixId, col, row, value) 
> or something like that
> but if it is possible to put a matrix in one command into db, some 
> queries will be easier.
> E.g., one relation can store several matrices and it would be easy to 
> query, how many
> matrices are stored currently. With that above four tuple you can find 
> out the number of unique
> matrixId's, too, but it is not as easy as with matrices.
> 
> Anyhow, now I'm not sure if I should stick with HSQL any more... Earlier 
> comments on this
> thread made me think that maybe it would be a better idea to try to 
> learn enough HDBC.
> 
> This would be used in a server application. Is HAppS applicable here?
> 
> e.g. after some tweaking the following works with HSQL:
> 
> addRows = do
>         dbh <- connect server database user_id passwd
>         intoDB dbh ([555,111, 50, 1000]::[Int]) 
> ([21.0,22.0,23.0,24.0]::[Double])
>         intoDB dbh ([556,111, 50, 1000]::[Int]) 
> ([21.0,22.0,23.0,24.0]::[Double])
>         intoDB dbh ([]::[Int]) ([]::[Double])
>    where
>         intoDB dbh i_lst d_lst =
>                 catchSql (do
>                         let cmd = "INSERT INTO trial (intList, dList) 
> VALUES (" ++
>                                 toSqlValue i_lst ++ "," ++ toSqlValue 
> d_lst ++ ")"
>                         execute dbh cmd
>                         )
>                         (\e -> putStrLn $ "Problem: " ++ show e)
> 
> 
> Similarly, queries can handle matrices and I like that it is now
> possible to select those columns or rows from the stored matrix that
> are needed.  E.g.
> 
> retrieveRecords2 :: Connection -> IO [[Double]]
> retrieveRecords2 c = do
>         -- query c "select dList[1:2] from trial" >>= collectRows getRow
>         query c "select dList from trial" >>= collectRows getRow
>         where
>                 getRow :: Statement -> IO [Double]
>                 getRow stmt = do
>                         lst   <- getFieldValue stmt "dList"
>                         return lst
> readTable2 = do
>         dbh <- connect server database user_id passwd
>         values <- retrieveRecords2 dbh
>         putStrLn $ "dLists are : " ++ (show values)
> 
> 
> br,
> Isto
> 
> 
> 2007/8/1, Alex Jacobson <alex at alexjacobson.com 
> <mailto:alex at alexjacobson.com>>:
> 
>     Out of curiosity, can I ask what you are actually trying to do?
> 
>     I am asking because I am trying to make HAppS a reasonable replacement
>     for all contexts in which you would otherwise use an external relational
>     database except those in which an external SQL database is a specific
>     requirement.
> 
>     -Alex-
> 



More information about the Haskell-Cafe mailing list