Search in sources :

Example 1 with Join

use of javax.jcr.query.qom.Join in project jackrabbit by apache.

the class AbstractJoinTest method createQuery.

protected QueryObjectModel createQuery(String joinType, JoinCondition condition, Constraint left, Constraint right) throws RepositoryException {
    // only consider nodes under test root
    Constraint constraint;
    if (QueryObjectModelConstants.JCR_JOIN_TYPE_LEFT_OUTER.equals(joinType)) {
        constraint = qf.descendantNode(LEFT, testRoot);
    } else {
        constraint = qf.descendantNode(RIGHT, testRoot);
    }
    if (left != null) {
        constraint = qf.and(constraint, left);
    }
    if (right != null) {
        constraint = qf.and(constraint, right);
    }
    Join join = qf.join(qf.selector(testNodeType, LEFT), qf.selector(testNodeType, RIGHT), joinType, condition);
    return qf.createQuery(join, constraint, null, null);
}
Also used : Constraint(javax.jcr.query.qom.Constraint) Join(javax.jcr.query.qom.Join)

Example 2 with Join

use of javax.jcr.query.qom.Join in project jackrabbit-oak by apache.

the class QomTest method join.

@Test
public void join() throws RepositoryException {
    Source left = f.selector("nodeTypeName", "selectorName");
    Source right = f.selector("nodeTypeName2", "selectorName2");
    ChildNodeJoinCondition jc = f.childNodeJoinCondition("childSelectorName", "parentSelectorName");
    Join j = f.join(left, right, QueryObjectModelConstants.JCR_JOIN_TYPE_INNER, jc);
    assertEquals(left, j.getLeft());
    assertEquals(right, j.getRight());
    assertEquals(QueryObjectModelConstants.JCR_JOIN_TYPE_INNER, j.getJoinType());
    assertEquals(jc, j.getJoinCondition());
    assertEquals("ISCHILDNODE([childSelectorName], [parentSelectorName])", jc.toString());
}
Also used : ChildNodeJoinCondition(javax.jcr.query.qom.ChildNodeJoinCondition) Join(javax.jcr.query.qom.Join) Source(javax.jcr.query.qom.Source) Test(org.junit.Test) AbstractRepositoryTest(org.apache.jackrabbit.oak.jcr.AbstractRepositoryTest)

Example 3 with Join

use of javax.jcr.query.qom.Join in project jackrabbit by apache.

the class QueryEngine method execute.

protected QueryResult execute(Column[] columns, Join join, Constraint constraint, Ordering[] orderings, long offset, long limit, int printIndentation) throws RepositoryException {
    // Swap the join sources to normalize all outer joins to left
    if (JCR_JOIN_TYPE_RIGHT_OUTER.equalsIgnoreCase(join.getJoinType())) {
        log.debug("{} SQL2 RIGHT OUTER JOIN transformed to LEFT OUTER JOIN.", genString(printIndentation));
        Join betterJoin = qomFactory.join(join.getRight(), join.getLeft(), JCR_JOIN_TYPE_LEFT_OUTER, join.getJoinCondition());
        return execute(columns, betterJoin, constraint, orderings, offset, limit, printIndentation);
    }
    JoinMerger merger = JoinMerger.getJoinMerger(join, getColumnMap(columns, getSelectorNames(join)), evaluator, qomFactory);
    ConstraintSplitter splitter = new ConstraintSplitter(constraint, qomFactory, merger.getLeftSelectors(), merger.getRightSelectors(), join);
    ConstraintSplitInfo csInfo = splitter.getConstraintSplitInfo();
    logQueryAnalysis(csInfo, printIndentation);
    boolean isOuterJoin = JCR_JOIN_TYPE_LEFT_OUTER.equalsIgnoreCase(join.getJoinType());
    QueryResult result = execute(merger, csInfo, isOuterJoin, printIndentation);
    long sort = System.currentTimeMillis();
    QueryResult sortedResult = sort(result, orderings, evaluator, offset, limit);
    log.debug(" {} SQL2 SORT took {} ms.", genString(printIndentation), System.currentTimeMillis() - sort);
    return sortedResult;
}
Also used : QueryResult(javax.jcr.query.QueryResult) Join(javax.jcr.query.qom.Join)

Example 4 with Join

use of javax.jcr.query.qom.Join in project jackrabbit by apache.

the class QueryObjectModelFactoryTest method testJoin.

/**
     * Test case for {@link QueryObjectModelFactory#join(Source, Source, String, JoinCondition)}
     */
public void testJoin() throws RepositoryException {
    Selector s1 = qf.selector(ntBase, SELECTOR_NAME1);
    Selector s2 = qf.selector(testNodeType, SELECTOR_NAME1);
    JoinCondition cond = qf.equiJoinCondition(ntBase, jcrPrimaryType, testNodeType, jcrPrimaryType);
    for (Iterator<String> it = JOIN_TYPES.iterator(); it.hasNext(); ) {
        String joinType = it.next();
        Join join = qf.join(s1, s2, joinType, cond);
        assertTrue("Not a selector source", join.getLeft() instanceof Selector);
        assertTrue("Not a selector source", join.getRight() instanceof Selector);
        assertEquals("Wrong join type", joinType, join.getJoinType());
        assertTrue("Not an EquiJoinCondition", join.getJoinCondition() instanceof EquiJoinCondition);
    }
}
Also used : EquiJoinCondition(javax.jcr.query.qom.EquiJoinCondition) Join(javax.jcr.query.qom.Join) Selector(javax.jcr.query.qom.Selector) SameNodeJoinCondition(javax.jcr.query.qom.SameNodeJoinCondition) EquiJoinCondition(javax.jcr.query.qom.EquiJoinCondition) ChildNodeJoinCondition(javax.jcr.query.qom.ChildNodeJoinCondition) JoinCondition(javax.jcr.query.qom.JoinCondition) DescendantNodeJoinCondition(javax.jcr.query.qom.DescendantNodeJoinCondition)

Aggregations

Join (javax.jcr.query.qom.Join)4 ChildNodeJoinCondition (javax.jcr.query.qom.ChildNodeJoinCondition)2 QueryResult (javax.jcr.query.QueryResult)1 Constraint (javax.jcr.query.qom.Constraint)1 DescendantNodeJoinCondition (javax.jcr.query.qom.DescendantNodeJoinCondition)1 EquiJoinCondition (javax.jcr.query.qom.EquiJoinCondition)1 JoinCondition (javax.jcr.query.qom.JoinCondition)1 SameNodeJoinCondition (javax.jcr.query.qom.SameNodeJoinCondition)1 Selector (javax.jcr.query.qom.Selector)1 Source (javax.jcr.query.qom.Source)1 AbstractRepositoryTest (org.apache.jackrabbit.oak.jcr.AbstractRepositoryTest)1 Test (org.junit.Test)1