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/06/18 23:34:42 UTC
incubator-tinkerpop git commit: damm --- there is a bug in
ConjunctionStrategy... added a WhereTest that exposes it and also something
fishy with that same where test in GraphComputer. Jeez.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 6749c2001 -> ab0d2f242
damm --- there is a bug in ConjunctionStrategy... added a WhereTest that exposes it and also something fishy with that same where test in GraphComputer. Jeez.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/ab0d2f24
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/ab0d2f24
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/ab0d2f24
Branch: refs/heads/master
Commit: ab0d2f24275f4aab66a31dcc60c62b0c7564ef69
Parents: 6749c20
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 18 15:34:37 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 18 15:34:37 2015 -0600
----------------------------------------------------------------------
.../traversal/step/filter/WhereStep.java | 84 +++++++++++++-----
.../decoration/ConjunctionStrategyTest.java | 6 ++
.../step/filter/GroovyWhereTest.groovy | 17 ++--
.../traversal/step/filter/WhereTest.java | 89 ++++++++++----------
4 files changed, 125 insertions(+), 71 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ab0d2f24/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 6299cd9..fe11135 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
@@ -52,18 +52,18 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
protected String startKey;
protected List<String> selectKeys;
protected P<Object> predicate;
- protected Traversal.Admin<?, ?> traversal;
+ protected Traversal.Admin<?, ?> whereTraversal;
protected Scope scope;
protected final Set<String> scopeKeys = new HashSet<>();
- public WhereStep(final Traversal.Admin traversal, final Scope scope, final Optional<String> startKey, final P<?> predicate) {
- super(traversal);
+ public WhereStep(final Traversal.Admin whereTraversal, final Scope scope, final Optional<String> startKey, final P<?> predicate) {
+ super(whereTraversal);
this.scope = scope;
this.startKey = startKey.orElse(null);
if(null != this.startKey) this.scopeKeys.add(this.startKey);
this.predicate = (P) predicate;
this.selectKeys = new ArrayList<>();
- this.traversal = null;
+ this.whereTraversal = null;
this.configurePredicates(this.predicate);
}
@@ -73,9 +73,9 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
this.startKey = null;
this.predicate = null;
this.selectKeys = null;
- this.traversal = whereTraversal.asAdmin();
- this.configureStartAndEndSteps(this.traversal);
- this.traversal = this.integrateChild(this.traversal);
+ this.whereTraversal = whereTraversal.asAdmin();
+ this.configureStartAndEndSteps(this.whereTraversal);
+ this.whereTraversal = this.integrateChild(this.whereTraversal);
}
private void configureStartAndEndSteps(final Traversal.Admin<?, ?> whereTraversal) {
@@ -124,8 +124,8 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
@Override
protected boolean filter(final Traverser.Admin<S> traverser) {
- if (null != this.traversal)
- return TraversalUtil.test((Traverser.Admin) traverser, this.traversal);
+ if (null != this.whereTraversal)
+ return TraversalUtil.test((Traverser.Admin) traverser, this.whereTraversal);
else {
this.setPredicateValues(this.predicate, traverser, this.selectKeys.iterator());
return this.predicate.test(null == this.startKey ? traverser.get() : this.getScopeValueByKey(Pop.last, this.startKey, traverser));
@@ -134,13 +134,13 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
@Override
public List<Traversal.Admin<?, ?>> getLocalChildren() {
- return null == this.traversal ? Collections.emptyList() : Collections.singletonList(this.traversal);
+ return null == this.whereTraversal ? Collections.emptyList() : Collections.singletonList(this.whereTraversal);
}
@Override
public String toString() {
// TODO: revert the predicates to their string form?
- return StringFactory.stepString(this, this.scope, this.startKey, this.predicate, this.traversal);
+ return StringFactory.stepString(this, this.scope, this.startKey, this.predicate, this.whereTraversal);
}
@Override
@@ -154,13 +154,13 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
if (null != this.predicate)
clone.predicate = this.predicate.clone();
else
- clone.traversal = clone.integrateChild(this.traversal.clone());
+ clone.whereTraversal = clone.integrateChild(this.whereTraversal.clone());
return clone;
}
@Override
public int hashCode() {
- return super.hashCode() ^ this.scope.hashCode() ^ (null == this.predicate ? this.traversal.hashCode() : this.predicate.hashCode());
+ return super.hashCode() ^ this.scope.hashCode() ^ (null == this.predicate ? this.whereTraversal.hashCode() : this.predicate.hashCode());
}
@Override
@@ -187,9 +187,10 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
//////////////////////////////
- public class WhereStartStep extends MapStep<S, Object> {
+ public static class WhereStartStep<S> extends MapStep<S, Object> implements Scoping {
private final String selectKey;
+ private Scope scope = Scope.global;
public WhereStartStep(final Traversal.Admin traversal, final String selectKey) {
super(traversal);
@@ -198,26 +199,47 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
@Override
protected Object map(final Traverser.Admin<S> traverser) {
- if (this.traversal.getEndStep() instanceof WhereStep.WhereEndStep)
- ((WhereEndStep) this.traversal.getEndStep()).processStartTraverser(traverser);
- return null == this.selectKey ? traverser.get() : WhereStep.this.getScopeValueByKey(Pop.last, this.selectKey, traverser);
+ if (this.getTraversal().getEndStep() instanceof WhereEndStep)
+ ((WhereEndStep) this.getTraversal().getEndStep()).processStartTraverser(traverser);
+ return null == this.selectKey ? traverser.get() : this.getScopeValueByKey(Pop.last, this.selectKey, traverser);
}
@Override
public String toString() {
- return StringFactory.stepString(this, this.selectKey);
+ return StringFactory.stepString(this, this.scope, this.selectKey);
}
@Override
public int hashCode() {
return super.hashCode() ^ (null == this.selectKey ? "null".hashCode() : this.selectKey.hashCode());
}
+
+ @Override
+ public Scope getScope() {
+ return this.scope;
+ }
+
+ @Override
+ public Scope recommendNextScope() {
+ return this.scope;
+ }
+
+ @Override
+ public void setScope(Scope scope) {
+ this.scope = scope;
+ }
+
+ @Override
+ public Set<String> getScopeKeys() {
+ return null == this.selectKey ? Collections.emptySet() : Collections.singleton(this.selectKey);
+ }
}
- public class WhereEndStep extends FilterStep<Object> {
+ public static class WhereEndStep extends FilterStep<Object> implements Scoping {
private final String matchKey;
private Object matchValue = null;
+ private Scope scope = Scope.global;
public WhereEndStep(final Traversal.Admin traversal, final String matchKey) {
super(traversal);
@@ -226,7 +248,7 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
public void processStartTraverser(final Traverser.Admin traverser) {
if (null != this.matchKey)
- this.matchValue = WhereStep.this.getScopeValueByKey(Pop.last, this.matchKey, traverser);
+ this.matchValue = this.getScopeValueByKey(Pop.last, this.matchKey, traverser);
}
@Override
@@ -236,13 +258,33 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
@Override
public String toString() {
- return StringFactory.stepString(this, this.matchKey);
+ return StringFactory.stepString(this, this.scope, this.matchKey);
}
@Override
public int hashCode() {
return super.hashCode() ^ (null == this.matchKey ? "null".hashCode() : this.matchKey.hashCode());
}
+
+ @Override
+ public Scope getScope() {
+ return this.scope;
+ }
+
+ @Override
+ public Scope recommendNextScope() {
+ return this.scope;
+ }
+
+ @Override
+ public void setScope(Scope scope) {
+ this.scope = scope;
+ }
+
+ @Override
+ public Set<String> getScopeKeys() {
+ return null == this.matchKey ? Collections.emptySet() : Collections.singleton(this.matchKey);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ab0d2f24/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java
index 56a5611..89902ff 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
+import org.apache.tinkerpop.gremlin.structure.T;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
@@ -34,6 +35,8 @@ import org.junit.runners.Parameterized;
import java.util.Arrays;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.eq;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -119,6 +122,9 @@ public class ConjunctionStrategyTest {
return Arrays.asList(new Traversal[][]{
{__.has("name", "stephen").or().where(__.out("knows").has("name", "stephen")), __.or(__.has("name", "stephen"), __.where(__.out("knows").has("name", "stephen")))},
{__.out("a").out("b").and().out("c").or().out("d"), __.and(__.out("a").out("b"), __.or(__.out("c"), __.out("d")))},
+ {__.as("1").out("a").out("b").as("2").and().as("3").out("c").as("4").or().as("5").out("d").as("6"), __.and(__.as("1").out("a").out("b").as("2"), __.or(__.as("3").out("c").as("4"), __.as("5").out("d").as("6")))},
+ {__.as("1").out("a").out("b").and().as("3").out("c").or().as("5").out("d"), __.and(__.as("1").out("a").out("b"), __.or(__.as("3").out("c"), __.as("5").out("d")))},
+ // {__.as("1").out("a").out("b").or().as("3").out("c").and().as("5").out("d"), __.or(__.as("1").out("a").out("b"), __.and(__.as("3").out("c"), __.as("5").out("d")))},
{__.as("a").out().as("b").and().as("c").in().as("d"), __.and(__.as("a").out().as("b"),__.as("c").in().as("d"))}
});
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ab0d2f24/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
index e6fbe34..a52fe4f 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
@@ -107,8 +107,8 @@ public abstract class GroovyWhereTest {
// complex and/or functionality
@Override
- public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX() {
- TraversalScriptHelper.compute("g.V.as('a').out.as('b').where(and(__.as('a').out('knows').as('b'),or(__.as('b').out('created').has('name','ripple'),__.as('b').in('knows').count.is(not(eq(0)))))).select.by('name')", g)
+ public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select() {
+ TraversalScriptHelper.compute("g.V.as('a').out.as('b').where(and(__.as('a').out('knows').as('b'),or(__.as('b').out('created').has('name','ripple'),__.as('b').in('knows').count.is(not(eq(0)))))).select", g)
}
@Override
@@ -117,14 +117,19 @@ public abstract class GroovyWhereTest {
}
@Override
- public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX() {
- TraversalScriptHelper.compute("g.V.as('a').out('created').as('b').where(and(__.as('b').in,__.not(__.as('a').out('created').has('name','ripple')))).select.by('name')", g)
+ public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select() {
+ TraversalScriptHelper.compute("g.V.as('a').out('created').as('b').where(and(__.as('b').in,__.not(__.as('a').out('created').has('name','ripple')))).select", g)
}
@Override
- public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX() {
- TraversalScriptHelper.compute("g.V.as('a').out('created').as('b').in('created').as('c').both('knows').both('knows').as('d').where('c',not(eq('a').or(eq('d')))).select.by('name')", g)
+ public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select() {
+ TraversalScriptHelper.compute("g.V.as('a').out('created').as('b').in('created').as('c').both('knows').both('knows').as('d').where('c',not(eq('a').or(eq('d')))).select", g)
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_select() {
+ TraversalScriptHelper.compute("g.V.as('a').out.as('b').where(__.as('b').in.count.is(eq(3)).or.where(__.as('b').out('created').and.as('b').has(label,'person'))).select", g)
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ab0d2f24/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index 294010e..1803c5d 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -83,13 +84,15 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
// complex and/or functionality
- public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX();
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select();
public abstract Traversal<Vertex, String> get_g_V_whereXoutXcreatedX_and_outXknowsX_or_inXknowsXX_valuesXnameX();
- public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX();
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select();
- public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX();
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select();
+
+ public abstract Traversal<Vertex, Map<String,Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_select();
// multi-labels
@@ -272,18 +275,12 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
@Test
@LoadGraphWith(MODERN)
- public void g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX() {
- Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX();
+ public void g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select() {
+ Traversal<Vertex, Map<String, Object>> traversal = get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select();
printTraversalForm(traversal);
- int counter = 0;
- while (traversal.hasNext()) {
- final Map<String, String> map = traversal.next();
- assertEquals(2, map.size());
- assertEquals("marko", map.get("a"));
- assertTrue(map.get("b").equals("josh") || map.get("b").equals("vadas"));
- counter++;
- }
- assertEquals(2, counter);
+ checkResults(makeMapList(2,
+ "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph, "josh"),
+ "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph, "vadas")), traversal);
}
@Test
@@ -296,37 +293,35 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
@Test
@LoadGraphWith(MODERN)
- public void g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX() {
- Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX();
+ public void g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select() {
+ Traversal<Vertex, Map<String, Object>> traversal = get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select();
printTraversalForm(traversal);
- int counter = 0;
- while (traversal.hasNext()) {
- final Map<String, String> map = traversal.next();
- assertEquals(2, map.size());
- assertTrue(map.get("a").equals("marko") || map.get("a").equals("peter"));
- assertEquals("lop", map.get("b"));
- counter++;
- }
- assertEquals(2, counter);
+ checkResults(makeMapList(2,
+ "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph, "lop"),
+ "a", convertToVertex(graph, "peter"), "b", convertToVertex(graph, "lop")), traversal);
}
@Test
@LoadGraphWith(MODERN)
- public void g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX() {
- Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX();
+ public void g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select() {
+ Traversal<Vertex, Map<String, Object>> traversal = get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select();
printTraversalForm(traversal);
- int counter = 0;
- while (traversal.hasNext()) {
- counter++;
- final Map<String, String> map = traversal.next();
- assertEquals(4, map.size());
- assertTrue(map.get("a").equals("marko") || map.get("a").equals("peter"));
- assertEquals("lop", map.get("b"));
- assertEquals("josh", map.get("c"));
- assertEquals("vadas", map.get("d"));
+ checkResults(makeMapList(4,
+ "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph, "lop"), "c", convertToVertex(graph, "josh"), "d", convertToVertex(graph, "vadas"),
+ "a", convertToVertex(graph, "peter"), "b", convertToVertex(graph, "lop"), "c", convertToVertex(graph, "josh"), "d", convertToVertex(graph, "vadas")), traversal);
+ }
- }
- assertEquals(2, counter);
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER) // TODO --- something fishy here.
+ public void g_V_asXaX_out_asXbX_whereXasXbX_in_count_isXeqX3XX_or_whereXasXbX_outXcreatedX_and_asXbX_hasXlabel_personXXX_select() {
+ final Traversal<Vertex, Map<String,Object>> traversal = get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_select();
+ printTraversalForm(traversal);
+ checkResults(makeMapList(2,
+ "a",convertToVertex(graph,"marko"),"b",convertToVertex(graph,"josh"),
+ "a",convertToVertex(graph,"marko"),"b",convertToVertex(graph,"lop"),
+ "a",convertToVertex(graph,"peter"),"b",convertToVertex(graph,"lop"),
+ "a",convertToVertex(graph,"josh"),"b",convertToVertex(graph,"lop")),traversal);
}
public static class Traversals extends WhereTest {
@@ -402,8 +397,8 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
// complex and/or functionality
@Override
- public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX() {
- return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).<String>select().by("name");
+ public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select() {
+ return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).select();
}
@Override
@@ -412,13 +407,19 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
}
@Override
- public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX() {
- return g.V().as("a").out("created").as("b").where(and(as("b").in(), not(as("a").out("created").has("name", "ripple")))).<String>select().by("name");
+ public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select() {
+ return g.V().as("a").out("created").as("b").where(and(as("b").in(), not(as("a").out("created").has("name", "ripple")))).select();
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select() {
+ return g.V().as("a").out("created").as("b").in("created").as("c").both("knows").both("knows").as("d").where("c", P.not(P.eq("a").or(P.eq("d")))).select();
}
@Override
- public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX() {
- return g.V().as("a").out("created").as("b").in("created").as("c").both("knows").both("knows").as("d").where("c", P.not(P.eq("a").or(P.eq("d")))).<String>select().by("name");
+ public Traversal<Vertex, Map<String,Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_select() {
+ // TODO: if you put 'b' in the where() it selects from path and you can't get path object metadata...damn.
+ return g.V().as("a").out().as("b").where(as("b").in().count().is(eq(3)).or().where(as("b").out("created").and().as("b").has(T.label, "person"))).select();
}
}
}
\ No newline at end of file