packages feed

hasql-postgres-0.1.0: profiling/Main.hs

import BasePrelude
import MTLPrelude
import Data.Text (Text)
import Data.Vector (Vector)
import Data.Time
import qualified Hasql as H
import qualified Hasql.Postgres as H
import qualified ListT
import qualified Test.QuickCheck.Gen as Q
import qualified Test.QuickCheck.Arbitrary as Q
import qualified Test.QuickCheck.Instances


main = do
  rows :: [(Text, Day)] <- 
    liftIO $ replicateM 100 $ 
      (,) <$> Q.generate Q.arbitrary <*> Q.generate Q.arbitrary
  H.session (H.Postgres host port user password db) (fromJust $ H.sessionSettings 1 30) $ do
    H.tx Nothing $ do
      H.unit [H.q|DROP TABLE IF EXISTS a|]
      H.unit [H.q|CREATE TABLE a (id SERIAL NOT NULL, 
                                  name VARCHAR NOT NULL, 
                                  birthday DATE, 
                                  PRIMARY KEY (id))|]
      forM_ rows $ \(name, birthday) -> do
        H.unit $ [H.q|INSERT INTO a (name, birthday) VALUES (?, ?)|] name birthday
    replicateM_ 2000 $ do
      H.tx Nothing $ do
        H.list $ [H.q|SELECT * FROM a|] :: H.Tx H.Postgres s [(Int, Text, Day)]


host = "localhost"
port = 5432
user = "postgres"
password = ""
db = "postgres"