@Override public boolean visit(FullTextAnd and) { Iterator<FullTextExpression> iterator = and.list.iterator(); int index = 0; Cursor c = flatten(iterator.next(), plan, filter, state, path + " and(" + index + ")"); while (iterator.hasNext()) { index++; FullTextExpression input = iterator.next(); Cursor newC = flatten(input, plan, filter, state, path + " and(" + index + ")"); c = Cursors.newIntersectionCursor(c, newC, filter.getQueryLimits()); } result.set(c); return true; }
Cursor execute() { QueryLimits settings = filter.getQueryLimits(); List<Iterable<String>> iterables = Lists.newArrayList(); for (IndexStoreStrategy s : strategies) { iterables.add(s.query(filter, name, definition, values)); } Cursor cursor = Cursors.newPathCursor(Iterables.concat(iterables), settings); if (depth > 1) { cursor = Cursors.newAncestorCursor(cursor, depth - 1, settings); } return cursor; }
@Override public String next() { currentRow = it.next(); readCount++; if (readCount % TRAVERSING_WARNING == 0) { Cursors.checkReadLimit(readCount, settings); LOG.warn("Index-Traversed {} nodes with filter {}", readCount, filter); } return currentRow.path; }
@Override public Cursor query(Filter filter, NodeState rootState) { return Cursors.newPathCursor(collector.getResults(filter), filter.getQueryLimits()); }
@Override public Cursor query(Filter filter, NodeState root) { NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root, mountInfoProvider); if (!hasNodeTypeRestriction(filter) || !lookup.isIndexed(filter.getPath(), filter)) { throw new IllegalStateException( "NodeType index is used even when no index is available for filter " + filter); } return Cursors.newPathCursorDistinct(lookup.query(filter), filter.getQueryLimits()); }
@Override public Cursor query(Filter filter, NodeState rootState) { return Cursors.newTraversingCursor(filter, rootState); }
@Override public boolean visit(FullTextOr or) { final int[] index = new int[1]; List<Cursor> cursors = Lists.transform(or.list, new Function<FullTextExpression, Cursor>() { @Override public Cursor apply(FullTextExpression input) { return flatten(input, plan, filter, state, path + " or(" + index[0]++ + ")"); } }); result.set(Cursors.newConcatCursor(cursors, filter.getQueryLimits())); return true; } });
@Override public Cursor query(Filter filter, NodeState rootState) { return Cursors.newPathCursor(collector.getResults(filter), filter.getQueryLimits()); }
@Override public Cursor query(Filter filter, NodeState root) { NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root, mountInfoProvider); if (!hasNodeTypeRestriction(filter) || !lookup.isIndexed(filter.getPath(), filter)) { throw new IllegalStateException( "NodeType index is used even when no index is available for filter " + filter); } return Cursors.newPathCursorDistinct(lookup.query(filter), filter.getQueryLimits()); }
@Override public Cursor query(Filter filter, NodeState rootState) { return Cursors.newTraversingCursor(filter, rootState); }
@Override public boolean visit(FullTextOr or) { final int[] index = new int[1]; List<Cursor> cursors = Lists.transform(or.list, new Function<FullTextExpression, Cursor>() { @Override public Cursor apply(FullTextExpression input) { return flatten(input, plan, filter, state, path + " or(" + index[0]++ + ")"); } }); result.set(Cursors.newConcatCursor(cursors, filter.getQueryLimits())); return true; } });
@Override public Cursor query(Filter filter, NodeState rootState) { return Cursors.newPathCursor(collector.getResults(filter), filter.getQueryLimits()); }
Cursor execute() { if (deprecated) { LOG.warn("This index is deprecated: {}; it is used for query {}. " + "Please change the query or the index definitions.", name, filter); } QueryLimits settings = filter.getQueryLimits(); List<Iterable<String>> iterables = Lists.newArrayList(); for (IndexStoreStrategy s : strategies) { iterables.add(s.query(filter, name, definition, values)); } Cursor cursor = Cursors.newPathCursor(Iterables.concat(iterables), settings); if (depth > 1) { cursor = Cursors.newAncestorCursor(cursor, depth - 1, settings); } return cursor; }
@Override public boolean visit(FullTextAnd and) { Iterator<FullTextExpression> iterator = and.list.iterator(); int index = 0; Cursor c = flatten(iterator.next(), plan, filter, state, path + " and(" + index + ")"); while (iterator.hasNext()) { index++; FullTextExpression input = iterator.next(); Cursor newC = flatten(input, plan, filter, state, path + " and(" + index + ")"); c = Cursors.newIntersectionCursor(c, newC, filter.getQueryLimits()); } result.set(c); return true; }
@Override public String next() { currentRow = it.next(); readCount++; if (readCount % TRAVERSING_WARNING == 0) { Cursors.checkReadLimit(readCount, settings); LOG.warn("Index-Traversed {} nodes with filter {}", readCount, filter); } return currentRow.path; }
@Override public Cursor query(Filter filter, NodeState root) { NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root, mountInfoProvider); if (!hasNodeTypeRestriction(filter) || !lookup.isIndexed(filter.getPath(), filter)) { throw new IllegalStateException( "NodeType index is used even when no index is available for filter " + filter); } return Cursors.newPathCursorDistinct(lookup.query(filter), filter.getQueryLimits()); }
@Override public Cursor query(Filter filter, NodeState rootState) { return Cursors.newTraversingCursor(filter, rootState); }
@Override public boolean visit(FullTextOr or) { final int[] index = new int[1]; List<Cursor> cursors = Lists.transform(or.list, new Function<FullTextExpression, Cursor>() { @Override public Cursor apply(FullTextExpression input) { return flatten(input, plan, filter, state, path + " or(" + index[0]++ + ")"); } }); result.set(Cursors.newConcatCursor(cursors, filter.getQueryLimits())); return true; } });
private Cursor lookup(NodeState root, String uuid, final String name, String index, Filter filter) { NodeState indexRoot = root.getChildNode(INDEX_DEFINITIONS_NAME) .getChildNode(NAME); if (!indexRoot.exists()) { return newPathCursor(new ArrayList<String>(), filter.getQueryLimits()); } List<Iterable<String>> iterables = Lists.newArrayList(); for (IndexStoreStrategy s : getStrategies(indexRoot, mountInfoProvider, index)) { iterables.add(s.query(filter, index + "(" + uuid + ")", indexRoot, ImmutableSet.of(uuid))); } Iterable<String> paths = Iterables.concat(iterables); if (!"*".equals(name)) { paths = filter(paths, new Predicate<String>() { @Override public boolean apply(String path) { return name.equals(getName(path)); } }); } paths = transform(paths, new Function<String, String>() { @Override public String apply(String path) { return getParentPath(path); } }); return newPathCursor(paths, filter.getQueryLimits()); }
Cursor execute() { if (deprecated) { LOG.warn("This index is deprecated: {}; it is used for query {}. " + "Please change the query or the index definitions.", name, filter); } QueryLimits settings = filter.getQueryLimits(); List<Iterable<String>> iterables = Lists.newArrayList(); for (IndexStoreStrategy s : strategies) { iterables.add(s.query(filter, name, definition, values)); } Cursor cursor = Cursors.newPathCursor(Iterables.concat(iterables), settings); if (depth > 1) { cursor = Cursors.newAncestorCursor(cursor, depth - 1, settings); } return cursor; }