variables.add(Scoping.Variable.END); } else if (endStep instanceof WhereTraversalStep.WhereEndStep) { if (!((WhereTraversalStep.WhereEndStep) endStep).getScopeKeys().isEmpty()) variables.add(Scoping.Variable.END); } else if (endStep instanceof MatchStep.MatchEndStep) {
private void configureStartAndEndSteps(final Traversal.Admin<?, ?> whereTraversal) { ConnectiveStrategy.instance().apply(whereTraversal); //// START STEP to WhereStartStep final Step<?, ?> startStep = whereTraversal.getStartStep(); if (startStep instanceof ConnectiveStep || startStep instanceof NotStep) { // for conjunction- and not-steps ((TraversalParent) startStep).getLocalChildren().forEach(this::configureStartAndEndSteps); } else if (StartStep.isVariableStartStep(startStep)) { // as("a").out()... traversals final String label = startStep.getLabels().iterator().next(); this.scopeKeys.add(label); TraversalHelper.replaceStep(startStep, new WhereStartStep(whereTraversal, label), whereTraversal); } else if (!whereTraversal.getEndStep().getLabels().isEmpty()) { // ...out().as("a") traversals TraversalHelper.insertBeforeStep(new WhereStartStep(whereTraversal, null), (Step) startStep, whereTraversal); } //// END STEP to WhereEndStep final Step<?, ?> endStep = whereTraversal.getEndStep(); if (!endStep.getLabels().isEmpty()) { if (endStep.getLabels().size() > 1) throw new IllegalArgumentException("The end step of a where()-traversal can only have one label: " + endStep); final String label = endStep.getLabels().iterator().next(); this.scopeKeys.add(label); endStep.removeLabel(label); whereTraversal.addStep(new WhereEndStep(whereTraversal, label)); } }
variables.add(Scoping.Variable.END); } else if (endStep instanceof WhereTraversalStep.WhereEndStep) { if (!((WhereTraversalStep.WhereEndStep) endStep).getScopeKeys().isEmpty()) variables.add(Scoping.Variable.END); } else if (endStep instanceof MatchStep.MatchEndStep) {
@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 void configureStartAndEndSteps(final Traversal.Admin<?, ?> whereTraversal) { ConnectiveStrategy.instance().apply(whereTraversal); //// START STEP to WhereStartStep final Step<?, ?> startStep = whereTraversal.getStartStep(); if (startStep instanceof ConnectiveStep || startStep instanceof NotStep) { // for conjunction- and not-steps ((TraversalParent) startStep).getLocalChildren().forEach(this::configureStartAndEndSteps); } else if (StartStep.isVariableStartStep(startStep)) { // as("a").out()... traversals final String label = startStep.getLabels().iterator().next(); this.scopeKeys.add(label); TraversalHelper.replaceStep(startStep, new WhereStartStep(whereTraversal, label), whereTraversal); } else if (!whereTraversal.getEndStep().getLabels().isEmpty()) { // ...out().as("a") traversals TraversalHelper.insertBeforeStep(new WhereStartStep(whereTraversal, null), (Step) startStep, whereTraversal); } //// END STEP to WhereEndStep final Step<?, ?> endStep = whereTraversal.getEndStep(); if (!endStep.getLabels().isEmpty()) { if (endStep.getLabels().size() > 1) throw new IllegalArgumentException("The end step of a where()-traversal can only have one label: " + endStep); final String label = endStep.getLabels().iterator().next(); this.scopeKeys.add(label); endStep.removeLabel(label); whereTraversal.addStep(new WhereEndStep(whereTraversal, label)); } }
SqlgWhereStartStep(final Traversal.Admin traversal, final String selectKey) { super(traversal); this.selectKey = selectKey; }
public void processStartTraverser(final Traverser.Admin traverser) { if (null != this.matchKey) this.matchValue = this.getScopeValue(Pop.last, this.matchKey, traverser); }
SqlgWhereStartStep(final Traversal.Admin traversal, final String selectKey) { super(traversal); this.selectKey = selectKey; }
@Override protected Object map(final Traverser.Admin<S> traverser) { if (this.getTraversal().getEndStep() instanceof WhereEndStep) ((WhereEndStep) this.getTraversal().getEndStep()).processStartTraverser(traverser); else if (this.getTraversal().getEndStep() instanceof ProfileStep && this.getTraversal().getEndStep().getPreviousStep() instanceof WhereEndStep) // TOTAL SUCKY HACK! ((WhereEndStep) this.getTraversal().getEndStep().getPreviousStep()).processStartTraverser(traverser); return null == this.selectKey ? traverser.get() : this.getScopeValue(Pop.last, this.selectKey, traverser); }
public void processStartTraverser(final Traverser.Admin traverser) { if (null != this.matchKey) this.matchValue = this.getScopeValue(Pop.last, this.matchKey, traverser); }
@Override protected Object map(final Traverser.Admin<S> traverser) { if (this.getTraversal().getEndStep() instanceof WhereEndStep) ((WhereEndStep) this.getTraversal().getEndStep()).processStartTraverser(traverser); else if (this.getTraversal().getEndStep() instanceof ProfileStep && this.getTraversal().getEndStep().getPreviousStep() instanceof WhereEndStep) // TOTAL SUCKY HACK! ((WhereEndStep) this.getTraversal().getEndStep().getPreviousStep()).processStartTraverser(traverser); return null == this.selectKey ? traverser.get() : this.getScopeValue(Pop.last, this.selectKey, traverser); }