You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/05/01 16:59:25 UTC
[1/5] incubator-tinkerpop git commit: added support for Steps having
multiple labels.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 433f584a1 -> d8ad3c8e4
added support for Steps having multiple labels.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/95f370d7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/95f370d7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/95f370d7
Branch: refs/heads/master
Commit: 95f370d7c2c0a5f1a750e2903acf169dbe311180
Parents: be4bb3e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 30 16:34:12 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 30 16:34:12 2015 -0600
----------------------------------------------------------------------
.../tinkerpop/gremlin/process/traversal/Step.java | 4 ++--
.../traversal/dsl/graph/GraphTraversal.java | 5 +----
.../process/traversal/step/filter/WhereStep.java | 14 +++++++-------
.../traversal/step/map/match/MatchStep.java | 6 +++---
.../process/traversal/step/util/AbstractStep.java | 17 +++++++++--------
.../process/traversal/step/util/EmptyStep.java | 6 +++---
.../optimization/IdentityRemovalStrategy.java | 2 +-
.../verification/LabeledEndStepStrategy.java | 2 +-
.../traverser/B_O_P_S_SE_SL_Traverser.java | 10 ++++------
.../process/traversal/util/TraversalHelper.java | 14 ++++++--------
.../traversal/step/sideEffect/TinkerGraphStep.java | 3 +--
.../optimization/TinkerGraphStepStrategy.java | 6 +-----
12 files changed, 39 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java
index 642a4ea..d447175 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java
@@ -121,14 +121,14 @@ public interface Step<S, E> extends Iterator<Traverser<E>>, Serializable, Clonea
*
* @return the optional label of the step
*/
- public Optional<String> getLabel();
+ public Set<String> getLabels();
/**
* Set the label of this step.
*
* @param label the label for this step
*/
- public void setLabel(final String label);
+ public void addLabel(final String label);
/**
* Get the unique id of the step.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 11a036b..32f04d1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -707,10 +707,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
public default GraphTraversal<S, E> as(final String stepLabel) {
if (this.asAdmin().getSteps().size() == 0) this.asAdmin().addStep(new StartStep<>(this.asAdmin()));
- final Step<?, E> endStep = this.asAdmin().getEndStep();
- if (endStep.getLabel().isPresent())
- throw new IllegalStateException("The previous step has already been labeled: " + endStep);
- endStep.setLabel(stepLabel);
+ this.asAdmin().getEndStep().addLabel(stepLabel);
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index 8414001..9fbf91f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -76,14 +76,14 @@ public final class WhereStep<E> extends FilterStep<Map<String, E>> implements Tr
endStep = endStep.getPreviousStep();
final Map<String, E> map = traverser.get();
- if (!map.containsKey(startStep.getLabel().get()))
- throw new IllegalArgumentException("The provided key is not in the current map: " + startStep.getLabel().get());
- final Object startObject = map.get(startStep.getLabel().get());
+ if (!map.containsKey(startStep.getLabels().iterator().next()))
+ throw new IllegalArgumentException("The provided key is not in the current map: " + startStep.getLabels().iterator().next());
+ final Object startObject = map.get(startStep.getLabels().iterator().next());
final Object endObject;
- if (endStep.getLabel().isPresent()) {
- if (!map.containsKey(endStep.getLabel().get()))
- throw new IllegalArgumentException("The provided key is not in the current map: " + endStep.getLabel().get());
- endObject = map.get(endStep.getLabel().get());
+ if (!endStep.getLabels().isEmpty()) {
+ if (!map.containsKey(endStep.getLabels().iterator().next()))
+ throw new IllegalArgumentException("The provided key is not in the current map: " + endStep.getLabels().iterator().next());
+ endObject = map.get(endStep.getLabels().iterator().next());
} else
endObject = null;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
index 70e2ac3..31112ea 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
@@ -181,9 +181,9 @@ public final class MatchStep<S, E> extends AbstractStep<S, Map<String, E>> imple
private void addTraversalPrivate(final Traversal<S, S> traversal) {
- String startAs = traversal.asAdmin().getStartStep().getLabel().orElseThrow(()
- -> new IllegalArgumentException("All match traversals must have their start step labeled with as()"));
- String endAs = traversal.asAdmin().getEndStep().getLabel().orElse(null);
+ String startAs = traversal.asAdmin().getStartStep().getLabels().iterator().next();
+ // -> new IllegalArgumentException("All match traversals must have their start step labeled with as()"));
+ String endAs = traversal.asAdmin().getEndStep().getLabels().stream().findFirst().orElse(null);
checkAs(startAs);
if (null == endAs) {
endAs = createAnonymousAs();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
index 14c3b36..bb70e67 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
@@ -23,17 +23,19 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Objects;
-import java.util.Optional;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public abstract class AbstractStep<S, E> implements Step<S, E> {
- protected String label = null;
+ protected Set<String> labels = new HashSet<>();
protected String id = Traverser.Admin.HALT;
protected Traversal.Admin traversal;
protected ExpandableStepIterator<S> starts;
@@ -60,14 +62,13 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
}
@Override
- public void setLabel(final String label) {
- Objects.nonNull(label);
- this.label = label;
+ public void addLabel(final String label) {
+ this.labels.add(label);
}
@Override
- public Optional<String> getLabel() {
- return Optional.ofNullable(this.label);
+ public Set<String> getLabels() {
+ return Collections.unmodifiableSet(this.labels);
}
@Override
@@ -176,7 +177,7 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
private final Traverser<E> prepareTraversalForNextStep(final Traverser<E> traverser) {
if (!this.traverserStepIdSetByChild) ((Traverser.Admin<E>) traverser).setStepId(this.nextStep.getId());
- if (null != this.label) traverser.path().addLabel(this.label);
+ this.labels.forEach(label -> traverser.path().addLabel(label));
return traverser;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java
index ee6a5d6..1a9c2d9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java
@@ -97,12 +97,12 @@ public final class EmptyStep<S, E> implements Step<S, E>, TraversalParent {
}
@Override
- public Optional<String> getLabel() {
- return Optional.empty();
+ public Set<String> getLabels() {
+ return Collections.emptySet();
}
@Override
- public void setLabel(final String label) {
+ public void addLabel(final String label) {
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
index 729e2b9..a66aeff 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategy.java
@@ -39,7 +39,7 @@ public final class IdentityRemovalStrategy extends AbstractTraversalStrategy {
return;
TraversalHelper.getStepsOfClass(IdentityStep.class, traversal).stream()
- .filter(step -> !step.getLabel().isPresent())
+ .filter(step -> step.getLabels().isEmpty())
.forEach(traversal::removeStep);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java
index c9ecd6f..8ba86f9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LabeledEndStepStrategy.java
@@ -35,7 +35,7 @@ public final class LabeledEndStepStrategy extends AbstractTraversalStrategy {
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getEndStep().getLabel().isPresent())
+ if (!traversal.getEndStep().getLabels().isEmpty())
traversal.addStep(new MarkerIdentityStep<>(traversal));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
index c976c69..3daa672 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
@@ -40,10 +40,8 @@ public class B_O_P_S_SE_SL_Traverser<T> extends B_O_S_SE_SL_Traverser<T> {
public B_O_P_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final long initialBulk) {
super(t, step, initialBulk);
- final Optional<String> stepLabel = step.getLabel();
- this.path = stepLabel.isPresent() ?
- ImmutablePath.make().extend(t, stepLabel.get()) :
- ImmutablePath.make().extend(t);
+ final String[] stepLabels = step.getLabels().toArray(new String[step.getLabels().size()]);
+ this.path = ImmutablePath.make().extend(t, stepLabels);
}
/////////////////
@@ -81,8 +79,8 @@ public class B_O_P_S_SE_SL_Traverser<T> extends B_O_S_SE_SL_Traverser<T> {
public <R> Traverser.Admin<R> split(final R r, final Step<T, R> step) {
final B_O_P_S_SE_SL_Traverser<R> clone = (B_O_P_S_SE_SL_Traverser<R>) super.split(r,step);
- final Optional<String> stepLabel = step.getLabel();
- clone.path = stepLabel.isPresent() ? clone.path.clone().extend(r, stepLabel.get()) : clone.path.clone().extend(r);
+ final String[] stepLabels = step.getLabels().toArray(new String[step.getLabels().size()]);
+ clone.path = clone.path.clone().extend(r, stepLabels);
//clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
return clone;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
index 0ffe53f..be70805 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
@@ -20,12 +20,12 @@ package org.apache.tinkerpop.gremlin.process.traversal.util;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import java.util.ArrayList;
@@ -48,8 +48,7 @@ public final class TraversalHelper {
public static <S, E> Step<S, E> getStepByLabel(final String label, final Traversal.Admin<?, ?> traversal) {
return traversal.getSteps().stream()
- .filter(step -> step.getLabel().isPresent())
- .filter(step -> label.equals(step.getLabel().get()))
+ .filter(step -> step.getLabels().contains(label))
.findAny()
.orElseThrow(() -> new IllegalArgumentException("The provided step label does not exist: " + label));
}
@@ -63,8 +62,7 @@ public final class TraversalHelper {
public static boolean hasLabel(final String label, final Traversal.Admin<?, ?> traversal) {
return traversal.getSteps().stream()
- .filter(step -> step.getLabel().isPresent())
- .filter(step -> label.equals(step.getLabel().get()))
+ .filter(step -> step.getLabels().contains(label))
.findAny().isPresent();
}
@@ -72,7 +70,7 @@ public final class TraversalHelper {
final List<String> labels = new ArrayList<>();
for (final Step<?, ?> temp : traversal.getSteps()) {
if (temp == step) break;
- temp.getLabel().ifPresent(labels::add);
+ temp.getLabels().forEach(labels::add);
}
return labels;
}
@@ -164,7 +162,7 @@ public final class TraversalHelper {
builder.append(String.join(",", strings));
builder.append(')');
}
- step.getLabel().ifPresent(label -> builder.append('@').append(label));
+ if (!step.getLabels().isEmpty()) builder.append('@').append(step.getLabels());
//builder.append("^").append(step.getId());
return builder.toString();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java
index a3cd192..8ae4344 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java
@@ -46,8 +46,7 @@ public class TinkerGraphStep<S extends Element> extends GraphStep<S> implements
public TinkerGraphStep(final GraphStep<S> originalGraphStep) {
super(originalGraphStep.getTraversal(), originalGraphStep.getReturnClass(), originalGraphStep.getIds());
- if (originalGraphStep.getLabel().isPresent())
- this.setLabel(originalGraphStep.getLabel().get());
+ originalGraphStep.getLabels().forEach(this::addLabel);
//No need to do anything if the first element is an Element, all elements are guaranteed to be an element and will be return as is
if ((this.ids.length == 0 || !(this.ids[0] instanceof Element)))
this.setIteratorSupplier(() -> (Iterator<S>) (Vertex.class.isAssignableFrom(this.returnClass) ? this.vertices() : this.edges()));
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95f370d7/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
index 9a1832a..4403693 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
@@ -52,11 +52,7 @@ public class TinkerGraphStepStrategy extends AbstractTraversalStrategy {
while (true) {
if (currentStep instanceof HasContainerHolder) {
tinkerGraphStep.hasContainers.addAll(((HasContainerHolder) currentStep).getHasContainers());
- if (currentStep.getLabel().isPresent()) {
- final IdentityStep identityStep = new IdentityStep<>(traversal);
- identityStep.setLabel(currentStep.getLabel().get());
- TraversalHelper.insertAfterStep(identityStep, currentStep, traversal);
- }
+ currentStep.getLabels().forEach(tinkerGraphStep::addLabel);
traversal.removeStep(currentStep);
} else if (currentStep instanceof IdentityStep) {
// do nothing
[4/5] incubator-tinkerpop git commit: Multi-label steps complete.
Cleaned up various aspects of the code base related to multi-labels in both
steps and paths.
Posted by ok...@apache.org.
Multi-label steps complete. Cleaned up various aspects of the code base related to multi-labels in both steps and paths.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/036d6379
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/036d6379
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/036d6379
Branch: refs/heads/master
Commit: 036d6379201837f92c5e5255dc58ad284097e10d
Parents: 04928e1
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri May 1 08:58:58 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri May 1 08:58:58 2015 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../gremlin/process/traversal/Path.java | 2 +-
.../gremlin/process/traversal/Step.java | 10 ++--
.../traversal/dsl/graph/GraphTraversal.java | 30 +++++------
.../gremlin/process/traversal/dsl/graph/__.java | 21 ++++----
.../traversal/step/filter/WhereStep.java | 52 ++++++++++----------
.../process/traversal/step/map/PathStep.java | 6 +--
.../traversal/step/sideEffect/StartStep.java | 6 +--
.../traversal/step/util/AbstractStep.java | 8 +--
.../process/traversal/step/util/EmptyPath.java | 3 +-
.../step/util/ExpandableStepIterator.java | 18 +++----
.../traversal/step/util/HasContainer.java | 43 ++++++++--------
.../traversal/step/util/ImmutablePath.java | 11 ++---
.../traversal/step/util/MutablePath.java | 13 +++--
.../TraversalVerificationStrategy.java | 13 +++--
.../traverser/B_O_P_S_SE_SL_Traverser.java | 13 ++---
.../structure/util/detached/DetachedPath.java | 2 +-
.../structure/util/reference/ReferencePath.java | 2 +-
.../process/traversal/step/util/PathTest.java | 23 ++++-----
19 files changed, 135 insertions(+), 142 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 35926dd..49d8f9c 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
TinkerPop 3.0.0.M9 (NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* A `Step` now has a `Set<String>` of labels. Updated `as()` to take a var args of labels.
* Dropped `BatchGraph` from the code base - it will be replaced by bulk loader functionality over OLAP.
* `TraversalSideEffects` now implements `Optional` semantics. Less code as Java8 provides the helper methods.
* `TraversalScriptSupplier` now takes an `Object` var args for setting `ScriptEngine` bindings if needed.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java
index b83bd23..5ff3aa3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java
@@ -54,7 +54,7 @@ public interface Path extends Cloneable {
* @param labels the labels at the head of the path
* @return the extended path
*/
- public Path extend(final Object object, final String... labels);
+ public Path extend(final Object object, final Set<String> labels);
/**
* Get the object associated with the particular label of the path.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java
index d447175..14a6014 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Step.java
@@ -23,7 +23,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequire
import java.io.Serializable;
import java.util.Collections;
import java.util.Iterator;
-import java.util.Optional;
import java.util.Set;
/**
@@ -116,17 +115,16 @@ public interface Step<S, E> extends Iterator<Traverser<E>>, Serializable, Clonea
public Step<S, E> clone();
/**
- * Get the label of this step.
- * If the step is not labeled, then an {@link Optional#empty} is returned.
+ * Get the labels of this step.
*
- * @return the optional label of the step
+ * @return the set of labels for this step
*/
public Set<String> getLabels();
/**
- * Set the label of this step.
+ * Add a label to this step.
*
- * @param label the label for this step
+ * @param label the label to add to this step
*/
public void addLabel(final String label);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 32f04d1..60ae481 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -462,31 +462,27 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
}
public default GraphTraversal<S, E> has(final String key, final P<?>... predicates) {
- final HasContainer[] hasContainers = new HasContainer[predicates.length];
- for (int i = 0; i < predicates.length; i++) {
- hasContainers[i] = new HasContainer(key, predicates[i].getBiPredicate(), predicates[i].getValue());
- }
- return this.asAdmin().addStep(new HasStep(this.asAdmin(), hasContainers));
+ return this.asAdmin().addStep(new HasStep(this.asAdmin(), HasContainer.makeHasContainers(key, predicates)));
}
- public default GraphTraversal<S, E> has(final String key, final Object value) {
- return this.has(key, new P<?>[]{value instanceof P ? (P) value : P.eq(value)});
+ public default GraphTraversal<S, E> has(final T accessor, final P<?>... predicates) {
+ return this.has(accessor.getAccessor(), predicates);
}
- public default GraphTraversal<S, E> has(final T accessor, final P<?> predicate) {
- return this.has(accessor.getAccessor(), predicate);
+ public default GraphTraversal<S, E> has(final String key, final Object value) {
+ return this.has(key, new P<?>[]{value instanceof P ? (P) value : P.eq(value)});
}
public default GraphTraversal<S, E> has(final T accessor, final Object value) {
return this.has(accessor.getAccessor(), value);
}
- public default GraphTraversal<S, E> has(final String label, final String key, final Object value) {
- return this.has(label, key, P.eq(value));
+ public default GraphTraversal<S, E> has(final String label, final String key, final P<?>... predicates) {
+ return this.has(T.label, label).has(key, predicates);
}
- public default GraphTraversal<S, E> has(final String label, final String key, final P<?> predicate) {
- return this.has(T.label, label).has(key, predicate);
+ public default GraphTraversal<S, E> has(final String label, final String key, final Object value) {
+ return this.has(label, key, new P<?>[]{value instanceof P ? (P) value : P.eq(value)});
}
public default GraphTraversal<S, E> has(final String key) {
@@ -705,9 +701,13 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
///////////////////// UTILITY STEPS /////////////////////
- public default GraphTraversal<S, E> as(final String stepLabel) {
+ public default GraphTraversal<S, E> as(final String stepLabel, final String... stepLabels) {
if (this.asAdmin().getSteps().size() == 0) this.asAdmin().addStep(new StartStep<>(this.asAdmin()));
- this.asAdmin().getEndStep().addLabel(stepLabel);
+ final Step<?, E> endStep = this.asAdmin().getEndStep();
+ endStep.addLabel(stepLabel);
+ for (final String label : stepLabels) {
+ endStep.addLabel(label);
+ }
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 4ade570..74e6e65 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -218,7 +218,6 @@ public class __ {
return __.<A>start().sum(scope);
}
-
public static <A, E2 extends Number> GraphTraversal<A, E2> min() {
return __.<A>start().min();
}
@@ -317,16 +316,16 @@ public class __ {
return __.<A>start().hasNot(hasNotNextTraversal);
}
- public static <A> GraphTraversal<A, A> has(final String key, final P<?> predicate) {
- return __.<A>start().has(key, predicate);
+ public static <A> GraphTraversal<A, A> has(final String key, final P<?>... predicates) {
+ return __.<A>start().has(key, predicates);
}
- public static <A> GraphTraversal<A, A> has(final String key, final Object value) {
- return __.<A>start().has(key, value);
+ public static <A> GraphTraversal<A, A> has(final T accessor, final P<?>... predicates) {
+ return __.<A>start().has(accessor, predicates);
}
- public static <A> GraphTraversal<A, A> has(final T accessor, final P<?> predicate) {
- return __.<A>start().has(accessor, predicate);
+ public static <A> GraphTraversal<A, A> has(final String key, final Object value) {
+ return __.<A>start().has(key, value);
}
public static <A> GraphTraversal<A, A> has(final T accessor, final Object value) {
@@ -337,8 +336,8 @@ public class __ {
return __.<A>start().has(label, key, value);
}
- public static <A> GraphTraversal<A, A> has(final String label, final String key, final P<?> predicate) {
- return __.<A>start().has(label, key, predicate);
+ public static <A> GraphTraversal<A, A> has(final String label, final String key, final P<?>... predicates) {
+ return __.<A>start().has(label, key, predicates);
}
public static <A> GraphTraversal<A, A> has(final String key) {
@@ -555,8 +554,8 @@ public class __ {
///////////////////// UTILITY STEPS /////////////////////
- public static <A> GraphTraversal<A, A> as(final String label) {
- return __.<A>start().as(label);
+ public static <A> GraphTraversal<A, A> as(final String label, final String... labels) {
+ return __.<A>start().as(label, labels);
}
public static <A> GraphTraversal<A, A> profile() {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index d7d7142..7b80015 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -41,7 +41,7 @@ public final class WhereStep<E> extends FilterStep<Map<String, E>> implements Tr
private final String firstKey;
private final String secondKey;
private final BiPredicate biPredicate;
- private Traversal.Admin constraint;
+ private Traversal.Admin traversalConstraint;
public WhereStep(final Traversal.Admin traversal, final String firstKey, final P<?> secondKeyPredicate) {
@@ -49,39 +49,42 @@ public final class WhereStep<E> extends FilterStep<Map<String, E>> implements Tr
this.firstKey = firstKey;
this.secondKey = (String) secondKeyPredicate.getValue();
this.biPredicate = secondKeyPredicate.getBiPredicate();
- this.constraint = null;
+ this.traversalConstraint = null;
}
- public WhereStep(final Traversal.Admin traversal, final Traversal.Admin constraint) {
+ public WhereStep(final Traversal.Admin traversal, final Traversal.Admin traversalConstraint) {
super(traversal);
this.biPredicate = null;
- this.constraint = this.integrateChild(constraint);
+ this.traversalConstraint = this.integrateChild(traversalConstraint);
// TODO: do we need to compile the traversal first (probably)
- ///
- final Step<?, ?> startStep = this.constraint.getStartStep();
+ /// get the start-step as()
+ final Step<?, ?> startStep = this.traversalConstraint.getStartStep();
if (startStep.getLabels().isEmpty())
- throw new IllegalArgumentException("Where traversal must have their start step labeled with as(): " + this.constraint);
+ throw new IllegalArgumentException("Where traversal must have their start step labeled with as(): " + this.traversalConstraint);
if (startStep.getLabels().size() > 1)
- throw new IllegalArgumentException("Where traversal can not have multiple labels on the start step: " + this.constraint);
+ throw new IllegalArgumentException("Where traversal can not have multiple labels on the start step: " + this.traversalConstraint);
this.firstKey = startStep.getLabels().iterator().next();
- ///
- Step<?, ?> endStep = this.constraint.getEndStep();
+ /// get the end-step as()
+ Step<?, ?> endStep = this.traversalConstraint.getEndStep();
if (endStep instanceof MarkerIdentityStep) endStep = endStep.getPreviousStep(); // DAH
if (endStep.getLabels().size() > 1)
- throw new IllegalArgumentException("Where traversal can not have multiple labels on the end step: " + this.constraint);
+ throw new IllegalArgumentException("Where traversal can not have multiple labels on the end step: " + this.traversalConstraint);
this.secondKey = endStep.getLabels().isEmpty() ? null : endStep.getLabels().iterator().next();
}
@Override
protected boolean filter(final Traverser.Admin<Map<String, E>> traverser) {
final Map<String, E> map = traverser.get();
- if (null == this.constraint) {
+ // bi-predicate predicate
+ if (null == this.traversalConstraint) {
if (!map.containsKey(this.firstKey))
throw new IllegalArgumentException("The provided key is not in the current map: " + this.firstKey);
if (!map.containsKey(this.secondKey))
throw new IllegalArgumentException("The provided key is not in the current map: " + this.secondKey);
return this.biPredicate.test(map.get(this.firstKey), map.get(this.secondKey));
- } else {
+ }
+ // traversal predicate
+ else {
final Object startObject = map.get(this.firstKey);
if (null == startObject)
throw new IllegalArgumentException("The provided key is not in the current map: " + this.firstKey);
@@ -89,40 +92,39 @@ public final class WhereStep<E> extends FilterStep<Map<String, E>> implements Tr
throw new IllegalArgumentException("The provided key is not in the current map: " + this.secondKey);
final Object endObject = null == this.secondKey ? null : map.get(this.secondKey);
//
- this.constraint.addStart(this.getTraversal().asAdmin().getTraverserGenerator().generate(startObject, this.constraint.getStartStep(), traverser.bulk()));
+ this.traversalConstraint.addStart(this.getTraversal().asAdmin().getTraverserGenerator().generate(startObject, this.traversalConstraint.getStartStep(), traverser.bulk()));
if (null == endObject) {
- if (this.constraint.hasNext()) {
- this.constraint.reset();
+ if (this.traversalConstraint.hasNext()) {
+ this.traversalConstraint.reset();
return true;
- } else {
- return false;
}
} else {
- while (this.constraint.hasNext()) {
- if (this.constraint.next().equals(endObject)) {
- this.constraint.reset();
+ while (this.traversalConstraint.hasNext()) {
+ if (this.traversalConstraint.next().equals(endObject)) {
+ this.traversalConstraint.reset();
return true;
}
}
- return false;
}
+ return false;
}
}
@Override
public List<Traversal.Admin> getLocalChildren() {
- return null == this.constraint ? Collections.emptyList() : Collections.singletonList(this.constraint);
+ return null == this.traversalConstraint ? Collections.emptyList() : Collections.singletonList(this.traversalConstraint);
}
@Override
public String toString() {
- return TraversalHelper.makeStepString(this, this.firstKey, this.biPredicate, this.secondKey, this.constraint);
+ return TraversalHelper.makeStepString(this, this.firstKey, this.biPredicate, this.secondKey, this.traversalConstraint);
}
@Override
public WhereStep<E> clone() {
final WhereStep<E> clone = (WhereStep<E>) super.clone();
- if (null != this.constraint) clone.constraint = clone.integrateChild(this.constraint.clone());
+ if (null != this.traversalConstraint)
+ clone.traversalConstraint = clone.integrateChild(this.traversalConstraint.clone());
return clone;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
index fcb6b9a..60699a3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
@@ -22,11 +22,11 @@ import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.MutablePath;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.MutablePath;
import java.util.Collections;
import java.util.List;
@@ -51,7 +51,7 @@ public final class PathStep<S> extends MapStep<S, Path> implements TraversalPare
path = traverser.path();
else {
path = MutablePath.make();
- traverser.path().forEach((object, labels) -> path.extend(TraversalUtil.apply(object, this.traversalRing.next()), labels.toArray(new String[labels.size()])));
+ traverser.path().forEach((object, labels) -> path.extend(TraversalUtil.apply(object, this.traversalRing.next()), labels));
}
this.traversalRing.reset();
return path;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java
index 5e762fe..63ab045 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StartStep.java
@@ -24,7 +24,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import java.util.Iterator;
-import java.util.stream.Stream;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -47,10 +46,7 @@ public class StartStep<S> extends AbstractStep<S, S> {
return (T) this.start;
}
- public boolean startAssignableTo(final Class... assignableClasses) {
- return Stream.of(assignableClasses).filter(check -> check.isAssignableFrom(this.start.getClass())).findAny().isPresent();
- }
-
+ @Override
public String toString() {
return TraversalHelper.makeStepString(this, this.start);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
index bb70e67..28b85f8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
@@ -47,7 +47,7 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
public AbstractStep(final Traversal.Admin traversal) {
this.traversal = traversal;
- this.starts = new ExpandableStepIterator<S>((Step) this);
+ this.starts = new ExpandableStepIterator<>(this);
}
@Override
@@ -164,8 +164,8 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
@SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
public AbstractStep<S, E> clone() {
try {
- final AbstractStep clone = (AbstractStep) super.clone();
- clone.starts = new ExpandableStepIterator<S>(clone);
+ final AbstractStep<S,E> clone = (AbstractStep<S,E>) super.clone();
+ clone.starts = new ExpandableStepIterator<>(clone);
clone.previousStep = EmptyStep.instance();
clone.nextStep = EmptyStep.instance();
clone.nextEnd = null;
@@ -177,7 +177,7 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
private final Traverser<E> prepareTraversalForNextStep(final Traverser<E> traverser) {
if (!this.traverserStepIdSetByChild) ((Traverser.Admin<E>) traverser).setStepId(this.nextStep.getId());
- this.labels.forEach(label -> traverser.path().addLabel(label));
+ if (!this.labels.isEmpty()) this.labels.forEach(label -> traverser.path().addLabel(label));
return traverser;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyPath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyPath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyPath.java
index 8be354d..72d8c01 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyPath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyPath.java
@@ -42,7 +42,7 @@ public final class EmptyPath implements Path, Serializable {
}
@Override
- public Path extend(final Object object, final String... labels) {
+ public Path extend(final Object object, final Set<String> labels) {
return this;
}
@@ -82,6 +82,7 @@ public final class EmptyPath implements Path, Serializable {
}
@Override
+ @SuppressWarnings("CloneDoesntCallSuperClone,CloneDoesntDeclareCloneNotSupportedException")
public EmptyPath clone() {
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ExpandableStepIterator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ExpandableStepIterator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ExpandableStepIterator.java
index 57687c1..09e82d0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ExpandableStepIterator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ExpandableStepIterator.java
@@ -29,13 +29,13 @@ import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class ExpandableStepIterator<E> implements Iterator<Traverser.Admin<E>>, Serializable {
+public final class ExpandableStepIterator<S> implements Iterator<Traverser.Admin<S>>, Serializable {
- private final TraverserSet<E> traverserSet = new TraverserSet<>();
- private final MultiIterator<Traverser.Admin<E>> traverserIterators = new MultiIterator<>();
- private final Step<?, E> hostStep;
+ private final TraverserSet<S> traverserSet = new TraverserSet<>();
+ private final MultiIterator<Traverser.Admin<S>> traverserIterators = new MultiIterator<>();
+ private final Step<S,?> hostStep;
- public ExpandableStepIterator(final Step<?, E> hostStep) {
+ public ExpandableStepIterator(final Step<S,?> hostStep) {
this.hostStep = hostStep;
}
@@ -45,23 +45,23 @@ public final class ExpandableStepIterator<E> implements Iterator<Traverser.Admin
}
@Override
- public Traverser.Admin<E> next() {
+ public Traverser.Admin<S> next() {
if (!this.traverserSet.isEmpty())
return this.traverserSet.remove();
if (this.traverserIterators.hasNext())
return this.traverserIterators.next();
/////////////
if (this.hostStep.getPreviousStep().hasNext())
- return (Traverser.Admin<E>) this.hostStep.getPreviousStep().next();
+ return (Traverser.Admin<S>) this.hostStep.getPreviousStep().next();
/////////////
return this.traverserSet.remove();
}
- public void add(final Iterator<Traverser.Admin<E>> iterator) {
+ public void add(final Iterator<Traverser.Admin<S>> iterator) {
this.traverserIterators.addIterator(iterator);
}
- public void add(final Traverser.Admin<E> traverser) {
+ public void add(final Traverser.Admin<S> traverser) {
this.traverserSet.add(traverser);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java
index 4f16d96..014f21f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java
@@ -18,10 +18,11 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.step.util;
-import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Contains;
import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.P;
import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
@@ -44,26 +45,14 @@ public final class HasContainer implements Serializable {
this.predicate = predicate;
this.value = value;
if (null == this.value && !(this.predicate instanceof Contains)) {
- throw new IllegalArgumentException("For determining the existence of a property, use the Contains predicate");
+ throw new IllegalArgumentException("For determining the existence of a property, use the Contains predicate with null-value");
}
}
- public HasContainer(final String key, final Contains contains) {
- this(key, contains, null);
- }
-
- public HasContainer(final T accessor, final BiPredicate predicate, final Object value) {
- this(accessor.getAccessor(), predicate, value);
- }
-
- public HasContainer(final T accessor, final Contains contains) {
- this(accessor.getAccessor(), contains, null);
- }
-
public boolean test(final Element element) {
if (null != this.value) {
// it is OK to evaluate equality of ids via toString() now given that the toString() the test suite
- // enforces the value of id.()toString() to be a first class representation of the identifier
+ // enforces the value of id().toString() to be a first class representation of the identifier
if (this.key.equals(T.id.getAccessor()))
return this.predicate.test(element.id().toString(), this.value.toString());
else if (this.key.equals(T.label.getAccessor()))
@@ -92,6 +81,17 @@ public final class HasContainer implements Serializable {
}
}
+ // note that if the user is looking for a label property key (e.g.), then it will look the same as looking for the label of the element.
+ public String toString() {
+ return this.value == null ?
+ (this.predicate == Contains.within ?
+ '[' + this.key + ']' :
+ "[!" + this.key + ']') :
+ '[' + this.key + ',' + this.predicate + ',' + this.value + ']';
+ }
+
+ ////////////
+
public static boolean testAll(final Element element, final List<HasContainer> hasContainers) {
if (hasContainers.size() == 0)
return true;
@@ -104,12 +104,11 @@ public final class HasContainer implements Serializable {
}
}
- // note that if the user is looking for a label property key (e.g.), then it will look the same as looking for the label of the element.
- public String toString() {
- return this.value == null ?
- (this.predicate == Contains.within ?
- '[' + this.key + ']' :
- "[!" + this.key + ']') :
- '[' + this.key + ',' + this.predicate + ',' + this.value + ']';
+ public static HasContainer[] makeHasContainers(final String key, final P<?>... predicates) {
+ final HasContainer[] hasContainers = new HasContainer[predicates.length];
+ for (int i = 0; i < predicates.length; i++) {
+ hasContainers[i] = new HasContainer(key, predicates[i].getBiPredicate(), predicates[i].getValue());
+ }
+ return hasContainers;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
index 608c3f6..18914be 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
@@ -51,15 +51,14 @@ public class ImmutablePath implements Path, Serializable, Cloneable {
return this;
}
- private ImmutablePath(final Object currentObject, final String... currentLabels) {
+ private ImmutablePath(final Object currentObject, final Set<String> currentLabels) {
this(HeadPath.instance(), currentObject, currentLabels);
}
- private ImmutablePath(final Path previousPath, final Object currentObject, final String... currentLabels) {
+ private ImmutablePath(final Path previousPath, final Object currentObject, final Set<String> currentLabels) {
this.previousPath = previousPath;
this.currentObject = currentObject;
- if (currentLabels.length > 0)
- Stream.of(currentLabels).forEach(this.currentLabels::add);
+ this.currentLabels.addAll(currentLabels);
}
@Override
@@ -68,7 +67,7 @@ public class ImmutablePath implements Path, Serializable, Cloneable {
}
@Override
- public Path extend(final Object object, final String... labels) {
+ public Path extend(final Object object, final Set<String> labels) {
return new ImmutablePath(this, object, labels);
}
@@ -121,7 +120,7 @@ public class ImmutablePath implements Path, Serializable, Cloneable {
}
@Override
- public Path extend(final Object object, final String... labels) {
+ public Path extend(final Object object, final Set<String> labels) {
return new ImmutablePath(object, labels);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java
index d458bfb..10fd639 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java
@@ -23,21 +23,20 @@ import org.apache.tinkerpop.gremlin.process.traversal.Path;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class MutablePath implements Path, Serializable {
- final protected List<Object> objects;
- final protected List<Set<String>> labels;
+ protected final List<Object> objects;
+ protected final List<Set<String>> labels;
protected MutablePath() {
- this(0);
+ this(10);
}
private MutablePath(final int capacity) {
@@ -69,9 +68,9 @@ public class MutablePath implements Path, Serializable {
}
@Override
- public Path extend(final Object object, final String... labels) {
+ public Path extend(final Object object, final Set<String> labels) {
this.objects.add(object);
- this.labels.add(Stream.of(labels).collect(Collectors.toSet()));
+ this.labels.add(new HashSet<>(labels));
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
index 70dfdd2..9e38646 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/TraversalVerificationStrategy.java
@@ -18,14 +18,15 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ComputerAwareStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.SupplyingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -53,9 +54,9 @@ public final class TraversalVerificationStrategy extends AbstractTraversalStrate
endStep = endStep.getPreviousStep();
for (final Step<?, ?> step : traversal.getSteps()) {
- if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep))) {
+ if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep)))
throw new IllegalStateException("Global traversals on GraphComputer may not contain mid-traversal barriers: " + step);
- }
+
if (step instanceof TraversalParent) {
final Optional<Traversal.Admin<Object, Object>> traversalOptional = ((TraversalParent) step).getLocalChildren().stream()
.filter(t -> !TraversalHelper.isLocalStarGraph(t.asAdmin()))
@@ -63,6 +64,8 @@ public final class TraversalVerificationStrategy extends AbstractTraversalStrate
if (traversalOptional.isPresent())
throw new IllegalStateException("Local traversals on GraphComputer may not traverse past the local star-graph: " + traversalOptional.get());
}
+ if (step instanceof Mutating)
+ throw new IllegalStateException("Muting steps are currently not supported on GraphComputer traversals");
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
index 3daa672..b6920e5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
@@ -25,7 +25,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.ImmutablePath;
import org.apache.tinkerpop.gremlin.structure.util.Attachable;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-import java.util.Optional;
import java.util.function.Function;
/**
@@ -40,8 +39,7 @@ public class B_O_P_S_SE_SL_Traverser<T> extends B_O_S_SE_SL_Traverser<T> {
public B_O_P_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final long initialBulk) {
super(t, step, initialBulk);
- final String[] stepLabels = step.getLabels().toArray(new String[step.getLabels().size()]);
- this.path = ImmutablePath.make().extend(t, stepLabels);
+ this.path = ImmutablePath.make().extend(t, step.getLabels());
}
/////////////////
@@ -77,12 +75,9 @@ public class B_O_P_S_SE_SL_Traverser<T> extends B_O_S_SE_SL_Traverser<T> {
@Override
public <R> Traverser.Admin<R> split(final R r, final Step<T, R> step) {
-
- final B_O_P_S_SE_SL_Traverser<R> clone = (B_O_P_S_SE_SL_Traverser<R>) super.split(r,step);
- final String[] stepLabels = step.getLabels().toArray(new String[step.getLabels().size()]);
- clone.path = clone.path.clone().extend(r, stepLabels);
- //clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
- return clone;
+ final B_O_P_S_SE_SL_Traverser<R> clone = (B_O_P_S_SE_SL_Traverser<R>) super.split(r, step);
+ clone.path = clone.path.clone().extend(r, step.getLabels());
+ return clone;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
index 6f9b540..d2d0094 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
@@ -63,7 +63,7 @@ public class DetachedPath extends MutablePath implements Attachable<Path> {
@Override
public Path attach(final Function<Attachable<Path>, Path> method) {
final Path path = MutablePath.make(); // TODO: Use ImmutablePath?
- this.forEach((object, labels) -> path.extend(object instanceof Attachable ? ((Attachable) object).attach(method) : object, labels.toArray(new String[labels.size()])));
+ this.forEach((object, labels) -> path.extend(object instanceof Attachable ? ((Attachable) object).attach(method) : object, labels));
return path;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferencePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferencePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferencePath.java
index f2e0571..d7ac31d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferencePath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferencePath.java
@@ -66,7 +66,7 @@ public class ReferencePath extends MutablePath implements Attachable<Path> {
@Override
public Path attach(final Function<Attachable<Path>, Path> method) {
final Path path = MutablePath.make(); // TODO: Use ImmutablePath?
- this.forEach((object, labels) -> path.extend(object instanceof Attachable ? ((Attachable) object).attach(method) : object, labels.toArray(new String[labels.size()])));
+ this.forEach((object, labels) -> path.extend(object instanceof Attachable ? ((Attachable) object).attach(method) : object, labels));
return path;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/036d6379/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/PathTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/PathTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/PathTest.java
index 752d2e2..94ea30a 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/PathTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/PathTest.java
@@ -20,12 +20,13 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.util;
import org.apache.tinkerpop.gremlin.LoadGraphWith;
import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
-import org.apache.tinkerpop.gremlin.process.UseEngine;
import org.junit.Test;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -43,9 +44,9 @@ public class PathTest extends AbstractGremlinProcessTest {
Arrays.asList(MutablePath.make(), ImmutablePath.make()).forEach(path -> {
assertTrue(path.isSimple());
assertEquals(0, path.size());
- path = path.extend(1, "a");
- path = path.extend(2, "b");
- path = path.extend(3, "c");
+ path = path.extend(1, Collections.singleton("a"));
+ path = path.extend(2, Collections.singleton("b"));
+ path = path.extend(3, Collections.singleton("c"));
assertEquals(3, path.size());
assertEquals(Integer.valueOf(1), path.get("a"));
assertEquals(Integer.valueOf(2), path.get("b"));
@@ -62,7 +63,7 @@ public class PathTest extends AbstractGremlinProcessTest {
assertTrue(path.hasLabel("d"));
assertFalse(path.hasLabel("e"));
assertTrue(path.isSimple());
- path = path.extend(3, "e");
+ path = path.extend(3, Collections.singleton("e"));
assertFalse(path.isSimple());
assertTrue(path.hasLabel("e"));
assertEquals(4, path.size());
@@ -77,9 +78,9 @@ public class PathTest extends AbstractGremlinProcessTest {
@LoadGraphWith(LoadGraphWith.GraphData.MODERN)
public void shouldHandleMultiLabelPaths() {
Arrays.asList(MutablePath.make(), ImmutablePath.make()).forEach(path -> {
- path = path.extend("marko", "a");
- path = path.extend("stephen", "b");
- path = path.extend("matthias", "a");
+ path = path.extend("marko", Collections.singleton("a"));
+ path = path.extend("stephen", Collections.singleton("b"));
+ path = path.extend("matthias", Collections.singleton("a"));
assertEquals(3, path.size());
assertEquals(3, path.objects().size());
assertEquals(3, path.labels().size());
@@ -105,9 +106,9 @@ public class PathTest extends AbstractGremlinProcessTest {
@Test
public void shouldExcludeUnlabeledLabelsFromPath() {
Arrays.asList(MutablePath.make(), ImmutablePath.make()).forEach(path -> {
- path = path.extend("marko", "a");
- path = path.extend("stephen", "b");
- path = path.extend("matthias", "c", "d");
+ path = path.extend("marko", Collections.singleton("a"));
+ path = path.extend("stephen", Collections.singleton("b"));
+ path = path.extend("matthias", new HashSet<>(Arrays.asList("c", "d")));
assertEquals(3, path.size());
assertEquals(3, path.objects().size());
assertEquals(3, path.labels().size());
[5/5] incubator-tinkerpop git commit: Merge branch 'multi-label-steps'
Posted by ok...@apache.org.
Merge branch 'multi-label-steps'
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/d8ad3c8e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/d8ad3c8e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/d8ad3c8e
Branch: refs/heads/master
Commit: d8ad3c8e412a127e91c33d814405bdcffb53fc87
Parents: 433f584 036d637
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri May 1 08:59:16 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri May 1 08:59:16 2015 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../gremlin/process/traversal/Path.java | 2 +-
.../gremlin/process/traversal/Step.java | 14 ++--
.../traversal/dsl/graph/GraphTraversal.java | 31 ++++----
.../gremlin/process/traversal/dsl/graph/__.java | 21 +++--
.../traversal/step/filter/WhereStep.java | 82 ++++++++++----------
.../process/traversal/step/map/PathStep.java | 6 +-
.../traversal/step/map/match/MatchStep.java | 21 +++--
.../traversal/step/sideEffect/StartStep.java | 6 +-
.../traversal/step/util/AbstractStep.java | 23 +++---
.../process/traversal/step/util/EmptyPath.java | 3 +-
.../process/traversal/step/util/EmptyStep.java | 6 +-
.../step/util/ExpandableStepIterator.java | 18 ++---
.../traversal/step/util/HasContainer.java | 43 +++++-----
.../traversal/step/util/ImmutablePath.java | 11 ++-
.../traversal/step/util/MutablePath.java | 13 ++--
.../optimization/IdentityRemovalStrategy.java | 2 +-
.../verification/LabeledEndStepStrategy.java | 2 +-
.../TraversalVerificationStrategy.java | 13 ++--
.../traverser/B_O_P_S_SE_SL_Traverser.java | 15 +---
.../process/traversal/util/TraversalHelper.java | 14 ++--
.../structure/util/detached/DetachedPath.java | 2 +-
.../structure/util/reference/ReferencePath.java | 2 +-
.../process/traversal/step/util/PathTest.java | 23 +++---
.../step/sideEffect/TinkerGraphStep.java | 3 +-
.../optimization/TinkerGraphStepStrategy.java | 6 +-
26 files changed, 187 insertions(+), 196 deletions(-)
----------------------------------------------------------------------
[3/5] incubator-tinkerpop git commit: Merge branch 'master' into
multi-label-steps
Posted by ok...@apache.org.
Merge branch 'master' into multi-label-steps
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/04928e1b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/04928e1b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/04928e1b
Branch: refs/heads/master
Commit: 04928e1bc0cb1fc4cd033d438a130e731059d076
Parents: 426cf99 8435e51
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri May 1 08:05:54 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri May 1 08:05:54 2015 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
docs/src/the-graph.asciidoc | 377 ++++-------
.../structure/io/graphml/GraphMLReader.java | 3 +-
.../structure/io/graphson/GraphSONReader.java | 3 +-
.../io/graphson/LegacyGraphSONReader.java | 3 +-
.../gremlin/structure/io/gryo/GryoReader.java | 3 +-
.../structure/util/batch/BatchFeatures.java | 216 -------
.../structure/util/batch/BatchGraph.java | 643 -------------------
.../gremlin/structure/util/batch/Exists.java | 62 --
.../structure/util/batch/VertexIdType.java | 65 --
.../util/batch/cache/AbstractIDVertexCache.java | 78 ---
.../util/batch/cache/LongIDVertexCache.java | 94 ---
.../util/batch/cache/ObjectIDVertexCache.java | 25 -
.../util/batch/cache/StringCompression.java | 29 -
.../util/batch/cache/StringIDVertexCache.java | 87 ---
.../util/batch/cache/URLCompression.java | 67 --
.../structure/util/batch/cache/VertexCache.java | 36 --
.../driver/benchmark/ProfilingApplication.java | 27 +-
.../AbstractImportCustomizerProvider.java | 2 -
.../tinkerpop/gremlin/structure/BatchTest.java | 475 --------------
.../structure/StructureStandardSuite.java | 6 -
21 files changed, 147 insertions(+), 2155 deletions(-)
----------------------------------------------------------------------
[2/5] incubator-tinkerpop git commit: super optimization to WhereStep
I never realized before.
Posted by ok...@apache.org.
super optimization to WhereStep I never realized before.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/426cf997
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/426cf997
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/426cf997
Branch: refs/heads/master
Commit: 426cf997a64cca0a34fa0e59418909b1687ad3d2
Parents: 95f370d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 30 17:12:44 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 30 17:12:44 2015 -0600
----------------------------------------------------------------------
.../traversal/step/filter/WhereStep.java | 48 ++++++++++----------
.../traversal/step/map/match/MatchStep.java | 21 ++++++---
2 files changed, 39 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/426cf997/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index 9fbf91f..d7d7142 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -54,40 +54,42 @@ public final class WhereStep<E> extends FilterStep<Map<String, E>> implements Tr
public WhereStep(final Traversal.Admin traversal, final Traversal.Admin constraint) {
super(traversal);
- this.firstKey = null;
- this.secondKey = null;
this.biPredicate = null;
this.constraint = this.integrateChild(constraint);
+ // TODO: do we need to compile the traversal first (probably)
+ ///
+ final Step<?, ?> startStep = this.constraint.getStartStep();
+ if (startStep.getLabels().isEmpty())
+ throw new IllegalArgumentException("Where traversal must have their start step labeled with as(): " + this.constraint);
+ if (startStep.getLabels().size() > 1)
+ throw new IllegalArgumentException("Where traversal can not have multiple labels on the start step: " + this.constraint);
+ this.firstKey = startStep.getLabels().iterator().next();
+ ///
+ Step<?, ?> endStep = this.constraint.getEndStep();
+ if (endStep instanceof MarkerIdentityStep) endStep = endStep.getPreviousStep(); // DAH
+ if (endStep.getLabels().size() > 1)
+ throw new IllegalArgumentException("Where traversal can not have multiple labels on the end step: " + this.constraint);
+ this.secondKey = endStep.getLabels().isEmpty() ? null : endStep.getLabels().iterator().next();
}
@Override
protected boolean filter(final Traverser.Admin<Map<String, E>> traverser) {
+ final Map<String, E> map = traverser.get();
if (null == this.constraint) {
- final Map<String, E> map = traverser.get();
if (!map.containsKey(this.firstKey))
throw new IllegalArgumentException("The provided key is not in the current map: " + this.firstKey);
if (!map.containsKey(this.secondKey))
throw new IllegalArgumentException("The provided key is not in the current map: " + this.secondKey);
return this.biPredicate.test(map.get(this.firstKey), map.get(this.secondKey));
} else {
- final Step<?, ?> startStep = this.constraint.getStartStep();
- Step<?, ?> endStep = this.constraint.getEndStep();
- if (endStep instanceof MarkerIdentityStep) // DAH!
- endStep = endStep.getPreviousStep();
-
- final Map<String, E> map = traverser.get();
- if (!map.containsKey(startStep.getLabels().iterator().next()))
- throw new IllegalArgumentException("The provided key is not in the current map: " + startStep.getLabels().iterator().next());
- final Object startObject = map.get(startStep.getLabels().iterator().next());
- final Object endObject;
- if (!endStep.getLabels().isEmpty()) {
- if (!map.containsKey(endStep.getLabels().iterator().next()))
- throw new IllegalArgumentException("The provided key is not in the current map: " + endStep.getLabels().iterator().next());
- endObject = map.get(endStep.getLabels().iterator().next());
- } else
- endObject = null;
-
- startStep.addStart(this.getTraversal().asAdmin().getTraverserGenerator().generate(startObject, (Step) startStep, traverser.bulk()));
+ final Object startObject = map.get(this.firstKey);
+ if (null == startObject)
+ throw new IllegalArgumentException("The provided key is not in the current map: " + this.firstKey);
+ if (null != this.secondKey && !map.containsKey(this.secondKey))
+ throw new IllegalArgumentException("The provided key is not in the current map: " + this.secondKey);
+ final Object endObject = null == this.secondKey ? null : map.get(this.secondKey);
+ //
+ this.constraint.addStart(this.getTraversal().asAdmin().getTraverserGenerator().generate(startObject, this.constraint.getStartStep(), traverser.bulk()));
if (null == endObject) {
if (this.constraint.hasNext()) {
this.constraint.reset();
@@ -95,7 +97,6 @@ public final class WhereStep<E> extends FilterStep<Map<String, E>> implements Tr
} else {
return false;
}
-
} else {
while (this.constraint.hasNext()) {
if (this.constraint.next().equals(endObject)) {
@@ -121,8 +122,7 @@ public final class WhereStep<E> extends FilterStep<Map<String, E>> implements Tr
@Override
public WhereStep<E> clone() {
final WhereStep<E> clone = (WhereStep<E>) super.clone();
- if (null != this.constraint)
- clone.constraint = clone.integrateChild(this.constraint.clone());
+ if (null != this.constraint) clone.constraint = clone.integrateChild(this.constraint.clone());
return clone;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/426cf997/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
index 31112ea..ddfc83f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
@@ -19,13 +19,14 @@
package org.apache.tinkerpop.gremlin.process.traversal.step.map.match;
import org.apache.tinkerpop.gremlin.process.traversal.FastNoSuchElementException;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.util.ArrayList;
@@ -180,10 +181,18 @@ public final class MatchStep<S, E> extends AbstractStep<S, Map<String, E>> imple
}
private void addTraversalPrivate(final Traversal<S, S> traversal) {
-
- String startAs = traversal.asAdmin().getStartStep().getLabels().iterator().next();
- // -> new IllegalArgumentException("All match traversals must have their start step labeled with as()"));
- String endAs = traversal.asAdmin().getEndStep().getLabels().stream().findFirst().orElse(null);
+ final Step<S,?> startStep = traversal.asAdmin().getStartStep();
+ if (startStep.getLabels().isEmpty())
+ throw new IllegalArgumentException("Match traversals must have their start step labeled with as(): " + traversal);
+ if (startStep.getLabels().size() > 1)
+ throw new IllegalArgumentException("Match traversals can not have multiple labels on the start step: " + traversal);
+ final String startAs = traversal.asAdmin().getStartStep().getLabels().iterator().next();
+ ///
+ final Step<?,S> endStep = traversal.asAdmin().getEndStep();
+ if(endStep.getLabels().size() > 1)
+ throw new IllegalArgumentException("Match traversals can not have multiple labels on the end step: " + traversal);
+
+ String endAs = endStep.getLabels().isEmpty() ? null : endStep.getLabels().iterator().next();
checkAs(startAs);
if (null == endAs) {
endAs = createAnonymousAs();