| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.openjpa.kernel; |
| |
| import java.util.Collection; |
| import java.util.Map; |
| |
| import org.apache.commons.collections.map.LinkedMap; |
| import org.apache.openjpa.kernel.exps.AggregateListener; |
| import org.apache.openjpa.kernel.exps.Constant; |
| import org.apache.openjpa.kernel.exps.FilterListener; |
| import org.apache.openjpa.meta.ClassMetaData; |
| import org.apache.openjpa.meta.FieldMetaData; |
| |
| /** |
| * A query execution context. |
| * |
| * @author Abe White |
| * @since 0.4.0 |
| */ |
| public 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. |
| */ |
| public Query getQuery(); |
| |
| /** |
| * The persistence context for the query. |
| */ |
| public StoreContext getStoreContext(); |
| |
| /** |
| * Return the fetch configuration for this query. |
| */ |
| public FetchConfiguration getFetchConfiguration(); |
| |
| /** |
| * Returns the operation that this query will be expected to perform. |
| * |
| * @see QueryOperations |
| * @since 0.4.0 |
| */ |
| public int getOperation(); |
| |
| /** |
| * The query language. |
| */ |
| public String getLanguage(); |
| |
| /** |
| * The query string. |
| */ |
| public String getQueryString(); |
| |
| /** |
| * Return the candidate collection, or <code>null</code> if an |
| * extent was specified instead of a collection. |
| */ |
| public Collection getCandidateCollection(); |
| |
| /** |
| * Return the class of the objects that this query will return, |
| * or <code>null</code> if this information is not available / not relevant. |
| */ |
| public Class getCandidateType(); |
| |
| /** |
| * Whether query results will include subclasses of the candidate class. |
| */ |
| public boolean hasSubclasses(); |
| |
| /** |
| * Set the candidate type. |
| */ |
| public void setCandidateType(Class cls, boolean subs); |
| |
| /** |
| * Whether the query has been marked read-only. |
| */ |
| public boolean isReadOnly(); |
| |
| /** |
| * Whether the query has been marked read-only. |
| */ |
| public void setReadOnly(boolean readOnly); |
| |
| /** |
| * The unique flag. |
| */ |
| public boolean isUnique(); |
| |
| /** |
| * 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. |
| * |
| * @since 0.3.0 |
| */ |
| public void setUnique(boolean unique); |
| |
| /** |
| * Scope of a mapping from the result data to its object representation. |
| */ |
| public Class getResultMappingScope(); |
| |
| /** |
| * Name of a mapping from the result data to its object representation. |
| */ |
| public String getResultMappingName(); |
| |
| /** |
| * Name and scope of a mapping from the result data to its object |
| * representation. |
| */ |
| public void setResultMapping(Class scope, String name); |
| |
| /** |
| * Returns the result class that has been set through |
| * {@link #setResultType}, or null if none. |
| */ |
| public Class getResultType(); |
| |
| /** |
| * Specify the type of object in which the result of evaluating this query. |
| * |
| * @since 0.3.0 |
| */ |
| public void setResultType(Class cls); |
| |
| /** |
| * Return the 0-based start index for the returned results. |
| */ |
| public long getStartRange(); |
| |
| /** |
| * Return the 0-based exclusive end index for the returned results, |
| * or {@link Long#MAX_VALUE} for no limit. |
| */ |
| public long getEndRange(); |
| |
| /** |
| * Set the range of results to return. |
| * |
| * @param start 0-based inclusive start index |
| * @param end 0-based exclusive end index, or |
| * {@link Long#MAX_VALUE} for no limit |
| * @since 0.3.2 |
| */ |
| public void setRange(long start, long end); |
| |
| /** |
| * The parameter declaration. |
| */ |
| public String getParameterDeclaration(); |
| |
| /** |
| * Declared parameters, for query languages that use them. |
| */ |
| public void declareParameters(String params); |
| |
| /** |
| * 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. |
| */ |
| public LinkedMap getParameterTypes(); |
| |
| /** |
| * If this query is a bulk update, return a map of the |
| * {@link FieldMetaData}s to {@link Constant}s. |
| */ |
| public Map getUpdates(); |
| |
| /** |
| * Whether to ignore changes in the current transaction. |
| */ |
| public boolean getIgnoreChanges(); |
| |
| /** |
| * Return the query's compilation state. |
| */ |
| public Object getCompilation(); |
| |
| /** |
| * If this query is not a projection but places candidate results into a |
| * result class under an alias, return that alias. |
| */ |
| public String getAlias(); |
| |
| /** |
| * If this query is a projection, return the projection aliases. |
| */ |
| public String[] getProjectionAliases(); |
| |
| /** |
| * If this query is a projection, return the projection types. |
| */ |
| public Class[] getProjectionTypes(); |
| |
| /** |
| * Return true if the query is an aggregate. |
| */ |
| public boolean isAggregate(); |
| |
| /** |
| * Return true if the query uses grouping. |
| */ |
| public boolean hasGrouping(); |
| |
| /** |
| * Return the classes that affect this query. |
| */ |
| public ClassMetaData[] getAccessPathMetaDatas(); |
| |
| /** |
| * Return the filter listener for the given tag, or null. |
| */ |
| public FilterListener getFilterListener(String tag); |
| |
| /** |
| * Return the filter listener for the given tag, or null. |
| */ |
| public AggregateListener getAggregateListener(String tag); |
| |
| /** |
| * The set of filter listeners. |
| */ |
| public Collection getFilterListeners(); |
| |
| /** |
| * The set of aggregate listeners. |
| */ |
| public Collection getAggregateListeners(); |
| |
| /** |
| * Helper method to delete the objects found by executing a query on |
| * the given executor. |
| */ |
| public Number deleteInMemory(StoreQuery q, StoreQuery.Executor ex, |
| Object[] params); |
| |
| /** |
| * Helper method to update the objects found by executing a query on |
| * the given executor. |
| */ |
| public Number updateInMemory(StoreQuery q, StoreQuery.Executor ex, |
| Object[] params); |
| |
| /** |
| * 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. |
| */ |
| public Class classForName(String name, String[] imports); |
| |
| /** |
| * Synchronize on the query's internal lock. |
| */ |
| public void lock (); |
| |
| /** |
| * Unlock the query's internal lock. |
| */ |
| public void unlock(); |
| } |