hasbolt-extras 0.0.1.8 → 0.0.1.9
raw patch · 8 files changed
+71/−48 lines, 8 filesdep ~hasboltPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: hasbolt
API changes (from Hackage documentation)
+ Database.Bolt.Extras: NodeLikeProps :: a -> NodeLikeProps a
+ Database.Bolt.Extras: ToIsValue :: a -> ToIsValue a
+ Database.Bolt.Extras: newtype NodeLikeProps a
+ Database.Bolt.Extras: newtype ToIsValue a
- Database.Bolt.Extras: fromNode :: NodeLike a => Node -> a
+ Database.Bolt.Extras: fromNode :: (NodeLike a, HasCallStack) => Node -> a
- Database.Bolt.Extras: fromURelation :: URelationLike a => URelationship -> a
+ Database.Bolt.Extras: fromURelation :: (URelationLike a, HasCallStack) => URelationship -> a
- Database.Bolt.Extras: fromValue :: FromValue a => Value -> a
+ Database.Bolt.Extras: fromValue :: (FromValue a, HasCallStack) => Value -> a
- Database.Bolt.Extras: getLabels :: Labels a => a -> [Label]
+ Database.Bolt.Extras: getLabels :: (Labels a, HasCallStack) => a -> [Label]
- Database.Bolt.Extras: getProps :: Properties a => a -> Map Text Value
+ Database.Bolt.Extras: getProps :: (Properties a, HasCallStack) => a -> Map Text Value
- Database.Bolt.Extras: toCypher :: ToCypher a => a -> Text
+ Database.Bolt.Extras: toCypher :: (ToCypher a, HasCallStack) => a -> Text
- Database.Bolt.Extras: toNode :: NodeLike a => a -> Node
+ Database.Bolt.Extras: toNode :: (NodeLike a, HasCallStack) => a -> Node
- Database.Bolt.Extras: toURelation :: URelationLike a => a -> URelationship
+ Database.Bolt.Extras: toURelation :: (URelationLike a, HasCallStack) => a -> URelationship
- Database.Bolt.Extras: toValue :: ToValue a => a -> Value
+ Database.Bolt.Extras: toValue :: (ToValue a, HasCallStack) => a -> Value
- Database.Bolt.Extras.DSL: toNodeSelector :: Node -> NodeSelector
+ Database.Bolt.Extras.DSL: toNodeSelector :: HasCallStack => Node -> NodeSelector
- Database.Bolt.Extras.DSL: toRelSelector :: URelationship -> RelSelector
+ Database.Bolt.Extras.DSL: toRelSelector :: HasCallStack => URelationship -> RelSelector
- Database.Bolt.Extras.Graph: relations :: forall n_aagh a_aagi b_aagj b_ae6x. Lens (Graph n_aagh a_aagi b_aagj) (Graph n_aagh a_aagi b_ae6x) (Map (n_aagh, n_aagh) b_aagj) (Map (n_aagh, n_aagh) b_ae6x)
+ Database.Bolt.Extras.Graph: relations :: forall n_aaFg a_aaFh b_aaFi b_aevx. Lens (Graph n_aaFg a_aaFh b_aaFi) (Graph n_aaFg a_aaFh b_aevx) (Map (n_aaFg, n_aaFg) b_aaFi) (Map (n_aaFg, n_aaFg) b_aevx)
- Database.Bolt.Extras.Graph: vertices :: forall n_aagh a_aagi b_aagj a_ae6y. Lens (Graph n_aagh a_aagi b_aagj) (Graph n_aagh a_ae6y b_aagj) (Map n_aagh a_aagi) (Map n_aagh a_ae6y)
+ Database.Bolt.Extras.Graph: vertices :: forall n_aaFg a_aaFh b_aaFi a_aevy. Lens (Graph n_aaFg a_aaFh b_aaFi) (Graph n_aaFg a_aevy b_aaFi) (Map n_aaFg a_aaFh) (Map n_aaFg a_aevy)
Files
- CHANGELOG.md +5/−0
- hasbolt-extras.cabal +11/−4
- src/Database/Bolt/Extras/DSL/Internal/Types.hs +8/−8
- src/Database/Bolt/Extras/DSL/Typed.hs +3/−8
- src/Database/Bolt/Extras/DSL/Typed/Parameters.hs +8/−9
- src/Database/Bolt/Extras/Internal/Cypher.hs +8/−8
- src/Database/Bolt/Extras/Internal/Instances.hs +11/−3
- src/Database/Bolt/Extras/Internal/Types.hs +17/−8
CHANGELOG.md view
@@ -6,6 +6,11 @@ ## [Unreleased] +## [0.0.1.9] - 2022-03-14+### Added+- `IsValue` instances for `ToValue` & `NodeLike` via newtypes;+- Add even more `HasCallStack`.+ ## [0.0.1.8] - 2021-09-07 ### Added - `FromValue` / `ToValue` instances for `NonEmpty`;
hasbolt-extras.cabal view
@@ -1,5 +1,5 @@ name: hasbolt-extras-version: 0.0.1.8+version: 0.0.1.9 synopsis: Extras for hasbolt library description: Extras for hasbolt library homepage: https://github.com/biocad/hasbolt-extras#readme@@ -17,6 +17,13 @@ extra-source-files: CHANGELOG.md README.md +tested-with:+ GHC ==8.6.5+ || ==8.8.4+ || ==8.10.7+ || ==9.0.2+ || ==9.2.2+ source-repository head type: git location: https://github.com/biocad/hasbolt-extras@@ -52,13 +59,13 @@ , Database.Bolt.Extras.Graph.Internal.Get , Database.Bolt.Extras.Graph.Internal.Put , Database.Bolt.Extras.Graph.Internal.GraphQuery- + build-depends: base >= 4.8 && <5 , aeson >= 1.2.4.0 , aeson-casing >= 0.1.0.5 , containers >= 0.5.10.2 , free >= 5.0- , hasbolt >= 0.1.4.0+ , hasbolt >= 0.1.6.1 , lens >= 4.16 , mtl >= 2.2.0 , neat-interpolation >= 0.3.2.0@@ -91,7 +98,7 @@ hs-source-dirs: test main-is: Doctest.hs - build-depends: base >= 4.8 && < 5 + build-depends: base >= 4.8 && < 5 , hasbolt-extras , doctest >= 0.16
src/Database/Bolt/Extras/DSL/Internal/Types.hs view
@@ -29,12 +29,12 @@ , toRelSelector ) where -import Data.Foldable (foldl')-import Data.Map.Strict (toList)-import Data.Text (Text)-import Database.Bolt (Node (..), URelationship (..),- Value (..))-import Database.Bolt.Extras (BoltId)+import Data.Foldable (foldl')+import Data.Map.Strict (toList)+import Data.Text (Text)+import Database.Bolt (Node (..), URelationship (..), Value (..))+import Database.Bolt.Extras (BoltId)+import GHC.Stack (HasCallStack) -- | Class for Selectors, which can update identifier, labels and props. --@@ -171,12 +171,12 @@ defR :: RelSelector defR = defaultRel -toNodeSelector :: Node -> NodeSelector+toNodeSelector :: HasCallStack => Node -> NodeSelector toNodeSelector Node{..} = defaultNode { nodeLabels = labels , nodeProperties = filter ((/= N ()) . snd) (toList nodeProps) } -toRelSelector :: URelationship -> RelSelector+toRelSelector :: HasCallStack => URelationship -> RelSelector toRelSelector URelationship{..} = defaultRel { relLabel = urelType , relProperties = toList urelProps }
src/Database/Bolt/Extras/DSL/Typed.hs view
@@ -190,24 +190,19 @@ & withReturn allProps ) :}-MATCH (user)-[user0binder :USER_CREATED {}]->(binder)-, (binder :Binder {uuid:"123-456"})-, (user :User {user:"098-765"})+MATCH (user)-[user0binder :USER_CREATED {}]->(binder), (binder :Binder {uuid:"123-456"}), (user :User {user:"098-765"}) <BLANKLINE> WITH DISTINCT binder, user, user0binder RETURN { id: id(binder), labels: labels(binder), props: properties(binder)-} as binder-, { id: id(user),+} as binder, { id: id(user), labels: labels(user), props: properties(user)-} as user-, { id: id(user0binder),+} as user, { id: id(user0binder), label: type(user0binder), props: properties(user0binder) } as user0binder-<BLANKLINE> -} {- $safety
src/Database/Bolt/Extras/DSL/Typed/Parameters.hs view
@@ -11,14 +11,13 @@ module Database.Bolt.Extras.DSL.Typed.Parameters where -import Control.Monad.IO.Class (MonadIO)-import Data.Kind (Type)-import qualified Data.Map.Strict as Map-import Data.Text (Text, pack)-import Database.Bolt (BoltActionT, IsValue (..), Record,- Value, queryP)-import GHC.Stack (HasCallStack)-import GHC.TypeLits (Symbol)+import Control.Monad.IO.Class (MonadIO)+import Data.Kind (Type)+import qualified Data.Map.Strict as Map+import Data.Text (Text, pack)+import Database.Bolt (BoltActionT, IsValue (..), Record, Value, queryP)+import GHC.Stack (HasCallStack)+import GHC.TypeLits (Symbol) import Database.Bolt.Extras.DSL.Internal.Executer (formQuery) import Database.Bolt.Extras.DSL.Internal.Language (CypherDSL)@@ -92,7 +91,7 @@ -- ... queryWithParams :: forall params m fun- . MonadIO m+ . MonadIO m => QueryWithParams params m fun => HasCallStack => CypherDSLParams params ()
src/Database/Bolt/Extras/Internal/Cypher.hs view
@@ -15,18 +15,18 @@ -- This file contains some converation rules from 'Database.Bolt' types to `Cypher`. ------------------------------------------------------------------------------------------------- -import Data.Text as T (Text, concat, cons,- intercalate, pack,- replace, toUpper)-import Database.Bolt (Value (..))-import Database.Bolt.Extras.Internal.Types (Label, Property)-import Database.Bolt.Extras.Utils (currentLoc)-import NeatInterpolation (text)+import Data.Text as T (Text, concat, cons, intercalate, pack, replace,+ toUpper)+import Database.Bolt (Value (..))+import Database.Bolt.Extras.Internal.Types (Label, Property)+import Database.Bolt.Extras.Utils (currentLoc)+import GHC.Stack (HasCallStack)+import NeatInterpolation (text) -- | The class for convertation into Cypher. -- class ToCypher a where- toCypher :: a -> Text+ toCypher :: HasCallStack => a -> Text -- | Convertation for 'Database.Bolt.Value' into Cypher. --
src/Database/Bolt/Extras/Internal/Instances.hs view
@@ -11,9 +11,11 @@ import Data.List.NonEmpty (NonEmpty (..), toList) import Data.Map.Strict (Map) import Data.Text (Text)-import Database.Bolt (Node, Value (..))-import qualified Database.Bolt as DB (Structure)-import Database.Bolt.Extras.Internal.Types (FromValue (..), NodeLike (..), ToValue (..))+import Database.Bolt (Node (..), Value (..))+import qualified Database.Bolt as DB+import Database.Bolt.Extras.Internal.Types (FromValue (..), NodeLike (..),+ NodeLikeProps (..), ToIsValue (..),+ ToValue (..)) import Database.Bolt.Extras.Utils (currentLoc) import GHC.Float (double2Float, float2Double) @@ -54,6 +56,12 @@ instance ToValue DB.Structure where toValue = S++instance ToValue a => DB.IsValue (ToIsValue a) where+ toValue (ToIsValue a) = toValue a++instance NodeLike a => DB.IsValue (NodeLikeProps a) where+ toValue (NodeLikeProps a) = toValue $ nodeProps $ toNode a instance FromValue () where fromValue (N ()) = ()
src/Database/Bolt/Extras/Internal/Types.hs view
@@ -8,8 +8,11 @@ , Property , ToValue (..) , URelationLike (..)+ , ToIsValue (..)+ , NodeLikeProps (..) ) where +import GHC.Stack (HasCallStack) import Data.Map.Strict (Map) import Data.Text (Text) import Database.Bolt (Node (..), URelationship (..), Value (..))@@ -25,29 +28,29 @@ -- | 'NodeLike' class represents convertable into and from 'Node'. -- class NodeLike a where- toNode :: a -> Node- fromNode :: Node -> a+ toNode :: HasCallStack => a -> Node+ fromNode :: HasCallStack => Node -> a -- | 'URelationLike' class represents convertable into and from 'URelationship'. -- class URelationLike a where- toURelation :: a -> URelationship- fromURelation :: URelationship -> a+ toURelation :: HasCallStack => a -> URelationship+ fromURelation :: HasCallStack => URelationship -> a -- | 'ToValue' means that something can be converted into Bolt 'Value'. -- class ToValue a where- toValue :: a -> Value+ toValue :: HasCallStack => a -> Value -- | 'FromValue' means that something can be converted from Bolt 'Value'. -- class FromValue a where- fromValue :: Value -> a+ fromValue :: HasCallStack => Value -> a -- | 'Labels' means that labels can be obtained from entity. -- class Labels a where- getLabels :: a -> [Label]+ getLabels :: HasCallStack => a -> [Label] instance Labels Node where getLabels = labels@@ -58,10 +61,16 @@ -- | 'Properties' means that properties can be obtained from entity. -- class Properties a where- getProps :: a -> Map Text Value+ getProps :: HasCallStack => a -> Map Text Value instance Properties Node where getProps = nodeProps instance Properties URelationship where getProps = urelProps++-- | ToIsValue provides IsValue instance given ToValue+newtype ToIsValue a = ToIsValue a++-- | NodeLikeProps provides IsValue instance given NodeLike, in form of Map Text Value+newtype NodeLikeProps a = NodeLikeProps a