[web-devel] [Haskell-cafe] [ANN] mysql-simple - your go-to package for talking to MySQL

Christopher Done chrisdone at googlemail.com
Tue Jun 21 16:15:29 CEST 2011


On 21 June 2011 13:45, David Virebayre <dav.vire+haskell at gmail.com> wrote:
> 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"

Yeah, the first example is wrong. Indeed. Should be fixed. I forgot to
tell Bryan about that. I noticed it was wrong when I first looked at
it but it's still tripping people up.

You can access the docs on a slightly earlier version:
http://hackage.haskell.org/package/mysql-simple-0.2.2.0

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

The doc specifies it here:

> convertError :: [Field] -> [Maybe ByteString] -> Int -> a
> Throw a ConversionFailed exception, indicating a mismatch between the number of columns in the Field and row, and the number in the collection to be converted to.

So if you're making an instance for a type that takes ten items from
the collection, then put 10. Could always make this clearer.

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

Ah, I wouldn't know about that, I haven't used the mysql version.



More information about the web-devel mailing list