packages feed

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