final SelectOneStep<?, ?> selectOneStep = new SelectOneStep<>(traversal, Pop.last, whereStartStep.getScopeKeys().iterator().next()); traversal.addStep(index, selectOneStep); final String generatedLabel = PathProcessorStrategy.generateLabel(); if (selectOneStep.getPreviousStep() instanceof EmptyStep) { TraversalHelper.insertBeforeStep(new IdentityStep<>(traversal), selectOneStep, traversal); index++; selectOneStep.getPreviousStep().addLabel(generatedLabel); TraversalHelper.insertAfterStep(new SelectOneStep<>(traversal, Pop.last, generatedLabel), whereTraversalStep, traversal); whereStartStep.removeScopeKey(); int counter = 0; for (final Map.Entry<String, Traversal.Admin<Object, Object>> entry : byTraversals.entrySet()) { final SelectOneStep selectOneStep = new SelectOneStep(traversal, selectStep.getPop(), entry.getKey()); final TraversalMapStep<?, ?> mapStep = new TraversalMapStep<>(traversal, entry.getValue().clone()); mapStep.addLabel(entry.getKey()); if (selectOneStep.getPop() != Pop.all && selectOneStep.getPop() != Pop.mixed && // TODO: necessary? selectOneStep.getMaxRequirement().compareTo(PathProcessor.ElementRequirement.ID) > 0 && labelCount(selectOneStep.getScopeKeys().iterator().next(), TraversalHelper.getRootTraversal(traversal)) <= 1) { final int index = TraversalHelper.stepIndex(selectOneStep, traversal); final Traversal.Admin<?, ?> localChild = selectOneStep.getLocalChildren().get(0); selectOneStep.removeLocalChild(localChild); final TraversalMapStep<?, ?> mapStep = new TraversalMapStep<>(traversal, localChild.clone()); traversal.addStep(index + 1, mapStep);
@Override protected E map(final Traverser.Admin<S> traverser) { final E end = this.getNullableScopeValue(this.pop, this.selectKey, traverser); return null != end ? TraversalUtil.applyNullable((S) end, this.selectTraversal) : null; }
@Override public Set<TraverserRequirement> getRequirements() { return this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.SIDE_EFFECTS); }
Preconditions.checkState(selectOneStep.getScopeKeys().size() == 1, "toOrderByClause expects the selectOneStep to have one scopeKey!"); Preconditions.checkState(selectOneStep.getLocalChildren().size() == 1, "toOrderByClause expects the selectOneStep to have one traversal!"); Preconditions.checkState( selectOneStep.getLocalChildren().get(0) instanceof ElementValueTraversal || selectOneStep.getLocalChildren().get(0) instanceof TokenTraversal String selectKey = (String) selectOneStep.getScopeKeys().iterator().next(); if (!labels.contains(selectKey)) { return true;
if (previousStep instanceof SelectOneStep) { SelectOneStep selectOneStep = (SelectOneStep) previousStep; String key = (String) selectOneStep.getScopeKeys().iterator().next(); this.currentReplacedStep.getSqlgComparatorHolder().setPrecedingSelectOneLabel(key); @SuppressWarnings("unchecked")
@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; } }); }
/** * Map the {@link Traverser} to the object specified by the {@code selectKey} and apply the {@link Pop} operation * to it. * * @param selectKey the key to project * @return the traversal with an appended {@link SelectStep}. * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#select-step" target="_blank">Reference Documentation - Select Step</a> * @since 3.0.0-incubating */ public default <E2> GraphTraversal<S, E2> select(final Pop pop, final String selectKey) { this.asAdmin().getBytecode().addStep(Symbols.select, pop, selectKey); return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), pop, selectKey)); }
@Override protected Traverser.Admin<E> processNextStart() { final Traverser.Admin<E> traverser = super.processNextStart(); if (!(this.getTraversal().getParent() instanceof MatchStep)) { PathProcessor.processTraverserPathLabels(traverser, this.keepLabels); } return traverser; } }
Preconditions.checkState(selectOneStep.getScopeKeys().size() == 1, "toOrderByClause expects the selectOneStep to have one scopeKey!"); Preconditions.checkState(selectOneStep.getLocalChildren().size() == 1, "toOrderByClause expects the selectOneStep to have one traversal!"); Preconditions.checkState( selectOneStep.getLocalChildren().get(0) instanceof ElementValueTraversal || selectOneStep.getLocalChildren().get(0) instanceof TokenTraversal String selectKey = (String) selectOneStep.getScopeKeys().iterator().next(); if (!labels.contains(selectKey)) { return true;
if (previousStep instanceof SelectOneStep) { SelectOneStep selectOneStep = (SelectOneStep) previousStep; String key = (String) selectOneStep.getScopeKeys().iterator().next(); this.currentReplacedStep.getSqlgComparatorHolder().setPrecedingSelectOneLabel(key); @SuppressWarnings("unchecked")
@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; } }); }
/** * Map the {@link Traverser} to the object specified by the {@code selectKey}. Note that unlike other uses of * {@code select} where there are multiple keys, this use of {@code select} with a single key does not produce a * {@code Map}. * * @param selectKey the key to project * @return the traversal with an appended {@link SelectStep}. * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#select-step" target="_blank">Reference Documentation - Select Step</a> * @since 3.0.0-incubating */ public default <E2> GraphTraversal<S, E2> select(final String selectKey) { this.asAdmin().getBytecode().addStep(Symbols.select, selectKey); return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), Pop.last, selectKey)); }
@Override protected Traverser.Admin<E> processNextStart() { final Traverser.Admin<E> traverser = super.processNextStart(); if (!(this.getTraversal().getParent() instanceof MatchStep)) { PathProcessor.processTraverserPathLabels(traverser, this.keepLabels); } return traverser; } }
final SelectOneStep<?, ?> selectOneStep = new SelectOneStep<>(traversal, Pop.last, whereStartStep.getScopeKeys().iterator().next()); traversal.addStep(index, selectOneStep); final String generatedLabel = PathProcessorStrategy.generateLabel(); if (selectOneStep.getPreviousStep() instanceof EmptyStep) { TraversalHelper.insertBeforeStep(new IdentityStep<>(traversal), selectOneStep, traversal); index++; selectOneStep.getPreviousStep().addLabel(generatedLabel); TraversalHelper.insertAfterStep(new SelectOneStep<>(traversal, Pop.last, generatedLabel), whereTraversalStep, traversal); whereStartStep.removeScopeKey(); int counter = 0; for (final Map.Entry<String, Traversal.Admin<Object, Object>> entry : byTraversals.entrySet()) { final SelectOneStep selectOneStep = new SelectOneStep(traversal, selectStep.getPop(), entry.getKey()); final TraversalMapStep<?, ?> mapStep = new TraversalMapStep<>(traversal, entry.getValue().clone()); mapStep.addLabel(entry.getKey()); if (selectOneStep.getPop() != Pop.all && selectOneStep.getPop() != Pop.mixed && // TODO: necessary? selectOneStep.getMaxRequirement().compareTo(PathProcessor.ElementRequirement.ID) > 0 && labelCount(selectOneStep.getScopeKeys().iterator().next(), TraversalHelper.getRootTraversal(traversal)) <= 1) { final int index = TraversalHelper.stepIndex(selectOneStep, traversal); final Traversal.Admin<?, ?> localChild = selectOneStep.getLocalChildren().get(0); selectOneStep.removeLocalChild(localChild); final TraversalMapStep<?, ?> mapStep = new TraversalMapStep<>(traversal, localChild.clone()); traversal.addStep(index + 1, mapStep);
Preconditions.checkState(selectOneStep.getScopeKeys().size() == 1, "toOrderByClause expects the selectOneStep to have one scopeKey!"); Preconditions.checkState(selectOneStep.getLocalChildren().size() == 1, "toOrderByClause expects the selectOneStep to have one traversal!"); Preconditions.checkState( selectOneStep.getLocalChildren().get(0) instanceof ElementValueTraversal || selectOneStep.getLocalChildren().get(0) instanceof TokenTraversal, "toOrderByClause expects the selectOneStep's traversal to be a ElementValueTraversal or a TokenTraversal!"); String selectKey = (String) selectOneStep.getScopeKeys().iterator().next(); SqlgElement sqlgElementSelect = traverser.path().get(selectKey); Traversal.Admin<?, ?> t = (Traversal.Admin<?, ?>) selectOneStep.getLocalChildren().get(0); if (t instanceof ElementValueTraversal) { ElementValueTraversal elementValueTraversal = (ElementValueTraversal) t;
String key = (String) selectOneStep.getScopeKeys().iterator().next(); if (stepIterator.hasNext()) { Step<?, ?> next = stepIterator.next();
/** * Map the {@link Traverser} to the object specified by the {@code selectKey} and apply the {@link Pop} operation * to it. * * @param selectKey the key to project * @return the traversal with an appended {@link SelectStep}. * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#select-step" target="_blank">Reference Documentation - Select Step</a> * @since 3.0.0-incubating */ public default <E2> GraphTraversal<S, E2> select(final Pop pop, final String selectKey) { this.asAdmin().getBytecode().addStep(Symbols.select, pop, selectKey); return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), pop, selectKey)); }
@Override protected E map(final Traverser.Admin<S> traverser) { final E end = this.getNullableScopeValue(this.pop, this.selectKey, traverser); return null != end ? TraversalUtil.applyNullable((S) end, this.selectTraversal) : null; }
@Override public Set<TraverserRequirement> getRequirements() { return this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.SIDE_EFFECTS); }
Preconditions.checkState(selectOneStep.getScopeKeys().size() == 1, "toOrderByClause expects the selectOneStep to have one scopeKey!"); Preconditions.checkState(selectOneStep.getLocalChildren().size() == 1, "toOrderByClause expects the selectOneStep to have one traversal!"); Preconditions.checkState( selectOneStep.getLocalChildren().get(0) instanceof ElementValueTraversal || selectOneStep.getLocalChildren().get(0) instanceof TokenTraversal, "toOrderByClause expects the selectOneStep's traversal to be a ElementValueTraversal or a TokenTraversal!"); String selectKey = (String) selectOneStep.getScopeKeys().iterator().next(); SqlgElement sqlgElementSelect = traverser.path().get(selectKey); Traversal.Admin<?, ?> t = (Traversal.Admin<?, ?>) selectOneStep.getLocalChildren().get(0); if (t instanceof ElementValueTraversal) { ElementValueTraversal elementValueTraversal = (ElementValueTraversal) t;