Class PersistedQuerySupport

java.lang.Object
graphql.execution.preparsed.persisted.PersistedQuerySupport
All Implemented Interfaces:
PreparsedDocumentProvider
Direct Known Subclasses:
ApolloPersistedQuerySupport

@PublicSpi public abstract class PersistedQuerySupport extends Object implements PreparsedDocumentProvider
This abstract class forms the basis for persistent query support. Derived classes need to implement the method to work out the query id and you also need a PersistedQueryCache implementation.
See Also:
  • Field Details

    • PERSISTED_QUERY_MARKER

      public static final String PERSISTED_QUERY_MARKER
      In order for ExecutionInput.getQuery() to never be null, use this to mark them so that invariant can be satisfied while assuming that the persisted query id is elsewhere
      See Also:
  • Constructor Details

    • PersistedQuerySupport

      public PersistedQuerySupport(PersistedQueryCache persistedQueryCache)
  • Method Details

    • getDocumentAsync

      public CompletableFuture<PreparsedDocumentEntry> getDocumentAsync(ExecutionInput executionInput, Function<ExecutionInput,PreparsedDocumentEntry> parseAndValidateFunction)
      Description copied from interface: PreparsedDocumentProvider
      This is called to get a "cached" pre-parsed query and if it's not present, then the "parseAndValidateFunction" can be called to parse and validate the query.

      Note - the "parseAndValidateFunction" MUST be called if you don't have a per parsed version of the query because it not only parses and validates the query, it invokes Instrumentation calls as well for parsing and validation. if you don't make a call back on this then these won't happen.

      Specified by:
      getDocumentAsync in interface PreparsedDocumentProvider
      Parameters:
      executionInput - The ExecutionInput containing the query
      parseAndValidateFunction - If the query has not be pre-parsed, this function MUST be called to parse and validate it
      Returns:
      a promise to an PreparsedDocumentEntry
    • getPersistedQueryId

      protected abstract Optional<Object> getPersistedQueryId(ExecutionInput executionInput)
      This method is required for concrete types to work out the query id (often a hash) that should be used to look up the persisted query in the cache.
      Parameters:
      executionInput - the execution input
      Returns:
      an optional id of the persisted query
    • persistedQueryIdIsInvalid

      protected boolean persistedQueryIdIsInvalid(Object persistedQueryId, String queryText)
    • mkMissingError

      protected PreparsedDocumentEntry mkMissingError(PersistedQueryError persistedQueryError)
      Allows you to customize the graphql error that is sent back on a missing persisted query
      Parameters:
      persistedQueryError - the missing persistent query exception
      Returns:
      a PreparsedDocumentEntry that holds an error