[Haskell-cafe] Takusen sqlite3 insert is very slow

Leon Smith leon.p.smith at gmail.com
Sun Mar 21 10:31:23 EDT 2010


Using PostgreSQL on my computer,  your code executes in 3.5 seconds
with GHCi,  while compiled it executes in 16.2 seconds!   Clearly
something is wrong,  although I don't yet know enough about Takusen
enough to be able to say what.

I tried hoisting the preparation of the statement out of the loop,
however,  Takusen throws an error after the first insertion.  However,
 the insertion was apparently successful,  as a single row shows up in
the table afterwards.   Here's sample code and a sample shell session:

Best,
Leon

> import Database.PostgreSQL.Enumerator
> import Database.Enumerator
> import Control.Monad(forM_)

> main = do
>   withSession
>     (connect [ CAhost "localhost"
>              , CAport "5432"
>              , CAuser "takusen"
>              , CApassword "takusen"
>              , CAdbname "test"  ])
>     $ do
>         execDDL (sql "create table x (y text)")
>         let query = sql "insert into x (y) values (?)"
>             stmt  = prepareQuery "testinsert" query [bindType (0::Int)]
>         forM_ ([1..10000] :: [Int]) $ \x -> do
>              withPreparedStatement stmt $ \pstmt -> do
>                withBoundStatement pstmt [bindP x] $ \bstmt -> do
>                  execDML bstmt
>                  return ()

$ psql test
psql (8.4.2)
Type "help" for help.

test=# select * from x;
ERROR:  relation "x" does not exist
LINE 1: select * from x;
                      ^
test=# \q
$ ghci Tak.lhs
GHCi, version 6.12.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 1] Compiling Main             ( Tak.lhs, interpreted )
Ok, modules loaded: Main.
(0.09 secs, 40984568 bytes)
*Main> main
Loading package mtl-1.1.0.2 ... linking ... done.
Loading package old-locale-1.0.0.2 ... linking ... done.
Loading package old-time-1.0.0.3 ... linking ... done.
Loading package time-1.1.4 ... linking ... done.
Loading package Takusen-0.8.5 ... linking ... done.
*** Exception: DBError ("","") 1 ""
*Main> :q
Leaving GHCi.
$ psql test
psql (8.4.2)
Type "help" for help.

test=# select * from x;
 y
---
 1
(1 row)


More information about the Haskell-Cafe mailing list