| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
Database.Bolt.Extras.DSL
Synopsis
- data NodeSelector = NodeSelector {- nodeIdentifier :: Maybe Text
- nodeLabels :: [Text]
- nodeProperties :: [(Text, Value)]
- nodeParams :: [(Text, Text)]
 
- data RelSelector = RelSelector {}
- class SelectorLike a where
- (.:) :: SelectorLike a => a -> Text -> a
- (.#) :: SelectorLike a => a -> [(Text, Value)] -> a
- toNodeSelector :: HasCallStack => Node -> NodeSelector
- toRelSelector :: HasCallStack => URelationship -> RelSelector
- data PathSelector
- data PathPart
- (-:) :: NodeSelector -> PathPart -> PathSelector
- (<-:) :: NodeSelector -> PathPart -> PathSelector
- data Selector- = PS PathSelector
- | TS Text
 
- type Selectors = [Selector]
- (#) :: a -> (a -> b) -> b
- defaultNode :: NodeSelector
- defN :: NodeSelector
- defaultRel :: RelSelector
- defR :: RelSelector
- data Cond
- data Conds
- type CypherDSL a = Free Expr a
- createF :: Selectors -> Free Expr ()
- matchF :: Selectors -> Free Expr ()
- optionalMatchF :: Selectors -> Free Expr ()
- mergeF :: Selectors -> Free Expr ()
- whereF :: Conds -> Free Expr ()
- setF :: [Text] -> Free Expr ()
- deleteF :: [Text] -> Free Expr ()
- detachDeleteF :: [Text] -> Free Expr ()
- removeF :: [Text] -> Free Expr ()
- returnF :: [Text] -> Free Expr ()
- withF :: [Text] -> Free Expr ()
- textF :: Text -> Free Expr ()
- formQuery :: Free Expr () -> Text
- data Expr next
Selectors for nodes, relations and paths
These data types let you specify Cypher queries.
With OverloadedLabels and operators you can write selectors in very concise
 Cypher-like form:
(#n .: "Name" .# ["name" =: "C42"]) -: (defR .: "NAME_OF") :!->: (#m .: "Molecule")
(n:Name{name:"C42"})-[:NAME_OF]->(m:Molecule)data NodeSelector Source #
Selector for Nodes.
This datatype has OverloadedLabels instance to simplify specifying nodes. Labels produce
 empty nodes.
#foo :: NodeSelector -- foo = NodeSelector (Just "foo") [] []
Constructors
| NodeSelector | |
| Fields 
 | |
Instances
| Show NodeSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Types Methods showsPrec :: Int -> NodeSelector -> ShowS # show :: NodeSelector -> String # showList :: [NodeSelector] -> ShowS # | |
| Eq NodeSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Types | |
| SelectorLike NodeSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods withIdentifier :: Text -> NodeSelector -> NodeSelector Source # withLabel :: Text -> NodeSelector -> NodeSelector Source # withProp :: (Text, Value) -> NodeSelector -> NodeSelector Source # withParam :: (Text, Text) -> NodeSelector -> NodeSelector Source # | |
| ToCypher NodeSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods toCypher :: NodeSelector -> Text Source # | |
| KnownSymbol x => IsLabel x NodeSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods | |
data RelSelector Source #
Selector for URelationships.
This datatype has OverloadedLabels instance as well, similar to NodeSelector.
Constructors
| RelSelector | |
Instances
| Show RelSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Types Methods showsPrec :: Int -> RelSelector -> ShowS # show :: RelSelector -> String # showList :: [RelSelector] -> ShowS # | |
| Eq RelSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Types | |
| SelectorLike RelSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods withIdentifier :: Text -> RelSelector -> RelSelector Source # withLabel :: Text -> RelSelector -> RelSelector Source # withProp :: (Text, Value) -> RelSelector -> RelSelector Source # withParam :: (Text, Text) -> RelSelector -> RelSelector Source # | |
| ToCypher RelSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods toCypher :: RelSelector -> Text Source # | |
| KnownSymbol x => IsLabel x RelSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods | |
class SelectorLike a where Source #
Class for Selectors, which can update identifier, labels and props.
Methods
withIdentifier :: Text -> a -> a Source #
withLabel :: Text -> a -> a Source #
Instances
| SelectorLike NodeSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods withIdentifier :: Text -> NodeSelector -> NodeSelector Source # withLabel :: Text -> NodeSelector -> NodeSelector Source # withProp :: (Text, Value) -> NodeSelector -> NodeSelector Source # withParam :: (Text, Text) -> NodeSelector -> NodeSelector Source # | |
| SelectorLike RelSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods withIdentifier :: Text -> RelSelector -> RelSelector Source # withLabel :: Text -> RelSelector -> RelSelector Source # withProp :: (Text, Value) -> RelSelector -> RelSelector Source # withParam :: (Text, Text) -> RelSelector -> RelSelector Source # | |
(.:) :: SelectorLike a => a -> Text -> a infixl 9 Source #
Operator version of withLabel. To be used with OverloadedLabels instances.
#foo .: "Foo" :: NodeSelector
toNodeSelector :: HasCallStack => Node -> NodeSelector Source #
toRelSelector :: HasCallStack => URelationship -> RelSelector Source #
data PathSelector Source #
Constructors
| PathSelector :-!: PathPart infixl 1 | not directed relation | 
| PathSelector :<-!: PathPart infixl 1 | directed relation | 
| P NodeSelector | starting node of Path | 
Instances
| Show PathSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Types Methods showsPrec :: Int -> PathSelector -> ShowS # show :: PathSelector -> String # showList :: [PathSelector] -> ShowS # | |
| Eq PathSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Types | |
| ToCypher PathSelector Source # | |
| Defined in Database.Bolt.Extras.DSL.Internal.Instances Methods toCypher :: PathSelector -> Text Source # | |
Selector for paths.
Constructors
| RelSelector :!->: NodeSelector infixl 2 | directed relation | 
| RelSelector :!-: NodeSelector infixl 2 | not directed relation | 
(-:) :: NodeSelector -> PathPart -> PathSelector infixl 1 Source #
(<-:) :: NodeSelector -> PathPart -> PathSelector infixl 1 Source #
Constructors
| PS PathSelector | path selector | 
| TS Text | free text selector | 
Default selectors
defaultNode :: NodeSelector Source #
Empty NodeSelector.
defN :: NodeSelector Source #
Shorter synonym for defaultRel.
defaultRel :: RelSelector Source #
Empty RelSelector.
defR :: RelSelector Source #
Shorter synonym for defaultRel.
Cypher conditions
Conditions.
Constructors
| ID Text BoltId | ID(txt) = boltId | 
| IDs Text [BoltId] | ID(txt) IN [boltId1, boltId2, ... ] | 
| IN Text [Text] | txt IN [txt1, txt2, ... ] | 
| TC Text | free text condition | 
Constructors
| Conds :&&: Conds infixr 3 | 
 | 
| Conds :||: Conds infixr 2 | 
 | 
| C Cond | single  | 
| Not Conds | NOT  | 
DSL for Cypher
The free-monadic DSL lets you write Cypher queries in Haskell like this:
formQuery $ do
   matchF [
     PS $ (#n .: "Name" .# ["name" =: "C42"]) -: (defR .: "NAME_OF") :!->: (#m .: "Molecule")
   ]
   returnF ["n", "m"]DSL operations
Rendering Cypher queries
Implementation details
Expression in Cypher language.
Constructors
| Create Selectors next | CREATE query | 
| Match Selectors next | MATCH query | 
| OptionalMatch Selectors next | OPTIONAL MATCH query | 
| Merge Selectors next | MERGE query | 
| Where Conds next | WHERE query | 
| Set [Text] next | SET query | 
| Delete [Text] next | DELETE query | 
| DetachDelete [Text] next | DETACH DELETE query | 
| Remove [Text] next | REMOVE query | 
| Return [Text] next | RETURN query | 
| With [Text] next | WITH query | 
| Text Text next | free text query |