{-# LANGUAGE TemplateHaskell, QuasiQuotes, DataKinds #-} module Main (main) where import qualified Data.ByteString as BS import Data.Int (Int16, Int32, Int64) import qualified Data.Time as Time import qualified Criterion.Main as C import System.Exit (exitSuccess, exitFailure) import Database.PostgreSQL.Typed import Database.PostgreSQL.Typed.Types import Database.PostgreSQL.Typed.Query import Connect useTPGDatabase db selectTypes :: PGConnection -> IO [(String, OID, Int16, Bool, Maybe BS.ByteString)] selectTypes c = pgQuery c [pgSQL|SELECT typname, typnamespace, typlen, typbyval, typdefault FROM pg_catalog.pg_type|] selectTypesLazy :: PGConnection -> IO [(String, OID, Int16, Bool, Maybe BS.ByteString)] selectTypesLazy c = pgLazyQuery c [pgSQL|$SELECT typname, typnamespace, typlen, typbyval, typdefault FROM pg_catalog.pg_type|] 1 selectParams :: PGConnection -> IO [(Maybe String, Maybe Int64, Maybe Double, Maybe BS.ByteString, Maybe Bool)] selectParams c = pgQuery c [pgSQL|$SELECT ${"hello"}::text, ${123::Int64}::bigint, ${123.4::Double}::float, ${BS.pack [120..220]}::bytea, ${Nothing::Maybe Bool}::boolean|] selectValues :: PGConnection -> IO [(Int32, Time.UTCTime)] selectValues c = pgQuery c [pgSQL|!SELECT generate_series, now() FROM generate_series(8,256)|] selectValuesLazy :: PGConnection -> IO [(Int32, Time.UTCTime)] selectValuesLazy c = pgLazyQuery c [pgSQL|$!SELECT generate_series, now() FROM generate_series(8,256)|] 5 main :: IO () main = do c <- pgConnect db C.defaultMain [ C.bench "types" $ C.nfIO $ selectTypes c , C.bench "types lazy" $ C.nfIO $ selectTypesLazy c , C.bench "params" $ C.nfIO $ selectParams c , C.bench "values" $ C.nfIO $ selectValues c , C.bench "values lazy" $ C.nfIO $ selectValuesLazy c ]