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
ConstructorsModifierConstructorDescriptionprotected
QueryProcessor
(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 QueryOptions
createOptions
(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 String
int
protected int
getInitialPageSize
(int queryLimit) protected IntSupplier
boolean
Check 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
queryLimit
global 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 <= 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 enforced
and the user has a non-positive maximum value for thequeryLimit
capability.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
-