1
0
mirror of https://github.com/hasura/graphql-engine.git synced 2024-12-17 20:41:49 +03:00
graphql-engine/server/src-lib/Hasura/GraphQL/Transport/Backend.hs
2021-09-01 17:57:39 +00:00

73 lines
2.0 KiB
Haskell

module Hasura.GraphQL.Transport.Backend where
import Hasura.Prelude
import qualified Data.ByteString as B
import qualified Language.GraphQL.Draft.Syntax as G
import qualified Hasura.Logging as L
import Hasura.Base.Error
import Hasura.EncJSON
import Hasura.GraphQL.Execute.Backend
import Hasura.GraphQL.Execute.LiveQuery.Plan
import Hasura.GraphQL.Logging (MonadQueryLog)
import Hasura.GraphQL.Transport.HTTP.Protocol
import Hasura.RQL.Types.Backend
import Hasura.SQL.Backend
import Hasura.Server.Types (RequestId)
import Hasura.Session
import Hasura.Tracing
-- | This typeclass enacapsulates how a given backend sends queries and mutations over the
-- network. Each backend is currently responsible for both logging and tracing, for now.
class BackendExecute b => BackendTransport (b :: BackendType) where
runDBQuery
:: forall m
. ( MonadIO m
, MonadError QErr m
, MonadQueryLog m
, MonadTrace m
)
=> RequestId
-> GQLReqUnparsed
-> G.Name
-> UserInfo
-> L.Logger L.Hasura
-> SourceConfig b
-> ExecutionMonad b EncJSON
-> Maybe (PreparedQuery b)
-> m (DiffTime, EncJSON)
runDBMutation
:: forall m
. ( MonadIO m
, MonadError QErr m
, MonadQueryLog m
, MonadTrace m
)
=> RequestId
-> GQLReqUnparsed
-> G.Name
-> UserInfo
-> L.Logger L.Hasura
-> SourceConfig b
-> ExecutionMonad b EncJSON
-> Maybe (PreparedQuery b)
-> m (DiffTime, EncJSON)
runDBSubscription
:: forall m
. MonadIO m
=> SourceConfig b
-> MultiplexedQuery b
-> [(CohortId, CohortVariables)]
-- ^ WARNING: Postgres-specific, ignored by other backends
-> m (DiffTime, Either QErr [(CohortId, B.ByteString)])
runDBQueryExplain
:: forall m
. ( MonadIO m
, MonadError QErr m
)
=> DBStepInfo b
-> m EncJSON