new HasStep(traversal, HasContainer.makeHasContainers(ImplicitKey.ADJACENT_ID.name(), P.eq(vertex))), traversal);
private static final boolean processHasStep(final HasStep<?> step, final Traversal.Admin<?, ?> traversal) { if (step.getPreviousStep() instanceof HasStep) { final HasStep<?> previousStep = (HasStep<?>) step.getPreviousStep(); for (final HasContainer hasContainer : step.getHasContainers()) { previousStep.addHasContainer(hasContainer); } else if (step.getPreviousStep() instanceof VertexStep && ((VertexStep) step.getPreviousStep()).returnsEdge() && 0 == ((VertexStep) step.getPreviousStep()).getEdgeLabels().length) { final VertexStep<Edge> previousStep = (VertexStep<Edge>) step.getPreviousStep(); final List<String> edgeLabels = new ArrayList<>(); for (final HasContainer hasContainer : new ArrayList<>(step.getHasContainers())) { if (hasContainer.getKey().equals(T.label.getAccessor())) { if (hasContainer.getBiPredicate() == Compare.eq && edgeLabels.isEmpty()) { edgeLabels.add((String) hasContainer.getValue()); step.removeHasContainer(hasContainer); } else if (hasContainer.getBiPredicate() == Contains.within && hasContainer.getValue() instanceof Collection && ((Collection) hasContainer.getValue()).containsAll(edgeLabels)) { edgeLabels.addAll((Collection<String>) hasContainer.getValue()); step.removeHasContainer(hasContainer); } else if (hasContainer.getPredicate() instanceof OrP && edgeLabels.isEmpty()) { boolean removeContainer = true; step.removeHasContainer(hasContainer); TraversalHelper.replaceStep(previousStep, newVertexStep, traversal); TraversalHelper.copyLabels(previousStep, newVertexStep, false);
@Override public void apply(final Traversal.Admin<?, ?> traversal) { TraversalHelper.getStepsOfAssignableClass(HasStep.class, traversal).stream() .filter(hasStep -> ((HasStep<?>) hasStep).getHasContainers().get(0).getKey().equals(T.id.getAccessor())) .forEach(hasStep -> ((HasStep<?>) hasStep).getHasContainers().get(0).setKey(this.idPropertyKey)); ((HasContainerHolder) graphStep).addHasContainer(new HasContainer(this.idPropertyKey, P.within(Arrays.asList(graphStep.getIds())))); else TraversalHelper.insertAfterStep(new HasStep(traversal, new HasContainer(this.idPropertyKey, P.within(Arrays.asList(graphStep.getIds())))), graphStep, traversal); graphStep.clearIds();
if (childStep instanceof HasStep) { P p = null; for (final HasContainer hasContainer : ((HasStep<?>) childStep).getHasContainers()) { if (null == key) key = hasContainer.getKey(); final HasStep hasStep = new HasStep<>(traversal, new HasContainer(key, predicate)); TraversalHelper.replaceStep(step, hasStep, traversal); TraversalHelper.copyLabels(step, hasStep, false); for (final String label : labels) { hasStep.addLabel(label);
@Override public void apply(final Traversal.Admin<?, ?> traversal) { //Only optimize SqlgGraph. StarGraph also passes through here. if (!(traversal.getGraph().orElseThrow(IllegalStateException::new) instanceof SqlgGraph)) { return; } if (!SqlgTraversalUtil.mayOptimize(traversal)) { return; } List<HasStep> hasSteps = TraversalHelper.getStepsOfAssignableClass(HasStep.class, traversal); for (HasStep<?> hasStep : hasSteps) { List<HasContainer> hasContainers = new ArrayList<>(hasStep.getHasContainers()); SqlgHasStep sqlgHasStep = new SqlgHasStep( hasStep.getTraversal(), hasContainers.toArray(new HasContainer[]{}) ); for (String label : hasStep.getLabels()) { sqlgHasStep.addLabel(label); } //noinspection unchecked TraversalHelper.replaceStep( hasStep, sqlgHasStep, hasStep.getTraversal() ); } }
HasStep hasStep = (HasStep) traversal.getSteps().get(0); this.untilHasContainers = hasStep.getHasContainers(); if (this.untilHasContainers.size() == 1) { this.untilHasContainer = this.untilHasContainers.get(0);
@Override public HasStep<S> clone() { final HasStep<S> clone = (HasStep<S>) super.clone(); clone.hasContainers = new ArrayList<>(); for (final HasContainer hasContainer : this.hasContainers) { clone.addHasContainer(hasContainer.clone()); } return clone; }
new HasStep(traversal, new HasContainer(partitionKey, P.within(new ArrayList<>(readPartitions)))), step, traversal)); if (!(next instanceof HasStep) || !((HasContainer) ((HasStep) next).getHasContainers().get(0)).getKey().equals(partitionKey)) {
for (final HasContainer hasContainer : ((HasStep<?>) childStep).getHasContainers()) { if (null == key) key = hasContainer.getKey(); final HasStep hasStep = new HasStep<>(traversal, new HasContainer(key, predicate)); TraversalHelper.replaceStep(step, hasStep, traversal); TraversalHelper.copyLabels(step, hasStep, false); for (final String label : labels) { hasStep.addLabel(label);
@Override public void apply(final Traversal.Admin<?, ?> traversal) { //Only optimize SqlgGraph. StarGraph also passes through here. if (!(traversal.getGraph().orElseThrow(IllegalStateException::new) instanceof SqlgGraph)) { return; } if (!SqlgTraversalUtil.mayOptimize(traversal)) { return; } List<HasStep> hasSteps = TraversalHelper.getStepsOfAssignableClass(HasStep.class, traversal); for (HasStep<?> hasStep : hasSteps) { List<HasContainer> hasContainers = new ArrayList<>(hasStep.getHasContainers()); SqlgHasStep sqlgHasStep = new SqlgHasStep( hasStep.getTraversal(), hasContainers.toArray(new HasContainer[]{}) ); for (String label : hasStep.getLabels()) { sqlgHasStep.addLabel(label); } //noinspection unchecked TraversalHelper.replaceStep( hasStep, sqlgHasStep, hasStep.getTraversal() ); } }
HasStep hasStep = (HasStep) traversal.getSteps().get(0); this.untilHasContainers = hasStep.getHasContainers(); if (this.untilHasContainers.size() == 1) { this.untilHasContainer = this.untilHasContainers.get(0);
@Override public HasStep<S> clone() { final HasStep<S> clone = (HasStep<S>) super.clone(); clone.hasContainers = new ArrayList<>(); for (final HasContainer hasContainer : this.hasContainers) { clone.addHasContainer(hasContainer.clone()); } return clone; }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { TraversalHelper.getStepsOfAssignableClass(HasStep.class, traversal).stream() .filter(hasStep -> ((HasStep<?>) hasStep).getHasContainers().get(0).getKey().equals(T.id.getAccessor())) .forEach(hasStep -> ((HasStep<?>) hasStep).getHasContainers().get(0).setKey(this.idPropertyKey)); ((HasContainerHolder) graphStep).addHasContainer(new HasContainer(this.idPropertyKey, P.within(Arrays.asList(graphStep.getIds())))); else TraversalHelper.insertAfterStep(new HasStep(traversal, new HasContainer(this.idPropertyKey, P.within(Arrays.asList(graphStep.getIds())))), graphStep, traversal); graphStep.clearIds();
new HasStep(traversal, HasContainer.makeHasContainers(ImplicitKey.ADJACENT_ID.name(), P.eq(vertex))), traversal);
private static final boolean processHasStep(final HasStep<?> step, final Traversal.Admin<?, ?> traversal) { if (step.getPreviousStep() instanceof HasStep) { final HasStep<?> previousStep = (HasStep<?>) step.getPreviousStep(); for (final HasContainer hasContainer : step.getHasContainers()) { previousStep.addHasContainer(hasContainer); } else if (step.getPreviousStep() instanceof VertexStep && ((VertexStep) step.getPreviousStep()).returnsEdge() && 0 == ((VertexStep) step.getPreviousStep()).getEdgeLabels().length) { final VertexStep<Edge> previousStep = (VertexStep<Edge>) step.getPreviousStep(); final List<String> edgeLabels = new ArrayList<>(); for (final HasContainer hasContainer : new ArrayList<>(step.getHasContainers())) { if (hasContainer.getKey().equals(T.label.getAccessor())) { if (hasContainer.getBiPredicate() == Compare.eq && edgeLabels.isEmpty()) { edgeLabels.add((String) hasContainer.getValue()); step.removeHasContainer(hasContainer); } else if (hasContainer.getBiPredicate() == Contains.within && hasContainer.getValue() instanceof Collection && ((Collection) hasContainer.getValue()).containsAll(edgeLabels)) { edgeLabels.addAll((Collection<String>) hasContainer.getValue()); step.removeHasContainer(hasContainer); } else if (hasContainer.getPredicate() instanceof OrP && edgeLabels.isEmpty()) { boolean removeContainer = true; step.removeHasContainer(hasContainer); TraversalHelper.replaceStep(previousStep, newVertexStep, traversal); TraversalHelper.copyLabels(previousStep, newVertexStep, false);
if (step instanceof HasStep) { HasStep<?> hasStep = (HasStep) step; for (HasContainer hasContainer : hasStep.getHasContainers()) { boolean hasContainerKeyNotIdOrLabel = hasContainerKeyNotIdOrLabel(hasContainer); if (hasContainerKeyNotIdOrLabel && SUPPORTED_BI_PREDICATE.contains(hasContainer.getBiPredicate())) {
new HasStep(traversal, new HasContainer(partitionKey, P.within(new ArrayList<>(readPartitions)))), step, traversal)); if (!(next instanceof HasStep) || !((HasContainer) ((HasStep) next).getHasContainers().get(0)).getKey().equals(partitionKey)) {
/** * Used to left-fold a {@link HasContainer} to a {@link HasContainerHolder} if it exists. Else, append a {@link HasStep}. * * @param traversal the traversal to fold or append. * @param hasContainer the container to add left or append. * @param <T> the traversal type * @return the has container folded or appended traversal */ public static <T extends Traversal.Admin<?, ?>> T addHasContainer(final T traversal, final HasContainer hasContainer) { if (traversal.getEndStep() instanceof HasContainerHolder) { ((HasContainerHolder) traversal.getEndStep()).addHasContainer(hasContainer); return traversal; } else return (T) traversal.addStep(new HasStep<>(traversal, hasContainer)); } }
if (step instanceof HasStep) { HasStep<?> hasStep = (HasStep) step; for (HasContainer hasContainer : hasStep.getHasContainers()) { boolean hasContainerKeyNotIdOrLabel = hasContainerKeyNotIdOrLabel(hasContainer); if (hasContainerKeyNotIdOrLabel && SUPPORTED_BI_PREDICATE.contains(hasContainer.getBiPredicate())) {
/** * Used to left-fold a {@link HasContainer} to a {@link HasContainerHolder} if it exists. Else, append a {@link HasStep}. * * @param traversal the traversal to fold or append. * @param hasContainer the container to add left or append. * @param <T> the traversal type * @return the has container folded or appended traversal */ public static <T extends Traversal.Admin<?, ?>> T addHasContainer(final T traversal, final HasContainer hasContainer) { if (traversal.getEndStep() instanceof HasContainerHolder) { ((HasContainerHolder) traversal.getEndStep()).addHasContainer(hasContainer); return traversal; } else return (T) traversal.addStep(new HasStep<>(traversal, hasContainer)); } }