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 01:12:48 UTC
incubator-tinkerpop git commit: super optimization to WhereStep I
never realized before.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/multi-label-steps 95f370d7c -> 426cf997a
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/multi-label-steps
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();