Class ExpressionStoreQuery

java.lang.Object
org.apache.openjpa.kernel.AbstractStoreQuery
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:
  • Field Details

  • Constructor Details

    • ExpressionStoreQuery

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

    • 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.