private static final boolean processAndStep(final AndStep<?> step, final Traversal.Admin<?, ?> traversal) { boolean process = true; for (final Traversal.Admin<?, ?> childTraversal : step.getLocalChildren()) { if (!TraversalHelper.hasAllStepsOfClass(childTraversal, FilterStep.class) || TraversalHelper.hasStepOfClass(childTraversal, DropStep.class, RangeGlobalStep.class, DedupGlobalStep.class, LambdaHolder.class)) { process = false; break; } } if (process) { final List<Traversal.Admin<?, ?>> childTraversals = (List) step.getLocalChildren(); Step<?, ?> finalStep = null; for (int i = childTraversals.size() - 1; i >= 0; i--) { final Traversal.Admin<?, ?> childTraversal = childTraversals.get(i); TraversalHelper.applySingleLevelStrategies(traversal, childTraversal, InlineFilterStrategy.class); if (null == finalStep) finalStep = childTraversal.getEndStep(); TraversalHelper.insertTraversal((Step) step, childTraversals.get(i), traversal); } if (null != finalStep) TraversalHelper.copyLabels(step, finalStep, false); traversal.removeStep(step); return true; } return false; }
private static final boolean processTraversalFilterStep(final TraversalFilterStep<?> step, final Traversal.Admin<?, ?> traversal) { final Traversal.Admin<?, ?> childTraversal = step.getLocalChildren().get(0); if (TraversalHelper.hasAllStepsOfClass(childTraversal, FilterStep.class) && !TraversalHelper.hasStepOfClass(childTraversal, DropStep.class, RangeGlobalStep.class, DedupGlobalStep.class, LambdaHolder.class)) { TraversalHelper.applySingleLevelStrategies(traversal, childTraversal, InlineFilterStrategy.class); final Step<?, ?> finalStep = childTraversal.getEndStep(); TraversalHelper.insertTraversal((Step) step, childTraversal, traversal); TraversalHelper.copyLabels(step, finalStep, false); traversal.removeStep(step); return true; } return false; }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!TraversalHelper.hasStepOfClass(MatchStep.class, traversal)) return; TraversalHelper.getStepsOfClass(MatchStep.class, traversal).forEach(matchStep -> { // match().select().where() --> match(where()).select() // match().select().dedup() --> match(dedup()).select() Step<?, ?> nextStep = matchStep.getNextStep(); while (nextStep instanceof WherePredicateStep || nextStep instanceof WhereTraversalStep || (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty()) || (nextStep instanceof SelectStep && ((SelectStep) nextStep).getLocalChildren().isEmpty()) || (nextStep instanceof SelectOneStep && ((SelectOneStep) nextStep).getLocalChildren().isEmpty())) { if (nextStep instanceof WherePredicateStep || nextStep instanceof WhereTraversalStep) { traversal.removeStep(nextStep); matchStep.addGlobalChild(traversal instanceof GraphTraversal ? new DefaultGraphTraversal<>().addStep(nextStep) : new DefaultTraversal<>().addStep(nextStep)); nextStep = matchStep.getNextStep(); } else if (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty() && !TraversalHelper.onGraphComputer(traversal)) { traversal.removeStep(nextStep); matchStep.setDedupLabels(((DedupGlobalStep<?>) nextStep).getScopeKeys()); nextStep = matchStep.getNextStep(); } else if (nextStep.getLabels().isEmpty()) { nextStep = nextStep.getNextStep(); } else break; } }); }
if (TraversalHelper.hasStepOfClass(ProfileSideEffectStep.class, traversal) && !(endStep instanceof ProfileSideEffectStep || (endStep instanceof SideEffectCapStep && endStep.getPreviousStep() instanceof ProfileSideEffectStep) ||
@Override public void apply(Traversal.Admin<?, ?> traversal) { if (TraversalHelper.hasStepOfClass(MatchStep.class, traversal) || TraversalHelper.hasStepOfClass(MatchStep.MatchStartStep.class, traversal)) return; TraversalHelper.getStepsOfClass(WhereTraversalStep.class, traversal).forEach(whereTraversalStep -> { Traversal.Admin innerWhereTraversal = ((Traversal) whereTraversalStep.getLocalChildren().get(0)).asAdmin(); TraversalHelper.getStepsOfClass(WhereTraversalStep.WhereStartStep.class, innerWhereTraversal).forEach(whereStartStep -> { Iterator<String> iterator = whereStartStep.getScopeKeys().iterator(); String selectKey = null; if (iterator.hasNext()) selectKey = iterator.next(); UniGraphWhereTraversalStep.UniGraphWhereStartStep uniGraphWhereStartStep = new UniGraphWhereTraversalStep.UniGraphWhereStartStep(innerWhereTraversal, selectKey); TraversalHelper.replaceStep(whereStartStep, uniGraphWhereStartStep, innerWhereTraversal); }); TraversalHelper.getStepsOfClass(WhereTraversalStep.WhereEndStep.class, innerWhereTraversal).forEach(whereEndStep -> { UniGraphWhereTraversalStep.UniGraphWhereEndStep uniGraphWhereEndStep = new UniGraphWhereTraversalStep.UniGraphWhereEndStep(innerWhereTraversal, whereEndStep.getScopeKeys().iterator().next().toString()); TraversalHelper.replaceStep(whereEndStep, uniGraphWhereEndStep, innerWhereTraversal); }); UniGraphWhereTraversalStep uniGraphWhereTraversalStep = new UniGraphWhereTraversalStep(traversal, innerWhereTraversal); TraversalHelper.replaceStep(whereTraversalStep, uniGraphWhereTraversalStep, traversal); }); } }
private static final boolean processAndStep(final AndStep<?> step, final Traversal.Admin<?, ?> traversal) { boolean process = true; for (final Traversal.Admin<?, ?> childTraversal : step.getLocalChildren()) { if (!TraversalHelper.hasAllStepsOfClass(childTraversal, FilterStep.class) || TraversalHelper.hasStepOfClass(childTraversal, DropStep.class, RangeGlobalStep.class, DedupGlobalStep.class, LambdaHolder.class)) { process = false; break; } } if (process) { final List<Traversal.Admin<?, ?>> childTraversals = (List) step.getLocalChildren(); Step<?, ?> finalStep = null; for (int i = childTraversals.size() - 1; i >= 0; i--) { final Traversal.Admin<?, ?> childTraversal = childTraversals.get(i); TraversalHelper.applySingleLevelStrategies(traversal, childTraversal, InlineFilterStrategy.class); if (null == finalStep) finalStep = childTraversal.getEndStep(); TraversalHelper.insertTraversal((Step) step, childTraversals.get(i), traversal); } if (null != finalStep) TraversalHelper.copyLabels(step, finalStep, false); traversal.removeStep(step); return true; } return false; }
private static final boolean processTraversalFilterStep(final TraversalFilterStep<?> step, final Traversal.Admin<?, ?> traversal) { final Traversal.Admin<?, ?> childTraversal = step.getLocalChildren().get(0); if (TraversalHelper.hasAllStepsOfClass(childTraversal, FilterStep.class) && !TraversalHelper.hasStepOfClass(childTraversal, DropStep.class, RangeGlobalStep.class, DedupGlobalStep.class, LambdaHolder.class)) { TraversalHelper.applySingleLevelStrategies(traversal, childTraversal, InlineFilterStrategy.class); final Step<?, ?> finalStep = childTraversal.getEndStep(); TraversalHelper.insertTraversal((Step) step, childTraversal, traversal); TraversalHelper.copyLabels(step, finalStep, false); traversal.removeStep(step); return true; } return false; }
@Override public void apply(Traversal.Admin<?, ?> traversal) { if (TraversalHelper.onGraphComputer(traversal)) return; Graph graph = traversal.getGraph().get(); if (!(graph instanceof UniGraph)) { return; } UniGraph uniGraph = (UniGraph) graph; TraversalHelper.getStepsOfClass(RepeatStep.class, traversal).forEach(repeatStep -> { if (TraversalHelper.hasStepOfClass(UnionStep.class, (Traversal.Admin) repeatStep.getGlobalChildren().get(0))) { return; } UniGraphRepeatStep uniGraphRepeatStep = new UniGraphRepeatStep(repeatStep, traversal.asAdmin(), uniGraph); if (repeatStep.getUntilTraversal() != null && TraversalHelper.getFirstStepOfAssignableClass(ReducingBarrierStep.class, repeatStep.getUntilTraversal()).isPresent()) return; Traversal.Admin<?, ?> repeatTraversal = uniGraphRepeatStep.getRepeatTraversal(); TraversalHelper.replaceStep(repeatStep, uniGraphRepeatStep, traversal); TraversalHelper.getStepsOfClass(RepeatStep.RepeatEndStep.class, repeatTraversal).forEach(repeatEndStep -> { UniGraphRepeatStep.RepeatEndStep uniGraphRepeatEndStep = new UniGraphRepeatStep.RepeatEndStep(repeatTraversal, uniGraphRepeatStep); TraversalHelper.replaceStep(repeatEndStep, uniGraphRepeatEndStep, repeatTraversal); }); }); } }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!TraversalHelper.hasStepOfClass(MatchStep.class, traversal)) return; TraversalHelper.getStepsOfClass(MatchStep.class, traversal).forEach(matchStep -> { // match().select().where() --> match(where()).select() // match().select().dedup() --> match(dedup()).select() Step<?, ?> nextStep = matchStep.getNextStep(); while (nextStep instanceof WherePredicateStep || nextStep instanceof WhereTraversalStep || (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty()) || (nextStep instanceof SelectStep && ((SelectStep) nextStep).getLocalChildren().isEmpty()) || (nextStep instanceof SelectOneStep && ((SelectOneStep) nextStep).getLocalChildren().isEmpty())) { if (nextStep instanceof WherePredicateStep || nextStep instanceof WhereTraversalStep) { traversal.removeStep(nextStep); matchStep.addGlobalChild(traversal instanceof GraphTraversal ? new DefaultGraphTraversal<>().addStep(nextStep) : new DefaultTraversal<>().addStep(nextStep)); nextStep = matchStep.getNextStep(); } else if (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty() && !TraversalHelper.onGraphComputer(traversal)) { traversal.removeStep(nextStep); matchStep.setDedupLabels(((DedupGlobalStep<?>) nextStep).getScopeKeys()); nextStep = matchStep.getNextStep(); } else if (nextStep.getLabels().isEmpty()) { nextStep = nextStep.getNextStep(); } else break; } }); }
if (propertyFetchers != null) { propertyFetchers.forEach(propertyFetcher -> { if ((traversal.getParent() instanceof ConnectiveStep) || TraversalHelper.hasStepOfClass(MatchStep.MatchStartStep.class, traversal)) { propertyFetcher.fetchAllKeys(); } else orderGlobalStep.getLocalChildren().forEach(t -> { if (propertyFetchers != null) { propertyFetchers.forEach(propertyFetcher -> { if ((traversal.getParent() instanceof ConnectiveStep) || TraversalHelper.hasStepOfClass(MatchStep.MatchStartStep.class, traversal)) { propertyFetcher.fetchAllKeys(); } else if (dedupGlobalStep.getLocalChildren().size() > 0) if (propertyFetchers != null) { propertyFetchers.forEach(propertyFetcher -> { if ((traversal.getParent() instanceof ConnectiveStep) || TraversalHelper.hasStepOfClass(MatchStep.MatchStartStep.class, traversal)) { propertyFetcher.fetchAllKeys(); } else if (propertyFetchers != null) { propertyFetchers.forEach(propertyFetcher -> { if ((traversal.getParent() instanceof ConnectiveStep) || TraversalHelper.hasStepOfClass(MatchStep.MatchStartStep.class, traversal)) { propertyFetcher.fetchAllKeys(); } else if (propertyFetchers != null) { propertyFetchers.forEach(propertyFetcher -> { if ((traversal.getParent() instanceof ConnectiveStep) || TraversalHelper.hasStepOfClass(MatchStep.MatchStartStep.class, traversal)) { propertyFetcher.fetchAllKeys(); } else {
if (TraversalHelper.hasStepOfClass(ProfileSideEffectStep.class, traversal) && !(endStep instanceof ProfileSideEffectStep || (endStep instanceof SideEffectCapStep && endStep.getPreviousStep() instanceof ProfileSideEffectStep) ||