@Override public Iterator<Entry> getNewIterator(int newLimit) { if (newLimit>sliceQuery.getLimit()) sliceQuery = sliceQuery.updateLimit(newLimit); return getBasicIterator(); } }
private Query relations(RelationCategory returnType) { // if (name==null) { // if (hasSingleType()) name = getSingleType().name(); // else if (!requiresName) name = QUERY_NAME_PREFIX + queries.size(); // else throw new IllegalStateException("Need to specify an explicit name for this query"); // } BaseVertexCentricQuery vq = super.constructQuery(returnType); List<SliceQuery> slices = new ArrayList<>(vq.numSubQueries()); for (int i = 0; i < vq.numSubQueries(); i++) { BackendQueryHolder<SliceQuery> bq = vq.getSubQuery(i); SliceQuery sq = bq.getBackendQuery(); slices.add(sq.updateLimit(bq.isFitted() ? vq.getLimit() : hardQueryLimit)); } Query q = new Query(slices, returnType); synchronized (queries) { Preconditions.checkArgument(!queries.contains(q), "Query has already been added: %s", q); queries.add(q); for (SliceQuery sq : slices) { inverseQueries.put(sq, q); } } return q; }
@Override public void process(StaticBuffer key, Map<SliceQuery, EntryList> entries, ScanMetrics metrics) { long vertexId = getVertexId(key); assert entries.get(VERTEX_EXISTS_QUERY)!=null; if (isGhostVertex(vertexId, entries.get(VERTEX_EXISTS_QUERY))) { metrics.incrementCustom(GHOST_VERTEX_COUNT); return; } JanusGraphVertex vertex = tx.getInternalVertex(vertexId); Preconditions.checkArgument(vertex instanceof PreloadedVertex, "The bounding transaction is not configured correctly"); PreloadedVertex v = (PreloadedVertex)vertex; v.setAccessCheck(PreloadedVertex.OPENSTAR_CHECK); for (Map.Entry<SliceQuery,EntryList> entry : entries.entrySet()) { SliceQuery sq = entry.getKey(); if (sq.equals(VERTEX_EXISTS_QUERY)) continue; EntryList entryList = entry.getValue(); if (entryList.size()>=sq.getLimit()) metrics.incrementCustom(TRUNCATED_ENTRY_LISTS); v.addToQueryCache(sq.updateLimit(Query.NO_LIMIT),entryList); } job.process(v, metrics); }