packages feed

mysql-haskell-0.8.1.0: test/ExecuteMany.hs

{-# LANGUAGE NegativeLiterals    #-}
{-# LANGUAGE ScopedTypeVariables #-}

module ExecuteMany where

import           Control.Applicative
import           Data.Time.Calendar  (fromGregorian)
import           Data.Time.LocalTime (LocalTime (..), TimeOfDay (..))
import           Database.MySQL.Base
import qualified System.IO.Streams   as Stream
import           Test.Tasty.HUnit

tests :: MySQLConn -> Assertion
tests c = do

    oks <- withTransaction c $ executeMany c "INSERT INTO test VALUES(\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?     ,\
            \?)"
            (replicate 50000
                [ MySQLInt32 0
                , MySQLBit 255
                , MySQLInt8 (-128)
                , MySQLInt8U 255
                , MySQLInt16 (-32768)
                , MySQLInt16U 65535
                , MySQLInt32 (-8388608)
                , MySQLInt32U 16777215
                , MySQLInt32 (-2147483648)
                , MySQLInt32U 4294967295
                , MySQLInt64 (-9223372036854775808)
                , MySQLInt64U 18446744073709551615
                , MySQLDecimal 1234567890.0123456789
                , MySQLFloat 3.14159
                , MySQLDouble 3.1415926535
                , MySQLDate (fromGregorian 2016 08 08)
                , MySQLDateTime (LocalTime (fromGregorian 2016 08 08) (TimeOfDay 17 25 59))
                , MySQLTimeStamp (LocalTime (fromGregorian 2016 08 08) (TimeOfDay 17 25 59))
                , MySQLTime 1 (TimeOfDay 199 59 59)
                , MySQLYear 1999
                , MySQLText "12345678"
                , MySQLText "韩冬真赞"
                , MySQLBytes "12345678"
                , MySQLBytes "12345678"
                , MySQLBytes "12345678"
                , MySQLText "韩冬真赞"
                , MySQLBytes "12345678"
                , MySQLText "韩冬真赞"
                , MySQLText "foo"
                , MySQLText "foo,bar"
                ]
            )
    assertEqual "executeMany affected rows" (sum $ map okAffectedRows oks) 50000