sqlite-simple 0.4.3.1 → 0.4.4.0
raw patch · 3 files changed
+32/−4 lines, 3 files
Files
- Database/SQLite/Simple/FromField.hs +11/−2
- sqlite-simple.cabal +1/−1
- test/Simple.hs +20/−1
Database/SQLite/Simple/FromField.hs view
@@ -46,6 +46,7 @@ import qualified Data.Text as T import qualified Data.Text.Lazy as LT import Data.Typeable (Typeable, typeOf)+import GHC.Float (double2Float) import System.Locale (defaultTimeLocale) @@ -130,6 +131,10 @@ fromField (Field (SQLFloat flt) _) = Ok flt fromField f = returnError ConversionFailed f "need a float" +instance FromField Float where+ fromField (Field (SQLFloat flt) _) = Ok . double2Float $ flt+ fromField f = returnError ConversionFailed f "need a float"+ instance FromField Bool where fromField f@(Field (SQLInteger b) _) | (b == 0) || (b == 1) = Ok (b /= 0)@@ -165,9 +170,13 @@ fromField f = returnError ConversionFailed f "expecting SQLText column type" + instance FromField Day where- fromField (Field (SQLText t) _) = Ok . read . T.unpack $ t- fromField f = returnError ConversionFailed f "expecting SQLText column type"+ fromField f@(Field (SQLText t) _) =+ case parseTime defaultTimeLocale "%Y-%m-%d" . T.unpack $ t of+ Just t -> Ok t+ Nothing -> returnError ConversionFailed f "couldn't parse Day field"+ fromField f = returnError ConversionFailed f "expecting SQLText column type" fieldTypename :: Field -> String fieldTypename = B.unpack . gettypename . result
sqlite-simple.cabal view
@@ -1,5 +1,5 @@ Name: sqlite-simple-Version: 0.4.3.1+Version: 0.4.4.0 Synopsis: Mid-Level SQLite client library Description: Mid-level SQLite client library, based on postgresql-simple.
test/Simple.hs view
@@ -10,7 +10,7 @@ ) where import qualified Data.Text as T-import Data.Time (UTCTime)+import Data.Time (UTCTime, Day) import Common -- Simplest SELECT@@ -39,6 +39,10 @@ assertEqual "nulls" Nothing r [Only r] <- query_ conn "SELECT 1" :: IO [Only (Maybe Int)] assertEqual "nulls" (Just 1) r+ [Only r] <- query_ conn "SELECT 1.0" :: IO [Only Double]+ assertEqual "doubles" 1.0 r+ [Only r] <- query_ conn "SELECT 1.0" :: IO [Only Float]+ assertEqual "floats" 1.0 r testSimpleParams :: TestEnv -> Test testSimpleParams TestEnv{..} = TestCase $ do@@ -60,6 +64,10 @@ assertEqual "select params" "test2" r2 [Only i] <- query conn "SELECT ?+?" [42 :: Int, 1 :: Int] :: IO [Only Int] assertEqual "select int param" 43 i+ [Only d] <- query conn "SELECT ?" [2.0 :: Double] :: IO [Only Double]+ assertEqual "select double param" 2.0 d+ [Only f] <- query conn "SELECT ?" [4.0 :: Float] :: IO [Only Float]+ assertEqual "select double param" 4.0 f testSimpleTime :: TestEnv -> Test testSimpleTime TestEnv{..} = TestCase $ do@@ -79,6 +87,17 @@ rows <- query conn "SELECT * FROM time2 WHERE t = ?" (Only time) :: IO [Only UTCTime] assertEqual "should see one row result" 1 (length rows) assertEqual "UTCTime" time t+ -- Days+ let daystr = "2013-08-21"+ day = read daystr :: Day+ [Only day'] <- query_ conn (Query (T.concat ["SELECT '", T.pack daystr, "'"]))+ day @?= day'+ [Only day''] <- query conn "SELECT ?" (Only day)+ day @?= day''+ -- database timestamp -> day conversion is treated as an error, but+ -- try converting a timestamp to a date and see we get it back ok+ [Only dayx] <- query_ conn "SELECT date('2013-08-21 08:00:03.256887')"+ day @?= dayx testSimpleTimeFract :: TestEnv -> Test testSimpleTimeFract TestEnv{..} = TestCase $ do