Hi,
does the package adhere to some form of standard API that works the
same way across other similar packages (different mysql drivers,
postgres, mongo, couch, etc)?

Is there such a standard for haskell?

D.

On Tue, Jun 21, 2011 at 13:45, David Virebayre
<[email protected]> wrote:
> 2011/5/2 Bryan O'Sullivan <[email protected]>:
>> Hi, folks -
>> Over the past few days, I've released two MySQL-related packages on Hackage
>> that I think should be pretty useful.
>> The first is mysql-simple: http://hackage.haskell.org/package/mysql-simple
>> This is a mid-level binding to the MySQL client API. I aimed it squarely at
>> being both fast and easy to use, and I'm very pleased with the results so
>> far.
>
> Hello,
>
> Some feedback about a very first try with your library;
>
> First of all, thanks a lot for releasing it, I hope it'll make many
> people's life easier.
> Also, thanks for taking the time to write a nice, thorough documentation.
>
> The library was easy to install, thanks to cabal -- no troubles here.
>
> I had trouble accessing the documentation : the last versions on
> hackage have a build failure, so the doc isn't available. I was able
> to see the documentation for mysql-simple-0.2.2.0 though.
>
> The very first example didn't work for me :
> ------------------------
> {-# LANGUAGE OverloadedStrings #-}
>
>  import Database.MySQL.Simple
>
>  hello = do
>   conn <- connect defaultConnectInfo
>   query conn "select 2 + 2"
> ------------------------
>   Couldn't match expected type `IO b'
>           against inferred type `q -> IO [r]'
>    In the expression: query conn "select 2 + 2"
>    In the expression:
>        do { conn <- connect defaultConnectInfo;
>             query conn "select 2 + 2" }
>    In the definition of `hello':
>        hello = do { conn <- connect defaultConnectInfo;
>                     query conn "select 2 + 2" }
>
> Using query_ instead of query brings a new error:
>
>   Ambiguous type variable `r' in the constraint:
>      `Database.MySQL.Simple.QueryResults.QueryResults r'
>        arising from a use of `query_' at ftmsql.hs:7:3-28
>    Possible cause: the monomorphism restriction applied to the following:
>      hello :: IO [r] (bound at ftmsql.hs:5:1)
>    Probable fix: give these definition(s) an explicit type signature
>                  or use -XNoMonomorphismRestriction
>
> Easily corrected, adding the pragma.
> Next step was to try it, which took me a few steps:
>
> *Main> hello
>
> <interactive>:1:0:
>    Ambiguous type variable `r' in the constraint:
>      `Database.MySQL.Simple.QueryResults.QueryResults r'
>        arising from a use of `hello' at <interactive>:1:0-4
>    Probable fix: add a type signature that fixes these type variable(s)
>
> *Main> hello :: IO [Only Int]
> *** Exception: Incompatible {errSQLType = "LongLong", errHaskellType =
> "Int", errMessage = "types incompatible"}
>
> *Main> hello :: IO [Only Int64]
>
> <interactive>:1:18: Not in scope: type constructor or class `Int64'
>
> etc.
>
> I would like to suggest modifying the exemple in the documentation to
> look like this
> ----------------------------------------------------------
> {-# LANGUAGE OverloadedStrings #-}
>
> import Database.MySQL.Simple
> import Data.Int
>
> myConnectInfo = defaultConnectInfo { connectHost = "x.x.x.x",
> connectUser= "xx", connectPassword="xxxx", connectDatabase="xxx" }
>
> hello :: IO [Only Int64]
> hello = do
>  conn <- connect myConnectInfo
>  query_ conn "select 2 + 2"
> ----------------------------------------------------------
> That way a beginner has a starting point that compiles and that he can
> run as is.
>
>
>
> Next I modified the simple example to call a stored procedure, it
> returns a resultset of 12 columns.
> Unfortunately, I realised that QueryResults instances are defined up
> to 10 elements only.
> However, the documentation shows how to define a QueryResults
> instance, so I created a datatype and tried to define the instance,
> and got stuck with an error:
>
>    Couldn't match expected type `PlateauSel'
>           against inferred type `Int -> a'
>    In the expression: convertError fs vs
>    In the definition of `convertResults':
>        convertResults fs vs = convertError fs vs
>    In the instance declaration for `QueryResults PlateauSel'
>
> Indeed, the documentation shows that convertError takes 3 parameters,
> and I gave, as per the example, only 2.
> But I'm not sure what to write for the 3rd parameter, the
> documentation doesn't help me here.
>
> To try, I put 0, and the test compiled. However, I had a connection
> error number 1312, saying my procedure "can't return a result set in
> the given context". (The query I used works from the mysql
> command-line interface)
>
> I'm not sure if that means Database.MySQL supports calling stored
> procedures that return a result set or not. I suspect not. Perhaps it
> would be useful to add it in the documentation.
>
> Thanks,
>
> David.
>
> _______________________________________________
> Haskell-Cafe mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to