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);
}
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);
}
}
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;
}
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");
}
}
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);
}
Aggregations