Safe Haskell | None |
---|---|
Language | Haskell2010 |
Execute the plan given from .Plan.
Synopsis
- data RecordSet = RecordSet {
- origin :: Maybe PlannedAction
- rows :: Vector (InsOrdHashMap FieldName OutputValue)
- wantedFields :: Maybe [Text]
- data ExecuteReader = ExecuteReader {
- recordSets :: IORef (InsOrdHashMap Ref RecordSet)
- credentials :: SourceConfig
- data ExecuteProblem
- newtype Execute a = Execute {}
- data OutputValue
- = ArrayOutputValue (Vector OutputValue)
- | RecordOutputValue (InsOrdHashMap FieldName OutputValue)
- | ScalarOutputValue Value
- | NullOutputValue
- runExecute :: MonadIO m => SourceConfig -> HeadAndTail -> Execute a -> m (Either ExecuteProblem RecordSet)
- execute :: Forest PlannedAction -> Execute ()
- executePlannedAction :: PlannedAction -> Execute ()
- fetchRecordSetForAction :: Action -> Execute RecordSet
- makeRecordSet :: Vector (InsOrdHashMap FieldName Value) -> RecordSet
- saveRecordSet :: Ref -> RecordSet -> Execute ()
- getRecordSet :: Ref -> Execute RecordSet
- getFinalRecordSet :: HeadAndTail -> Execute RecordSet
- leftObjectJoin :: Maybe [Text] -> Text -> [(FieldName, FieldName)] -> RecordSet -> RecordSet -> Either ExecuteProblem RecordSet
- leftArrayJoin :: Maybe [Text] -> Text -> [(FieldName, FieldName)] -> Top -> Maybe Int -> RecordSet -> RecordSet -> Either ExecuteProblem RecordSet
- joinArrayRows :: Maybe [Text] -> Text -> InsOrdHashMap FieldName OutputValue -> Vector (InsOrdHashMap FieldName OutputValue) -> InsOrdHashMap FieldName OutputValue
- joinObjectRows :: Maybe [Text] -> Text -> InsOrdHashMap FieldName OutputValue -> Vector (InsOrdHashMap FieldName OutputValue) -> Either ExecuteProblem (InsOrdHashMap FieldName OutputValue)
Documentation
A set of records produced by the database. These are joined together. There are all sorts of optimizations possible here, from using a matrix/flat vector, unboxed sums for Value, etc. Presently we choose a naive implementation in the interest of getting other work done.
RecordSet | |
|
Instances
Show RecordSet Source # | |
(TypeError ('Text "Aeson loses key order, so you can't use this instance.") :: Constraint) => ToJSON RecordSet Source # | |
Defined in Hasura.Backends.MySQL.DataLoader.Execute toEncoding :: RecordSet -> Encoding toJSONList :: [RecordSet] -> Value toEncodingList :: [RecordSet] -> Encoding |
data ExecuteReader Source #
The read-only info. used by the Execute monad. Later, this IORef may become either atomically modified or in an STM or MVar so that jobs can be executed in parallel.
ExecuteReader | |
|
data ExecuteProblem Source #
Any problem encountered while executing the plan.
GetJobDecodeProblem String | |
CreateQueryJobDecodeProblem String | |
JoinProblem ExecuteProblem | |
UnsupportedJoinBug JoinType | |
MissingRecordSetBug Ref | |
BrokenJoinInvariant [FieldName] |
Instances
Show ExecuteProblem Source # | |
Defined in Hasura.Backends.MySQL.DataLoader.Execute showsPrec :: Int -> ExecuteProblem -> ShowS # show :: ExecuteProblem -> String # showList :: [ExecuteProblem] -> ShowS # |
Execute monad; as queries are performed, the record sets are stored in the map.
data OutputValue Source #
A value outputted by this execute module in a record set.
ArrayOutputValue (Vector OutputValue) | |
RecordOutputValue (InsOrdHashMap FieldName OutputValue) | |
ScalarOutputValue Value | |
NullOutputValue |
Instances
runExecute :: MonadIO m => SourceConfig -> HeadAndTail -> Execute a -> m (Either ExecuteProblem RecordSet) Source #
Using the config, run the execute action. Finally, resolve the head-and-tail to a record set.
executePlannedAction :: PlannedAction -> Execute () Source #
Execute an action, then store its result in the ref assigned to it.
fetchRecordSetForAction :: Action -> Execute RecordSet Source #
Fetch the record set for the given action.
makeRecordSet :: Vector (InsOrdHashMap FieldName Value) -> RecordSet Source #
Make a record set from a flat record from the DB.
getFinalRecordSet :: HeadAndTail -> Execute RecordSet Source #
See documentation for HeadAndTail
.
leftObjectJoin :: Maybe [Text] -> Text -> [(FieldName, FieldName)] -> RecordSet -> RecordSet -> Either ExecuteProblem RecordSet Source #
Inefficient but clean left object join.
leftArrayJoin :: Maybe [Text] -> Text -> [(FieldName, FieldName)] -> Top -> Maybe Int -> RecordSet -> RecordSet -> Either ExecuteProblem RecordSet Source #
A naive, exponential reference implementation of a left join. It serves as a trivial sample implementation for correctness checking of more efficient ones.
joinArrayRows :: Maybe [Text] -> Text -> InsOrdHashMap FieldName OutputValue -> Vector (InsOrdHashMap FieldName OutputValue) -> InsOrdHashMap FieldName OutputValue Source #
Join a row with another as an array join.
joinObjectRows :: Maybe [Text] -> Text -> InsOrdHashMap FieldName OutputValue -> Vector (InsOrdHashMap FieldName OutputValue) -> Either ExecuteProblem (InsOrdHashMap FieldName OutputValue) Source #
Join a row with another as an object join.
If rightRow is not a single row, we throw BrokenJoinInvariant
.