/** * {@inheritDoc} */ @Override public SingletonResults executeSingleton(Query q) { return os.executeSingleton(QueryCloner.cloneQuery(q)); }
newFrom = origFrom; } else if (origFrom instanceof Query) { newFrom = cloneQuery((Query) origFrom); } else if (origFrom instanceof QueryClassBag) { Collection<?> bag = ((QueryClassBag) origFrom).getBag(); } else { newFrom = new QueryClassBag(type, (Collection<?>) cloneThing(((QueryClassBag) origFrom).getBag(), null, null)); QuerySelectable newSelect = (QuerySelectable) cloneThing(origSelect, fromElementMap, qopeMap); newQuery.addToSelect(newSelect, aliases.get(origSelect)); QueryOrderable newOrder = (QueryOrderable) cloneThing(origOrder, fromElementMap, qopeMap); newQuery.addToOrderBy(newOrder); QueryNode newGroup = (QueryNode) cloneThing(origGroup, fromElementMap, qopeMap); newQuery.addToGroupBy(newGroup); newQuery.setConstraint((Constraint) cloneThing(query.getConstraint(), fromElementMap, qopeMap)); newQuery.setDistinct(query.isDistinct());
return orig; } else if (origF.getParam() instanceof QueryField) { return new QueryFunction((QueryField) cloneThing(origF.getParam(), fromElementMap, qopeMap), origF.getOperation()); } else { return new QueryFunction((QueryExpression) cloneThing(origF.getParam(), fromElementMap, qopeMap), origF.getOperation()); if ((origE.getOperation() == QueryExpression.SUBSTRING) && (origE.getArg3() != null)) { return new QueryExpression((QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap), (QueryEvaluable) cloneThing(origE.getArg2(), fromElementMap, qopeMap), (QueryEvaluable) cloneThing(origE.getArg3(), fromElementMap, qopeMap)); } else if ((origE.getOperation() == QueryExpression.LOWER) || (origE.getOperation() == QueryExpression.UPPER)) { return new QueryExpression(origE.getOperation(), (QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap)); } else { return new QueryExpression((QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap), origE.getOperation(), (QueryEvaluable) cloneThing(origE.getArg2(), fromElementMap, qopeMap)); return new QueryCast((QueryEvaluable) cloneThing(((QueryCast) orig).getValue(), fromElementMap, qopeMap), ((QueryCast) orig).getType()); } else if (orig instanceof PathExpressionField) { QueryObjectPathExpression newQope = qopeMap.get(origQope); if (newQope == null) {
newFrom = origFrom; } else if (origFrom instanceof Query) { newFrom = cloneQuery((Query) origFrom); } else if (origFrom instanceof QueryClassBag) { Collection<?> bag = ((QueryClassBag) origFrom).getBag(); } else { newFrom = new QueryClassBag(type, (Collection<?>) cloneThing(((QueryClassBag) origFrom).getBag(), null, null)); QuerySelectable newSelect = (QuerySelectable) cloneThing(origSelect, fromElementMap, qopeMap); newQuery.addToSelect(newSelect, aliases.get(origSelect)); QueryOrderable newOrder = (QueryOrderable) cloneThing(origOrder, fromElementMap, qopeMap); newQuery.addToOrderBy(newOrder); QueryNode newGroup = (QueryNode) cloneThing(origGroup, fromElementMap, qopeMap); newQuery.addToGroupBy(newGroup); newQuery.setConstraint((Constraint) cloneThing(query.getConstraint(), fromElementMap, qopeMap)); newQuery.setDistinct(query.isDistinct());
return orig; } else if (origF.getParam() instanceof QueryField) { return new QueryFunction((QueryField) cloneThing(origF.getParam(), fromElementMap, qopeMap), origF.getOperation()); } else { return new QueryFunction((QueryExpression) cloneThing(origF.getParam(), fromElementMap, qopeMap), origF.getOperation()); if ((origE.getOperation() == QueryExpression.SUBSTRING) && (origE.getArg3() != null)) { return new QueryExpression((QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap), (QueryEvaluable) cloneThing(origE.getArg2(), fromElementMap, qopeMap), (QueryEvaluable) cloneThing(origE.getArg3(), fromElementMap, qopeMap)); } else if ((origE.getOperation() == QueryExpression.LOWER) || (origE.getOperation() == QueryExpression.UPPER)) { return new QueryExpression(origE.getOperation(), (QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap)); } else { return new QueryExpression((QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap), origE.getOperation(), (QueryEvaluable) cloneThing(origE.getArg2(), fromElementMap, qopeMap)); return new QueryCast((QueryEvaluable) cloneThing(((QueryCast) orig).getValue(), fromElementMap, qopeMap), ((QueryCast) orig).getType()); } else if (orig instanceof PathExpressionField) { QueryObjectPathExpression newQope = qopeMap.get(origQope); if (newQope == null) {
/** * {@inheritDoc} */ @Override public ResultsInfo estimate(Query q) throws ObjectStoreException { return os.estimate(QueryCloner.cloneQuery(q)); }
if ((origC.getOp() == ConstraintOp.IS_NULL) || (origC.getOp() == ConstraintOp.IS_NOT_NULL)) { return new SimpleConstraint((QueryEvaluable) cloneThing(origC.getArg1(), fromElementMap, qopeMap), origC.getOp()); } else { return new SimpleConstraint((QueryEvaluable) cloneThing(origC.getArg1(), fromElementMap, qopeMap), origC.getOp(), (QueryEvaluable) cloneThing(origC.getArg2(), fromElementMap, qopeMap)); ConstraintSet newC = new ConstraintSet(origC.getOp()); for (Constraint con : origC.getConstraints()) { newC.addConstraint((Constraint) cloneThing(con, fromElementMap, qopeMap)); if (origC.getOp().equals(ConstraintOp.IS_NULL) || origC.getOp().equals( ConstraintOp.IS_NOT_NULL)) { return new ContainsConstraint((QueryReference) cloneThing( origC.getReference(), fromElementMap, qopeMap), origC.getOp()); } else if (origC.getQueryClass() == null) { return new ContainsConstraint((QueryReference) cloneThing(origC.getReference(), fromElementMap, qopeMap), origC.getOp(), origC.getObject()); } else { return new ContainsConstraint((QueryReference) cloneThing(origC.getReference(), fromElementMap, qopeMap), origC.getOp(), (QueryClass) cloneThing(origC.getQueryClass(), fromElementMap, qopeMap)); return new SubqueryConstraint((QueryClass) fromElementMap.get(origC.getQueryClass()), origC.getOp(), cloneQuery(origC.getQuery())); } else {
/** * {@inheritDoc} */ @Override public int count(Query q, Map<Object, Integer> sequence) throws ObjectStoreException { return os.count(QueryCloner.cloneQuery(q), sequence); }
if ((origC.getOp() == ConstraintOp.IS_NULL) || (origC.getOp() == ConstraintOp.IS_NOT_NULL)) { return new SimpleConstraint((QueryEvaluable) cloneThing(origC.getArg1(), fromElementMap, qopeMap), origC.getOp()); } else { return new SimpleConstraint((QueryEvaluable) cloneThing(origC.getArg1(), fromElementMap, qopeMap), origC.getOp(), (QueryEvaluable) cloneThing(origC.getArg2(), fromElementMap, qopeMap)); ConstraintSet newC = new ConstraintSet(origC.getOp()); for (Constraint con : origC.getConstraints()) { newC.addConstraint((Constraint) cloneThing(con, fromElementMap, qopeMap)); if (origC.getOp().equals(ConstraintOp.IS_NULL) || origC.getOp().equals( ConstraintOp.IS_NOT_NULL)) { return new ContainsConstraint((QueryReference) cloneThing( origC.getReference(), fromElementMap, qopeMap), origC.getOp()); } else if (origC.getQueryClass() == null) { return new ContainsConstraint((QueryReference) cloneThing(origC.getReference(), fromElementMap, qopeMap), origC.getOp(), origC.getObject()); } else { return new ContainsConstraint((QueryReference) cloneThing(origC.getReference(), fromElementMap, qopeMap), origC.getOp(), (QueryClass) cloneThing(origC.getQueryClass(), fromElementMap, qopeMap)); return new SubqueryConstraint((QueryClass) fromElementMap.get(origC.getQueryClass()), origC.getOp(), cloneQuery(origC.getQuery())); } else {
/** * {@inheritDoc} */ @Override public int count(Query q, Map<Object, Integer> sequence) throws ObjectStoreException { return os.count(QueryCloner.cloneQuery(q), sequence); }
/** * {@inheritDoc} */ @Override public Results execute(Query q) { return os.execute(QueryCloner.cloneQuery(q)); }
/** * {@inheritDoc} */ @Override public SingletonResults executeSingleton(Query q) { return os.executeSingleton(QueryCloner.cloneQuery(q)); }
/** * {@inheritDoc} */ @Override public Results execute(Query q) { return os.execute(QueryCloner.cloneQuery(q)); }
/** * {@inheritDoc} */ @Override public List<ResultsRow<Object>> execute(Query q, int start, int limit, boolean optimise, boolean explain, Map<Object, Integer> sequence) throws ObjectStoreException { return os.execute(QueryCloner.cloneQuery(q), start, limit, optimise, explain, sequence); }
/** * {@inheritDoc} */ @Override public List<ResultsRow<Object>> execute(Query q, int start, int limit, boolean optimise, boolean explain, Map<Object, Integer> sequence) throws ObjectStoreException { return os.execute(QueryCloner.cloneQuery(q), start, limit, optimise, explain, sequence); }
/** * {@inheritDoc} */ @Override public ResultsInfo estimate(Query q) throws ObjectStoreException { return os.estimate(QueryCloner.cloneQuery(q)); }
/** * Return a List containing clones of the given Query, but with all permutations * of order by for the QueryClass objects on the from list. * * @param q the Query * @return clones of the Query with all permutations of orderBy */ private static List<Query> getOrderedQueries(Query q) { List<Query> queryList = new ArrayList<Query>(); Set<int[]> permutations = permutations(q.getEffectiveOrderBy().size()); for (int[] order : permutations) { Query newQuery = QueryCloner.cloneQuery(q); List<Object> orderBy = new ArrayList<Object>(newQuery.getEffectiveOrderBy()); newQuery.clearOrderBy(); for (int i = 0; i < order.length; i++) { newQuery.addToOrderBy((QueryClass) orderBy.get(order[i])); } queryList.add(newQuery); } return queryList; }
/** * Return a List containing clones of the given Query, but with all permutations * of order by for the QueryClass objects on the from list. * * @param q the Query * @return clones of the Query with all permutations of orderBy */ private static List<Query> getOrderedQueries(Query q) { List<Query> queryList = new ArrayList<Query>(); Set<int[]> permutations = permutations(q.getEffectiveOrderBy().size()); for (int[] order : permutations) { Query newQuery = QueryCloner.cloneQuery(q); List<Object> orderBy = new ArrayList<Object>(newQuery.getEffectiveOrderBy()); newQuery.clearOrderBy(); for (int i = 0; i < order.length; i++) { newQuery.addToOrderBy((QueryClass) orderBy.get(order[i])); } queryList.add(newQuery); } return queryList; }
public void executeTest(String type) throws Exception { try { Query orig = ((Query) queries.get(type)); Query cloned = QueryCloner.cloneQuery(orig); assertEquals(type + " has failed", orig, cloned); } catch (IllegalArgumentException e) { fail("IllegalArgumentException thrown for " + type + ": " + e.getMessage() + ": " + queries.get(type)); } }
throws ClassNotFoundException { Set<String> empty = Collections.emptySet(); Query q = QueryCloner.cloneQuery(getQuery(empty, extraFieldValue)); Map<QueryEvaluable, ConstraintSet> nodes = new LinkedHashMap<QueryEvaluable, ConstraintSet>();