hasqlator-mysql 0.0.1 → 0.0.2
raw patch · 2 files changed
+19/−8 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Database.MySQL.Hasqlator: Overflow :: SQLError
- Database.MySQL.Hasqlator: Underflow :: SQLError
+ Database.MySQL.Hasqlator: ConversionError :: Text -> SQLError
+ Database.MySQL.Hasqlator: instance Database.MySQL.Hasqlator.FromSql Data.Aeson.Types.Internal.Value
+ Database.MySQL.Hasqlator: instance Database.MySQL.Hasqlator.ToSql Data.Aeson.Types.Internal.Value
Files
- hasqlator-mysql.cabal +1/−1
- src/Database/MySQL/Hasqlator.hs +18/−7
hasqlator-mysql.cabal view
@@ -1,5 +1,5 @@ Name: hasqlator-mysql-Version: 0.0.1+Version: 0.0.2 Synopsis: composable SQL generation Category: Database Copyright: Kristof Bastiaensen (2020)
src/Database/MySQL/Hasqlator.hs view
@@ -88,13 +88,16 @@ import Data.ByteString.Lazy.Builder (Builder) import qualified Data.ByteString.Lazy.Builder as Builder import qualified Data.Text.Encoding as Text+import qualified Data.Text as Text import Data.Text (Text) import Data.Binary.Put import Data.Traversable import Data.Functor.Contravariant import qualified System.IO.Streams as Streams import Control.Exception (throw, Exception)-import Data.Aeson+import qualified Data.Aeson as Aeson+import qualified Data.Aeson.Text as Aeson+import qualified Data.Text.Lazy as LazyText class FromSql a where fromSql :: MySQLValue -> Either SQLError a@@ -206,8 +209,7 @@ data SQLError = SQLError String | ResultSetCountError | TypeError MySQLValue String- | Underflow- | Overflow+ | ConversionError Text deriving Show instance Exception SQLError@@ -638,12 +640,12 @@ "Int (" <> show (minBound :: a) <> ", " <> show (maxBound :: a) <> ")" where castFromInt :: Int64 -> Either SQLError a castFromInt i- | i < fromIntegral (minBound :: a) = throwError Underflow- | i > fromIntegral (maxBound :: a) = throwError Overflow+ | i < fromIntegral (minBound :: a) = throwError $ ConversionError "underflow"+ | i > fromIntegral (maxBound :: a) = throwError $ ConversionError "overflow" | otherwise = pure $ fromIntegral i castFromWord :: Word64 -> Either SQLError a castFromWord i- | i > fromIntegral (maxBound :: a) = throwError Overflow+ | i > fromIntegral (maxBound :: a) = throwError $ ConversionError "overflow" | otherwise = pure $ fromIntegral i integerFromSql :: MySQLValue -> Either SQLError Integer@@ -722,7 +724,7 @@ instance FromSql TimeOfDay where fromSql r = case r of MySQLTime sign_ t | sign_ >= 0 -> pure t- | otherwise -> throwError Overflow+ | otherwise -> throwError $ ConversionError "overflow" _ -> Left $ TypeError r "TimeOfDay" instance FromSql DiffTime where@@ -751,6 +753,13 @@ MySQLNull -> pure Nothing _ -> Just <$> fromSql r +instance FromSql Aeson.Value where+ fromSql r = case r of+ MySQLText t -> case Aeson.eitherDecodeStrict $ Text.encodeUtf8 t+ of Right val -> Right val+ Left err -> Left $ ConversionError $ Text.pack err+ _ -> Left $ TypeError r "Value"+ instance ToSql Int where toSqlValue = MySQLInt64 . fromIntegral @@ -816,3 +825,5 @@ instance ToSql Bool where toSqlValue = MySQLInt8U . fromIntegral . fromEnum +instance ToSql Aeson.Value where+ toSqlValue = MySQLText . LazyText.toStrict . Aeson.encodeToLazyText