FromElement qc = ((QueryField) node).getFromElement(); if ((qc instanceof QueryClass) || (qc instanceof QueryClassBag)) { if (!seenQueryClasses.contains(qc)) {
/** * Returns true if the Constraint is a cross-reference between two QueryClasses. * A constraint is deemed to be a cross-reference if it compares fields of * two different QueryClasses, either directly or via QueryExpressions. * * @param constraint the contraint to test * @return true if the contraint is a cross-reference */ public static boolean isCrossReference(Constraint constraint) { if (constraint instanceof SimpleConstraint) { // if QueryField exposed part of a subquery QueryField.getFromElement() // returns a query, does not cause any problem. Set<FromElement> qcs = new HashSet<FromElement>(); for (QueryField qf : getQueryFields(((SimpleConstraint) constraint).getArg1())) { qcs.add(qf.getFromElement()); } for (QueryField qf : getQueryFields(((SimpleConstraint) constraint).getArg2())) { qcs.add(qf.getFromElement()); } if (qcs.size() > 1) { return true; } } return false; }
/** * Returns true if the Constraint is a cross-reference between two QueryClasses. * A constraint is deemed to be a cross-reference if it compares fields of * two different QueryClasses, either directly or via QueryExpressions. * * @param constraint the contraint to test * @return true if the contraint is a cross-reference */ public static boolean isCrossReference(Constraint constraint) { if (constraint instanceof SimpleConstraint) { // if QueryField exposed part of a subquery QueryField.getFromElement() // returns a query, does not cause any problem. Set<FromElement> qcs = new HashSet<FromElement>(); for (QueryField qf : getQueryFields(((SimpleConstraint) constraint).getArg1())) { qcs.add(qf.getFromElement()); } for (QueryField qf : getQueryFields(((SimpleConstraint) constraint).getArg2())) { qcs.add(qf.getFromElement()); } if (qcs.size() > 1) { return true; } } return false; }
FromElement qc = ((QueryField) node).getFromElement(); if ((qc instanceof QueryClass) || (qc instanceof QueryClassBag)) { if (!seenQueryClasses.contains(qc)) {
QueryField f = (QueryField) n; if ("id".equals(f.getFieldName())) { FromElement qc = f.getFromElement(); if (qc instanceof QueryClass) { selectClasses.add((QueryClass) qc);
QueryField f = (QueryField) n; if ("id".equals(f.getFieldName())) { FromElement qc = f.getFromElement(); if (qc instanceof QueryClass) { selectClasses.add((QueryClass) qc);
qc = (QueryClass) qf.getFromElement(); } else if (getQueryFields((QueryEvaluable) right).iterator().hasNext()) { QueryField qf = getQueryFields((QueryEvaluable) right).iterator().next(); qc = (QueryClass) qf.getFromElement(); } else { return false; // does not relate to any QueryClass
qc = (QueryClass) qf.getFromElement(); } else if (getQueryFields((QueryEvaluable) right).iterator().hasNext()) { QueryField qf = getQueryFields((QueryEvaluable) right).iterator().next(); qc = (QueryClass) qf.getFromElement(); } else { return false; // does not relate to any QueryClass
if ((!q.getSelect().contains(node)) && q.isDistinct() && (node instanceof QueryField)) { FromElement fe = ((QueryField) node).getFromElement(); if (q.getSelect().contains(fe)) {
qFields.addAll(getQueryFields(sc.getArg2())); for (QueryField qf : qFields) { if (fromElement == qf.getFromElement()) { return true;
} else if (qn instanceof QueryField) { QueryField qf = (QueryField) qn; String origAlias = q.getAliases().get(qf.getFromElement()); qnNew = new QueryField((QueryClass) ret.getReverseAliases().get(origAlias), qf.getFieldName());
} else if (qn instanceof QueryField) { QueryField qf = (QueryField) qn; String origAlias = q.getAliases().get(qf.getFromElement()); qnNew = new QueryField((QueryClass) ret.getReverseAliases().get(origAlias), qf.getFieldName());
qFields.addAll(getQueryFields(sc.getArg2())); for (QueryField qf : qFields) { if (fromElement == qf.getFromElement()) { return true;
&& constraint.getOp() == ConstraintOp.IN && ((BagConstraint) constraint).getQueryNode() instanceof QueryField && ((QueryField) ((BagConstraint) constraint).getQueryNode()).getFromElement() == qn && "id".equals(((QueryField) ((BagConstraint) constraint).getQueryNode()) .getFieldName())) { && ((SimpleConstraint) constraint).getArg2() instanceof QueryValue && ((QueryField) ((SimpleConstraint) constraint).getArg1()) .getFromElement() == qn && "id".equals(((QueryField) ((SimpleConstraint) constraint).getArg1()) .getFieldName())) {
&& constraint.getOp() == ConstraintOp.IN && ((BagConstraint) constraint).getQueryNode() instanceof QueryField && ((QueryField) ((BagConstraint) constraint).getQueryNode()).getFromElement() == qn && "id".equals(((QueryField) ((BagConstraint) constraint).getQueryNode()) .getFieldName())) { && ((SimpleConstraint) constraint).getArg2() instanceof QueryValue && ((QueryField) ((SimpleConstraint) constraint).getArg1()) .getFromElement() == qn && "id".equals(((QueryField) ((SimpleConstraint) constraint).getArg1()) .getFieldName())) {
FromElement qc = ((QueryField) newFirstOrderBy).getFromElement(); if (qc instanceof QueryClass) { if ("id".equals(((QueryField) newFirstOrderBy).getFieldName())) {
FromElement qc = ((QueryField) newFirstOrderBy).getFromElement(); if (qc instanceof QueryClass) { if ("id".equals(((QueryField) newFirstOrderBy).getFieldName())) {
QueryField qf1 = (QueryField) qn1; QueryField qf2 = (QueryField) qn2; FromElement fe1 = qf1.getFromElement(); FromElement fe2 = qf2.getFromElement();
if (o instanceof QueryField) { return new boolean[] {true, q.getGroupBy().contains(o) || q.getGroupBy().contains(((QueryField) o).getFromElement())}; } else if (o instanceof QueryClass) { return new boolean[] {true, q.getGroupBy().contains(o)};
public void testGetLeftArgument() { assertTrue(ConstraintHelper.getLeftArgument(simpleConstraint1) instanceof QueryField); assertEquals("name", ((QueryField) ConstraintHelper.getLeftArgument(simpleConstraint1)).getFieldName()); assertTrue(ConstraintHelper.getLeftArgument(simpleConstraint4) instanceof QueryValue); assertEquals("Company1", ((QueryValue) ConstraintHelper.getLeftArgument(simpleConstraint4)).getValue()); assertTrue(ConstraintHelper.getLeftArgument(simpleConstraint3) instanceof QueryExpression); assertTrue(ConstraintHelper.getLeftArgument(classConstraint1) instanceof QueryClass); assertEquals(Department.class, ((QueryClass) ConstraintHelper.getLeftArgument(classConstraint1)).getType()); assertTrue(ConstraintHelper.getLeftArgument(containsConstraint1) instanceof QueryReference); assertEquals(qc1, ((QueryReference) ConstraintHelper.getLeftArgument(containsConstraint1)).getQueryClass()); assertEquals("departments", ((QueryReference) ConstraintHelper.getLeftArgument(containsConstraint1)).getFieldName()); assertTrue(ConstraintHelper.getLeftArgument(bagConstraint1) instanceof QueryNode); assertEquals(qc1, ((QueryField) ConstraintHelper.getLeftArgument(bagConstraint1)).getFromElement()); assertEquals("name", ((QueryField) ConstraintHelper.getLeftArgument(bagConstraint1)).getFieldName()); assertTrue(ConstraintHelper.getLeftArgument(subqueryConstraint1) instanceof QueryClass); assertEquals(Department.class, ((QueryClass) ConstraintHelper.getLeftArgument(subqueryConstraint1)).getType()); assertTrue(ConstraintHelper.getLeftArgument(subqueryConstraint2) instanceof QueryField); assertEquals("name", ((QueryField) ConstraintHelper.getLeftArgument(subqueryConstraint2)).getFieldName()); assertNull(ConstraintHelper.getLeftArgument(cs1)); }