Class Query
- All Implemented Interfaces:
Serializable
Query
encapsulates a request for zero or more Entity
objects out of the
datastore. It supports querying on zero or more properties, querying by ancestor, and sorting.
Entity
objects which match the query can be retrieved in a single list, or with an
unbounded iterator.- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class
AQuery.Filter
that combines several sub filters using aQuery.CompositeFilterOperator
.static enum
Operators supported byQuery.CompositeFilter
.static class
The base class for a query filter.static enum
Operators supported byQuery.FilterPredicate
.static final class
AQuery.Filter
on a single property.static class
A geographic region intended for use in aQuery.StContainsFilter
.static enum
SortDirection controls the order of a sort.static final class
SortPredicate is a data container that holds a single sort predicate.static final class
AQuery.Filter
representing a geo-region containment predicate. -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddFilter
(String propertyName, Query.FilterOperator operator, Object value) Deprecated.addProjection
(Projection projection) Adds a projection for this query.Specify how the query results should be sorted.addSort
(String propertyName, Query.SortDirection direction) Specify how the query results should be sorted.Clears the keys only flag.boolean
Gets the current ancestor for this query, or null if there is no ancestor specified.getAppId()
Returns the appId for thisQuery
.boolean
Returns whether this query is distinct.@Nullable Query.Filter
Returns the filter for this query, ornull
.Deprecated.UsesetFilter(Filter)
andgetFilter()
instead@Nullable String
getKind()
OnlyEntity
objects whose kind matches this value will be returned.Returns the namespace for thisQuery
.Returns a mutable collection properties included in the projection for this query.Returns a mutable list of the current sort predicates.int
hashCode()
boolean
Returns true if this query will fetch and return keys only, false if it will fetch and return full entities.reverse()
Creates a query sorted in the exact opposite direction as the current one.setAncestor
(Key ancestor) Sets an ancestor for this query.setDistinct
(boolean distinct) Sets whether to return only results with distinct values of the properties being projected.setFilter
(@Nullable Query.Filter filter) Sets the filter to use for this query.Makes this query fetch and return only keys, not full entities.toString()
Outputs a SQL like string representing the query.
-
Field Details
-
KIND_METADATA_KIND
Deprecated.- See Also:
-
PROPERTY_METADATA_KIND
Deprecated.- See Also:
-
NAMESPACE_METADATA_KIND
Deprecated.- See Also:
-
-
Constructor Details
-
Query
public Query() -
Query
Create a newQuery
that findsEntity
objects with the specifiedkind
. Note that kindless queries are not yet supported in the Java dev appserver.- Parameters:
kind
- the kind or null to create a kindless query
-
Query
- Parameters:
ancestor
- the ancestor key or null- Throws:
IllegalArgumentException
- If ancestor is not complete.
-
Query
Create a newQuery
that findsEntity
objects with the specifiedkind
and the specifiedancestor
. Note that kindless queries are not yet supported in the Java dev appserver.- Parameters:
kind
- the kind or null to create a kindless queryancestor
- the ancestor key or null- Throws:
IllegalArgumentException
- If the ancestor is not complete.
-
-
Method Details
-
getKind
OnlyEntity
objects whose kind matches this value will be returned. -
getAppId
Returns the appId for thisQuery
. -
getNamespace
Returns the namespace for thisQuery
. -
getAncestor
Gets the current ancestor for this query, or null if there is no ancestor specified. -
setAncestor
Sets an ancestor for this query.This restricts the query to only return result entities that are descended from a given entity. In other words, all of the results will have the ancestor as their parent, or parent's parent, or etc.
If null is specified, unsets any previously-set ancestor. Passing
null
as a parameter does not query for entities without ancestors (this type of query is not currently supported).- Returns:
this
(for chaining)- Throws:
IllegalArgumentException
- If the ancestor key is incomplete, or if you try to unset an ancestor and have not set a kind, or if you try to unset an ancestor and have not previously set an ancestor.
-
setDistinct
Sets whether to return only results with distinct values of the properties being projected.- Parameters:
distinct
- if this query should be distinct. This may only be used when the query has a projection.- Returns:
this
(for chaining)
-
getDistinct
public boolean getDistinct()Returns whether this query is distinct.- See Also:
-
setFilter
Sets the filter to use for this query.- Parameters:
filter
- the filter to use for this query, ornull
- Returns:
this
(for chaining)- See Also:
-
getFilter
Returns the filter for this query, ornull
.- See Also:
-
addFilter
@Deprecated public Query addFilter(String propertyName, Query.FilterOperator operator, Object value) Deprecated.Add aQuery.FilterPredicate
on the specified property.All
Query.FilterPredicate
s added using this message are combined usingQuery.CompositeFilterOperator.AND
.Cannot be used in conjunction with
setFilter(Filter)
which sets a singleQuery.Filter
instead of manyQuery.FilterPredicate
s.- Parameters:
propertyName
- The name of the property to which the filter applies.operator
- The filter operator.value
- An instance of a supported datastore type. Note that entities with multi-value properties identified bypropertyName
will match this filter if the multi-value property has at least one value that matches the condition expressed byoperator
andvalue
. For more information on multi-value property filtering please see the datastore documentation.- Returns:
this
(for chaining)- Throws:
NullPointerException
- IfpropertyName
oroperator
is null.IllegalArgumentException
- Ifvalue
is not of a type supported by the datastore. SeeDataTypeUtils.isSupportedType(Class)
. Note that unlikePropertyContainer.setProperty(String, Object)
, you cannot provide aCollection
containing instances of supported types to this method.
-
getFilterPredicates
Deprecated.UsesetFilter(Filter)
andgetFilter()
insteadReturns a mutable list of the current filter predicates.- See Also:
-
addSort
Specify how the query results should be sorted.The first call to addSort will register the property that will serve as the primary sort key. A second call to addSort will set a secondary sort key, etc.
This method will always sort in ascending order. To control the order of the sort, use
addSort(String,SortDirection)
.Note that entities with multi-value properties identified by
propertyName
will be sorted by the smallest value in the list. For more information on sorting properties with multiple values please see the datastore documentation.- Returns:
this
(for chaining)- Throws:
NullPointerException
- If any argument is null.
-
addSort
Specify how the query results should be sorted.The first call to addSort will register the property that will serve as the primary sort key. A second call to addSort will set a secondary sort key, etc.
Note that if
direction
isQuery.SortDirection.ASCENDING
, entities with multi-value properties identified bypropertyName
will be sorted by the smallest value in the list. Ifdirection
isQuery.SortDirection.DESCENDING
, entities with multi-value properties identified bypropertyName
will be sorted by the largest value in the list. For more information on sorting properties with multiple values please see the datastore documentation.- Returns:
this
(for chaining)- Throws:
NullPointerException
- If any argument is null.
-
getSortPredicates
Returns a mutable list of the current sort predicates. -
setKeysOnly
Makes this query fetch and return only keys, not full entities.- Returns:
this
(for chaining)
-
clearKeysOnly
Clears the keys only flag.- Returns:
this
(for chaining)- See Also:
-
addProjection
Adds a projection for this query.Projections are limited in the following ways:
- Un-indexed properties cannot be projected and attempting to do so will result in no entities being returned.
- Projection
names
must be unique. - Properties that have an equality filter on them cannot be projected. This includes the
operators
Query.FilterOperator.EQUAL
andQuery.FilterOperator.IN
.
- Parameters:
projection
- the projection to add- Returns:
this
(for chaining)- Throws:
IllegalArgumentException
- if the query already contains a projection with the same name- See Also:
-
getProjections
Returns a mutable collection properties included in the projection for this query.If empty, the full or keys only entities are returned. Otherwise partial entities are returned. A non-empty projection is not compatible with setting keys-only. In this case a
IllegalArgumentException
will be thrown when the query isprepared
.Projection queries are similar to SQL statements of the form:
As they return partial entities, which only contain the properties specified in the projection. However, these entities will only contain a single value for any multi-valued property and, if a multi-valued property is specified in the order, an inequality property, or the projected properties, the entity will be returned multiple times. Once for each unique combination of values.SELECT prop1, prop2, ...
Specifying a projection:
- May change the type of any property returned in a projection.
- May change the index requirements for the given query.
- Will cause a partial entity to be returned.
- Will cause only entities that contain those properties to be returned.
- Returns:
- a mutable collection properties included in the projection for this query
- See Also:
-
isKeysOnly
public boolean isKeysOnly()Returns true if this query will fetch and return keys only, false if it will fetch and return full entities. -
reverse
Creates a query sorted in the exact opposite direction as the current one.This function requires a sort order on
Entity.KEY_RESERVED_PROPERTY
to guarantee that each entity is uniquely identified by the set of properties used in the sort (which is required to exactly reverse the order of a query). Advanced users can reverse the sort orders manually if they know the set of sorted properties meets this requirement without a order onEntity.KEY_RESERVED_PROPERTY
.The results of the reverse query will be the same as the results of the forward query but in reverse direction.
Cursors
from the original query may also be used in the reverse query.- Returns:
- A new query with the sort order reversed.
- Throws:
IllegalStateException
- if the current query is not sorted byEntity.KEY_RESERVED_PROPERTY
.
-
equals
-
hashCode
public int hashCode() -
toString
Outputs a SQL like string representing the query.
-
setFilter(Filter)