mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 01:12:56 +03:00
server: fix caching for queries using remote schema permissions
https://github.com/hasura/graphql-engine-mono/pull/1579 Co-authored-by: Solomon Bothwell <24038+ssbothwell@users.noreply.github.com> GitOrigin-RevId: 8fdf33863d812f2ee4edee7eec34150a7dc03231
This commit is contained in:
parent
12045a827c
commit
456caa59e1
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
- server: make improvements in the `livequery-poller-log`
|
- server: make improvements in the `livequery-poller-log`
|
||||||
- server: Backends Citus, MSSQL, and BigQuery now all support the `set_table_customization` operation.
|
- server: Backends Citus, MSSQL, and BigQuery now all support the `set_table_customization` operation.
|
||||||
|
- server: Adds caching support for queries using remote schema permissions
|
||||||
- cli: `metadata diff` will now only show the differences in metadata. old behaviour is avialble behind a flag (`--type unified-common`) (#5487)
|
- cli: `metadata diff` will now only show the differences in metadata. old behaviour is avialble behind a flag (`--type unified-common`) (#5487)
|
||||||
|
|
||||||
## v2.0.0-beta.2
|
## v2.0.0-beta.2
|
||||||
|
@ -36,7 +36,7 @@ import qualified Language.GraphQL.Draft.Syntax as G
|
|||||||
import qualified Network.HTTP.Types as HTTP
|
import qualified Network.HTTP.Types as HTTP
|
||||||
import qualified Network.Wai.Extended as Wai
|
import qualified Network.Wai.Extended as Wai
|
||||||
|
|
||||||
import Control.Lens (toListOf)
|
import Control.Lens (Traversal', toListOf)
|
||||||
import Control.Monad.Morph (hoist)
|
import Control.Monad.Morph (hoist)
|
||||||
import Control.Monad.Trans.Control (MonadBaseControl)
|
import Control.Monad.Trans.Control (MonadBaseControl)
|
||||||
|
|
||||||
@ -166,7 +166,7 @@ runSessVarPred = filterSessionVariables . unSessVarPred
|
|||||||
-- | Filter out only those session variables used by the query AST provided
|
-- | Filter out only those session variables used by the query AST provided
|
||||||
filterVariablesFromQuery
|
filterVariablesFromQuery
|
||||||
:: Backend backend
|
:: Backend backend
|
||||||
=> [RootField (QueryDBRoot UnpreparedValue) c (ActionQuery backend (UnpreparedValue bet)) d]
|
=> [RootField (QueryDBRoot UnpreparedValue) RemoteField (ActionQuery backend (UnpreparedValue bet)) d]
|
||||||
-> SessVarPred
|
-> SessVarPred
|
||||||
filterVariablesFromQuery query = fold $ rootToSessVarPreds =<< query
|
filterVariablesFromQuery query = fold $ rootToSessVarPreds =<< query
|
||||||
where
|
where
|
||||||
@ -174,17 +174,26 @@ filterVariablesFromQuery query = fold $ rootToSessVarPreds =<< query
|
|||||||
RFDB _ exists ->
|
RFDB _ exists ->
|
||||||
AB.dispatchAnyBackend @Backend exists \case
|
AB.dispatchAnyBackend @Backend exists \case
|
||||||
SourceConfigWith _ (QDBR db) -> toPred <$> toListOf traverseQueryDB db
|
SourceConfigWith _ (QDBR db) -> toPred <$> toListOf traverseQueryDB db
|
||||||
|
RFRemote remote -> match <$> toListOf (traverse . _SessionPresetVariable) remote
|
||||||
RFAction actionQ -> toPred <$> toListOf traverseActionQuery actionQ
|
RFAction actionQ -> toPred <$> toListOf traverseActionQuery actionQ
|
||||||
_ -> []
|
_ -> []
|
||||||
|
|
||||||
|
_SessionPresetVariable :: Traversal' RemoteSchemaVariable SessionVariable
|
||||||
|
_SessionPresetVariable f (SessionPresetVariable a b c) =
|
||||||
|
(\a' -> SessionPresetVariable a' b c) <$> f a
|
||||||
|
_SessionPresetVariable _ x = pure x
|
||||||
|
|
||||||
toPred :: UnpreparedValue bet -> SessVarPred
|
toPred :: UnpreparedValue bet -> SessVarPred
|
||||||
-- if we see a reference to the whole session variables object,
|
-- if we see a reference to the whole session variables object,
|
||||||
-- then we need to keep everything:
|
-- then we need to keep everything:
|
||||||
toPred UVSession = keepAllSessionVariables
|
toPred UVSession = keepAllSessionVariables
|
||||||
-- if we only see a specific session variable, we only need to keep that one:
|
-- if we only see a specific session variable, we only need to keep that one:
|
||||||
toPred (UVSessionVar _type sv) = SessVarPred $ \sv' _ -> sv == sv'
|
toPred (UVSessionVar _type sv) = match sv
|
||||||
toPred _ = mempty
|
toPred _ = mempty
|
||||||
|
|
||||||
|
match :: SessionVariable -> SessVarPred
|
||||||
|
match sv = SessVarPred $ \sv' _ -> sv == sv'
|
||||||
|
|
||||||
-- | Run (execute) a single GraphQL query
|
-- | Run (execute) a single GraphQL query
|
||||||
runGQ
|
runGQ
|
||||||
:: forall m
|
:: forall m
|
||||||
|
Loading…
Reference in New Issue
Block a user