Search in sources :

Example 1 with Result

use of org.apache.jackrabbit.oak.api.Result in project jackrabbit-oak by apache.

the class QueryTest method queryOnStableRevision.

@Test
public void queryOnStableRevision() throws Exception {
    ContentSession s = repository.login(null, null);
    Root r = s.getLatestRoot();
    Tree t = r.getTree("/").addChild("test");
    t.addChild("node1").setProperty("jcr:primaryType", "nt:base");
    t.addChild("node2").setProperty("jcr:primaryType", "nt:base");
    t.addChild("node3").setProperty("jcr:primaryType", "nt:base");
    r.commit();
    ContentSession s2 = repository.login(null, null);
    Root r2 = s2.getLatestRoot();
    r.getTree("/test").getChild("node2").remove();
    r.commit();
    Result result = r2.getQueryEngine().executeQuery("test//element(*, nt:base)", Query.XPATH, QueryEngine.NO_BINDINGS, QueryEngine.NO_MAPPINGS);
    Set<String> paths = new HashSet<String>();
    for (ResultRow rr : result.getRows()) {
        paths.add(rr.getPath());
    }
    assertEquals(new HashSet<String>(Arrays.asList("/test/node1", "/test/node2", "/test/node3")), paths);
}
Also used : ResultRow(org.apache.jackrabbit.oak.api.ResultRow) Root(org.apache.jackrabbit.oak.api.Root) ContentSession(org.apache.jackrabbit.oak.api.ContentSession) Tree(org.apache.jackrabbit.oak.api.Tree) Result(org.apache.jackrabbit.oak.api.Result) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 2 with Result

use of org.apache.jackrabbit.oak.api.Result in project jackrabbit-oak by apache.

the class UserQueryManager method findAuthorizables.

@Nonnull
private Iterator<Authorizable> findAuthorizables(@Nonnull String statement, long limit, long offset, @Nullable AuthorizableType type) throws RepositoryException {
    try {
        Result query = root.getQueryEngine().executeQuery(statement, javax.jcr.query.Query.XPATH, limit, offset, NO_BINDINGS, namePathMapper.getSessionLocalMappings());
        Iterable<? extends ResultRow> resultRows = query.getRows();
        Iterator<Authorizable> authorizables = Iterators.transform(resultRows.iterator(), new ResultRowToAuthorizable(userManager, root, type));
        return Iterators.filter(authorizables, new UniqueResultPredicate());
    } catch (ParseException e) {
        log.warn("Invalid user query: " + statement, e);
        throw new RepositoryException(e);
    }
}
Also used : Authorizable(org.apache.jackrabbit.api.security.user.Authorizable) RepositoryException(javax.jcr.RepositoryException) ParseException(java.text.ParseException) Result(org.apache.jackrabbit.oak.api.Result) Nonnull(javax.annotation.Nonnull)

Example 3 with Result

use of org.apache.jackrabbit.oak.api.Result in project jackrabbit-oak by apache.

the class AbstractQueryTest method executeQuery.

protected List<String> executeQuery(String query, String language, boolean pathsOnly, boolean skipSort) {
    long time = System.currentTimeMillis();
    List<String> lines = new ArrayList<String>();
    try {
        Result result = executeQuery(query, language, NO_BINDINGS);
        for (ResultRow row : result.getRows()) {
            String r = readRow(row, pathsOnly);
            if (query.startsWith("explain ")) {
                r = formatPlan(r);
            }
            lines.add(r);
        }
        if (!query.contains("order by") && !skipSort) {
            Collections.sort(lines);
        }
    } catch (ParseException e) {
        lines.add(e.toString());
    } catch (IllegalArgumentException e) {
        lines.add(e.toString());
    }
    time = System.currentTimeMillis() - time;
    if (time > 5 * 60 * 1000 && !isDebugModeEnabled()) {
        // more than 5 minutes
        fail("Query took too long: " + query + " took " + time + " ms");
    }
    return lines;
}
Also used : ResultRow(org.apache.jackrabbit.oak.api.ResultRow) ArrayList(java.util.ArrayList) ParseException(java.text.ParseException) Result(org.apache.jackrabbit.oak.api.Result)

Example 4 with Result

use of org.apache.jackrabbit.oak.api.Result in project jackrabbit-oak by apache.

the class AbstractQueryTest method assertResultSize.

protected void assertResultSize(String query, String language, long expected) {
    long time = System.currentTimeMillis();
    try {
        Result result = executeQuery(query, language, NO_BINDINGS);
        // currently needed to iterate to really execute the query
        result.getRows().iterator().hasNext();
        long got = result.getSize(SizePrecision.APPROXIMATION, 0);
        assertEquals(expected, got);
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
    time = System.currentTimeMillis() - time;
    if (time > 10000 && !isDebugModeEnabled()) {
        fail("Query took too long: " + query + " took " + time + " ms");
    }
}
Also used : ParseException(java.text.ParseException) Result(org.apache.jackrabbit.oak.api.Result)

Example 5 with Result

use of org.apache.jackrabbit.oak.api.Result in project jackrabbit-oak by apache.

the class ContentRemoteSession method search.

@Override
public RemoteResults search(RemoteRevision revision, String query, String language, long offset, long limit) throws RemoteQueryParseException {
    ContentRemoteRevision contentRemoteRevision = null;
    if (revision instanceof ContentRemoteRevision) {
        contentRemoteRevision = (ContentRemoteRevision) revision;
    }
    if (contentRemoteRevision == null) {
        throw new IllegalArgumentException("invalid revision");
    }
    Root root = contentRemoteRevision.getRoot();
    if (query == null) {
        throw new IllegalArgumentException("query not provided");
    }
    if (language == null) {
        throw new IllegalArgumentException("language not provided");
    }
    if (!root.getQueryEngine().getSupportedQueryLanguages().contains(language)) {
        throw new IllegalArgumentException("language not supported");
    }
    if (offset < 0) {
        throw new IllegalArgumentException("invalid offset");
    }
    if (limit < 0) {
        throw new IllegalArgumentException("invalid limit");
    }
    Result results;
    try {
        results = root.getQueryEngine().executeQuery(query, language, limit, offset, new HashMap<String, PropertyValue>(), new HashMap<String, String>());
    } catch (ParseException e) {
        throw new RemoteQueryParseException("invalid query", e);
    }
    return new ContentRemoteResults(contentRemoteBinaries, results);
}
Also used : Root(org.apache.jackrabbit.oak.api.Root) PathUtils.denotesRoot(org.apache.jackrabbit.oak.commons.PathUtils.denotesRoot) HashMap(java.util.HashMap) RemoteQueryParseException(org.apache.jackrabbit.oak.remote.RemoteQueryParseException) ParseException(java.text.ParseException) RemoteQueryParseException(org.apache.jackrabbit.oak.remote.RemoteQueryParseException) Result(org.apache.jackrabbit.oak.api.Result)

Aggregations

Result (org.apache.jackrabbit.oak.api.Result)36 ResultRow (org.apache.jackrabbit.oak.api.ResultRow)23 Test (org.junit.Test)20 PropertyValue (org.apache.jackrabbit.oak.api.PropertyValue)15 Tree (org.apache.jackrabbit.oak.api.Tree)15 AbstractQueryTest (org.apache.jackrabbit.oak.query.AbstractQueryTest)13 ParseException (java.text.ParseException)10 Root (org.apache.jackrabbit.oak.api.Root)5 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)5 Nonnull (javax.annotation.Nonnull)4 ExtractionResult (org.apache.jackrabbit.oak.plugins.index.fulltext.ExtractedText.ExtractionResult)3 ArrayList (java.util.ArrayList)2 ContentSession (org.apache.jackrabbit.oak.api.ContentSession)2 QueryEngine (org.apache.jackrabbit.oak.api.QueryEngine)2 Lists.newArrayList (com.google.common.collect.Lists.newArrayList)1 Sets.newHashSet (com.google.common.collect.Sets.newHashSet)1 Closer (com.google.common.io.Closer)1 IOException (java.io.IOException)1 Principal (java.security.Principal)1 Collections (java.util.Collections)1