You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2013/04/10 08:09:59 UTC
svn commit: r1466339 [2/3] - in /openjpa/sandboxes/21: ./ openjpa-all/
openjpa-examples/ openjpa-examples/image-gallery/
openjpa-examples/openbooks/ openjpa-examples/simple/ openjpa-integration/
openjpa-integration/daytrader/ openjpa-integration/exampl...
Modified: openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java?rev=1466339&r1=1466338&r2=1466339&view=diff
==============================================================================
--- openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java (original)
+++ openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java Wed Apr 10 06:09:57 2013
@@ -18,91 +18,45 @@
*/
package org.apache.openjpa.persistence.criteria;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
-import java.util.Stack;
-import javax.persistence.criteria.AbstractQuery;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression;
-import javax.persistence.criteria.Fetch;
-import javax.persistence.criteria.From;
-import javax.persistence.criteria.Join;
import javax.persistence.criteria.Order;
-import javax.persistence.criteria.ParameterExpression;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.criteria.Selection;
import javax.persistence.criteria.Subquery;
import javax.persistence.metamodel.EntityType;
-import org.apache.commons.collections.map.LinkedMap;
-import org.apache.openjpa.kernel.StoreQuery;
-import org.apache.openjpa.kernel.exps.Context;
-import org.apache.openjpa.kernel.exps.ExpressionFactory;
-import org.apache.openjpa.kernel.exps.QueryExpressions;
-import org.apache.openjpa.kernel.exps.Value;
-import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.kernel.QueryOperations;
import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.persistence.meta.MetamodelImpl;
-import org.apache.openjpa.persistence.meta.Types;
/**
* Criteria query implementation.
- *
- * Collects clauses of criteria query (e.g. select projections, from/join,
- * where conditions, order by).
- * Eventually translates these clauses to a similar form of Expression tree
- * that can be interpreted and executed against a data store by OpenJPA kernel.
+ * <br>
+ * This major functionality of this class is factored out to its
+ * {@link {@link GenericCriteriaImpl base class since version 2.3.0.
+ * <br>
+ *
*
* @author Pinaki Poddar
* @author Fay Wang
*
* @since 2.0.0
*/
-class CriteriaQueryImpl<T> implements OpenJPACriteriaQuery<T>, AliasContext {
- private static final Localizer _loc = Localizer.forPackage(CriteriaQueryImpl.class);
-
- private final MetamodelImpl _model;
- private Set<Root<?>> _roots;
- private PredicateImpl _where;
- private List<Order> _orders;
- private OrderedMap<Object, Class<?>> _params; /*<ParameterExpression<?>, Class<?>>*/
- private Selection<? extends T> _selection;
- private List<Selection<?>> _selections;
- private List<Expression<?>> _groups;
- private PredicateImpl _having;
- private List<Subquery<?>> _subqueries;
- private boolean _distinct;
- private final SubqueryImpl<?> _delegator;
- private final Class<T> _resultClass;
- private boolean _compiled;
-
- // AliasContext
- private int aliasCount = 0;
- private static String ALIAS_BASE = "autoAlias";
-
- private Map<Selection<?>,Value> _variables = new HashMap<Selection<?>, Value>();
- private Map<Selection<?>,Value> _values = new HashMap<Selection<?>, Value>();
- private Map<Selection<?>,String> _aliases = null;
- private Map<Selection<?>,Value> _rootVariables = new HashMap<Selection<?>, Value>();
-
- // SubqueryContext
- private Stack<Context> _contexts = null;
+class CriteriaQueryImpl<T> extends GenericCriteriaImpl<T> {
public CriteriaQueryImpl(MetamodelImpl model, Class<T> resultClass) {
- this._model = model;
- this._resultClass = resultClass;
- this._delegator = null;
- _aliases = new HashMap<Selection<?>, String>();
+ super(model, resultClass, QueryOperations.OP_SELECT);
+ setOwner(this);
+ }
+
+ CriteriaQueryImpl(MetamodelImpl model, Class<T> resultClass, int op) {
+ super(model, resultClass, op);
+ setOwner(this);
}
/**
@@ -112,38 +66,15 @@ class CriteriaQueryImpl<T> implements Op
* @param delegator the subquery which will delegate to this receiver.
*/
CriteriaQueryImpl(MetamodelImpl model, SubqueryImpl<T> delegator) {
- this._model = model;
- this._resultClass = delegator.getJavaType();
- _delegator = delegator;
- _aliases = getAliases();
- }
-
- /**
- * Gets the subquery, if any, which is delegating to this receiver.
- */
- SubqueryImpl<?> getDelegator() {
- return _delegator;
- }
-
- /**
- * Gets the metamodel which defines the scope of all persistent entity references.
- */
- public MetamodelImpl getMetamodel() {
- return _model;
- }
-
- /**
- * Gets the stack of contexts used by this query.
- */
- Stack<Context> getContexts() {
- return _contexts;
+ super(model, delegator);
}
-
+
/**
* Sets whether this query as distinct.
*/
+ @Override
public CriteriaQuery<T> distinct(boolean distinct) {
- _distinct = distinct;
+ super.distinct(distinct);
return this;
}
@@ -153,16 +84,18 @@ class CriteriaQueryImpl<T> implements Op
* @return Empty list if there is no ordering elements.
* The returned list if mutable but mutation has no impact on this query.
*/
+ @Override
public List<Order> getOrderList() {
- return Expressions.returnCopy(_orders);
+ return super.getOrderList();
}
/**
* Return the selection of the query
* @return the item to be returned in the query result
*/
+ @Override
public Selection<T> getSelection() {
- return (Selection<T>)_selection;
+ return super.getSelection();
}
/**
@@ -207,97 +140,57 @@ class CriteriaQueryImpl<T> implements Op
* are returned in the query result
* @return the modified query
*/
+ @Override
public CriteriaQuery<T> multiselect(Selection<?>... selections) {
- _selections = Arrays.asList(selections); // do not telescope
- _selection = new CompoundSelections.MultiSelection(_resultClass, selections);
+ super.multiselect(selections);
return this;
}
- /**
- * Registers the given parameter.
- */
- void registerParameter(ParameterExpressionImpl<?> p) {
- if (_params == null)
- _params = new OrderedMap/*<ParameterExpression<?>, Class<?>*/();
- if (!_params.containsKey(p)) {
- p.setIndex(_params.size());
- _params.put(p, p.getJavaType());
- }
- }
- public Set<ParameterExpression<?>> getParameters() {
- collectParameters(new CriteriaExpressionVisitor.ParameterVisitor(this));
- return _params == null ? Collections.EMPTY_SET : _params.keySet();
- }
/**
* Return the selection items of the query as a list
* @return the selection items of the query as a list
*/
+ @Override
public List<Selection<?>> getSelectionList() {
- return Expressions.returnCopy(_selections);
+ return super.getSelectionList();
}
+ @Override
public CriteriaQuery<T> groupBy(Expression<?>... grouping) {
- if (grouping == null) {
- _groups = null;
- return this;
- }
- _groups = new ArrayList<Expression<?>>();
- for (Expression<?> e : grouping)
- _groups.add(e);
+ super.groupBy(grouping);
return this;
}
+ @Override
public CriteriaQuery<T> groupBy(List<Expression<?>> grouping) {
- if (grouping == null) {
- _groups = null;
- return this;
- }
- _groups = new ArrayList<Expression<?>>();
- for (Expression<?> e : grouping)
- _groups.add(e);
+ super.groupBy(grouping);
return this;
}
+ @Override
public CriteriaQuery<T> having(Expression<Boolean> restriction) {
- _having = (PredicateImpl)restriction;
+ super.having(restriction);
return this;
}
+ @Override
public CriteriaQuery<T> having(Predicate... restrictions) {
- if (restrictions == null) {
- _having = null;
- return this;
- }
- _having = new PredicateImpl.And();
- for (Predicate p : restrictions)
- _having.add(p);
+ super.having(restrictions);
return this;
}
+ @Override
public CriteriaQuery<T> orderBy(Order... orders) {
- if (orders == null) {
- _orders = null;
- return this;
- }
- _orders = new ArrayList<Order>();
- for (Order o : orders) {
- _orders.add(o);
- }
+ super.orderBy(orders);
return this;
}
+ @Override
public CriteriaQuery<T> orderBy(List<Order> orders) {
- if (orders == null) {
- _orders = null;
- return this;
- }
- _orders = new ArrayList<Order>();
- for (Order o : orders) {
- _orders.add(o);
- }
+ super.orderBy(orders);
return this;
}
@@ -308,95 +201,77 @@ class CriteriaQueryImpl<T> implements Op
* is to be returned in the query result
* @return the modified query
*/
+ @Override
public CriteriaQuery<T> select(Selection<? extends T> selection) {
- _selection = selection;
- _selections = new ArrayList<Selection<?>>();
- _selections.add(selection);
+ super.select(selection);
return this;
}
+ @Override
public CriteriaQuery<T> where(Expression<Boolean> restriction) {
- invalidateCompilation();
- if (restriction == null) {
- _where = null;
- return this;
- }
- _where = (PredicateImpl)restriction;
+ super.where(restriction);
return this;
}
+ @Override
public CriteriaQuery<T> where(Predicate... restrictions) {
- invalidateCompilation();
- if (restrictions == null) {
- _where = null;
- return this;
- }
- _where = new PredicateImpl.And(restrictions);
+ super.where(restrictions);
return this;
}
- public <X> Root<X> from(EntityType<X> entity) {
- RootImpl<X> root = new RootImpl<X>((Types.Entity<X>)entity);
- addRoot(root);
- return root;
+ @Override
+ public <X> RootImpl<X> from(EntityType<X> entity) {
+ return super.from(entity);
}
-
- public <X> Root<X> from(Class<X> cls) {
- EntityType<X> entity = _model.entity(cls);
- if (entity == null)
- throw new IllegalArgumentException(_loc.get("root-non-entity", cls).getMessage());
- return from(entity);
+ @Override
+ public <X> RootImpl<X> from(Class<X> cls) {
+ return super.from(cls);
}
+ @Override
public List<Expression<?>> getGroupList() {
- return Expressions.returnCopy(_groups);
+ return super.getGroupList();
}
+ @Override
public PredicateImpl getGroupRestriction() {
- return _having;
+ return super.getGroupRestriction();
}
+ @Override
public PredicateImpl getRestriction() {
- return _where;
+ return super.getRestriction();
}
+ @Override
public Set<Root<?>> getRoots() {
- return Expressions.returnCopy(_roots);
+ return super.getRoots();
}
+ @Override
public Root<?> getRoot() {
- assertRoot();
- return _roots.iterator().next();
+ return super.getRoot();
}
+ @Override
Root<?> getRoot(boolean mustExist) {
- if (mustExist) {
- return getRoot();
- }
- return _roots == null || _roots.isEmpty() ? null : _roots.iterator().next();
+ return super.getRoot(mustExist);
}
+ @Override
void addRoot(RootImpl<?> root) {
- if (_roots == null) {
- _roots = new LinkedHashSet<Root<?>>();
- }
- _roots.add(root);
+ super.addRoot(root);
}
- /**
- * Affirms if selection of this query is distinct.
- */
+ @Override
public boolean isDistinct() {
- return _distinct;
+ return super.isDistinct();
}
+ @Override
public <U> Subquery<U> subquery(Class<U> type) {
- if (_subqueries == null)
- _subqueries = new ArrayList<Subquery<?>>();
- Subquery<U> subquery = new SubqueryImpl<U>(type, this);
- _subqueries.add(subquery);
- return subquery;
+ return super.subquery(type);
}
/**
@@ -404,327 +279,22 @@ class CriteriaQueryImpl<T> implements Op
* Empty map if no parameter has been declared.
*/
public OrderedMap<Object, Class<?>> getParameterTypes() {
- collectParameters(new CriteriaExpressionVisitor.ParameterVisitor(this));
- return _params == null ? StoreQuery.EMPTY_ORDERED_PARAMS : _params;
+ return super.getParameterTypes();
}
- /**
- * Populate a kernel expression tree by translating the components of this
- * receiver with the help of the given {@link ExpressionFactory}.
- */
- QueryExpressions getQueryExpressions(ExpressionFactory factory) {
- _contexts = new Stack<Context>();
- Context context = new Context(null, null, null);
- _contexts.push(context);
- return new CriteriaExpressionBuilder().getQueryExpressions(factory, this);
- }
-
- public void assertRoot() {
- if (_roots == null || _roots.isEmpty())
- throw new IllegalStateException(_loc.get("root-undefined").getMessage());
- }
- public void assertSelection() {
- if (_selection == null && !isDefaultProjection())
- throw new IllegalStateException(_loc.get("select-undefined").getMessage());
- }
+
//
// SubqueryContext
//
- void setContexts(Stack<Context> contexts) {
- _contexts = contexts;
- }
-
/**
* Gets either this query itself if this is not a captive query for
* a subquery. Otherwise gets the parent query of the delegating
* subquery.
*/
CriteriaQueryImpl<?> getAncestor() {
- if (_delegator == null)
- return this;
- AbstractQuery<?> parent = _delegator.getParent();
- if (parent instanceof CriteriaQueryImpl)
- return (CriteriaQueryImpl<?>)parent;
- // parent is a SubqueryImpl
- return ((SubqueryImpl<?>)parent).getDelegate().getAncestor();
- }
-
- public Map<Selection<?>,String> getAliases() {
- CriteriaQueryImpl<?> c = getAncestor();
- if (c._aliases == null)
- c._aliases = new HashMap<Selection<?>, String>();
- return c._aliases;
- }
-
- /**
- * Gets the current context.
- */
- Context ctx() {
- return _contexts == null || _contexts.isEmpty() ? null : _contexts.peek();
- }
-
- //
- // AliasContext management
- //
-
- /**
- * Gets the alias of the given node. Creates an automatic alias, if necessary.
- */
- public String getAlias(Selection<?> selection) {
- String alias = selection.getAlias();
- if (alias != null) {
- _aliases.put(selection, alias);
- return alias;
- }
- alias = ALIAS_BASE + (++aliasCount);
- while (_aliases.containsValue(alias))
- alias = ALIAS_BASE + (++aliasCount);
- ((SelectionImpl<?>)selection).setAutoAlias(alias);
- _aliases.put(selection, alias);
- return _aliases.get(selection);
- }
-
- /**
- * Register the given variable of given path value against the given node.
- * If the given node has no alias then an alias is set to the given node.
- * If the variable or the path has non-null alias, then that alias must
- * be equal to the alias of the given node. Otherwise, the node alias is set
- * on the variable and path.
- */
- public void registerVariable(Selection<?> node, Value var, Value path) {
- if (isRegistered(node)) {
- return;
- //throw new RuntimeException(node + " is already bound");
- }
- if (!var.isVariable())
- throw new RuntimeException(var.getClass() + " is not a variable");
- if (var.getPath() != path)
- throw new RuntimeException(var + " does not match given " + path + " Variable path is " + var.getPath());
- String alias = getAlias(node);
-
- if (!alias.equals(var.getAlias())) {
- if (var.getAlias() == null)
- var.setAlias(alias);
- else
- throw new RuntimeException("Variable alias " + var.getAlias() +
- " does not match expected selection alias " + alias);
- }
- if (!alias.equals(path.getAlias())) {
- if (path.getAlias() == null)
- path.setAlias(alias);
- else
- throw new RuntimeException("Path alias " + path.getAlias() +
- " does not match expected selection alias " + alias);
- }
- _variables.put(node, var);
- _values.put(node, path);
- _aliases.put(node, alias);
- // add to context
- ctx().addSchema(alias, var.getMetaData());
- ctx().addVariable(alias, var);
- }
-
- public boolean isRegistered(Selection<?> selection) {
- if (_variables.containsKey(selection))
- return true;
- SubqueryImpl<?> delegator = getDelegator();
- return (delegator == null) ? false : getDelegatorParent().isRegistered(selection);
- }
-
- public Value getRegisteredVariable(Selection<?> selection) {
- Value var = _variables.get(selection);
- if (var != null)
- return var;
- SubqueryImpl<?> delegator = getDelegator();
- return (delegator == null) ? null : getDelegatorParent().getRegisteredVariable(selection);
- }
-
- public Value getRegisteredValue(Selection<?> selection) {
- Value val = _values.get(selection);
- if (val != null)
- return val;
- SubqueryImpl<?> delegator = getDelegator();
- return (delegator == null) ? null : getDelegatorParent().getRegisteredValue(selection);
- }
-
- /**
- * Registers a variable for the given root expression.
- * A root expression is registered only for cross join.
- * @param root
- * @param var
- */
- void registerRoot(Root<?> root, Value var) {
- if (var == null || !var.isVariable())
- throw new IllegalArgumentException("Attempt to register non-variable " + var);
- _rootVariables.put(root, var);
- String alias = var.getName();
- ctx().addSchema(alias, var.getMetaData());
- ctx().addVariable(alias, var);
- }
-
- /**
- * Gets the registered variable for the given root.
- */
- public Value getRegisteredRootVariable(Root<?> root) {
- Value var = _rootVariables.get(root);
- if (var != null)
- return var;
- SubqueryImpl<?> delegator = getDelegator();
- return (delegator == null) ? null : getDelegatorParent().getRegisteredRootVariable(root);
- }
-
- CriteriaQueryImpl<?> getDelegatorParent() {
- AbstractQuery<?> parent = _delegator.getParent();
- if (parent instanceof CriteriaQueryImpl)
- return ((CriteriaQueryImpl<?>)parent);
- // parent is a SubqueryImpl
- return ((SubqueryImpl<?>)parent).getDelegate();
- }
-
- public Class<T> getResultType() {
- return _resultClass;
- }
-
- public CriteriaQuery<T> multiselect(List<Selection<?>> list) {
- return multiselect(list.toArray(new Selection<?>[list.size()]));
- }
-
- boolean isMultiselect() {
- return _selection instanceof CompoundSelections.MultiSelection;
- }
-
- protected boolean isDefaultProjection() {
- if (_selections == null) {
- return getRoots().size() == 1
- && (getRoot().getModel().getJavaType() == _resultClass ||
- _resultClass == Object.class);
- }
- if (_selections.size() != 1) {
- return false;
- }
- Selection<?> sel = _selections.get(0);
- if (!getRoots().isEmpty() && sel == getRoot()) {
- return true;
- }
- if ((sel instanceof From<?,?>) && ((From<?,?>)sel).isCorrelated()) {
- return true;
- }
- return false;
- }
-
- void invalidateCompilation() {
- _compiled = false;
- _params = null;
- }
-
- /**
- * Compiles to verify that at least one root is defined, a selection term is present
- * and, most importantly, collects all the parameters so that they can be bound to
- * the executable query.
- */
- public OpenJPACriteriaQuery<T> compile() {
- if (_compiled)
- return this;
- assertRoot();
- assertSelection();
- collectParameters(new CriteriaExpressionVisitor.ParameterVisitor(this));
- _compiled = true;
- return this;
- }
-
- private void collectParameters(CriteriaExpressionVisitor visitor) {
- if (_compiled)
- return;
- if (_where != null) {
- _where.acceptVisit(visitor);
- }
- if (_having != null) {
- _having.acceptVisit(visitor);
- }
-
- if (_subqueries != null) {
- for (Subquery<?> subq : _subqueries) {
- ((SubqueryImpl<?>)subq).getDelegate().collectParameters(visitor);
- }
- }
- }
-
- /**
- * Gets the string representation of the query.
- */
- public String toCQL() {
- StringBuilder buffer = new StringBuilder();
- render(buffer, _roots, null);
- return buffer.toString().trim();
- }
-
- void render(StringBuilder buffer, Set<Root<?>> roots, List<Join<?,?>> correlatedJoins) {
- buffer.append("SELECT ");
- if (isDistinct()) buffer.append(" DISTINCT ");
- buffer.append(_selection != null ? ((CriteriaExpression)_selection).asProjection(this) : "*");
- buffer.append(" FROM ");
- renderRoots(buffer, roots);
- renderJoins(buffer, correlatedJoins);
- if (_where != null) {
- buffer.append(" WHERE ").append(_where.asValue(this));
- }
- renderList(buffer, " ORDER BY ", getOrderList());
- renderList(buffer, " GROUP BY ", getGroupList());
- if (_having != null) {
- buffer.append(" HAVING ");
- buffer.append(_having.asValue(this));
- }
- }
-
- private void renderList(StringBuilder buffer, String clause, Collection<?> coll) {
- if (coll == null || coll.isEmpty())
- return;
-
- buffer.append(clause);
- for (Iterator<?> i = coll.iterator(); i.hasNext(); ) {
- buffer.append(((CriteriaExpression)i.next()).asValue(this));
- if (i.hasNext()) buffer.append(", ");
- }
- }
-
- private void renderJoins(StringBuilder buffer, Collection<Join<?,?>> joins) {
- if (joins == null) return;
- for (Join j : joins) {
- buffer.append(((CriteriaExpression)j).asVariable(this)).append(" ");
- renderJoins(buffer, j.getJoins());
- renderFetches(buffer, j.getFetches());
- }
- }
-
- private void renderRoots(StringBuilder buffer, Collection<Root<?>> roots) {
- if (roots == null) return;
- int i = 0;
- for (Root r : roots) {
- buffer.append(((ExpressionImpl<?>)r).asVariable(this));
- if (++i != roots.size()) buffer.append(", ");
- renderJoins(buffer, r.getJoins());
- renderFetches(buffer, r.getFetches());
- }
- }
- private void renderFetches(StringBuilder buffer, Set<Fetch> fetches) {
- if (fetches == null) return;
- for (Fetch j : fetches) {
- buffer.append(((ExpressionImpl<?>)j).asValue(this)).append(" ");
- }
- }
-
- /**
- * Returns a JPQL-like string, if this receiver is populated. Otherwise
- * returns <code>Object.toString()</code>.
- */
- public String toString() {
- try {
- return toCQL();
- } catch (Throwable t) {
- return super.toString();
- }
+ return (CriteriaQueryImpl<?>)super.getAncestor();
}
public boolean equals(Object other) {
Added: openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaUpdateImpl.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaUpdateImpl.java?rev=1466339&view=auto
==============================================================================
--- openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaUpdateImpl.java (added)
+++ openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaUpdateImpl.java Wed Apr 10 06:09:57 2013
@@ -0,0 +1,126 @@
+/*
+ * 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.persistence.criteria;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.criteria.CriteriaUpdate;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.ParameterExpression;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Subquery;
+import javax.persistence.metamodel.Attribute;
+import javax.persistence.metamodel.EntityType;
+import javax.persistence.metamodel.SingularAttribute;
+
+import org.apache.openjpa.kernel.QueryOperations;
+import org.apache.openjpa.persistence.meta.Members;
+import org.apache.openjpa.persistence.meta.MetamodelImpl;
+import org.apache.openjpa.persistence.meta.Types;
+
+public class CriteriaUpdateImpl<T> extends ExecutableCriteriaImpl<T> implements CriteriaUpdate<T> {
+ private Map<PathImpl<?,?>, ExpressionImpl<?>> _values = new HashMap<PathImpl<?,?>, ExpressionImpl<?>>();
+ public CriteriaUpdateImpl(MetamodelImpl model, Class<T> target) {
+ super(model, target, QueryOperations.OP_UPDATE);
+ delegate.setOwner(this);
+ }
+
+
+ @Override
+ public CriteriaUpdateImpl<T> where(Expression<Boolean> restriction) {
+ // TODO JPA 2.1 Method
+ super.where(restriction);
+ return this;
+ }
+
+ @Override
+ public CriteriaUpdateImpl<T> where(Predicate... restrictions) {
+ // TODO JPA 2.1 Method
+ super.where(restrictions);
+ return this;
+ }
+
+ /**
+ * Gets the values to be updated as expression indexed by the corresponding path variable.
+ * The kernel query execution requires a non-empty map of updated values to distinguish
+ * the query from a delete operation.
+ * @see CriteriaExpressionBuilder#getQueryExpressions(org.apache.openjpa.kernel.exps.ExpressionFactory,
+ * GenericCriteriaImpl)
+ */
+ public Map<PathImpl<?,?>,ExpressionImpl<?>> getUpdates() {
+ return _values;
+ }
+ // --------------------------------------------------------------------------
+ // Sets parameter values
+ // --------------------------------------------------------------------------
+ @Override
+ public <Y, X extends Y> CriteriaUpdate<T> set(SingularAttribute<? super T, Y> attribute, X value) {
+ // TODO JPA 2.1 Method
+ PathImpl<T, X> path = new PathImpl<T, X>((RootImpl<T>)getRoot(),
+ (Members.SingularAttributeImpl<? super T,Y>)attribute,
+ (Class<X>)value.getClass());
+ putValue(path, value);
+ return this;
+ }
+
+ @Override
+ public <Y> CriteriaUpdate<T> set(SingularAttribute<? super T, Y> attribute, Expression<? extends Y> value) {
+ // TODO JPA 2.1 Method
+ PathImpl<T, Y> path = new PathImpl<T, Y>((RootImpl<T>)getRoot(),
+ (Members.SingularAttributeImpl<? super T,Y>)attribute,
+ (Class<Y>)value.getJavaType());
+ putValue(path, value);
+ return this;
+ }
+
+ @Override
+ public <Y, X extends Y> CriteriaUpdate<T> set(Path<Y> attribute, X value) {
+ // TODO JPA 2.1 Method
+ putValue((PathImpl<?,?>)attribute, value);
+ return this;
+ }
+
+ @Override
+ public <Y> CriteriaUpdate<T> set(Path<Y> attribute, Expression<? extends Y> value) {
+ // TODO JPA 2.1 Method
+ putValue((PathImpl<?,?>)attribute, value);
+ return this;
+ }
+
+ @Override
+ public CriteriaUpdate<T> set(String attributeName, Object value) {
+ // TODO JPA 2.1 Method
+ putValue((PathImpl<?,?>)getRoot().get(attributeName), value);
+ return this;
+ }
+
+ private void putValue(PathImpl<?,?> path, Object value) {
+ if (value instanceof ExpressionImpl) {
+ _values.put(path, (ExpressionImpl<?>)value);
+ if (value instanceof ParameterExpressionImpl) {
+ getDelegate().registerParameter((ParameterExpressionImpl<?>)value);
+ }
+ } else {
+ _values.put(path, new Expressions.Constant(value));
+ }
+ }
+}
Propchange: openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaUpdateImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExecutableCriteriaImpl.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExecutableCriteriaImpl.java?rev=1466339&view=auto
==============================================================================
--- openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExecutableCriteriaImpl.java (added)
+++ openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExecutableCriteriaImpl.java Wed Apr 10 06:09:57 2013
@@ -0,0 +1,115 @@
+/*
+ * 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.persistence.criteria;
+
+import java.io.Serializable;
+import java.util.Set;
+
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.ParameterExpression;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Subquery;
+import javax.persistence.metamodel.EntityType;
+
+import org.apache.openjpa.persistence.meta.MetamodelImpl;
+
+/**
+ * Base class for Update and Delete criteria.
+ * <br>
+ * This class delegates to a {@linkplain CriteriaQueryImpl generic query}
+ * (instead of inheriting from it). This is done to avoid some tricky
+ * method signature issues with type erasure dictated by the JPA specification
+ * interfaces.
+ *
+ * @author Pinaki Poddar
+ *
+ * @param <T> the type of object to be updated or deleted
+ *
+ * @since 3.0
+ */
+public class ExecutableCriteriaImpl<T> implements Serializable {
+ protected final GenericCriteriaImpl<T> delegate;
+
+ public ExecutableCriteriaImpl(MetamodelImpl model, Class<T> target, int op) {
+ delegate = new GenericCriteriaImpl<T>(model, target, op);
+ delegate.from(target);
+ }
+
+ /**
+ * Gets the query implementation that this receiver delegates to.
+ */
+ public GenericCriteriaImpl<T> getDelegate() {
+ return delegate;
+ }
+
+ public <U> Subquery<U> subquery(Class<U> type) {
+ // TODO JPA 2.1 Method
+ return delegate.subquery(type);
+ }
+
+ public PredicateImpl getRestriction() {
+ // TODO JPA 2.1 Method
+ return delegate.getRestriction();
+ }
+
+
+ public RootImpl<T> from(Class<T> entityClass) {
+ // TODO JPA 2.1 Method
+ return delegate.from(entityClass);
+ }
+
+
+ public Root<T> from(EntityType<T> entity) {
+ // TODO JPA 2.1 Method
+ return delegate.from(entity);
+ }
+
+
+ public final Root<T> getRoot() {
+ // TODO JPA 2.1 Method
+ return (Root<T>)delegate.getRoot();
+ }
+
+
+ public ExecutableCriteriaImpl<T> where(Expression<Boolean> restriction) {
+ // TODO JPA 2.1 Method
+ delegate.where(restriction);
+ return this;
+ }
+
+
+ public ExecutableCriteriaImpl<T> where(Predicate... restrictions) {
+ // TODO JPA 2.1 Method
+ delegate.where(restrictions);
+ return this;
+ }
+
+ public final Set<ParameterExpression<?>> getParameters() {
+ return delegate.getParameters();
+ }
+
+ public final OpenJPACriteriaQuery<T> compile() {
+ return delegate.compile();
+ }
+
+ public final String toString() {
+ return delegate.toCQL();
+ }
+}
Propchange: openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExecutableCriteriaImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExpressionImpl.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExpressionImpl.java?rev=1466339&r1=1466338&r2=1466339&view=diff
==============================================================================
--- openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExpressionImpl.java (original)
+++ openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/ExpressionImpl.java Wed Apr 10 06:09:57 2013
@@ -115,7 +115,7 @@ abstract class ExpressionImpl<X> extends
* @param q the query definition context of this expression
* @return an equivalent kernel value
*/
- abstract org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q);
+ abstract org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q);
/**
* Bridge contract to convert this facade expression to a kernel expression.
@@ -123,7 +123,8 @@ abstract class ExpressionImpl<X> extends
* @param q the query definition context of this expression
* @return an equivalent kernel expression
*/
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory,
+ GenericCriteriaImpl<?> q) {
return factory.asExpression(toValue(factory, q));
}
}
Modified: openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java
URL: http://svn.apache.org/viewvc/openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java?rev=1466339&r1=1466338&r2=1466339&view=diff
==============================================================================
--- openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java (original)
+++ openjpa/sandboxes/21/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java Wed Apr 10 06:09:57 2013
@@ -62,11 +62,11 @@ class Expressions {
* using the given ExpressionFactory.
* Handles null expression.
*/
- static Value toValue(ExpressionImpl<?> e, ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ static Value toValue(ExpressionImpl<?> e, ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return (e == null) ? factory.getNull() : e.toValue(factory, q);
}
- static void setImplicitTypes(Value v1, Value v2, Class<?> expected, CriteriaQueryImpl<?> q) {
+ static void setImplicitTypes(Value v1, Value v2, Class<?> expected, GenericCriteriaImpl<?> q) {
JPQLExpressionBuilder.setImplicitTypes(v1, v2, expected, q.getMetamodel(),
q.getParameterTypes(), q.toString());
}
@@ -280,7 +280,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value = factory.abs(Expressions.toValue(e, factory, q));
value.setImplicitType(getJavaType());
return value;
@@ -304,7 +304,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value v = Expressions.toValue(e, factory, q);
return _distinct ? factory.count(factory.distinct(v)) : factory.count(v);
}
@@ -322,7 +322,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value = factory.avg(Expressions.toValue(e, factory, q));
value.setImplicitType(getJavaType());
return value;
@@ -340,7 +340,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value = factory.sqrt(Expressions.toValue(e, factory, q));
value.setImplicitType(getJavaType());
return value;
@@ -357,7 +357,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value = factory.max(Expressions.toValue(e, factory, q));
value.setImplicitType(getJavaType());
return value;
@@ -374,7 +374,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value = factory.min(Expressions.toValue(e, factory, q));
value.setImplicitType(getJavaType());
return value;
@@ -395,7 +395,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value val = Expressions.toValue(e, factory, q);
Value result;
if (val instanceof Literal && ((Literal)val).getParseType() == Literal.TYPE_COLLECTION)
@@ -423,7 +423,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.newFunction(functionName, getJavaType(),
new Expressions.ListArgument(resultType, args).toValue(factory, q));
}
@@ -440,7 +440,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.type(Expressions.toValue(e, factory, q));
}
@@ -456,7 +456,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.cast(Expressions.toValue(e, factory, q), getJavaType());
}
@@ -480,7 +480,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.concat(
Expressions.toValue(e1, factory, q),
Expressions.toValue(e2, factory, q));
@@ -519,7 +519,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return JPQLExpressionBuilder.convertSubstringArguments(factory,
Expressions.toValue(e, factory, q),
from == null ? null : from.toValue(factory, q),
@@ -566,7 +566,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value locateSearch = path.toValue(factory, q);
Value locateFromIndex = (from == null ? null : Expressions.toValue(from, factory, q));
Value locatePath = Expressions.toValue(pattern, factory, q);
@@ -617,7 +617,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Boolean spec = null;
if (ts != null) {
switch (ts) {
@@ -657,7 +657,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value= (e2 == null)
? factory.sum(Expressions.toValue(e1, factory, q))
: factory.add(
@@ -689,7 +689,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.multiply(
Expressions.toValue(e1, factory, q),
Expressions.toValue(e2, factory, q));
@@ -715,7 +715,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value = factory.subtract(
Expressions.toValue(e1, factory, q),
Expressions.toValue(e2, factory, q));
@@ -744,7 +744,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value = factory.divide(
Expressions.toValue(e1, factory, q),
Expressions.toValue(e2, factory, q));
@@ -770,7 +770,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value = factory.mod(
Expressions.toValue(e1, factory, q),
Expressions.toValue(e2, factory, q));
@@ -790,7 +790,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.getCurrentDate(getJavaType());
}
@@ -806,7 +806,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.getCurrentTime(getJavaType());
}
@@ -822,7 +822,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.getCurrentTimestamp(getJavaType());
}
@@ -847,7 +847,8 @@ class Expressions {
}
@Override
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q){
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory,
+ GenericCriteriaImpl<?> q){
Value val1 = Expressions.toValue(e1, factory, q);
Value val2 = Expressions.toValue(e2, factory, q);
Expressions.setImplicitTypes(val1, val2, e1.getJavaType(), q);
@@ -875,7 +876,7 @@ class Expressions {
}
@Override
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q){
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, GenericCriteriaImpl<?> q){
Value val1 = Expressions.toValue(e1, factory, q);
Value val2 = Expressions.toValue(e2, factory, q);
Expressions.setImplicitTypes(val1, val2, e1.getJavaType(), q);
@@ -903,7 +904,7 @@ class Expressions {
}
@Override
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q){
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, GenericCriteriaImpl<?> q){
Value val1 = Expressions.toValue(e1, factory, q);
Value val2 = Expressions.toValue(e2, factory, q);
Expressions.setImplicitTypes(val1, val2, e1.getJavaType(), q);
@@ -931,7 +932,7 @@ class Expressions {
}
@Override
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q){
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, GenericCriteriaImpl<?> q){
Value val1 = Expressions.toValue(e1, factory, q);
Value val2 = Expressions.toValue(e2, factory, q);
Expressions.setImplicitTypes(val1, val2, e1.getJavaType(), q);
@@ -959,7 +960,7 @@ class Expressions {
}
@Override
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q){
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, GenericCriteriaImpl<?> q){
Value val1 = Expressions.toValue(e1, factory, q);
Value val2 = Expressions.toValue(e2, factory, q);
Expressions.setImplicitTypes(val1, val2, e1.getJavaType(), q);
@@ -987,7 +988,7 @@ class Expressions {
}
@Override
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q){
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, GenericCriteriaImpl<?> q){
Value val1 = Expressions.toValue(e1, factory, q);
Value val2 = Expressions.toValue(e2, factory, q);
Expressions.setImplicitTypes(val1, val2, e1.getJavaType(), q);
@@ -1035,7 +1036,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Object value = arg;
Class<?> literalClass = getJavaType();
if (arg instanceof ParameterExpressionImpl) {
@@ -1107,12 +1108,12 @@ class Expressions {
}
@Override
- Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return Expressions.toValue(collection, factory, q);
}
@Override
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q){
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, GenericCriteriaImpl<?> q){
Value val = Expressions.toValue(collection, factory, q);
return factory.isEmpty(val);
}
@@ -1141,12 +1142,12 @@ class Expressions {
}
@Override
- Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return Expressions.toValue(collection, factory, q);
}
@Override
- org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, CriteriaQueryImpl<?> q){
+ org.apache.openjpa.kernel.exps.Expression toKernelExpression(ExpressionFactory factory, GenericCriteriaImpl<?> q){
Value val = Expressions.toValue(collection, factory, q);
// factory.isNotEmpty() not used to match JPQL
return factory.not(factory.isEmpty(val));
@@ -1170,7 +1171,7 @@ class Expressions {
}
@Override
- public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value v = Expressions.toValue(e, factory, q);
ClassMetaData meta = ((PathImpl<?,?>)e)._member.fmd.getElement().getTypeMetaData();
v.setMetaData(meta);
@@ -1199,7 +1200,7 @@ class Expressions {
@Override
public org.apache.openjpa.kernel.exps.Expression toKernelExpression(
- ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ ExpressionFactory factory, GenericCriteriaImpl<?> q) {
org.apache.openjpa.kernel.exps.Expression contains = factory.contains(
Expressions.toValue(collection, factory, q),
Expressions.toValue(element, factory, q));
@@ -1255,7 +1256,7 @@ class Expressions {
@Override
public org.apache.openjpa.kernel.exps.Expression toKernelExpression(
- ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ ExpressionFactory factory, GenericCriteriaImpl<?> q) {
String escapeStr = escapeChar == null ? null :
((Character)((Literal)Expressions.toValue(
escapeChar, factory, q)).getValue()).toString();
@@ -1294,7 +1295,7 @@ class Expressions {
}
@Override
- public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value[] vs = new Value[values.size()];
int i = 0;
for (Expression<?> e : values)
@@ -1328,7 +1329,7 @@ class Expressions {
}
@Override
- public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value value1 = Expressions.toValue((ExpressionImpl<?>)val1, factory, q);
Value value2 = Expressions.toValue((ExpressionImpl<?>)val2, factory, q);
return factory.nullIfExpression(value1, value2);
@@ -1358,7 +1359,7 @@ class Expressions {
@Override
org.apache.openjpa.kernel.exps.Expression toKernelExpression(
- ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.equal(
Expressions.toValue(e, factory, q),
factory.getNull());
@@ -1389,7 +1390,7 @@ class Expressions {
@Override
org.apache.openjpa.kernel.exps.Expression toKernelExpression(
- ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.notEqual(
Expressions.toValue(e, factory, q),
factory.getNull());
@@ -1440,7 +1441,7 @@ class Expressions {
@Override
org.apache.openjpa.kernel.exps.Expression toKernelExpression(
- ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ ExpressionFactory factory, GenericCriteriaImpl<?> q) {
org.apache.openjpa.kernel.exps.Expression inExpr = null;
if (_exps.size() == 1) {
Expressions.Equal e = (Expressions.Equal)_exps.get(0);
@@ -1510,7 +1511,7 @@ class Expressions {
}
@Override
- public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
int size = whens.size();
org.apache.openjpa.kernel.exps.Expression[] exps = new org.apache.openjpa.kernel.exps.Expression[size];
for (int i = 0; i < size; i++) {
@@ -1589,7 +1590,7 @@ class Expressions {
}
@Override
- public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
Value caseOperandExpr = Expressions.toValue((ExpressionImpl<?>)caseOperand, factory, q);
int size = whens.size();
org.apache.openjpa.kernel.exps.Expression[] exps = new org.apache.openjpa.kernel.exps.Expression[size];
@@ -1632,7 +1633,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.toLowerCase(Expressions.toValue(e, factory, q));
}
@@ -1648,7 +1649,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.toUpperCase(Expressions.toValue(e, factory, q));
}
@@ -1664,7 +1665,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.stringLength(Expressions.toValue(e, factory, q));
}
@@ -1707,7 +1708,7 @@ class Expressions {
@Override
org.apache.openjpa.kernel.exps.Expression toKernelExpression(
- ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ ExpressionFactory factory, GenericCriteriaImpl<?> q) {
org.apache.openjpa.kernel.exps.Expression exists =
factory.isNotEmpty(Expressions.toValue(e, factory, q));
return exists;
@@ -1725,7 +1726,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.all(Expressions.toValue(e, factory, q));
}
@@ -1741,7 +1742,7 @@ class Expressions {
}
@Override
- public Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.any(Expressions.toValue(e, factory, q));
}
@@ -1760,7 +1761,7 @@ class Expressions {
@Override
public org.apache.openjpa.kernel.exps.Expression toKernelExpression(
- ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ ExpressionFactory factory, GenericCriteriaImpl<?> q) {
return factory.not(e.toKernelExpression(factory, q));
}
@@ -1782,7 +1783,7 @@ class Expressions {
}
@Override
- public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public org.apache.openjpa.kernel.exps.Value toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
org.apache.openjpa.kernel.exps.Value e = actual.toValue(factory, q);
e.setImplicitType(getJavaType());
return e;
@@ -1811,7 +1812,7 @@ class Expressions {
}
@Override
- public org.apache.openjpa.kernel.exps.Arguments toValue(ExpressionFactory factory, CriteriaQueryImpl<?> q) {
+ public org.apache.openjpa.kernel.exps.Arguments toValue(ExpressionFactory factory, GenericCriteriaImpl<?> q) {
org.apache.openjpa.kernel.exps.Value[] kvs = new org.apache.openjpa.kernel.exps.Value[_args.length];
int i = 0;
for (ExpressionImpl<?> arg : _args) {