Class QueryProcessor<T>
- Direct Known Subclasses:
AccountQueryProcessor,ChangeQueryProcessor,GroupQueryProcessor,ProjectQueryProcessor
Instances are one-time-use. Other singleton classes should inject a Provider rather than holding on to a single instance.
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedQueryProcessor(QueryProcessor.Metrics metrics, SchemaDefinitions<T> schemaDef, IndexConfig indexConfig, IndexCollection<?, T, ? extends Index<?, T>> indexes, IndexRewriter<T> rewriter, String limitField, IntSupplier userQueryLimit) -
Method Summary
Modifier and TypeMethodDescriptionprotected QueryOptionscreateOptions(IndexConfig indexConfig, int start, int pageSize, int pageSizeMultiplier, int limit, boolean allowIncompleteResults, Set<String> requestedFields) enforceVisibility(boolean enforce) Specify whether to enforce visibility by filtering out results that are not visible to the user.enforceVisibility(Predicate<T> pred) Invoked after the query was rewritten.protected abstract Stringintprotected intgetInitialPageSize(int queryLimit) protected IntSupplierbooleanCheck whether querying should be disabled.Query for entities that match a structured query.List<QueryResult<T>> Perform multiple queries in parallel.setAllowIncompleteResults(boolean allowIncompleteResults) setNoLimit(boolean isNoLimit) setRequestedFields(Set<String> fields) setStart(int n) setUserProvidedLimit(int n) Convenience method for API backward compatibility.setUserProvidedLimit(int n, boolean applyDefaultLimit) Set an end-user-provided limit on the number of results returned.
-
Field Details
-
start
protected int start
-
-
Constructor Details
-
QueryProcessor
protected QueryProcessor(QueryProcessor.Metrics metrics, SchemaDefinitions<T> schemaDef, IndexConfig indexConfig, IndexCollection<?, T, ? extends Index<?, T>> indexes, IndexRewriter<T> rewriter, String limitField, IntSupplier userQueryLimit)
-
-
Method Details
-
setStart
-
enforceVisibility
Specify whether to enforce visibility by filtering out results that are not visible to the user.Enforcing visibility may have performance consequences, as the index system may need to post-filter a large number of results to fill even a modest limit.
If visibility is enforced, the user's
queryLimitglobal capability is also used to bound the total number of results. If this capability is non-positive, this results in the entire query processor beingdisabled.- Parameters:
enforce- whether to enforce visibility.- Returns:
- this.
-
setUserProvidedLimit
Convenience method for API backward compatibility. -
setUserProvidedLimit
@CanIgnoreReturnValue public QueryProcessor<T> setUserProvidedLimit(int n, boolean applyDefaultLimit) Set an end-user-provided limit on the number of results returned.Since this limit is provided by an end user, it may exceed the limit that they are authorized to use. This is allowed; the processor will take multiple possible limits into account and choose the one that makes the most sense.
- Parameters:
n- limit; zero or negative means no limit.applyDefaultLimit- Should the default limit be applied, if n invalid input: '<'= 0? For internal queries this should be false. For API endpoints this should be true.- Returns:
- this.
-
setNoLimit
-
setAllowIncompleteResults
@CanIgnoreReturnValue public QueryProcessor<T> setAllowIncompleteResults(boolean allowIncompleteResults) -
setRequestedFields
-
query
Query for entities that match a structured query.- Parameters:
query- the query.- Returns:
- results of the query.
- Throws:
QueryParseException- See Also:
-
query
Perform multiple queries in parallel.If querying is disabled, short-circuits the index and returns empty results. Callers that wish to distinguish this case from a query returning no results from the index may call
isDisabled()themselves.- Parameters:
queries- list of queries.- Returns:
- results of the queries, one QueryResult per input query, in the same order as the input.
- Throws:
QueryParseException
-
createOptions
protected QueryOptions createOptions(IndexConfig indexConfig, int start, int pageSize, int pageSizeMultiplier, int limit, boolean allowIncompleteResults, Set<String> requestedFields) -
enforceVisibility
Invoked after the query was rewritten. Subclasses must overwrite this method to filter out results that are not visible to the calling user.- Parameters:
pred- the query- Returns:
- the modified query
-
isDisabled
public boolean isDisabled()Check whether querying should be disabled.Currently, the only condition that can disable the whole query processor is if both
visibility is enforcedand the user has a non-positive maximum value for thequeryLimitcapability.If querying is disabled, all calls to
query(Predicate)andquery(List)will return empty results. This method can be used if callers wish to distinguish this case from a query returning no results from the index.- Returns:
- true if querying should be disabled.
-
getEffectiveLimit
-
getUserQueryLimit
-
getInitialPageSize
protected int getInitialPageSize(int queryLimit) -
formatForLogging
-