Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
ProjectM36.RelationalExpression
Synopsis
- data DatabaseContextExprDetails = CountUpdatedTuples
- databaseContextExprDetailsFunc :: DatabaseContextExprDetails -> ResultAccumFunc
- mkDatabaseContextEvalState :: DatabaseContext -> DatabaseContextEvalState
- data RelationalExprEnv = RelationalExprEnv {}
- envTuple :: GraphRefRelationalExprEnv -> RelationTuple
- envAttributes :: GraphRefRelationalExprEnv -> Attributes
- type RelationalExprM a = ReaderT RelationalExprEnv (ExceptT RelationalError Identity) a
- runRelationalExprM :: RelationalExprEnv -> RelationalExprM a -> Either RelationalError a
- reGraph :: RelationalExprM TransactionGraph
- reContext :: RelationalExprM DatabaseContext
- mkRelationalExprEnv :: DatabaseContext -> TransactionGraph -> RelationalExprEnv
- askEnv :: GraphRefRelationalExprM GraphRefRelationalExprEnv
- mergeTuplesIntoGraphRefRelationalExprEnv :: RelationTuple -> GraphRefRelationalExprEnv -> GraphRefRelationalExprEnv
- mergeAttributesIntoGraphRefRelationalExprEnv :: Attributes -> GraphRefRelationalExprEnv -> GraphRefRelationalExprEnv
- type ResultAccumName = StringType
- type ResultAccumFunc = (RelationTuple -> Relation -> Relation) -> Relation -> Relation
- data ResultAccum = ResultAccum {}
- data DatabaseContextEvalState = DatabaseContextEvalState {}
- data DatabaseContextEvalEnv = DatabaseContextEvalEnv {}
- mkDatabaseContextEvalEnv :: TransactionId -> TransactionGraph -> DatabaseContextEvalEnv
- type DatabaseContextEvalMonad a = RWST DatabaseContextEvalEnv () DatabaseContextEvalState (ExceptT RelationalError Identity) a
- runDatabaseContextEvalMonad :: DatabaseContext -> DatabaseContextEvalEnv -> DatabaseContextEvalMonad () -> Either RelationalError DatabaseContextEvalState
- dbcTransId :: DatabaseContextEvalMonad TransactionId
- dbcGraph :: DatabaseContextEvalMonad TransactionGraph
- dbcRelationalExprEnv :: DatabaseContextEvalMonad RelationalExprEnv
- getStateContext :: DatabaseContextEvalMonad DatabaseContext
- putStateContext :: DatabaseContext -> DatabaseContextEvalMonad ()
- data GraphRefRelationalExprEnv = GraphRefRelationalExprEnv {}
- type GraphRefRelationalExprM a = ReaderT GraphRefRelationalExprEnv (ExceptT RelationalError Identity) a
- gfTransForId :: TransactionId -> GraphRefRelationalExprM Transaction
- gfDatabaseContextForMarker :: GraphRefTransactionMarker -> GraphRefRelationalExprM DatabaseContext
- runGraphRefRelationalExprM :: GraphRefRelationalExprEnv -> GraphRefRelationalExprM a -> Either RelationalError a
- freshGraphRefRelationalExprEnv :: Maybe DatabaseContext -> TransactionGraph -> GraphRefRelationalExprEnv
- gfGraph :: GraphRefRelationalExprM TransactionGraph
- envContext :: RelationalExprEnv -> DatabaseContext
- setEnvContext :: RelationalExprEnv -> DatabaseContext -> RelationalExprEnv
- setRelVar :: RelVarName -> GraphRefRelationalExpr -> DatabaseContextEvalMonad ()
- deleteRelVar :: RelVarName -> DatabaseContextEvalMonad ()
- evalGraphRefDatabaseContextExpr :: GraphRefDatabaseContextExpr -> DatabaseContextEvalMonad ()
- data DatabaseContextIOEvalEnv = DatabaseContextIOEvalEnv {}
- type DatabaseContextIOEvalMonad a = RWST DatabaseContextIOEvalEnv () DatabaseContextEvalState IO a
- runDatabaseContextIOEvalMonad :: DatabaseContextIOEvalEnv -> DatabaseContext -> DatabaseContextIOEvalMonad (Either RelationalError ()) -> IO (Either RelationalError DatabaseContextEvalState)
- requireScriptSession :: DatabaseContextIOEvalMonad (Either RelationalError ScriptSession)
- putDBCIOContext :: DatabaseContext -> DatabaseContextIOEvalMonad (Either RelationalError ())
- getDBCIOContext :: DatabaseContextIOEvalMonad DatabaseContext
- getDBCIORelationalExprEnv :: DatabaseContextIOEvalMonad RelationalExprEnv
- evalGraphRefDatabaseContextIOExpr :: GraphRefDatabaseContextIOExpr -> DatabaseContextIOEvalMonad (Either RelationalError ())
- checkConstraints :: DatabaseContext -> TransactionId -> TransactionGraph -> Either RelationalError ()
- typeForRelationalExpr :: RelationalExpr -> RelationalExprM Relation
- liftE :: Monad m => m (Either a b) -> ExceptT a m b
- predicateRestrictionFilter :: Attributes -> GraphRefRestrictionPredicateExpr -> GraphRefRelationalExprM RestrictionFilter
- tupleExprCheckNewAttrName :: AttributeName -> Relation -> Either RelationalError Relation
- extendGraphRefTupleExpressionProcessor :: Relation -> GraphRefExtendTupleExpr -> GraphRefRelationalExprM (Attributes, RelationTuple -> Either RelationalError RelationTuple)
- evalGraphRefAtomExpr :: RelationTuple -> GraphRefAtomExpr -> GraphRefRelationalExprM Atom
- typeForGraphRefAtomExpr :: Attributes -> GraphRefAtomExpr -> GraphRefRelationalExprM AtomType
- verifyGraphRefAtomExprTypes :: Relation -> GraphRefAtomExpr -> AtomType -> GraphRefRelationalExprM AtomType
- evalGraphRefAttrExpr :: GraphRefAttributeExpr -> GraphRefRelationalExprM Attribute
- evalGraphRefTupleExprs :: Maybe Attributes -> GraphRefTupleExprs -> GraphRefRelationalExprM [RelationTuple]
- evalGraphRefTupleExpr :: Maybe Attributes -> GraphRefTupleExpr -> GraphRefRelationalExprM RelationTuple
- evalGraphRefRelationalExpr :: GraphRefRelationalExpr -> GraphRefRelationalExprM Relation
- dbContextForTransId :: TransactionId -> TransactionGraph -> Either RelationalError DatabaseContext
- transactionForId :: TransactionId -> TransactionGraph -> Either RelationalError Transaction
- typeForGraphRefRelationalExpr :: GraphRefRelationalExpr -> GraphRefRelationalExprM Relation
- evalGraphRefAttributeNames :: GraphRefAttributeNames -> GraphRefRelationalExpr -> GraphRefRelationalExprM (Set AttributeName)
- evalGraphRefAttributeExpr :: GraphRefAttributeExpr -> GraphRefRelationalExprM Attribute
- mkEmptyRelVars :: RelationVariables -> RelationVariables
- dbErr :: RelationalError -> DatabaseContextEvalMonad ()
- relationVariablesAsRelation :: DatabaseContext -> TransactionGraph -> Either RelationalError Relation
- evalRelationalExpr :: RelationalExpr -> RelationalExprM Relation
- class (MonadError RelationalError m, Monad m) => DatabaseContextM m where
- relVarByName :: DatabaseContextM m => RelVarName -> m GraphRefRelationalExpr
- class ResolveGraphRefTransactionMarker a where
- resolve :: a -> DatabaseContextEvalMonad a
- applyUnionCollapse :: GraphRefRelationalExpr -> GraphRefRelationalExpr
- applyRestrictionCollapse :: GraphRefRelationalExpr -> GraphRefRelationalExpr
- firstAtomForAttributeName :: AttributeName -> [RelationTuple] -> GraphRefRelationalExprM Atom
- addTargetTypeHints :: Attributes -> GraphRefRelationalExpr -> GraphRefRelationalExpr
- validateNotification :: Notification -> DatabaseContext -> TransactionGraph -> Either RelationalError Notification
Documentation
data DatabaseContextExprDetails Source #
Constructors
CountUpdatedTuples |
mkDatabaseContextEvalState :: DatabaseContext -> DatabaseContextEvalState Source #
Used to start a fresh database state for a new database context expression.
data RelationalExprEnv Source #
Constructors
RelationalExprEnv | |
Fields |
Instances
Show RelationalExprEnv Source # | |
Defined in ProjectM36.RelationalExpression |
type RelationalExprM a = ReaderT RelationalExprEnv (ExceptT RelationalError Identity) a Source #
mergeTuplesIntoGraphRefRelationalExprEnv :: RelationTuple -> GraphRefRelationalExprEnv -> GraphRefRelationalExprEnv Source #
mergeAttributesIntoGraphRefRelationalExprEnv :: Attributes -> GraphRefRelationalExprEnv -> GraphRefRelationalExprEnv Source #
type ResultAccumName = StringType Source #
type ResultAccumFunc = (RelationTuple -> Relation -> Relation) -> Relation -> Relation Source #
data ResultAccum Source #
Constructors
ResultAccum | |
Fields |
type DatabaseContextEvalMonad a = RWST DatabaseContextEvalEnv () DatabaseContextEvalState (ExceptT RelationalError Identity) a Source #
runDatabaseContextEvalMonad :: DatabaseContext -> DatabaseContextEvalEnv -> DatabaseContextEvalMonad () -> Either RelationalError DatabaseContextEvalState Source #
data GraphRefRelationalExprEnv Source #
The context is optionally passed down along in cases where the current context is uncommitted.
Constructors
GraphRefRelationalExprEnv | |
Fields |
Instances
type GraphRefRelationalExprM a = ReaderT GraphRefRelationalExprEnv (ExceptT RelationalError Identity) a Source #
gfDatabaseContextForMarker :: GraphRefTransactionMarker -> GraphRefRelationalExprM DatabaseContext Source #
runGraphRefRelationalExprM :: GraphRefRelationalExprEnv -> GraphRefRelationalExprM a -> Either RelationalError a Source #
freshGraphRefRelationalExprEnv :: Maybe DatabaseContext -> TransactionGraph -> GraphRefRelationalExprEnv Source #
evalGraphRefDatabaseContextExpr :: GraphRefDatabaseContextExpr -> DatabaseContextEvalMonad () Source #
data DatabaseContextIOEvalEnv Source #
Constructors
DatabaseContextIOEvalEnv | |
Fields
|
type DatabaseContextIOEvalMonad a = RWST DatabaseContextIOEvalEnv () DatabaseContextEvalState IO a Source #
runDatabaseContextIOEvalMonad :: DatabaseContextIOEvalEnv -> DatabaseContext -> DatabaseContextIOEvalMonad (Either RelationalError ()) -> IO (Either RelationalError DatabaseContextEvalState) Source #
putDBCIOContext :: DatabaseContext -> DatabaseContextIOEvalMonad (Either RelationalError ()) Source #
evalGraphRefDatabaseContextIOExpr :: GraphRefDatabaseContextIOExpr -> DatabaseContextIOEvalMonad (Either RelationalError ()) Source #
checkConstraints :: DatabaseContext -> TransactionId -> TransactionGraph -> Either RelationalError () Source #
predicateRestrictionFilter :: Attributes -> GraphRefRestrictionPredicateExpr -> GraphRefRelationalExprM RestrictionFilter Source #
extendGraphRefTupleExpressionProcessor :: Relation -> GraphRefExtendTupleExpr -> GraphRefRelationalExprM (Attributes, RelationTuple -> Either RelationalError RelationTuple) Source #
typeForGraphRefAtomExpr :: Attributes -> GraphRefAtomExpr -> GraphRefRelationalExprM AtomType Source #
verifyGraphRefAtomExprTypes :: Relation -> GraphRefAtomExpr -> AtomType -> GraphRefRelationalExprM AtomType Source #
Validate that the type of the AtomExpr matches the expected type.
evalGraphRefAttrExpr :: GraphRefAttributeExpr -> GraphRefRelationalExprM Attribute Source #
Look up the type's name and create a new attribute.
evalGraphRefTupleExprs :: Maybe Attributes -> GraphRefTupleExprs -> GraphRefRelationalExprM [RelationTuple] Source #
evalGraphRefTupleExpr :: Maybe Attributes -> GraphRefTupleExpr -> GraphRefRelationalExprM RelationTuple Source #
dbContextForTransId :: TransactionId -> TransactionGraph -> Either RelationalError DatabaseContext Source #
transactionForId :: TransactionId -> TransactionGraph -> Either RelationalError Transaction Source #
typeForGraphRefRelationalExpr :: GraphRefRelationalExpr -> GraphRefRelationalExprM Relation Source #
evalGraphRefAttributeNames :: GraphRefAttributeNames -> GraphRefRelationalExpr -> GraphRefRelationalExprM (Set AttributeName) Source #
dbErr :: RelationalError -> DatabaseContextEvalMonad () Source #
relationVariablesAsRelation :: DatabaseContext -> TransactionGraph -> Either RelationalError Relation Source #
Return a Relation describing the relation variables.
evalRelationalExpr :: RelationalExpr -> RelationalExprM Relation Source #
An unoptimized variant of evalGraphRefRelationalExpr for testing.
class (MonadError RelationalError m, Monad m) => DatabaseContextM m where Source #
Methods
getContext :: m DatabaseContext Source #
Instances
relVarByName :: DatabaseContextM m => RelVarName -> m GraphRefRelationalExpr Source #
class ResolveGraphRefTransactionMarker a where Source #
resolve UncommittedTransactionMarker whenever possible- this is important in the DatabaseContext in order to mitigate self-referencing loops for updates
Methods
resolve :: a -> DatabaseContextEvalMonad a Source #
Instances
firstAtomForAttributeName :: AttributeName -> [RelationTuple] -> GraphRefRelationalExprM Atom Source #
addTargetTypeHints :: Attributes -> GraphRefRelationalExpr -> GraphRefRelationalExpr Source #
Optionally add type hints to resolve type variables. For example, if we are inserting into a known relvar, then we have its concrete type.
validateNotification :: Notification -> DatabaseContext -> TransactionGraph -> Either RelationalError Notification Source #
Ensure that the notification contains valid, type-checkable relational expressions. These relational expressions therefore become registered queries: queries which must remain valid.