Package org.apache.openjpa.kernel
Class QueryImpl
- java.lang.Object
-
- org.apache.openjpa.kernel.QueryImpl
-
- All Implemented Interfaces:
java.io.Serializable
,Query
,QueryContext
,QueryFlushModes
,QueryOperations
- Direct Known Subclasses:
DistributedQueryImpl
public class QueryImpl extends java.lang.Object implements Query
Implementation of theQuery
interface.- Author:
- Abe White
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
QueryImpl.Compilation
Struct of compiled query properties.static class
QueryImpl.PackingResultObjectProvider
Result object provider that packs results before returning them.class
QueryImpl.RemoveOnCloseResultList
Result list that removes itself from the query's open result list when it is closed.
-
Field Summary
-
Fields inherited from interface org.apache.openjpa.kernel.QueryFlushModes
FLUSH_FALSE, FLUSH_TRUE, FLUSH_WITH_CONNECTION
-
Fields inherited from interface org.apache.openjpa.kernel.QueryOperations
OP_DELETE, OP_SELECT, OP_UPDATE
-
-
Constructor Summary
Constructors Constructor Description QueryImpl(Broker broker, java.lang.String language, StoreQuery storeQuery)
Construct a query managed by the given broker.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addAggregateListener(AggregateListener listener)
Register an aggregate listener for the query.void
addFilterListener(FilterListener listener)
Register a filter listener for the query.void
assertNotReadOnly()
Assert that the query is not read-only.void
assertNotSerialized()
Check that the query has not been serialized, which causes it to lose its association with its Broker.void
assertOpen()
Assert that the query's broker is still open.protected void
assertParameters(StoreQuery q, StoreQuery.Executor ex, java.lang.Object[] params)
Checks that the passed parameters match the declarations.protected void
assertParameters(StoreQuery q, StoreQuery.Executor ex, java.util.Map params)
java.lang.Class
classForName(java.lang.String name, java.lang.String[] imports)
Helper method to instantiate the class with the given name, taking into account the query's candidate package, automatic imports, and the given imports (if any).void
closeAll()
Close all open query results.void
closeResources()
Close query results that are consuming resources.protected QueryImpl.Compilation
compilationFromCache()
Find the cached compilation for the current query, creating one if it does not exist.void
compile()
Compile the query.void
declareParameters(java.lang.String params)
Declared parameters, for query languages that use them.protected QueryImpl.RemoveOnCloseResultList
decorateResultList(ResultList<?> res)
Optionally decorate the native result.long
deleteAll()
Deletes all of the instances that are satisfied by the query.long
deleteAll(java.lang.Object[] params)
Deletes all of the instances that are satisfied by the query.long
deleteAll(java.util.Map params)
Deletes all of the instances that are satisfied by the query.java.lang.Number
deleteInMemory(StoreQuery q, StoreQuery.Executor executor, java.lang.Object[] params)
Helper method to delete the objects found by executing a query on the given executor.java.lang.Object
execute()
Execute.java.lang.Object
execute(java.lang.Object[] params)
Execute with parameter array.java.lang.Object
execute(java.util.Map params)
Execute with parameter map.ClassMetaData[]
getAccessPathMetaDatas()
Return the classes that affect this query.AggregateListener
getAggregateListener(java.lang.String tag)
Return the filter listener for the given tag, or null.java.util.Collection<AggregateListener>
getAggregateListeners()
The set of aggregate listeners.java.lang.String
getAlias()
If this query is not a projection but places candidate results into a result class under an alias, return that alias.Broker
getBroker()
The broker that generated this query.java.util.Collection<?>
getCandidateCollection()
Return the candidate collection, ornull
if an extent was specified instead of a collection.Extent
getCandidateExtent()
Return the candidate extent, ornull
if a collection was specified instead of an extent.java.lang.Class
getCandidateType()
Return the class of the objects that this query will return, ornull
if this information is not available / not relevant.java.lang.Object
getCompilation()
Return the query's compilation state.java.lang.String[]
getDataStoreActions(java.util.Map params)
Returns a description of the commands that will be sent to the datastore in order to execute this query.long
getEndRange()
Return the 0-based exclusive end index for the returned results, orLong.MAX_VALUE
for no limit.FetchConfiguration
getFetchConfiguration()
Return the fetch configuration for this query.FilterListener
getFilterListener(java.lang.String tag)
Return the filter listener for the given tag, or null.java.util.Collection<FilterListener>
getFilterListeners()
The set of filter listeners.boolean
getIgnoreChanges()
Whether to ignore changes in the current transaction.java.lang.String
getLanguage()
The query language.int
getOperation()
Returns the operation that this query will be expected to perform.OrderedMap<java.lang.Object,java.lang.Class<?>>
getOrderedParameterTypes()
Return a map of parameter name to type for this query.java.lang.String
getParameterDeclaration()
The parameter declaration.LinkedMap
getParameterTypes()
Return a map of parameter name to type for this query.java.lang.String[]
getProjectionAliases()
If this query is a projection, return the projection aliases.java.lang.Class<?>[]
getProjectionTypes()
If this query is a projection, return the projection types.Query
getQuery()
Return the query for this context.java.lang.String
getQueryString()
The query string.java.lang.String
getResultMappingName()
Name of a mapping from the result data to its object representation.java.lang.Class
getResultMappingScope()
Scope of a mapping from the result data to its object representation.java.lang.Class
getResultType()
Returns the result class that has been set throughQueryContext.setResultType(java.lang.Class<?>)
, or null if none.long
getStartRange()
Return the 0-based start index for the returned results.StoreContext
getStoreContext()
The persistence context for the query.StoreQuery
getStoreQuery()
Internal store query.java.util.Map
getUpdates()
If this query is a bulk update, return a map of theFieldMetaData
s toConstant
s.boolean
hasGrouping()
Return true if the query uses grouping.boolean
hasSubclasses()
Whether query results will include subclasses of the candidate class.static boolean
isAccessPathDirty(Broker broker, ClassMetaData[] accessMetas)
boolean
isAggregate()
Return true if the query is an aggregate.boolean
isDistinct()
Affirms if this query results are distinct instance(s).boolean
isParsedQuery()
Affirms if this query has originated by parsing a string-based query.boolean
isReadOnly()
Whether the query has been marked read-only.boolean
isUnique()
The unique flag.void
lock()
Synchronize on the query's internal lock.void
removeAggregateListener(AggregateListener listener)
Remove an aggregate listener from the query.void
removeFilterListener(FilterListener listener)
Remove a filter listener from the query.void
setCandidateCollection(java.util.Collection<?> candidateCollection)
Set a collection of candidates.void
setCandidateExtent(Extent candidateExtent)
Set the candidate extent.void
setCandidateType(java.lang.Class candidateClass, boolean subs)
Set the candidate type.void
setIgnoreChanges(boolean flag)
Whether to ignore changes in the current transaction.boolean
setQuery(java.lang.Object query)
The query string or template.void
setRange(long start, long end)
Set the range of results to return.void
setReadOnly(boolean flag)
Whether the query has been marked read-only.void
setResultMapping(java.lang.Class<?> scope, java.lang.String name)
Name and scope of a mapping from the result data to its object representation.void
setResultType(java.lang.Class cls)
Specify the type of object in which the result of evaluating this query.void
setUnique(boolean unique)
Specify that the query will return only 1 result, rather than a collection.void
startLocking()
void
stopLocking()
protected java.lang.Object
toResult(StoreQuery q, StoreQuery.Executor ex, ResultObjectProvider rop, StoreQuery.Range range)
Return the query result for the given result object provider.java.lang.String
toString()
void
unlock()
Unlock the query's internal lock.long
updateAll()
Performs an update of the instances that are satisfied by the query.long
updateAll(java.lang.Object[] params)
Performs an update of the instances that are satisfied by the query.long
updateAll(java.util.Map params)
Performs an update of the instances that are satisfied by the query.java.lang.Number
updateInMemory(StoreQuery q, StoreQuery.Executor executor, java.lang.Object[] params)
Helper method to update the objects found by executing a query on the given executor.
-
-
-
Constructor Detail
-
QueryImpl
public QueryImpl(Broker broker, java.lang.String language, StoreQuery storeQuery)
Construct a query managed by the given broker.
-
-
Method Detail
-
getStoreQuery
public StoreQuery getStoreQuery()
Internal store query.
-
getBroker
public Broker getBroker()
Description copied from interface:Query
The broker that generated this query.
-
getQuery
public Query getQuery()
Description copied from interface:QueryContext
Return the query for this context. Note that the query will be unavailable in remote contexts, and this method may throw an exception to that effect.- Specified by:
getQuery
in interfaceQueryContext
-
getStoreContext
public StoreContext getStoreContext()
Description copied from interface:QueryContext
The persistence context for the query.- Specified by:
getStoreContext
in interfaceQueryContext
-
getLanguage
public java.lang.String getLanguage()
Description copied from interface:QueryContext
The query language.- Specified by:
getLanguage
in interfaceQueryContext
-
getFetchConfiguration
public FetchConfiguration getFetchConfiguration()
Description copied from interface:QueryContext
Return the fetch configuration for this query.- Specified by:
getFetchConfiguration
in interfaceQueryContext
-
getQueryString
public java.lang.String getQueryString()
Description copied from interface:QueryContext
The query string.- Specified by:
getQueryString
in interfaceQueryContext
-
getIgnoreChanges
public boolean getIgnoreChanges()
Description copied from interface:QueryContext
Whether to ignore changes in the current transaction.- Specified by:
getIgnoreChanges
in interfaceQueryContext
-
setIgnoreChanges
public void setIgnoreChanges(boolean flag)
Description copied from interface:Query
Whether to ignore changes in the current transaction.- Specified by:
setIgnoreChanges
in interfaceQuery
-
isReadOnly
public boolean isReadOnly()
Description copied from interface:QueryContext
Whether the query has been marked read-only.- Specified by:
isReadOnly
in interfaceQueryContext
-
setReadOnly
public void setReadOnly(boolean flag)
Description copied from interface:QueryContext
Whether the query has been marked read-only.- Specified by:
setReadOnly
in interfaceQueryContext
-
addFilterListener
public void addFilterListener(FilterListener listener)
Description copied from interface:Query
Register a filter listener for the query.- Specified by:
addFilterListener
in interfaceQuery
-
removeFilterListener
public void removeFilterListener(FilterListener listener)
Description copied from interface:Query
Remove a filter listener from the query.- Specified by:
removeFilterListener
in interfaceQuery
-
getFilterListeners
public java.util.Collection<FilterListener> getFilterListeners()
Description copied from interface:QueryContext
The set of filter listeners.- Specified by:
getFilterListeners
in interfaceQueryContext
-
getFilterListener
public FilterListener getFilterListener(java.lang.String tag)
Description copied from interface:QueryContext
Return the filter listener for the given tag, or null.- Specified by:
getFilterListener
in interfaceQueryContext
-
addAggregateListener
public void addAggregateListener(AggregateListener listener)
Description copied from interface:Query
Register an aggregate listener for the query.- Specified by:
addAggregateListener
in interfaceQuery
-
removeAggregateListener
public void removeAggregateListener(AggregateListener listener)
Description copied from interface:Query
Remove an aggregate listener from the query.- Specified by:
removeAggregateListener
in interfaceQuery
-
getAggregateListeners
public java.util.Collection<AggregateListener> getAggregateListeners()
Description copied from interface:QueryContext
The set of aggregate listeners.- Specified by:
getAggregateListeners
in interfaceQueryContext
-
getAggregateListener
public AggregateListener getAggregateListener(java.lang.String tag)
Description copied from interface:QueryContext
Return the filter listener for the given tag, or null.- Specified by:
getAggregateListener
in interfaceQueryContext
-
getCandidateExtent
public Extent getCandidateExtent()
Description copied from interface:Query
Return the candidate extent, ornull
if a collection was specified instead of an extent.- Specified by:
getCandidateExtent
in interfaceQuery
-
setCandidateExtent
public void setCandidateExtent(Extent candidateExtent)
Description copied from interface:Query
Set the candidate extent.- Specified by:
setCandidateExtent
in interfaceQuery
-
getCandidateCollection
public java.util.Collection<?> getCandidateCollection()
Description copied from interface:QueryContext
Return the candidate collection, ornull
if an extent was specified instead of a collection.- Specified by:
getCandidateCollection
in interfaceQueryContext
-
setCandidateCollection
public void setCandidateCollection(java.util.Collection<?> candidateCollection)
Description copied from interface:Query
Set a collection of candidates.- Specified by:
setCandidateCollection
in interfaceQuery
-
getCandidateType
public java.lang.Class getCandidateType()
Description copied from interface:QueryContext
Return the class of the objects that this query will return, ornull
if this information is not available / not relevant.- Specified by:
getCandidateType
in interfaceQueryContext
-
setCandidateType
public void setCandidateType(java.lang.Class candidateClass, boolean subs)
Description copied from interface:QueryContext
Set the candidate type.- Specified by:
setCandidateType
in interfaceQueryContext
-
hasSubclasses
public boolean hasSubclasses()
Description copied from interface:QueryContext
Whether query results will include subclasses of the candidate class.- Specified by:
hasSubclasses
in interfaceQueryContext
-
getResultMappingName
public java.lang.String getResultMappingName()
Description copied from interface:QueryContext
Name of a mapping from the result data to its object representation.- Specified by:
getResultMappingName
in interfaceQueryContext
-
getResultMappingScope
public java.lang.Class getResultMappingScope()
Description copied from interface:QueryContext
Scope of a mapping from the result data to its object representation.- Specified by:
getResultMappingScope
in interfaceQueryContext
-
setResultMapping
public void setResultMapping(java.lang.Class<?> scope, java.lang.String name)
Description copied from interface:QueryContext
Name and scope of a mapping from the result data to its object representation.- Specified by:
setResultMapping
in interfaceQueryContext
-
isUnique
public boolean isUnique()
Description copied from interface:QueryContext
The unique flag.- Specified by:
isUnique
in interfaceQueryContext
-
isParsedQuery
public boolean isParsedQuery()
Affirms if this query has originated by parsing a string-based query.
-
setUnique
public void setUnique(boolean unique)
Description copied from interface:QueryContext
Specify that the query will return only 1 result, rather than a collection. The execute method will return null if the query result size is 0.- Specified by:
setUnique
in interfaceQueryContext
-
getResultType
public java.lang.Class getResultType()
Description copied from interface:QueryContext
Returns the result class that has been set throughQueryContext.setResultType(java.lang.Class<?>)
, or null if none.- Specified by:
getResultType
in interfaceQueryContext
-
setResultType
public void setResultType(java.lang.Class cls)
Description copied from interface:QueryContext
Specify the type of object in which the result of evaluating this query.- Specified by:
setResultType
in interfaceQueryContext
-
getStartRange
public long getStartRange()
Description copied from interface:QueryContext
Return the 0-based start index for the returned results.- Specified by:
getStartRange
in interfaceQueryContext
-
getEndRange
public long getEndRange()
Description copied from interface:QueryContext
Return the 0-based exclusive end index for the returned results, orLong.MAX_VALUE
for no limit.- Specified by:
getEndRange
in interfaceQueryContext
-
setRange
public void setRange(long start, long end)
Description copied from interface:QueryContext
Set the range of results to return.- Specified by:
setRange
in interfaceQueryContext
- Parameters:
start
- 0-based inclusive start indexend
- 0-based exclusive end index, orLong.MAX_VALUE
for no limit
-
getParameterDeclaration
public java.lang.String getParameterDeclaration()
Description copied from interface:QueryContext
The parameter declaration.- Specified by:
getParameterDeclaration
in interfaceQueryContext
-
declareParameters
public void declareParameters(java.lang.String params)
Description copied from interface:QueryContext
Declared parameters, for query languages that use them.- Specified by:
declareParameters
in interfaceQueryContext
-
compile
public void compile()
Description copied from interface:Query
Compile the query.
-
getCompilation
public java.lang.Object getCompilation()
Description copied from interface:QueryContext
Return the query's compilation state.- Specified by:
getCompilation
in interfaceQueryContext
-
compilationFromCache
protected QueryImpl.Compilation compilationFromCache()
Find the cached compilation for the current query, creating one if it does not exist.
-
execute
public java.lang.Object execute()
Description copied from interface:Query
Execute.
-
execute
public java.lang.Object execute(java.lang.Object[] params)
Description copied from interface:Query
Execute with parameter array.
-
execute
public java.lang.Object execute(java.util.Map params)
Description copied from interface:Query
Execute with parameter map.
-
deleteAll
public long deleteAll()
Description copied from interface:Query
Deletes all of the instances that are satisfied by the query.
-
deleteAll
public long deleteAll(java.lang.Object[] params)
Description copied from interface:Query
Deletes all of the instances that are satisfied by the query.
-
deleteAll
public long deleteAll(java.util.Map params)
Description copied from interface:Query
Deletes all of the instances that are satisfied by the query.
-
updateAll
public long updateAll()
Description copied from interface:Query
Performs an update of the instances that are satisfied by the query.
-
updateAll
public long updateAll(java.lang.Object[] params)
Description copied from interface:Query
Performs an update of the instances that are satisfied by the query.
-
updateAll
public long updateAll(java.util.Map params)
Description copied from interface:Query
Performs an update of the instances that are satisfied by the query.
-
deleteInMemory
public java.lang.Number deleteInMemory(StoreQuery q, StoreQuery.Executor executor, java.lang.Object[] params)
Description copied from interface:QueryContext
Helper method to delete the objects found by executing a query on the given executor.- Specified by:
deleteInMemory
in interfaceQueryContext
-
updateInMemory
public java.lang.Number updateInMemory(StoreQuery q, StoreQuery.Executor executor, java.lang.Object[] params)
Description copied from interface:QueryContext
Helper method to update the objects found by executing a query on the given executor.- Specified by:
updateInMemory
in interfaceQueryContext
-
toResult
protected java.lang.Object toResult(StoreQuery q, StoreQuery.Executor ex, ResultObjectProvider rop, StoreQuery.Range range) throws java.lang.Exception
Return the query result for the given result object provider.- Throws:
java.lang.Exception
-
decorateResultList
protected QueryImpl.RemoveOnCloseResultList decorateResultList(ResultList<?> res)
Optionally decorate the native result.
-
isAccessPathDirty
public static boolean isAccessPathDirty(Broker broker, ClassMetaData[] accessMetas)
-
closeAll
public void closeAll()
Description copied from interface:Query
Close all open query results.
-
closeResources
public void closeResources()
Description copied from interface:Query
Close query results that are consuming resources. Allow results that are not consuming resources to remain open so that they continue to function normally.- Specified by:
closeResources
in interfaceQuery
-
getDataStoreActions
public java.lang.String[] getDataStoreActions(java.util.Map params)
Description copied from interface:Query
Returns a description of the commands that will be sent to the datastore in order to execute this query. This will typically be in the native query language of the database (e.g., SQL).- Specified by:
getDataStoreActions
in interfaceQuery
- Parameters:
params
- the named parameter map for the query invocation
-
setQuery
public boolean setQuery(java.lang.Object query)
Description copied from interface:Query
The query string or template.
-
getAlias
public java.lang.String getAlias()
Description copied from interface:QueryContext
If this query is not a projection but places candidate results into a result class under an alias, return that alias.- Specified by:
getAlias
in interfaceQueryContext
-
getProjectionAliases
public java.lang.String[] getProjectionAliases()
Description copied from interface:QueryContext
If this query is a projection, return the projection aliases.- Specified by:
getProjectionAliases
in interfaceQueryContext
-
getProjectionTypes
public java.lang.Class<?>[] getProjectionTypes()
Description copied from interface:QueryContext
If this query is a projection, return the projection types.- Specified by:
getProjectionTypes
in interfaceQueryContext
-
getOperation
public int getOperation()
Description copied from interface:QueryContext
Returns the operation that this query will be expected to perform.- Specified by:
getOperation
in interfaceQueryContext
- See Also:
QueryOperations
-
isAggregate
public boolean isAggregate()
Description copied from interface:QueryContext
Return true if the query is an aggregate.- Specified by:
isAggregate
in interfaceQueryContext
-
isDistinct
public boolean isDistinct()
Description copied from interface:QueryContext
Affirms if this query results are distinct instance(s).- Specified by:
isDistinct
in interfaceQueryContext
-
hasGrouping
public boolean hasGrouping()
Description copied from interface:QueryContext
Return true if the query uses grouping.- Specified by:
hasGrouping
in interfaceQueryContext
-
getAccessPathMetaDatas
public ClassMetaData[] getAccessPathMetaDatas()
Description copied from interface:QueryContext
Return the classes that affect this query.- Specified by:
getAccessPathMetaDatas
in interfaceQueryContext
-
getOrderedParameterTypes
public OrderedMap<java.lang.Object,java.lang.Class<?>> getOrderedParameterTypes()
Description copied from interface:QueryContext
Return a map of parameter name to type for this query. The returned map will iterate in the order that the parameters were declared or, if they're implicit, used.- Specified by:
getOrderedParameterTypes
in interfaceQueryContext
-
getParameterTypes
public LinkedMap getParameterTypes()
Description copied from interface:QueryContext
Return a map of parameter name to type for this query. The returned map will iterate in the order that the parameters were declared or, if they're implicit, used.- Specified by:
getParameterTypes
in interfaceQueryContext
-
getUpdates
public java.util.Map getUpdates()
Description copied from interface:QueryContext
If this query is a bulk update, return a map of theFieldMetaData
s toConstant
s.- Specified by:
getUpdates
in interfaceQueryContext
-
lock
public void lock()
Description copied from interface:QueryContext
Synchronize on the query's internal lock.- Specified by:
lock
in interfaceQueryContext
-
unlock
public void unlock()
Description copied from interface:QueryContext
Unlock the query's internal lock.- Specified by:
unlock
in interfaceQueryContext
-
startLocking
public void startLocking()
-
stopLocking
public void stopLocking()
-
classForName
public java.lang.Class classForName(java.lang.String name, java.lang.String[] imports)
Description copied from interface:QueryContext
Helper method to instantiate the class with the given name, taking into account the query's candidate package, automatic imports, and the given imports (if any). Returns null if the type cannot be found.- Specified by:
classForName
in interfaceQueryContext
-
assertOpen
public void assertOpen()
Description copied from interface:Query
Assert that the query's broker is still open.- Specified by:
assertOpen
in interfaceQuery
-
assertNotReadOnly
public void assertNotReadOnly()
Description copied from interface:Query
Assert that the query is not read-only.- Specified by:
assertNotReadOnly
in interfaceQuery
-
assertNotSerialized
public void assertNotSerialized()
Description copied from interface:Query
Check that the query has not been serialized, which causes it to lose its association with its Broker.- Specified by:
assertNotSerialized
in interfaceQuery
-
assertParameters
protected void assertParameters(StoreQuery q, StoreQuery.Executor ex, java.lang.Object[] params)
Checks that the passed parameters match the declarations.
-
assertParameters
protected void assertParameters(StoreQuery q, StoreQuery.Executor ex, java.util.Map params)
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-