Traversal.Admin<?, ?> filterTraversal = (Traversal.Admin<?, ?>) originalStep.getLocalChildren().get(0); List<Step> steps = filterTraversal.getSteps(); if (steps.size()==2 && Step<?, ?> currentStep = originalStep.getPreviousStep(); while (true) { if (currentStep instanceof HasStep || currentStep instanceof IdentityStep) {
private static void applyCriterion(final List<Step> stepsToApplyCriterionAfter, final Traversal.Admin traversal, final Traversal.Admin<? extends Element, ?> criterion) { for (final Step<?, ?> step : stepsToApplyCriterionAfter) { // re-assign the step label to the criterion because the label should apply seamlessly after the filter final Step filter = new TraversalFilterStep<>(traversal, criterion.clone()); TraversalHelper.insertAfterStep(filter, step, traversal); TraversalHelper.copyLabels(step, filter, true); } }
@Override public Set<TraverserRequirement> getRequirements() { return this.getSelfAndChildRequirements(); } }
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; }
for (@SuppressWarnings("unchecked") TraversalFilterStep<S> traversalFilterStep : traversalFilterSteps) { List<Traversal.Admin<S, ?>> filterTraversals = traversalFilterStep.getLocalChildren(); Preconditions.checkState(filterTraversals.size() == 1); Traversal.Admin<S, ?> filterTraversal = filterTraversals.get(0); filterTraversal ); for (String label : traversalFilterStep.getLabels()) { sqlgTraversalFilterStepBarrier.addLabel(label); traversalFilterStep, sqlgTraversalFilterStepBarrier, traversalFilterStep.getTraversal() );
private List<Step> stepsFromFilterStep(TraversalFilterStep<Vertex> filterStep) { // TraversalFilterStep always has exactly one child, so this is safe return filterStep.getLocalChildren().get(0).getSteps(); }
for (@SuppressWarnings("unchecked") TraversalFilterStep<S> traversalFilterStep : traversalFilterSteps) { List<Traversal.Admin<S, ?>> filterTraversals = traversalFilterStep.getLocalChildren(); Preconditions.checkState(filterTraversals.size() == 1); Traversal.Admin<S, ?> filterTraversal = filterTraversals.get(0); filterTraversal ); for (String label : traversalFilterStep.getLabels()) { sqlgTraversalFilterStepBarrier.addLabel(label); traversalFilterStep, sqlgTraversalFilterStepBarrier, traversalFilterStep.getTraversal() );
Traversal.Admin<?, ?> filterTraversal = (Traversal.Admin<?, ?>) originalStep.getLocalChildren().get(0); List<Step> steps = filterTraversal.getSteps(); if (steps.size() == 2 && Step<?, ?> currentStep = originalStep.getPreviousStep(); while (true) { if (!(currentStep instanceof HasStep) && !(currentStep instanceof IdentityStep)) {
/** * if this is a has(property) step, returns the property key, otherwise returns null * * @param currentStep the step * @return the property which should be not null */ private String isNotNullStep(Step<?, ?> currentStep) { if (currentStep instanceof TraversalFilterStep<?>) { TraversalFilterStep<?> tfs = (TraversalFilterStep<?>) currentStep; List<?> c = tfs.getLocalChildren(); if (c != null && c.size() == 1) { Traversal.Admin<?, ?> a = (Traversal.Admin<?, ?>) c.iterator().next(); Step<?, ?> s = a.getEndStep(); if (a.getSteps().size() == 1 && s instanceof PropertiesStep<?>) { PropertiesStep<?> ps = (PropertiesStep<?>) s; String[] keys = ps.getPropertyKeys(); if (keys != null && keys.length == 1) { return keys[0]; } } } } return null; }
/** * Map the {@link Traverser} to either {@code true} or {@code false}, where {@code false} will not pass the * traverser to the next step. * * @param filterTraversal the filter traversal to apply * @return the traversal with the {@link TraversalFilterStep} added * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#general-steps" target="_blank">Reference Documentation - General Steps</a> * @since 3.0.0-incubating */ public default GraphTraversal<S, E> filter(final Traversal<?, ?> filterTraversal) { this.asAdmin().getBytecode().addStep(Symbols.filter, filterTraversal); return this.asAdmin().addStep(new TraversalFilterStep<>(this.asAdmin(), (Traversal) filterTraversal)); }
@Override public Set<TraverserRequirement> getRequirements() { return this.getSelfAndChildRequirements(); } }
Traversal.Admin<?, ?> filterTraversal = (Traversal.Admin<?, ?>) originalStep.getLocalChildren().get(0); List<Step> steps = filterTraversal.getSteps(); if (steps.size()==2 && Step<?, ?> currentStep = originalStep.getPreviousStep(); while (true) { if (currentStep instanceof HasStep || currentStep instanceof IdentityStep) {
/** * if this is a has(property) step, returns the property key, otherwise returns null * * @param currentStep the step * @return the property which should be not null */ private String isNotNullStep(Step<?, ?> currentStep) { if (currentStep instanceof TraversalFilterStep<?>) { TraversalFilterStep<?> tfs = (TraversalFilterStep<?>) currentStep; List<?> c = tfs.getLocalChildren(); if (c != null && c.size() == 1) { Traversal.Admin<?, ?> a = (Traversal.Admin<?, ?>) c.iterator().next(); Step<?, ?> s = a.getEndStep(); if (a.getSteps().size() == 1 && s instanceof PropertiesStep<?>) { PropertiesStep<?> ps = (PropertiesStep<?>) s; String[] keys = ps.getPropertyKeys(); if (keys != null && keys.length == 1) { return keys[0]; } } } } return null; }
/** * Filters vertices, edges and vertex properties based on the existence of properties. * * @param propertyKey the key of the property to filter on for existence * @return the traversal with an appended {@link HasStep} * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#has-step" target="_blank">Reference Documentation - Has Step</a> * @since 3.0.0-incubating */ public default GraphTraversal<S, E> has(final String propertyKey) { this.asAdmin().getBytecode().addStep(Symbols.has, propertyKey); return this.asAdmin().addStep(new TraversalFilterStep(this.asAdmin(), __.values(propertyKey))); }
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; }
/** * Filters the current object based on the object itself or the path history. * * @param whereTraversal the filter to apply * @return the traversal with an appended {@link WherePredicateStep} * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#where-step" target="_blank">Reference Documentation - Where Step</a> * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#using-where-with-match" target="_blank">Reference Documentation - Where with Match</a> * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#using-where-with-select" target="_blank">Reference Documentation - Where with Select</a> * @since 3.0.0-incubating */ public default GraphTraversal<S, E> where(final Traversal<?, ?> whereTraversal) { this.asAdmin().getBytecode().addStep(Symbols.where, whereTraversal); return TraversalHelper.getVariableLocations(whereTraversal.asAdmin()).isEmpty() ? this.asAdmin().addStep(new TraversalFilterStep<>(this.asAdmin(), (Traversal) whereTraversal)) : this.asAdmin().addStep(new WhereTraversalStep<>(this.asAdmin(), whereTraversal)); }
/** * Filters vertices, edges and vertex properties based on their properties. * * @param propertyKey the key of the property to filter on * @param propertyTraversal the traversal to filter the property value by * @return the traversal with an appended {@link HasStep} * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#has-step" target="_blank">Reference Documentation - Has Step</a> * @since 3.0.0-incubating */ public default GraphTraversal<S, E> has(final String propertyKey, final Traversal<?, ?> propertyTraversal) { this.asAdmin().getBytecode().addStep(Symbols.has, propertyKey, propertyTraversal); return this.asAdmin().addStep( new TraversalFilterStep<>(this.asAdmin(), propertyTraversal.asAdmin().addStep(0, new PropertiesStep(propertyTraversal.asAdmin(), PropertyType.VALUE, propertyKey)))); }
/** * Filters vertices, edges and vertex properties based on their properties. * * @param accessor the {@link T} accessor of the property to filter on * @param propertyTraversal the traversal to filter the accessor value by * @return the traversal with an appended {@link HasStep} * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#has-step" target="_blank">Reference Documentation - Has Step</a> * @since 3.1.0-incubating */ public default GraphTraversal<S, E> has(final T accessor, final Traversal<?, ?> propertyTraversal) { this.asAdmin().getBytecode().addStep(Symbols.has, accessor, propertyTraversal); return this.asAdmin().addStep( new TraversalFilterStep<>(this.asAdmin(), propertyTraversal.asAdmin().addStep(0, new PropertiesStep(propertyTraversal.asAdmin(), PropertyType.VALUE, accessor.getAccessor())))); }
continue; if (null != this.vertexCriterion && null == edgeCriterion) { TraversalHelper.insertAfterStep(new TraversalFilterStep<>(traversal, (Traversal) this.vertexCriterion.clone()), step, traversal); } else { final VertexStep<Edge> someEStep = new VertexStep<>(traversal, Edge.class, step.getDirection(), step.getEdgeLabels()); TraversalHelper.insertAfterStep(new TraversalFilterStep<>(traversal, this.edgeCriterion.clone()), someEStep, traversal); if (null != this.vertexCriterion) TraversalHelper.insertAfterStep(new TraversalFilterStep<>(traversal, this.vertexCriterion.clone()), someVStep, traversal); final OrStep<Object> checkPropertyCriterion = new OrStep(traversal, new DefaultTraversal<>().addStep(new ClassFilterStep<>(traversal, VertexProperty.class, false)), new DefaultTraversal<>().addStep(new TraversalFilterStep<>(traversal, this.vertexPropertyCriterion))); final Traversal.Admin nonCheckPropertyCriterion = new DefaultTraversal<>().addStep(new TraversalFilterStep<>(traversal, this.vertexPropertyCriterion));
traversal.addStep(index + 1, new TraversalFilterStep<>(traversal, localChild)); traversal.removeStep(whereTraversalStep);