packages feed

hydra-kernel-0.17.6: src/main/haskell/Hydra/Query.hs

-- Note: this is an automatically generated file. Do not edit.

-- | A model for language-agnostic graph pattern queries

module Hydra.Query where

import qualified Hydra.Core as Core
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
import qualified Data.Scientific as Sci
import Data.Void

-- | One of several comparison operators
data ComparisonConstraint =
  ComparisonConstraintEqual |
  ComparisonConstraintNotEqual |
  ComparisonConstraintLessThan |
  ComparisonConstraintGreaterThan |
  ComparisonConstraintLessThanOrEqual |
  ComparisonConstraintGreaterThanOrEqual
  deriving (Eq, Ord, Read, Show)

_ComparisonConstraint = Core.Name "hydra.query.ComparisonConstraint"

_ComparisonConstraint_equal = Core.Name "equal"

_ComparisonConstraint_notEqual = Core.Name "notEqual"

_ComparisonConstraint_lessThan = Core.Name "lessThan"

_ComparisonConstraint_greaterThan = Core.Name "greaterThan"

_ComparisonConstraint_lessThanOrEqual = Core.Name "lessThanOrEqual"

_ComparisonConstraint_greaterThanOrEqual = Core.Name "greaterThanOrEqual"

-- | An abstract edge based on a record type
data Edge =
  Edge {
    -- | The name of a record type, for which the edge also specifies an out- and an in- projection
    edgeType :: Core.Name,
    -- | The field representing the out-projection of the edge. Defaults to 'out'.
    edgeOut :: (Maybe Core.Name),
    -- | The field representing the in-projection of the edge. Defaults to 'in'.
    edgeIn :: (Maybe Core.Name)}
  deriving (Eq, Ord, Read, Show)

_Edge = Core.Name "hydra.query.Edge"

_Edge_type = Core.Name "type"

_Edge_out = Core.Name "out"

_Edge_in = Core.Name "in"

-- | A query pattern which matches within a designated component subgraph
data GraphPattern =
  GraphPattern {
    -- | The name of the component graph
    graphPatternGraph :: Core.Name,
    -- | The patterns to match within the subgraph
    graphPatternPatterns :: [Pattern]}
  deriving (Eq, Ord, Read, Show)

_GraphPattern = Core.Name "hydra.query.GraphPattern"

_GraphPattern_graph = Core.Name "graph"

_GraphPattern_patterns = Core.Name "patterns"

-- | A node in a query expression; it may be a term, a variable, or a wildcard
data Node =
  -- | A graph term; an expression which is valid in the graph being matched
  NodeTerm Core.Term |
  -- | A query variable, not to be confused with a variable term
  NodeVariable Variable |
  -- | An anonymous variable which we do not care to join across patterns
  NodeWildcard
  deriving (Eq, Ord, Read, Show)

_Node = Core.Name "hydra.query.Node"

_Node_term = Core.Name "term"

_Node_variable = Core.Name "variable"

_Node_wildcard = Core.Name "wildcard"

-- | A query path
data Path =
  -- | A path given by a single step
  PathStep Step |
  -- | A path given by a regular expression quantifier applied to another path
  PathRegex RegexSequence |
  -- | A path given by the inverse of another path
  PathInverse Path
  deriving (Eq, Ord, Read, Show)

_Path = Core.Name "hydra.query.Path"

_Path_step = Core.Name "step"

_Path_regex = Core.Name "regex"

_Path_inverse = Core.Name "inverse"

-- | A declared equivalence between two abstract paths in a graph
data PathEquation =
  PathEquation {
    -- | The left-hand side of the equation
    pathEquationLeft :: Path,
    -- | The right-hand side of the equation
    pathEquationRight :: Path}
  deriving (Eq, Ord, Read, Show)

_PathEquation = Core.Name "hydra.query.PathEquation"

_PathEquation_left = Core.Name "left"

_PathEquation_right = Core.Name "right"

-- | A query pattern
data Pattern =
  -- | A subject/predicate/object pattern
  PatternTriple TriplePattern |
  -- | The negation of another pattern
  PatternNegation Pattern |
  -- | The conjunction ('and') of several other patterns
  PatternConjunction [Pattern] |
  -- | The disjunction (inclusive 'or') of several other patterns
  PatternDisjunction [Pattern] |
  -- | A pattern which matches within a named subgraph
  PatternGraph GraphPattern
  deriving (Eq, Ord, Read, Show)

_Pattern = Core.Name "hydra.query.Pattern"

_Pattern_triple = Core.Name "triple"

_Pattern_negation = Core.Name "negation"

_Pattern_conjunction = Core.Name "conjunction"

_Pattern_disjunction = Core.Name "disjunction"

_Pattern_graph = Core.Name "graph"

-- | A pattern which, if it matches in a given graph, implies that another pattern must also match. Query variables are shared between the two patterns.
data PatternImplication =
  PatternImplication {
    -- | The pattern which, if it matches, triggers the constraint
    patternImplicationAntecedent :: Pattern,
    -- | The pattern which must also match when the antecedent matches
    patternImplicationConsequent :: Pattern}
  deriving (Eq, Ord, Read, Show)

_PatternImplication = Core.Name "hydra.query.PatternImplication"

_PatternImplication_antecedent = Core.Name "antecedent"

_PatternImplication_consequent = Core.Name "consequent"

-- | A SELECT-style graph pattern matching query
data Query =
  Query {
    -- | The variables selected by the query
    queryVariables :: [Variable],
    -- | The patterns to be matched
    queryPatterns :: [Pattern]}
  deriving (Eq, Ord, Read, Show)

_Query = Core.Name "hydra.query.Query"

_Query_variables = Core.Name "variables"

_Query_patterns = Core.Name "patterns"

-- | A range from min to max, inclusive
data Range =
  Range {
    -- | The minimum value (inclusive)
    rangeMin :: Int,
    -- | The maximum value (inclusive)
    rangeMax :: Int}
  deriving (Eq, Ord, Read, Show)

_Range = Core.Name "hydra.query.Range"

_Range_min = Core.Name "min"

_Range_max = Core.Name "max"

-- | A regular expression quantifier
data RegexQuantifier =
  -- | No quantifier; matches a single occurrence
  RegexQuantifierOne |
  -- | The ? quanifier; matches zero or one occurrence
  RegexQuantifierZeroOrOne |
  -- | The * quantifier; matches any number of occurrences
  RegexQuantifierZeroOrMore |
  -- | The + quantifier; matches one or more occurrences
  RegexQuantifierOneOrMore |
  -- | The {n} quantifier; matches exactly n occurrences
  RegexQuantifierExactly Int |
  -- | The {n,} quantifier; matches at least n occurrences
  RegexQuantifierAtLeast Int |
  -- | The {n, m} quantifier; matches between n and m (inclusive) occurrences
  RegexQuantifierRange Range
  deriving (Eq, Ord, Read, Show)

_RegexQuantifier = Core.Name "hydra.query.RegexQuantifier"

_RegexQuantifier_one = Core.Name "one"

_RegexQuantifier_zeroOrOne = Core.Name "zeroOrOne"

_RegexQuantifier_zeroOrMore = Core.Name "zeroOrMore"

_RegexQuantifier_oneOrMore = Core.Name "oneOrMore"

_RegexQuantifier_exactly = Core.Name "exactly"

_RegexQuantifier_atLeast = Core.Name "atLeast"

_RegexQuantifier_range = Core.Name "range"

-- | A path with a regex quantifier
data RegexSequence =
  RegexSequence {
    -- | The path to which the quantifier applies
    regexSequencePath :: Path,
    -- | The quantifier
    regexSequenceQuantifier :: RegexQuantifier}
  deriving (Eq, Ord, Read, Show)

_RegexSequence = Core.Name "hydra.query.RegexSequence"

_RegexSequence_path = Core.Name "path"

_RegexSequence_quantifier = Core.Name "quantifier"

-- | An atomic function as part of a query. When applied to a graph, steps are typed by function types.
data Step =
  -- | An out-to-in traversal of an abstract edge
  StepEdge Edge |
  -- | A projection from a record through one of its fields
  StepProject Core.Projection |
  -- | A comparison of two terms
  StepCompare ComparisonConstraint
  deriving (Eq, Ord, Read, Show)

_Step = Core.Name "hydra.query.Step"

_Step_edge = Core.Name "edge"

_Step_project = Core.Name "project"

_Step_compare = Core.Name "compare"

-- | A subject/predicate/object pattern
data TriplePattern =
  TriplePattern {
    -- | The subject of the pattern
    triplePatternSubject :: Node,
    -- | The predicate (property) of the pattern
    triplePatternPredicate :: Path,
    -- | The object of the pattern
    triplePatternObject :: Node}
  deriving (Eq, Ord, Read, Show)

_TriplePattern = Core.Name "hydra.query.TriplePattern"

_TriplePattern_subject = Core.Name "subject"

_TriplePattern_predicate = Core.Name "predicate"

_TriplePattern_object = Core.Name "object"

-- | A query variable
newtype Variable =
  Variable {
    unVariable :: String}
  deriving (Eq, Ord, Read, Show)

_Variable = Core.Name "hydra.query.Variable"