org.apache.openjpa.kernel
Class ExpressionStoreQuery

java.lang.Object
  extended by org.apache.openjpa.kernel.AbstractStoreQuery
      extended by org.apache.openjpa.kernel.ExpressionStoreQuery
All Implemented Interfaces:
Serializable, QueryOperations, StoreQuery
Direct Known Subclasses:
JDBCStoreQuery

public class ExpressionStoreQuery
extends AbstractStoreQuery

Implementation of an expression-based query, which can handle String-based query expressions such as JPQL and JDOQL. This implementation is suitable for in-memory operation. Override the following methods to also support datastore operation:

Author:
Abe White
See Also:
Serialized Form

Nested Class Summary
static class ExpressionStoreQuery.AbstractExpressionExecutor
          Provides support for queries that hold query information in a QueryExpressions instance.
static class ExpressionStoreQuery.DataStoreExecutor
          The DataStoreExecutor executes the query against the implementation's overridden ExpressionStoreQuery.DataStoreExecutor.executeQuery(org.apache.openjpa.kernel.StoreQuery, java.lang.Object[], org.apache.openjpa.kernel.StoreQuery.Range) method.
static class ExpressionStoreQuery.InMemoryExecutor
          Runs the expression query in memory.
 
Nested classes/interfaces inherited from class org.apache.openjpa.kernel.AbstractStoreQuery
AbstractStoreQuery.AbstractExecutor
 
Nested classes/interfaces inherited from interface org.apache.openjpa.kernel.StoreQuery
StoreQuery.Executor, StoreQuery.Range
 
Field Summary
protected  Object _parsed
           
protected  ExpressionParser _parser
           
 
Fields inherited from class org.apache.openjpa.kernel.AbstractStoreQuery
ctx
 
Fields inherited from interface org.apache.openjpa.kernel.StoreQuery
EMPTY_BOOLEANS, EMPTY_CLASSES, EMPTY_METAS, EMPTY_OBJECTS, EMPTY_ORDERED_PARAMS, EMPTY_PARAMS, EMPTY_STRINGS
 
Fields inherited from interface org.apache.openjpa.kernel.QueryOperations
OP_DELETE, OP_SELECT, OP_UPDATE
 
Constructor Summary
ExpressionStoreQuery(ExpressionParser parser)
          Construct a query with a parser for the language.
 
Method Summary
protected  Number executeDelete(StoreQuery.Executor ex, ClassMetaData base, ClassMetaData[] types, boolean subclasses, ExpressionFactory[] facts, QueryExpressions[] parsed, Object[] params)
          Execute the given expression against the given candidate extent and delete the instances.
protected  ResultObjectProvider executeQuery(StoreQuery.Executor ex, ClassMetaData base, ClassMetaData[] types, boolean subclasses, ExpressionFactory[] facts, QueryExpressions[] parsed, Object[] params, StoreQuery.Range range)
          Execute the given expression against the given candidate extent.
protected  Number executeUpdate(StoreQuery.Executor ex, ClassMetaData base, ClassMetaData[] types, boolean subclasses, ExpressionFactory[] facts, QueryExpressions[] parsed, Object[] params)
          Execute the given expression against the given candidate extent and updates the instances.
 Object getCompilation()
          Get the current compilation for this query.
protected  String[] getDataStoreActions(ClassMetaData base, ClassMetaData[] types, boolean subclasses, ExpressionFactory[] facts, QueryExpressions[] parsed, Object[] params, StoreQuery.Range range)
          Return the commands that will be sent to the datastore in order to execute the query, typically in the database's native language.
protected  ExpressionFactory getExpressionFactory(ClassMetaData type)
          Return an ExpressionFactory to use to create an expression to be executed against an extent.
 FilterListener getFilterListener(String tag)
          Return the standard filter listener for the given tag, or null.
protected  ClassMetaData[] getIndependentExpressionCandidates(ClassMetaData type, boolean subclasses)
          Return the assignable types for the given metadata whose expression trees must be compiled independently.
 Resolver getResolver()
          Resolver used in parsing.
 void invalidateCompilation()
          Invalidate any internal compilation state.
 Object newCompilation()
          Create a new compilation for this query.
 StoreQuery.Executor newDataStoreExecutor(ClassMetaData meta, boolean subs)
          Return an executor for datastore execution of this query.
 StoreQuery.Executor newInMemoryExecutor(ClassMetaData meta, boolean subs)
          Return an executor for in-memory execution of this query.
 void populateFromCompilation(Object comp)
          Populate internal data from compilation.
 boolean setQuery(Object query)
          Allow direct setting of parsed state for facades that do parsing.
 boolean supportsInMemoryExecution()
          True if this query supports in-memory execution, false if it can only run against the datastore.
 
Methods inherited from class org.apache.openjpa.kernel.AbstractStoreQuery
evaluate, getAggregateListener, getContext, newCompilationKey, requiresCandidateType, requiresParameterDeclarations, setContext, supportsAbstractExecutors, supportsDataStoreExecution, supportsParameterDeclarations
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_parser

protected final ExpressionParser _parser

_parsed

protected transient Object _parsed
Constructor Detail

ExpressionStoreQuery

public ExpressionStoreQuery(ExpressionParser parser)
Construct a query with a parser for the language.

Method Detail

getResolver

public Resolver getResolver()
Resolver used in parsing.


setQuery

public boolean setQuery(Object query)
Allow direct setting of parsed state for facades that do parsing. The facade should call this method twice: once with the query string, and again with the parsed state.

Specified by:
setQuery in interface StoreQuery
Overrides:
setQuery in class AbstractStoreQuery

getFilterListener

public FilterListener getFilterListener(String tag)
Description copied from interface: StoreQuery
Return the standard filter listener for the given tag, or null.

Specified by:
getFilterListener in interface StoreQuery
Overrides:
getFilterListener in class AbstractStoreQuery

newCompilation

public Object newCompilation()
Description copied from interface: StoreQuery
Create a new compilation for this query. May be null.

Specified by:
newCompilation in interface StoreQuery
Overrides:
newCompilation in class AbstractStoreQuery

getCompilation

public Object getCompilation()
Description copied from interface: StoreQuery
Get the current compilation for this query. If it is null, do not create.

Specified by:
getCompilation in interface StoreQuery
Overrides:
getCompilation in class AbstractStoreQuery

populateFromCompilation

public void populateFromCompilation(Object comp)
Description copied from interface: StoreQuery
Populate internal data from compilation.

Specified by:
populateFromCompilation in interface StoreQuery
Overrides:
populateFromCompilation in class AbstractStoreQuery

invalidateCompilation

public void invalidateCompilation()
Description copied from interface: StoreQuery
Invalidate any internal compilation state.

Specified by:
invalidateCompilation in interface StoreQuery
Overrides:
invalidateCompilation in class AbstractStoreQuery

supportsInMemoryExecution

public boolean supportsInMemoryExecution()
Description copied from interface: StoreQuery
True if this query supports in-memory execution, false if it can only run against the datastore.

Specified by:
supportsInMemoryExecution in interface StoreQuery
Overrides:
supportsInMemoryExecution in class AbstractStoreQuery

newInMemoryExecutor

public StoreQuery.Executor newInMemoryExecutor(ClassMetaData meta,
                                               boolean subs)
Description copied from interface: StoreQuery
Return an executor for in-memory execution of this query. Executors must be cachable and thread safe. If this class returns true from StoreQuery.supportsAbstractExecutors(), the given metadata will always be for the candidate class of this query, or possibly null if the candidate class is not itself persistence capable (like an interface or abstract base class). Otherwise, the given type will be a mapped class.

Specified by:
newInMemoryExecutor in interface StoreQuery
Overrides:
newInMemoryExecutor in class AbstractStoreQuery
subs - whether to include dependent mapped subclasses in the results; independent subclasses should never be included

newDataStoreExecutor

public StoreQuery.Executor newDataStoreExecutor(ClassMetaData meta,
                                                boolean subs)
Description copied from interface: StoreQuery
Return an executor for datastore execution of this query. Executors must be cachable and thread safe. If this class returns true from StoreQuery.supportsAbstractExecutors(), the given metadata will always be for the candidate class of this query, or possibly null if the candidate class is not itself persistence capable (like an interface or abstract base class). Otherwise, the given type will be a mapped class.

Specified by:
newDataStoreExecutor in interface StoreQuery
Overrides:
newDataStoreExecutor in class AbstractStoreQuery
subs - whether to include dependent mapped subclasses in the results; independent subclasses should never be included

executeQuery

protected ResultObjectProvider executeQuery(StoreQuery.Executor ex,
                                            ClassMetaData base,
                                            ClassMetaData[] types,
                                            boolean subclasses,
                                            ExpressionFactory[] facts,
                                            QueryExpressions[] parsed,
                                            Object[] params,
                                            StoreQuery.Range range)
Execute the given expression against the given candidate extent.

Parameters:
ex - current executor
base - the base type the query should match
types - the independent candidate types
subclasses - true if subclasses should be included in the results
facts - the expression factory used to build the query for each base type
parsed - the parsed query values
params - parameter values, or empty array
range - result range
Returns:
a provider for matching objects

executeDelete

protected Number executeDelete(StoreQuery.Executor ex,
                               ClassMetaData base,
                               ClassMetaData[] types,
                               boolean subclasses,
                               ExpressionFactory[] facts,
                               QueryExpressions[] parsed,
                               Object[] params)
Execute the given expression against the given candidate extent and delete the instances.

Parameters:
ex - current executor
base - the base type the query should match
types - the independent candidate types
subclasses - true if subclasses should be included in the results
facts - the expression factory used to build the query for each base type
parsed - the parsed query values
params - parameter values, or empty array
Returns:
a number indicating the number of instances deleted, or null to execute the delete in memory

executeUpdate

protected Number executeUpdate(StoreQuery.Executor ex,
                               ClassMetaData base,
                               ClassMetaData[] types,
                               boolean subclasses,
                               ExpressionFactory[] facts,
                               QueryExpressions[] parsed,
                               Object[] params)
Execute the given expression against the given candidate extent and updates the instances.

Parameters:
ex - current executor
base - the base type the query should match
types - the independent candidate types
subclasses - true if subclasses should be included in the results
facts - the expression factory used to build the query for each base type
parsed - the parsed query values
params - parameter values, or empty array
Returns:
a number indicating the number of instances updated, or null to execute the update in memory.

getDataStoreActions

protected String[] getDataStoreActions(ClassMetaData base,
                                       ClassMetaData[] types,
                                       boolean subclasses,
                                       ExpressionFactory[] facts,
                                       QueryExpressions[] parsed,
                                       Object[] params,
                                       StoreQuery.Range range)
Return the commands that will be sent to the datastore in order to execute the query, typically in the database's native language.

Parameters:
base - the base type the query should match
types - the independent candidate types
subclasses - true if subclasses should be included in the results
facts - the expression factory used to build the query for each base type
parsed - the parsed query values
params - parameter values, or empty array
range - result range
Returns:
a textual description of the query to execute

getIndependentExpressionCandidates

protected ClassMetaData[] getIndependentExpressionCandidates(ClassMetaData type,
                                                             boolean subclasses)
Return the assignable types for the given metadata whose expression trees must be compiled independently.


getExpressionFactory

protected ExpressionFactory getExpressionFactory(ClassMetaData type)
Return an ExpressionFactory to use to create an expression to be executed against an extent. Each factory will be used to compile one filter only. The factory must be cachable.



Copyright © 2006-2012 Apache Software Foundation. All Rights Reserved.