packages feed

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 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