HDBC 2.0.1 → 2.1.0
raw patch · 2 files changed
+41/−17 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Database/HDBC/SqlValue.hs +40/−16
- HDBC.cabal +1/−1
Database/HDBC/SqlValue.hs view
@@ -22,6 +22,7 @@ import Data.Ratio import Control.Monad.Error import Data.Convertible+import Data.Fixed quickError :: (Typeable a, Convertible SqlValue a) => SqlValue -> ConvertResult a quickError sv = convError "incompatible types" sv@@ -258,18 +259,22 @@ safeConvert (SqlLocalDate x) = return . formatTime defaultTimeLocale (iso8601DateFormat Nothing) $ x safeConvert (SqlLocalTimeOfDay x) = - return . formatTime defaultTimeLocale "%T" $ x+ return . formatTime defaultTimeLocale "%T%Q" $ x safeConvert (SqlZonedLocalTimeOfDay tod tz) = - return $ formatTime defaultTimeLocale "%T " tod +++ return $ formatTime defaultTimeLocale "%T%Q " tod ++ formatTime defaultTimeLocale "%z" tz safeConvert (SqlLocalTime x) = - return . formatTime defaultTimeLocale (iso8601DateFormat (Just "%T")) $ x+ return . formatTime defaultTimeLocale (iso8601DateFormat (Just "%T%Q")) $ x safeConvert (SqlZonedTime x) = - return . formatTime defaultTimeLocale (iso8601DateFormat (Just "%T %z")) $ x+ return . formatTime defaultTimeLocale (iso8601DateFormat (Just "%T%Q %z")) $ x safeConvert (SqlUTCTime x) = - return . formatTime defaultTimeLocale (iso8601DateFormat (Just "%T")) $ x- safeConvert (SqlDiffTime x) = return $ show ((truncate x)::Integer)- safeConvert (SqlPOSIXTime x) = return $ show ((truncate x)::Integer)+ return . formatTime defaultTimeLocale (iso8601DateFormat (Just "%T%Q")) $ x+ safeConvert (SqlDiffTime x) = return $ showFixed True fixedval+ where fixedval :: Pico+ fixedval = fromRational . toRational $ x+ safeConvert (SqlPOSIXTime x) = return $ showFixed True fixedval+ where fixedval :: Pico+ fixedval = fromRational . toRational $ x safeConvert (SqlEpochTime x) = return . show $ x safeConvert (SqlTimeDiff x) = return . show $ x safeConvert y@(SqlNull) = quickError y@@ -629,7 +634,7 @@ instance Convertible TimeOfDay SqlValue where safeConvert = return . SqlLocalTimeOfDay instance Convertible SqlValue TimeOfDay where- safeConvert (SqlString x) = parseTime' "%T" x+ safeConvert (SqlString x) = parseTime' "%T%Q" x safeConvert (SqlByteString x) = safeConvert (SqlString (BUTF8.toString x)) safeConvert (SqlInt32 x) = return . timeToTimeOfDay . fromIntegral $ x safeConvert (SqlInt64 x) = return . timeToTimeOfDay . fromIntegral $ x@@ -657,8 +662,8 @@ safeConvert (tod, tz) = return (SqlZonedLocalTimeOfDay tod tz) instance Convertible SqlValue (TimeOfDay, TimeZone) where safeConvert (SqlString x) = - do tod <- parseTime' "%T %z" x- tz <- case parseTime defaultTimeLocale "%T %z" x of+ do tod <- parseTime' "%T%Q %z" x+ tz <- case parseTime defaultTimeLocale "%T%Q %z" x of Nothing -> convError "Couldn't extract timezone in" (SqlString x) Just y -> Right y return (tod, tz)@@ -688,7 +693,7 @@ instance Convertible LocalTime SqlValue where safeConvert = return . SqlLocalTime instance Convertible SqlValue LocalTime where- safeConvert (SqlString x) = parseTime' (iso8601DateFormat (Just "%T")) x+ safeConvert (SqlString x) = parseTime' (iso8601DateFormat (Just "%T%Q")) x safeConvert (SqlByteString x) = safeConvert (SqlString (BUTF8.toString x)) safeConvert y@(SqlInt32 _) = quickError y safeConvert y@(SqlInt64 _) = quickError y@@ -714,7 +719,7 @@ instance Convertible ZonedTime SqlValue where safeConvert = return . SqlZonedTime instance Convertible SqlValue ZonedTime where- safeConvert (SqlString x) = parseTime' (iso8601DateFormat (Just "%T %z")) x+ safeConvert (SqlString x) = parseTime' (iso8601DateFormat (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))@@ -740,7 +745,7 @@ instance Convertible UTCTime SqlValue where safeConvert = return . SqlUTCTime instance Convertible SqlValue UTCTime where- safeConvert (SqlString x) = parseTime' (iso8601DateFormat (Just "%T")) x+ safeConvert (SqlString x) = parseTime' (iso8601DateFormat (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@@ -763,11 +768,28 @@ safeConvert y@(SqlTimeDiff _) = convError "incompatible types (did you mean SqlPOSIXTime?)" y safeConvert y@SqlNull = quickError y +stringToPico :: String -> ConvertResult Pico+stringToPico s =+ let (base, fracwithdot) = span (/= '.') s+ shortfrac = drop 1 fracwithdot -- strip of dot; don't use tail because it may be empty+ frac = take 12 (rpad 12 '0' shortfrac)+ rpad :: Int -> a -> [a] -> [a]+ -- next line lifted from Data.Time+ rpad n c xs = xs ++ replicate (n - length xs) c+ mkPico :: Integer -> Integer -> Pico+ -- next line also lifted from Data.Time+ mkPico i f = fromInteger i + fromRational (f % 1000000000000)+ in do parsedBase <- read' base+ parsedFrac <- read' frac+ return (mkPico parsedBase parsedFrac)+ instance Convertible NominalDiffTime SqlValue where safeConvert = return . SqlDiffTime instance Convertible SqlValue NominalDiffTime where- safeConvert (SqlString x) = read' x >>= return . fromInteger- safeConvert (SqlByteString x) = read' (BUTF8.toString x) >>= return . fromInteger+ safeConvert (SqlString x) = stringToPico x >>= + return . realToFrac+ safeConvert (SqlByteString x) = (stringToPico (BUTF8.toString x)) >>=+ return . realToFrac safeConvert (SqlInt32 x) = return . fromIntegral $ x safeConvert (SqlInt64 x) = return . fromIntegral $ x safeConvert (SqlWord32 x) = return . fromIntegral $ x@@ -821,7 +843,9 @@ instance Convertible ST.TimeDiff SqlValue where safeConvert x = safeConvert x >>= return . SqlDiffTime instance Convertible SqlValue ST.TimeDiff where- safeConvert (SqlString x) = ((read' x)::ConvertResult Integer) >>= safeConvert+ safeConvert y@(SqlString _) = + do r <- safeConvert y+ safeConvert (SqlDiffTime r) safeConvert (SqlByteString x) = safeConvert . SqlString . BUTF8.toString $ x safeConvert (SqlInt32 x) = secs2td (fromIntegral x) safeConvert (SqlInt64 x) = secs2td (fromIntegral x)
HDBC.cabal view
@@ -1,5 +1,5 @@ Name: HDBC-Version: 2.0.1+Version: 2.1.0 License: LGPL Maintainer: John Goerzen <jgoerzen@complete.org> Author: John Goerzen