com.amazon.carbonado
Interface Query<S extends Storable>

All Known Implementing Classes:
AbstractQuery, EmptyQuery, StandardQuery

public interface Query<S extends Storable>

Supports complex retrieval and deletion of Storable objects. Queries are immutable representations of an action – they do not contain any Storable instances. The apparent mutators (with, et al) do not actually modify the Query. Instead, they return another Query instance which has the requested modification. To obtain an initial Query instance, call one of the Storage query methods.

Query objects are usually compiled and cached, and the same instance can be re-used for future queries. This is possible because queries are immutable and naturally thread-safe.

Author:
Brian S O'Neill

Method Summary
<T extends S>
Query<S>
after(T start)
          Returns a query which fetches results for this query after a given starting point, which is useful for re-opening a cursor.
 Query<S> and(Filter<S> filter)
          Returns a new query which has another filter logically "and"ed to this, potentially reducing the amount of results.
 Query<S> and(String filter)
          Returns a new query which has another filter logically "and"ed to this, potentially reducing the amount of results.
 long count()
          Returns a count of all results matched by this query.
 void deleteAll()
          Deletes zero or more matching objects.
 void deleteOne()
          Deletes one matching object.
 boolean equals(Object obj)
           
 boolean exists()
          Returns true if any results are matched by this query.
 Cursor<S> fetch()
          Fetches results for this query.
<T extends S>
Cursor<S>
fetchAfter(T start)
          Fetches results for this query after a given starting point, which is useful for re-opening a cursor.
 Cursor<S> fetchSlice(long from, Long to)
          Fetches a slice of results for this query, as defined by a numerical range.
 int getBlankParameterCount()
          Returns the amount of blank parameters that need to be filled in.
 Filter<S> getFilter()
          Returns the query's filter.
 FilterValues<S> getFilterValues()
          Returns the query's filter values, which is null if filter has no parameters.
 Class<S> getStorableType()
          Returns the specific type of Storable managed by this object.
 int hashCode()
           
 S loadOne()
          Attempts to load exactly one matching object.
 Query<S> not()
          Returns a new query which produces all the results not supplied in this query.
 Query<S> or(Filter<S> filter)
          Returns a new query which has another filter logically "or"ed to this, potentially increasing the amount of results.
 Query<S> or(String filter)
          Returns a new query which has another filter logically "or"ed to this, potentially increasing the amount of results.
 Query<S> orderBy(String... properties)
          Returns a copy of this query ordered by specific property values.
 Query<S> orderBy(String property)
          Returns a copy of this query ordered by a specific property value.
 boolean printNative()
          Print the native query to standard out, which is useful for performance analysis.
 boolean printNative(Appendable app)
          Prints the native query to any appendable, which is useful for performance analysis.
 boolean printNative(Appendable app, int indentLevel)
          Prints the native query to any appendable, which is useful for performance analysis.
 boolean printPlan()
          Prints the query excecution plan to standard out, which is useful for performance analysis.
 boolean printPlan(Appendable app)
          Prints the query excecution plan to any appendable, which is useful for performance analysis.
 boolean printPlan(Appendable app, int indentLevel)
          Prints the query excecution plan to any appendable, which is useful for performance analysis.
 String toString()
          Returns a description of the query filter and any other arguments.
 boolean tryDeleteOne()
          Deletes zero or one matching objects.
 S tryLoadOne()
          May return null if nothing found.
 Query<S> with(boolean value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> with(byte value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> with(char value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> with(double value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> with(float value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> with(int value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> with(long value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> with(Object value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> with(short value)
          Returns a copy of this Query with the next blank parameter filled in.
 Query<S> withValues(Object... values)
          Returns a copy of this Query with the next blank parameters filled in.
 

Method Detail

getStorableType

Class<S> getStorableType()
Returns the specific type of Storable managed by this object.


getFilter

Filter<S> getFilter()
Returns the query's filter.


getFilterValues

FilterValues<S> getFilterValues()
Returns the query's filter values, which is null if filter has no parameters.


getBlankParameterCount

int getBlankParameterCount()
Returns the amount of blank parameters that need to be filled in. If zero, then this query is ready to be used.


with

Query<S> with(int value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

with

Query<S> with(long value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

with

Query<S> with(float value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

with

Query<S> with(double value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

with

Query<S> with(boolean value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

with

Query<S> with(char value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

with

Query<S> with(byte value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

with

Query<S> with(short value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

with

Query<S> with(Object value)
Returns a copy of this Query with the next blank parameter filled in.

Parameters:
value - parameter value to fill in
Throws:
IllegalStateException - if no blank parameters
IllegalArgumentException - if type doesn't match

withValues

Query<S> withValues(Object... values)
Returns a copy of this Query with the next blank parameters filled in.

Parameters:
values - parameter values to fill in; if null or empty, this Query instance is returned
Throws:
IllegalStateException - if no blank parameters or if too many parameter values supplied
IllegalArgumentException - if any type doesn't match

and

Query<S> and(String filter)
                              throws FetchException
Returns a new query which has another filter logically "and"ed to this, potentially reducing the amount of results.

Parameters:
filter - query filter expression
Throws:
FetchException - if storage layer throws an exception
IllegalStateException - if any blank parameters in this query, or if this query is already guaranteed to fetch nothing
IllegalArgumentException - if filter is null
MalformedFilterException - if expression is malformed
UnsupportedOperationException - if given filter is unsupported by repository

and

Query<S> and(Filter<S> filter)
                              throws FetchException
Returns a new query which has another filter logically "and"ed to this, potentially reducing the amount of results.

Parameters:
filter - query filter
Throws:
FetchException - if storage layer throws an exception
IllegalStateException - if any blank parameters in this query, or if this query is already guaranteed to fetch nothing
IllegalArgumentException - if filter is null
UnsupportedOperationException - if given filter is unsupported by repository

or

Query<S> or(String filter)
                             throws FetchException
Returns a new query which has another filter logically "or"ed to this, potentially increasing the amount of results.

Parameters:
filter - query filter expression
Throws:
FetchException - if storage layer throws an exception
IllegalStateException - if any blank parameters in this query, or if this query is already guaranteed to fetch everything
IllegalArgumentException - if filter is null
MalformedFilterException - if expression is malformed
UnsupportedOperationException - if given filter is unsupported by repository

or

Query<S> or(Filter<S> filter)
                             throws FetchException
Returns a new query which has another filter logically "or"ed to this, potentially increasing the amount of results.

Parameters:
filter - query filter
Throws:
FetchException - if storage layer throws an exception
IllegalStateException - if any blank parameters in this query, or if this query is already guaranteed to fetch everything
IllegalArgumentException - if filter is null
UnsupportedOperationException - if given filter is unsupported by repository

not

Query<S> not()
                              throws FetchException
Returns a new query which produces all the results not supplied in this query. Any filled in parameters in this query are copied into the new one.

Throws:
FetchException - if storage layer throws an exception
UnsupportedOperationException - if new query is unsupported by repository

orderBy

Query<S> orderBy(String property)
                                  throws FetchException
Returns a copy of this query ordered by a specific property value. The property name may be prefixed with '+' or '-' to indicate ascending or descending order. If the prefix is omitted, ascending order is assumed.

Note: Specification of ordering properties is not cumulative. Calling this method will first remove any previous ordering properties.

Parameters:
property - name of property to order by
Throws:
FetchException - if storage layer throws an exception
IllegalArgumentException - if property is null or is not a member of type S
UnsupportedOperationException - if given ordering, combined with query filter, is unsupported by repository

orderBy

Query<S> orderBy(String... properties)
                                  throws FetchException
Returns a copy of this query ordered by specific property values. The property names may be prefixed with '+' or '-' to indicate ascending or descending order. If the prefix is omitted, ascending order is assumed.

Note: Specification of ordering properties is not cumulative. Calling this method will first remove any previous ordering properties.

Parameters:
properties - names of properties to order by
Throws:
FetchException - if storage layer throws an exception
IllegalArgumentException - if any property is null or is not a member of type S
UnsupportedOperationException - if given ordering, combined with query filter, is unsupported by repository

after

<T extends S> Query<S> after(T start)
                                throws FetchException
Returns a query which fetches results for this query after a given starting point, which is useful for re-opening a cursor. This is only effective when query has been given an explicit ordering. If not a total ordering, then query may start at an earlier position.

Note: The returned query can be very expensive to fetch from repeatedly, if the query needs to perform a sort operation. Ideally, the query ordering should match the natural ordering of an index or key.

Parameters:
start - storable to attempt to start after; if null, this query is returned
Throws:
IllegalStateException - if any blank parameters in this query
FetchException - if storage layer throws an exception
Since:
1.2

fetch

Cursor<S> fetch()
                                 throws FetchException
Fetches results for this query. If any updates or deletes might be performed on the results, consider enclosing the fetch in a transaction. This allows the isolation level and "for update" mode to be adjusted. Some repositories might otherwise deadlock.

Returns:
fetch results
Throws:
IllegalStateException - if any blank parameters in this query
FetchException - if storage layer throws an exception
See Also:
Repository.enterTransaction(IsolationLevel)

fetchSlice

Cursor<S> fetchSlice(long from,
                     Long to)
                                      throws FetchException
Fetches a slice of results for this query, as defined by a numerical range. A slice can be used to limit the number of results from a query. It is strongly recommended that the query be given a total ordering in order for the slice results to be deterministic.

Parameters:
from - zero-based from record number, inclusive
to - optional zero-based to record number, exclusive
Returns:
fetch results
Throws:
IllegalStateException - if any blank parameters in this query
IllegalArgumentException - if from is negative or if from is more than to
FetchException - if storage layer throws an exception
Since:
1.2

fetchAfter

<T extends S> Cursor<S> fetchAfter(T start)
                                      throws FetchException
Fetches results for this query after a given starting point, which is useful for re-opening a cursor. This is only effective when query has been given an explicit ordering. If not a total ordering, then cursor may start at an earlier position.

Note: This method can be very expensive to call repeatedly, if the query needs to perform a sort operation. Ideally, the query ordering should match the natural ordering of an index or key.

Calling fetchAfter(s) is equivalent to calling after(s).fetch().

Parameters:
start - storable to attempt to start after; if null, fetch all results
Returns:
fetch results
Throws:
IllegalStateException - if any blank parameters in this query
FetchException - if storage layer throws an exception
See Also:
Repository.enterTransaction(IsolationLevel), after(T)

loadOne

S loadOne()
                           throws FetchException
Attempts to load exactly one matching object. If the number of matching records is zero or exceeds one, then an exception is thrown instead.

Returns:
a single fetched object
Throws:
IllegalStateException - if any blank parameters in this query
FetchNoneException - if no matching record found
FetchMultipleException - if more than one matching record found
FetchException - if storage layer throws an exception

tryLoadOne

S tryLoadOne()
                              throws FetchException
May return null if nothing found. Throws exception if record count is more than one.

Returns:
null or a single fetched object
Throws:
IllegalStateException - if any blank parameters in this query
FetchMultipleException - if more than one matching record found
FetchException - if storage layer throws an exception

deleteOne

void deleteOne()
               throws PersistException
Deletes one matching object. If the number of matching records is zero or exceeds one, then no delete occurs, and an exception is thrown instead.

Throws:
IllegalStateException - if any blank parameters in this query
PersistNoneException - if no matching record found
PersistMultipleException - if more than one record matches
PersistException - if storage layer throws an exception

tryDeleteOne

boolean tryDeleteOne()
                     throws PersistException
Deletes zero or one matching objects. If the number of matching records exceeds one, then no delete occurs, and an exception is thrown instead.

Returns:
true if record existed and was deleted, or false if no match
Throws:
IllegalStateException - if any blank parameters in this query
PersistMultipleException - if more than one record matches
PersistException - if storage layer throws an exception

deleteAll

void deleteAll()
               throws PersistException
Deletes zero or more matching objects. There is no guarantee that deleteAll is an atomic operation. If atomic behavior is desired, wrap the call in a transaction scope.

Throws:
IllegalStateException - if any blank parameters in this query
PersistException - if storage layer throws an exception

count

long count()
           throws FetchException
Returns a count of all results matched by this query. Even though no results are explicitly fetched, this method may still be expensive to call. The actual performance will vary by repository and available indexes.

Returns:
count of matches
Throws:
IllegalStateException - if any blank parameters in this query
FetchException - if storage layer throws an exception

exists

boolean exists()
               throws FetchException
Returns true if any results are matched by this query.

Returns:
true if any matches
Throws:
IllegalStateException - if any blank parameters in this query
FetchException - if storage layer throws an exception
Since:
1.2

printNative

boolean printNative()
Print the native query to standard out, which is useful for performance analysis. Not all repositories have a native query format. An example native format is SQL.

Returns:
false if not implemented

printNative

boolean printNative(Appendable app)
                    throws IOException
Prints the native query to any appendable, which is useful for performance analysis. Not all repositories have a native query format. An example native format is SQL.

Parameters:
app - append results here
Returns:
false if not implemented
Throws:
IOException

printNative

boolean printNative(Appendable app,
                    int indentLevel)
                    throws IOException
Prints the native query to any appendable, which is useful for performance analysis. Not all repositories have a native query format. An example native format is SQL.

Parameters:
app - append results here
indentLevel - amount to indent text, zero for none
Returns:
false if not implemented
Throws:
IOException

printPlan

boolean printPlan()
Prints the query excecution plan to standard out, which is useful for performance analysis. There is no standard format for query plans, nor is it a requirement that this method be implemented.

Returns:
false if not implemented

printPlan

boolean printPlan(Appendable app)
                  throws IOException
Prints the query excecution plan to any appendable, which is useful for performance analysis. There is no standard format for query plans, nor is it a requirement that this method be implemented.

Parameters:
app - append results here
Returns:
false if not implemented
Throws:
IOException

printPlan

boolean printPlan(Appendable app,
                  int indentLevel)
                  throws IOException
Prints the query excecution plan to any appendable, which is useful for performance analysis. There is no standard format for query plans, nor is it a requirement that this method be implemented.

Parameters:
app - append results here
indentLevel - amount to indent text, zero for none
Returns:
false if not implemented
Throws:
IOException

hashCode

int hashCode()
Overrides:
hashCode in class Object

equals

boolean equals(Object obj)
Overrides:
equals in class Object

toString

String toString()
Returns a description of the query filter and any other arguments.

Overrides:
toString in class Object


Copyright © 2006-2009 Amazon Technologies, Inc.. All Rights Reserved.