protected BooleanQuery getAndQuery( And and, Map<String, NodeType> selectorMap, JackrabbitIndexSearcher searcher) throws RepositoryException, IOException { BooleanQuery query = new BooleanQuery(); addBooleanConstraint( query, and.getConstraint1(), MUST, selectorMap, searcher); addBooleanConstraint( query, and.getConstraint2(), MUST, selectorMap, searcher); return query; }
protected BooleanQuery getAndQuery( And and, Map<String, NodeType> selectorMap, JackrabbitIndexSearcher searcher) throws RepositoryException, IOException { BooleanQuery query = new BooleanQuery(); addBooleanConstraint( query, and.getConstraint1(), MUST, selectorMap, searcher); addBooleanConstraint( query, and.getConstraint2(), MUST, selectorMap, searcher); return query; }
private void append(And constraint) throws RepositoryException { String and = ""; for (Constraint c : Arrays.asList( constraint.getConstraint1(), constraint.getConstraint2())) { append(and); and = " AND "; boolean paren = c instanceof Or || c instanceof Not; if (paren) { append("("); } append(c); if (paren) { append(")"); } } }
private void append(And constraint) throws RepositoryException { String and = ""; for (Constraint c : Arrays.asList( constraint.getConstraint1(), constraint.getConstraint2())) { append(and); and = " AND "; boolean paren = c instanceof Or || c instanceof Not; if (paren) { append("("); } append(c); if (paren) { append(")"); } } }
private void append(And constraint) throws RepositoryException { String and = ""; for (Constraint c : Arrays.asList( constraint.getConstraint1(), constraint.getConstraint2())) { append(and); and = " AND "; boolean paren = c instanceof Or || c instanceof Not; if (paren) { append("("); } append(c); if (paren) { append(")"); } } }
/** * Test case for {@link QueryObjectModelFactory#and(Constraint, Constraint)} */ public void testAnd() throws RepositoryException { PropertyExistence c1 = qf.propertyExistence(SELECTOR_NAME1, propertyName1); PropertyExistence c2 = qf.propertyExistence(SELECTOR_NAME1, propertyName2); And and = qf.and(c1, c2); assertTrue("Not a PropertyExistence constraint", and.getConstraint1() instanceof PropertyExistence); assertTrue("Not a PropertyExistence constraint", and.getConstraint2() instanceof PropertyExistence); }
if (constraint instanceof And) { And and = (And) constraint; return getSelectorNames(and.getConstraint1(), and.getConstraint2()); } else if (constraint instanceof Or) { Or or = (Or) constraint;
if (constraint instanceof And) { And and = (And) constraint; return getSelectorNames(and.getConstraint1(), and.getConstraint2()); } else if (constraint instanceof Or) { Or or = (Or) constraint;
protected void addBooleanConstraint( BooleanQuery query, Constraint constraint, Occur occur, Map<String, NodeType> selectorMap, JackrabbitIndexSearcher searcher) throws RepositoryException, IOException { if (occur == MUST && constraint instanceof And) { And and = (And) constraint; addBooleanConstraint( query, and.getConstraint1(), occur, selectorMap, searcher); addBooleanConstraint( query, and.getConstraint2(), occur, selectorMap, searcher); } else if (occur == SHOULD && constraint instanceof Or) { Or or = (Or) constraint; addBooleanConstraint( query, or.getConstraint1(), occur, selectorMap, searcher); addBooleanConstraint( query, or.getConstraint2(), occur, selectorMap, searcher); } else { query.add(create(constraint, selectorMap, searcher), occur); } }
protected void addBooleanConstraint( BooleanQuery query, Constraint constraint, Occur occur, Map<String, NodeType> selectorMap, JackrabbitIndexSearcher searcher) throws RepositoryException, IOException { if (occur == MUST && constraint instanceof And) { And and = (And) constraint; addBooleanConstraint( query, and.getConstraint1(), occur, selectorMap, searcher); addBooleanConstraint( query, and.getConstraint2(), occur, selectorMap, searcher); } else if (occur == SHOULD && constraint instanceof Or) { Or or = (Or) constraint; addBooleanConstraint( query, or.getConstraint1(), occur, selectorMap, searcher); addBooleanConstraint( query, or.getConstraint2(), occur, selectorMap, searcher); } else { query.add(create(constraint, selectorMap, searcher), occur); } }
@Test public void and() throws RepositoryException { Constraint c0 = f.propertyExistence("x", "c0"); Constraint c1 = f.propertyExistence("x", "c1"); And and = f.and(c0, c1); assertEquals(and.getConstraint1(), c0); assertEquals(and.getConstraint2(), c1); assertEquals("([x].[c0] IS NOT NULL) AND ([x].[c1] IS NOT NULL)", and.toString()); }
query, and.getConstraint1(), selectorMap, searcher, reader); Predicate other = mapConstraintToQueryAndFilter( query, and.getConstraint2(), selectorMap, searcher, reader); if (filter == Predicate.TRUE) { filter = other;
private void splitNot(ConstraintSplitInfo constraintSplitInfo, Not not) throws RepositoryException { Constraint constraint = not.getConstraint(); if (constraint instanceof Not) { split(constraintSplitInfo, ((Not) constraint).getConstraint()); } else if (constraint instanceof And) { And and = (And) constraint; split(constraintSplitInfo, factory.or(factory.not(and.getConstraint1()), factory.not(and.getConstraint2()))); } else if (constraint instanceof Or) { Or or = (Or) constraint; split(constraintSplitInfo, factory.and(factory.not(or.getConstraint1()), factory.not(or.getConstraint2()))); } else { splitBySelectors(constraintSplitInfo, not, getSelectorNames(constraint)); } }
query, and.getConstraint1(), selectorMap, searcher, reader); Predicate other = mapConstraintToQueryAndFilter( query, and.getConstraint2(), selectorMap, searcher, reader); if (filter == Predicate.TRUE) { filter = other;
private void splitNot(ConstraintSplitInfo constraintSplitInfo, Not not) throws RepositoryException { Constraint constraint = not.getConstraint(); if (constraint instanceof Not) { split(constraintSplitInfo, ((Not) constraint).getConstraint()); } else if (constraint instanceof And) { And and = (And) constraint; split(constraintSplitInfo, factory.or(factory.not(and.getConstraint1()), factory.not(and.getConstraint2()))); } else if (constraint instanceof Or) { Or or = (Or) constraint; split(constraintSplitInfo, factory.and(factory.not(or.getConstraint1()), factory.not(or.getConstraint2()))); } else { splitBySelectors(constraintSplitInfo, not, getSelectorNames(constraint)); } }
if (constraint instanceof And) { And and = (And)constraint; return apply(and.getConstraint1(), negated).apply(and.getConstraint2(), negated);
if (constraint instanceof And) { And and = (And)constraint; return apply(and.getConstraint1(), negated).apply(and.getConstraint2(), negated);
private void split(ConstraintSplitInfo constraintSplitInfo, Constraint constraint) throws RepositoryException { if (constraint instanceof Not) { splitNot(constraintSplitInfo, (Not) constraint); } else if (constraint instanceof And) { And and = (And) constraint; split(constraintSplitInfo, and.getConstraint1()); split(constraintSplitInfo, and.getConstraint2()); } else if (constraint instanceof Or) { if (isReferencingBothSides(getSelectorNames(constraint))) { Or or = (Or) constraint; //the problem here is when you split an OR that has both condition sides referencing both join sides. // it should split into 2 joins constraintSplitInfo.splitOr(); split(constraintSplitInfo.getLeftInnerConstraints(), or.getConstraint1()); split(constraintSplitInfo.getRightInnerConstraints(),or.getConstraint2()); } else { splitBySelectors(constraintSplitInfo, constraint, getSelectorNames(constraint)); } } else { splitBySelectors(constraintSplitInfo, constraint, getSelectorNames(constraint)); } }
private void split(ConstraintSplitInfo constraintSplitInfo, Constraint constraint) throws RepositoryException { if (constraint instanceof Not) { splitNot(constraintSplitInfo, (Not) constraint); } else if (constraint instanceof And) { And and = (And) constraint; split(constraintSplitInfo, and.getConstraint1()); split(constraintSplitInfo, and.getConstraint2()); } else if (constraint instanceof Or) { if (isReferencingBothSides(getSelectorNames(constraint))) { Or or = (Or) constraint; //the problem here is when you split an OR that has both condition sides referencing both join sides. // it should split into 2 joins constraintSplitInfo.splitOr(); split(constraintSplitInfo.getLeftInnerConstraints(), or.getConstraint1()); split(constraintSplitInfo.getRightInnerConstraints(),or.getConstraint2()); } else { splitBySelectors(constraintSplitInfo, constraint, getSelectorNames(constraint)); } } else { splitBySelectors(constraintSplitInfo, constraint, getSelectorNames(constraint)); } }
return new AndQuery( build(and.getConstraint1(), variables), build(and.getConstraint2(), variables));