protected MatchEdgeTraverser createTraverser(OResult lastUpstreamRecord) { if (edge.edge.item instanceof OMultiMatchPathItem) { return new MatchMultiEdgeTraverser(lastUpstreamRecord, edge); } else if (edge.out) { return new MatchEdgeTraverser(lastUpstreamRecord, edge); } else { return new MatchReverseEdgeTraverser(lastUpstreamRecord, edge); } }
protected void init(OCommandContext ctx) { if (downstream == null) { Object startingElem = sourceRecord.getProperty(getStartingPointAlias()); if (startingElem instanceof OResult) { startingElem = ((OResult) startingElem).getElement().orElse(null); } downstream = executeTraversal(ctx, this.item, (OIdentifiable) startingElem, 0, null).iterator(); } }
public boolean hasNext(OCommandContext ctx) { init(ctx); return downstream.hasNext(); }
ORid targetRid = null; if (item.getFilter() != null) { filter = getTargetFilter(item); whileCondition = item.getFilter().getWhileCondition(); maxDepth = item.getFilter().getMaxDepth(); className = targetClassName(item, iCommandContext); String clusterName = targetClusterName(item, iCommandContext); if (clusterName != null) { clusterId = iCommandContext.getDatabase().getClusterIdByName(clusterName); targetRid = targetRid(item, iCommandContext); Iterable<OResultInternal> queryResult = traversePatternEdge(startingPoint, iCommandContext); final OWhereClause theFilter = filter; final String theClassName = className; iCommandContext.setVariable("$currentMatch", startingPoint); if (matchesFilters(iCommandContext, filter, startingPoint) && matchesClass(iCommandContext, className, startingPoint) && matchesCluster(iCommandContext, clusterId, startingPoint) && matchesRid(iCommandContext, targetRid, startingPoint)) { OResultInternal rs = new OResultInternal(startingPoint); Iterable<OResultInternal> queryResult = traversePatternEdge(startingPoint, iCommandContext); Iterable<OResultInternal> subResult = executeTraversal(iCommandContext, item, elem, depth + 1, newPath); if (subResult instanceof Collection) { ((List) result).addAll((Collection<? extends OResultInternal>) subResult);
public OResult next(OCommandContext ctx) { init(ctx); if (!downstream.hasNext()) { throw new IllegalStateException(); } String endPointAlias = getEndpointAlias(); OResultInternal nextR = downstream.next(); OIdentifiable nextElement = nextR.getElement().get(); Object prevValue = sourceRecord.getProperty(endPointAlias); if (prevValue != null && !equals(prevValue, nextElement)) { return null; } OResultInternal result = new OResultInternal(); for (String prop : sourceRecord.getPropertyNames()) { result.setProperty(prop, sourceRecord.getProperty(prop)); } result.setProperty(endPointAlias, toResult(nextElement)); if (edge.edge.item.getFilter().getDepthAlias() != null) { result.setProperty(edge.edge.item.getFilter().getDepthAlias(), nextR.getMetadata("$depth")); } if (edge.edge.item.getFilter().getPathAlias() != null) { result.setProperty(edge.edge.item.getFilter().getPathAlias(), nextR.getMetadata("$matchPath")); } return result; }
private void fetchNext(OCommandContext ctx, int nRecords) { nextResult = null; while (true) { if (traverser != null && traverser.hasNext(ctx)) { nextResult = traverser.next(ctx); break; } if (upstream == null || !upstream.hasNext()) { upstream = getPrev().get().syncPull(ctx, nRecords); } if (!upstream.hasNext()) { return; } lastUpstreamRecord = upstream.next(); traverser = createTraverser(lastUpstreamRecord); boolean found = false; while (traverser.hasNext(ctx)) { nextResult = traverser.next(ctx); if (nextResult != null) { found = true; break; } } if (found) { break; } } }
current = ((OResult) current).getElement().orElse(null); MatchEdgeTraverser subtraverser = new MatchEdgeTraverser(null, sub); subtraverser.executeTraversal(iCommandContext, sub, (OIdentifiable) current, 0, null).forEach(x -> rightSide.add(x));
String alias = getEndpointAlias(); Object matchedNodes = iCommandContext.getVariable(MatchPrefetchStep.PREFETCHED_MATCH_ALIAS_PREFIX + alias); if (matchedNodes != null) {
protected void init(OCommandContext ctx) { if (downstream == null) { super.init(ctx); if (!downstream.hasNext()) { List x = new ArrayList(); x.add(EMPTY_OPTIONAL); downstream = x.iterator(); } } }