HDBC 2.3.1.2 → 2.4.0.5
raw patch · 11 files changed
Files
- CHANGELOG.md +20/−0
- Database/HDBC.hs +7/−21
- Database/HDBC/ColTypes.hs +4/−21
- Database/HDBC/Locale.hs +18/−1
- Database/HDBC/SqlValue.hs +50/−37
- Database/HDBC/Statement.hs +2/−6
- Database/HDBC/Utils.hs +3/−3
- HDBC.cabal +27/−27
- testsrc/TestInfrastructure.hs +0/−17
- testsrc/TestSqlValue.hs +21/−12
- testsrc/runtests.hs +3/−8
+ CHANGELOG.md view
@@ -0,0 +1,20 @@+# Changelog++#### 2.4.0.4++* Zero-prefix years when parsing dates.++#### 2.4.0.3++* Compatibility with GHC 8.8/time 1.9++#### 2.4.0.2++* Compatibility with GHC 8.2/time 1.8++#### 2.4.0.1++* Compatibility with time 1.5.+* Minor documentation fixes.++
Database/HDBC.hs view
@@ -128,28 +128,22 @@ * Support for querying database server properties * Add-on package (hdbc-missingh) to integrate with MissingH,- providing a database backend for AnyDBM.+ providing a database backend for AnyDBM - * Support for querying metadata such as column names.+ * Support for querying metadata such as column names * Support for querying additional metadata (column types, etc.) -} {- $drivers -Here is a list of known drivers as of January 26, 2009:+Here is a list of known drivers as of May 6, 2019: -[@Sqlite v3@] Available from <http://software.complete.org/hdbc-sqlite3>. Or, to-participate in development, use -@git clone <git://git.complete.org/hdbc-sqlite3>@+[@Sqlite v3@] Available from <https://github.com/hdbc/hdbc-sqlite3>. -[@PostgreSQL@] Available from <http://software.complete.org/hdbc-postgresql>. Or, to-participate in development, use-@git clone <git://git.complete.org/hdbc-postgresql>@+[@PostgreSQL@] Available from <https://github.com/hdbc/hdbc-postgresql>. -[@ODBC@] Available from <http://software.complete.org/hdbc-odbc>. Or, to-partitipace in development, use-@git clone <git://git.complete.org/hdbc-odbc>@+[@ODBC@] Available from <https://github.com/hdbc/hdbc-odbc>. [@MySQL@] MySQL users have two choices: the first is the ODBC driver, which works and has been tested against MySQL on both Linux\/Unix and Windows platforms. There is@@ -157,16 +151,8 @@ <http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC-mysql> with a homepage at <http://www.maubi.net/~waterson/hacks/hdbc-mysql.html>. -In addition, there is one integration package: /hdbc-anydbm/. This-integrates with the AnyDBM library <http://software.complete.org/anydbm>.-It lets any HDBC database act as a backend for the-AnyDBM interface. Available from <http://software.complete.org/hdbc-anydbm>. Or,-to participate in development, use-@darcs get --partial <http://darcs.complete.org/hdbc-anydbm>@- The latest version of HDBC itself is available from-<http://software.complete.org/hdbc>. Or, to participate in development, use-@git clone <git://git.complete.org/hdbc>@.+<https://github.com/hdbc/hdbc>. -} {- $transactions
Database/HDBC/ColTypes.hs view
@@ -12,6 +12,7 @@ Written by John Goerzen, jgoerzen\@complete.org -}+{-# LANGUAGE DeriveDataTypeable #-} module Database.HDBC.ColTypes (SqlColDesc(..), SqlTypeId(..),@@ -42,13 +43,7 @@ ,colDecDigits :: Maybe Int -- ^ Digits to the right of the period ,colNullable :: Maybe Bool -- ^ Whether NULL is acceptable }- deriving (Eq, Read, Show)--sqlColDescTc :: TyCon-sqlColDescTc = mkTyCon "Database.HDBC.SqlColDesc"--instance Typeable SqlColDesc where- typeOf _ = mkTyConApp sqlColDescTc []+ deriving (Eq, Read, Show, Typeable) {- | The type identifier for a given column. @@ -88,13 +83,7 @@ | SqlGUIDT -- ^ Global unique identifier | SqlUnknownT String -- ^ A type not represented here; implementation-specific information in the String - deriving (Eq, Show, Read)--sqlTypeIdTc :: TyCon-sqlTypeIdTc = mkTyCon "Database.HDBC.SqlTypeId"--instance Typeable SqlTypeId where- typeOf _ = mkTyConApp sqlTypeIdTc []+ deriving (Eq, Show, Read, Typeable) {- | The different types of intervals in SQL. -} data SqlInterval =@@ -111,10 +100,4 @@ | SqlIntervalHourToMinuteT -- ^ Difference in hours+minutes | SqlIntervalHourToSecondT -- ^ Difference in hours+seconds | SqlIntervalMinuteToSecondT -- ^ Difference in minutes+seconds- deriving (Eq, Show, Read)--sqlIntervalTc :: TyCon-sqlIntervalTc = mkTyCon "Database.HDBC.SqlInterval"--instance Typeable SqlInterval where- typeOf _ = mkTyConApp sqlIntervalTc []+ deriving (Eq, Show, Read, Typeable)
Database/HDBC/Locale.hs view
@@ -1,17 +1,34 @@+{-# LANGUAGE CPP #-} module Database.HDBC.Locale ( defaultTimeLocale,- iso8601DateFormat+ iso8601DateFormat,+ oldIso8601DateFormat ) where++#ifdef MIN_TIME_15+import Data.Time.Format (defaultTimeLocale)+#else import System.Locale (defaultTimeLocale)+#endif -- | As the semantic of System.Locale.iso8601DateFormat has changed with -- old-locale-1.0.0.2 in a non-compatible way, we now define our own -- (compatible) version of it. iso8601DateFormat :: Maybe String -> String iso8601DateFormat mTimeFmt =+ "%0Y-%m-%d" ++ case mTimeFmt of+ Nothing -> ""+ Just fmt -> ' ' : fmt++-- | HDBC would in versions up to and including 2.4.0.3 use this time format+-- string to serialize timestamps. To keep being able to deserialize timestamps+-- serialized on database engines that keep the representation intact (e.g.+-- SQLite) we keep this format string around, such that we can fall back to it.+oldIso8601DateFormat :: Maybe String -> String+oldIso8601DateFormat mTimeFmt = "%Y-%m-%d" ++ case mTimeFmt of Nothing -> "" Just fmt -> ' ' : fmt
Database/HDBC/SqlValue.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE StandaloneDeriving #-} module Database.HDBC.SqlValue ( -- * SQL value marshalling@@ -7,6 +9,7 @@ ) where+import Control.Applicative ((<|>)) import Data.Dynamic import qualified Data.ByteString.UTF8 as BUTF8 import qualified Data.ByteString as B@@ -15,9 +18,18 @@ import Data.Word import Data.Int import qualified System.Time as ST-import Data.Time+import Data.Time ( Day (ModifiedJulianDay), DiffTime, LocalTime, NominalDiffTime, ParseTime+ , TimeOfDay, TimeZone, UTCTime, ZonedTime, formatTime, localDay, localTimeOfDay+ , timeOfDayToTime, timeToTimeOfDay, toModifiedJulianDay, utc+ , utcToZonedTime, zonedTimeToLocalTime, zonedTimeToUTC, zonedTimeZone+#if MIN_TIME_15+ , parseTimeM+#else+ , parseTime+#endif+ ) import Data.Time.Clock.POSIX-import Database.HDBC.Locale (defaultTimeLocale, iso8601DateFormat)+import Database.HDBC.Locale (defaultTimeLocale, iso8601DateFormat, oldIso8601DateFormat) import Data.Ratio import Data.Convertible import Data.Fixed@@ -59,7 +71,7 @@ posixToSql :: POSIXTime -> SqlValue posixToSql x = SqlPOSIXTime x -{- | 'SqlValue' is he main type for expressing Haskell values to SQL databases.+{- | 'SqlValue' is the main type for expressing Haskell values to SQL databases. /INTRODUCTION TO SQLVALUE/ @@ -167,7 +179,7 @@ * Both represent the same type and the encapsulated values are considered equal by applying (==) to them - * The values of each, when converted to a string, are equal.+ * The values of each, when converted to a string, are equal /STRING VERSIONS OF TIMES/ @@ -198,21 +210,18 @@ | SqlBool Bool | SqlDouble Double | SqlRational Rational- | SqlLocalDate Day -- ^ Local YYYY-MM-DD (no timezone)- | SqlLocalTimeOfDay TimeOfDay -- ^ Local HH:MM:SS (no timezone)+ | SqlLocalDate Day -- ^ Local YYYY-MM-DD (no timezone).+ | SqlLocalTimeOfDay TimeOfDay -- ^ Local HH:MM:SS (no timezone). | SqlZonedLocalTimeOfDay TimeOfDay TimeZone -- ^ Local HH:MM:SS -HHMM. Converts to and from (TimeOfDay, TimeZone).- | SqlLocalTime LocalTime -- ^ Local YYYY-MM-DD HH:MM:SS (no timezone)+ | SqlLocalTime LocalTime -- ^ Local YYYY-MM-DD HH:MM:SS (no timezone). | SqlZonedTime ZonedTime -- ^ Local YYYY-MM-DD HH:MM:SS -HHMM. Considered equal if both convert to the same UTC time.- | SqlUTCTime UTCTime -- ^ UTC YYYY-MM-DD HH:MM:SS+ | SqlUTCTime UTCTime -- ^ UTC YYYY-MM-DD HH:MM:SS. | SqlDiffTime NominalDiffTime -- ^ Calendar diff between seconds. Rendered as Integer when converted to String, but greater precision may be preserved for other types or to underlying database. | SqlPOSIXTime POSIXTime -- ^ Time as seconds since midnight Jan 1 1970 UTC. Integer rendering as for 'SqlDiffTime'. | SqlEpochTime Integer -- ^ DEPRECATED Representation of ClockTime or CalendarTime. Use SqlPOSIXTime instead. | SqlTimeDiff Integer -- ^ DEPRECATED Representation of TimeDiff. Use SqlDiffTime instead.- | SqlNull -- ^ NULL in SQL or Nothing in Haskell- deriving (Show)--instance Typeable SqlValue where- typeOf _ = mkTypeName "SqlValue"+ | SqlNull -- ^ NULL in SQL or Nothing in Haskell.+ deriving (Show, Typeable) instance Eq SqlValue where SqlString a == SqlString b = a == b@@ -242,6 +251,9 @@ a == b = ((safeFromSql a)::ConvertResult String) == ((safeFromSql b)::ConvertResult String) +deriving instance Typeable ST.ClockTime+deriving instance Typeable ST.TimeDiff+ instance Convertible SqlValue SqlValue where safeConvert = return @@ -595,30 +607,10 @@ safeConvert (SqlTimeDiff x) = return . fromIntegral $ x safeConvert y@(SqlNull) = quickError y -#ifndef TIME_GT_113-instance Typeable Day where- typeOf _ = mkTypeName "Day"-instance Typeable TimeOfDay where- typeOf _ = mkTypeName "TimeOfDay"-instance Typeable LocalTime where- typeOf _ = mkTypeName "LocalTime"-instance Typeable ZonedTime where- typeOf _ = mkTypeName "ZonedTime"-instance Typeable DiffTime where- typeOf _ = mkTypeName "DiffTime"-instance Typeable TimeZone where- typeOf _ = mkTypeName "TimeZone"-#endif--instance Typeable ST.ClockTime where- typeOf _ = mkTypeName "ClockTime"-instance Typeable ST.TimeDiff where- typeOf _ = mkTypeName "TimeDiff"- instance Convertible Day SqlValue where safeConvert = return . SqlLocalDate instance Convertible SqlValue Day where- safeConvert (SqlString x) = parseTime' (iso8601DateFormat Nothing) x+ safeConvert (SqlString x) = parseTimeISO8601 Nothing x safeConvert (SqlByteString x) = safeConvert (SqlString (BUTF8.toString x)) safeConvert (SqlInt32 x) = return $ ModifiedJulianDay {toModifiedJulianDay = fromIntegral x}@@ -679,7 +671,11 @@ instance Convertible SqlValue (TimeOfDay, TimeZone) where safeConvert (SqlString x) = do tod <- parseTime' "%T%Q %z" x+#if MIN_TIME_15+ tz <- case parseTimeM True defaultTimeLocale "%T%Q %z" x of+#else tz <- case parseTime defaultTimeLocale "%T%Q %z" x of+#endif Nothing -> convError "Couldn't extract timezone in" (SqlString x) Just y -> Right y return (tod, tz)@@ -709,7 +705,7 @@ instance Convertible LocalTime SqlValue where safeConvert = return . SqlLocalTime instance Convertible SqlValue LocalTime where- safeConvert (SqlString x) = parseTime' (iso8601DateFormat (Just "%T%Q")) x+ safeConvert (SqlString x) = parseTimeISO8601 (Just "%T%Q") x safeConvert (SqlByteString x) = safeConvert (SqlString (BUTF8.toString x)) safeConvert y@(SqlInt32 _) = quickError y safeConvert y@(SqlInt64 _) = quickError y@@ -735,7 +731,7 @@ instance Convertible ZonedTime SqlValue where safeConvert = return . SqlZonedTime instance Convertible SqlValue ZonedTime where- safeConvert (SqlString x) = parseTime' (iso8601DateFormat (Just "%T%Q %z")) x+ safeConvert (SqlString x) = parseTimeISO8601 (Just "%T%Q %z") x safeConvert (SqlByteString x) = safeConvert (SqlString (BUTF8.toString x)) safeConvert (SqlInt32 x) = safeConvert (SqlInteger (fromIntegral x)) safeConvert (SqlInt64 x) = safeConvert (SqlInteger (fromIntegral x))@@ -761,7 +757,7 @@ instance Convertible UTCTime SqlValue where safeConvert = return . SqlUTCTime instance Convertible SqlValue UTCTime where- safeConvert (SqlString x) = parseTime' (iso8601DateFormat (Just "%T%Q")) x+ safeConvert (SqlString x) = parseTimeISO8601 (Just "%T%Q") x safeConvert (SqlByteString x) = safeConvert (SqlString (BUTF8.toString x)) safeConvert y@(SqlInt32 _) = safeConvert y >>= return . posixSecondsToUTCTime safeConvert y@(SqlInt64 _) = safeConvert y >>= return . posixSecondsToUTCTime@@ -953,8 +949,25 @@ #else parseTime' :: (Typeable t, Convertible SqlValue t, ParseTime t) => String -> String -> ConvertResult t parseTime' fmtstr inpstr = +#if MIN_TIME_15+ case parseTimeM True defaultTimeLocale fmtstr inpstr of+#else case parseTime defaultTimeLocale fmtstr inpstr of+#endif Nothing -> convError ("Cannot parse using default format string " ++ show fmtstr) (SqlString inpstr) Just x -> Right x+#endif++parseTimeISO8601 :: (Typeable t, Convertible SqlValue t, ParseTime t) => Maybe String -> String -> ConvertResult t+parseTimeISO8601 fmtstr inpstr =+ case tryParse iso8601DateFormat <|> tryParse oldIso8601DateFormat of+ Nothing -> convError "Cannot parse ISO8601 timestamp" (SqlString inpstr)+ Just x -> Right x+ where+ tryParse fmtFunction =+#if MIN_TIME_15+ parseTimeM True defaultTimeLocale (fmtFunction fmtstr) inpstr+#else+ parseTime defaultTimeLocale (fmtFunction fmtstr) inpstr #endif
Database/HDBC/Statement.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE DeriveDataTypeable #-} module Database.HDBC.Statement ( Statement(..),@@ -107,13 +108,8 @@ data SqlError = SqlError {seState :: String, seNativeError :: Int, seErrorMsg :: String}- deriving (Eq, Show, Read)--sqlErrorTc :: TyCon-sqlErrorTc = mkTyCon "Database.HDBC.SqlError"+ deriving (Eq, Show, Read, Typeable) -instance Typeable SqlError where- typeOf _ = mkTyConApp sqlErrorTc [] #if __GLASGOW_HASKELL__ >= 610 --data SqlException
Database/HDBC/Utils.hs view
@@ -215,7 +215,7 @@ Just r -> do names <- getColumnNames sth return $ Just $ zip names r -{- | Strict version of 'fetchRowAL' -}+{- | Strict version of 'fetchRowAL'. -} fetchRowAL' :: Statement -> IO (Maybe [(String, SqlValue)]) fetchRowAL' sth = do res <- fetchRowAL sth@@ -233,7 +233,7 @@ Nothing -> return Nothing Just x -> return $ Just $ Map.fromList x -{- | Strict version of 'fetchRowMap' -}+{- | Strict version of 'fetchRowMap'. -} fetchRowMap' :: Statement -> IO (Maybe (Map.Map String SqlValue)) fetchRowMap' sth = do res <- fetchRowMap sth@@ -272,7 +272,7 @@ return res {- | A quick way to do a query. Similar to preparing, executing, and-then calling 'fetchAllRows' on a statement. See also 'quickQuery'' -}+then calling 'fetchAllRows' on a statement. See also 'quickQuery''. -} quickQuery :: IConnection conn => conn -> String -> [SqlValue] -> IO [[SqlValue]] quickQuery conn qrystr args = do sth <- prepare conn qrystr
HDBC.cabal view
@@ -1,12 +1,12 @@ Name: HDBC-Version: 2.3.1.2+Version: 2.4.0.5 License: BSD3-Maintainer: Nicolas Wu <nicolas.wu@gmail.com>-Author: John Goerzen+Maintainer: Nicolas Wu <nicolas.wu@gmail.com>, David Johnson <code@dmj.io>+Author: John Goerzen, Nicolas Wu homepage: https://github.com/hdbc/hdbc Copyright: Copyright (c) 2005-2011 John Goerzen license-file: LICENSE-extra-source-files: LICENSE, Makefile, README.md+extra-source-files: LICENSE, Makefile, README.md, CHANGELOG.md Category: Database synopsis: Haskell Database Connectivity Description: HDBC provides an abstraction layer between Haskell programs and SQL@@ -16,7 +16,7 @@ Stability: Stable Build-Type: Simple -Cabal-Version: >=1.8+Cabal-Version: >=1.10 source-repository head type: git@@ -27,21 +27,21 @@ flag buildtests description: Build the executable to run unit tests default: False--flag time_gte_113- description: time > 1.1.3 has defined some more instances so omit them here+flag minTime15+ description: Use time 1.5 or higher.+ default: True library if flag(splitBase)- Build-Depends: base>=3 && <5, old-time, time>=1.1.2.4 && <=1.5, bytestring, containers, old-locale- if flag(time_gte_113)- Build-Depends: time>=1.1.3- CPP-OPTIONS: -DTIME_GT_113+ Build-Depends: base>=3 && <5, old-time, bytestring, containers+ if flag(minTime15)+ Build-Depends: time >= 1.5 && < 1.17+ CPP-Options: -DMIN_TIME_15 else- Build-Depends: time<1.1.3+ Build-Depends: time >= 1.2 && < 1.5, old-locale else Build-Depends: base<3- Build-Depends: mtl, convertible >= 1.0.10.0, text, utf8-string+ Build-Depends: mtl, convertible >= 1.1.0.0, text, utf8-string -- Hack for cabal-install weirdness. cabal-install forces base 3, -- though it works fine for Setup.lhs manually. Fix.@@ -54,25 +54,26 @@ Database.HDBC.ColTypes, Database.HDBC.Statement, Database.HDBC.SqlValue, Database.HDBC.Locale Other-Modules: Database.HDBC.Utils- Extensions: ExistentialQuantification, CPP, MultiParamTypeClasses,+ Default-Extensions: ExistentialQuantification, CPP, MultiParamTypeClasses, FlexibleContexts, TypeSynonymInstances, TypeOperators, RankNTypes,- FlexibleInstances- + FlexibleInstances, DeriveDataTypeable+ Default-Language: Haskell2010+ Executable runtests if flag(buildtests) Buildable: True- Build-Depends: HUnit, QuickCheck (>= 2.0), testpack (>= 2.0)+ Build-Depends: HUnit, QuickCheck >= 2.0 if flag(splitBase)- Build-Depends: base>=3 && <5, old-time, time>=1.1.2.4 && <=1.5, bytestring, containers, old-locale- if flag(time_gte_113)- Build-Depends: time>=1.1.3- CPP-OPTIONS: -DTIME_GT_113+ Build-Depends: base>=3 && <5, old-time, bytestring, containers+ if flag(minTime15)+ Build-Depends: time >= 1.5 && < 1.17+ CPP-Options: -DMIN_TIME_15 else- Build-Depends: time<1.1.3+ Build-Depends: time >= 1.2 && < 1.5, old-locale else Build-Depends: base<3- Build-Depends: mtl, convertible >= 1.0.9.1, utf8-string, text+ Build-Depends: mtl, convertible >= 1.1.0.0, utf8-string, text -- Hack for cabal-install weirdness. cabal-install forces base 3, -- though it works fine for Setup.lhs manually. Fix.@@ -82,10 +83,9 @@ Buildable: False Main-Is: runtests.hs Other-Modules: TestSqlValue- TestInfrastructure Hs-Source-Dirs: ., testsrc GHC-Options: -O2- Extensions: ExistentialQuantification, CPP, MultiParamTypeClasses,+ Default-Extensions: ExistentialQuantification, CPP, MultiParamTypeClasses, FlexibleContexts, TypeSynonymInstances, TypeOperators, RankNTypes, FlexibleInstances- + Default-Language: Haskell2010
− testsrc/TestInfrastructure.hs
@@ -1,17 +0,0 @@-{--Copyright (C) 2009 John Goerzen <jgoerzen@complete.org>--All rights reserved.--For license and copyright information, see the file COPYRIGHT--}-module TestInfrastructure where-import qualified Test.QuickCheck as QC-import qualified Test.HUnit as HU-import Test.HUnit.Tools--q :: QC.Testable a => String -> a -> HU.Test-q = qc2hu 250--qverbose :: QC.Testable a => String -> a -> HU.Test-qverbose = qc2hu 250
testsrc/TestSqlValue.hs view
@@ -7,27 +7,25 @@ -} module TestSqlValue where-import TestInfrastructure import Test.QuickCheck hiding (Result) import Test.QuickCheck.Property (Result)-import Test.QuickCheck.Tools import qualified Test.HUnit as HU import Database.HDBC-import Data.Time.Format+import Data.Time.Format (parseTime) import Data.Time.LocalTime-import Database.HDBC.Locale (defaultTimeLocale, iso8601DateFormat)+import Database.HDBC.Locale (defaultTimeLocale, iso8601DateFormat, oldIso8601DateFormat) import Data.Maybe instance Eq ZonedTime where a == b = zonedTimeToUTC a == zonedTimeToUTC b && zonedTimeZone a == zonedTimeZone b -toSql_Int :: Int -> Result-toSql_Int x = toSql x @?= SqlInt64 (fromIntegral x)+toSql_Int :: Int -> Property+toSql_Int x = toSql x === SqlInt64 (fromIntegral x) -fromSql_Int :: Int -> Result+fromSql_Int :: Int -> Property fromSql_Int x = - Right x @=? safeFromSql (SqlInt64 (fromIntegral x))+ Right x === safeFromSql (SqlInt64 (fromIntegral x)) testZonedTimeStr = "1989-08-01 15:33:01 -0500" testZonedTime :: ZonedTime@@ -39,14 +37,25 @@ testZonedTimeFrac = fromJust $ parseTime defaultTimeLocale (iso8601DateFormat (Just "%T%Q %z")) testZonedTimeFracStr +testZonedTimeTwoDigitYearStr = "89-08-01 15:33:01 -0500"+testZonedTimeTwoDigitYear :: ZonedTime+testZonedTimeTwoDigitYear = fromJust $ parseTime defaultTimeLocale (oldIso8601DateFormat (Just "%T %z"))+ testZonedTimeTwoDigitYearStr+ ztparsenf = (HU.@=?) testZonedTime (fromSql (SqlString testZonedTimeStr)) ztparsef = (HU.@=?) testZonedTimeFrac (fromSql (SqlString testZonedTimeFracStr))+ztparseTwoDigitYear =+ (HU.@=?) testZonedTimeTwoDigitYear (fromSql (SqlString testZonedTimeTwoDigitYearStr)) hut msg = HU.TestLabel msg . HU.TestCase -allt = [q "toSql Int" toSql_Int,- q "safeFromSql Int" fromSql_Int,- hut "non-frac parse" ztparsenf,- hut "frac parse" ztparsef]+allHUnitTests = [hut "non-frac parse" ztparsenf,+ hut "frac parse" ztparsef,+ hut "old serialization of two digit year without leading zeros" ztparseTwoDigitYear+ ]++allQuickCheckTests = [toSql_Int,+ fromSql_Int+ ]
testsrc/runtests.hs view
@@ -1,14 +1,9 @@ module Main where import qualified Test.HUnit as HU-import Test.HUnit.Tools+import Test.QuickCheck (quickCheck) import qualified TestSqlValue -test1 = HU.TestCase ((HU.@=?) "x" "x")--alltests = [HU.TestLabel "test1" test1,- tl "TestSqlValue" TestSqlValue.allt- ]--main = do runVerboseTests (HU.TestList alltests)+main = do HU.runTestTT (HU.TestList $ TestSqlValue.allHUnitTests)+ traverse quickCheck TestSqlValue.allQuickCheckTests return ()