graphql-engine/server/src-lib/Hasura/Backends/BigQuery/Instances/Transport.hs
Karthikeyan Chinnakonda 362aca9db3 server: streaming subscriptions execution (Incremental PR - 2)
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/4016
GitOrigin-RevId: 778300dd5ea094bc76b8f96c046313132863f832
2022-04-07 14:43:01 +00:00

97 lines
2.8 KiB
Haskell

{-# OPTIONS_GHC -fno-warn-orphans #-}
module Hasura.Backends.BigQuery.Instances.Transport () where
import Data.Aeson qualified as J
import Hasura.Backends.BigQuery.Instances.Execute ()
import Hasura.Base.Error
import Hasura.EncJSON
import Hasura.GraphQL.Execute.Backend
import Hasura.GraphQL.Logging
( GeneratedQuery (..),
MonadQueryLog (..),
QueryLog (..),
QueryLogKind (QueryLogKindDatabase),
)
import Hasura.GraphQL.Namespace (RootFieldAlias)
import Hasura.GraphQL.Transport.Backend
import Hasura.GraphQL.Transport.HTTP.Protocol
import Hasura.Logging qualified as L
import Hasura.Prelude
import Hasura.RQL.Types
import Hasura.Server.Types (RequestId)
import Hasura.Session
import Hasura.Tracing
import Hasura.Tracing qualified as Tracing
instance BackendTransport 'BigQuery where
runDBQuery = runQuery
runDBQueryExplain = runQueryExplain
runDBMutation = runMutation
runDBSubscription = error "Not supported."
runDBStreamingSubscription = error "Not supported"
runQuery ::
( MonadIO m,
MonadQueryLog m,
MonadTrace m,
MonadError QErr m
) =>
RequestId ->
GQLReqUnparsed ->
RootFieldAlias ->
UserInfo ->
L.Logger L.Hasura ->
SourceConfig 'BigQuery ->
Tracing.TraceT (ExceptT QErr IO) EncJSON ->
Maybe Text ->
-- | Also return the time spent in the PG query; for telemetry.
m (DiffTime, EncJSON)
runQuery reqId query fieldName _userInfo logger _sourceConfig tx genSql = do
-- log the generated SQL and the graphql query
-- FIXME: fix logging by making logQueryLog expect something backend agnostic!
logQueryLog logger $ mkQueryLog query fieldName genSql reqId
withElapsedTime $ Tracing.interpTraceT run tx
runQueryExplain ::
( MonadIO m,
MonadError QErr m
) =>
DBStepInfo 'BigQuery ->
m EncJSON
runQueryExplain (DBStepInfo _ _ _ action) = run $ runTraceTWithReporter noReporter "explain" action
runMutation ::
( MonadError QErr m
) =>
RequestId ->
GQLReqUnparsed ->
RootFieldAlias ->
UserInfo ->
L.Logger L.Hasura ->
SourceConfig 'BigQuery ->
Tracing.TraceT (ExceptT QErr IO) EncJSON ->
Maybe Text ->
-- | Also return 'Mutation' when the operation was a mutation, and the time
-- spent in the PG query; for telemetry.
m (DiffTime, EncJSON)
runMutation _reqId _query _fieldName _userInfo _logger _sourceConfig _tx _genSql =
-- do
throw500 "BigQuery does not support mutations!"
run :: (MonadIO m, MonadError QErr m) => ExceptT QErr IO a -> m a
run action = do
result <- liftIO $ runExceptT action
result `onLeft` throwError
mkQueryLog ::
GQLReqUnparsed ->
RootFieldAlias ->
Maybe Text ->
RequestId ->
QueryLog
mkQueryLog gqlQuery fieldName preparedSql requestId =
QueryLog gqlQuery ((fieldName,) <$> generatedQuery) requestId QueryLogKindDatabase
where
generatedQuery = preparedSql <&> \qs -> GeneratedQuery qs J.Null