} 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());
} 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());
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)); } else { return new SubqueryConstraint( (QueryEvaluable) cloneThing(origC.getQueryEvaluable(), fromElementMap, qopeMap), origC.getOp(), cloneQuery(origC.getQuery()));
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)); } else { return new SubqueryConstraint( (QueryEvaluable) cloneThing(origC.getQueryEvaluable(), fromElementMap, qopeMap), origC.getOp(), cloneQuery(origC.getQuery()));
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) {
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) {