Skip to content

Commit 1484c8d

Browse files
committedOct 26, 2016
Merge branch 'tp32'
2 parents 7a4b338 + ea8cd65 commit 1484c8d

File tree

12 files changed

+89
-8
lines changed

12 files changed

+89
-8
lines changed
 

‎CHANGELOG.asciidoc

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ TinkerPop 3.2.4 (Release Date: NOT OFFICIALLY RELEASED YET)
4141
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4242
4343
* Deprecated the "performance" tests in `OptIn`.
44+
* Added `Pick.none` and `Pick.any` to the serializers and importers.
4445
* Fixed a severe bug where `GraphComputer` strategies are not being loaded until the second use of the traversal source.
4546
4647
[[release-3-2-3]]

‎docs/src/dev/io/graphson.asciidoc

+1
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ file.withWriter { writer ->
149149
writer.write(toJson(Operator.sum, "Operator"))
150150
writer.write(toJson(Order.incr, "Order"))
151151
writer.write(toJson(Pop.all, "Pop"))
152+
writer.write(toJson(Pick.any, "Pick"))
152153
writer.write(toJson(org.apache.tinkerpop.gremlin.util.function.Lambda.function("{ it.get() }"), "Lambda"))
153154
tm = g.V().hasLabel('person').out().out().tree().profile().next()
154155
metrics = new org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics(tm.getMetrics(0));

‎gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java

+4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
3232
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
3333
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
34+
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
3435
import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
3536
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
3637
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy;
@@ -145,6 +146,7 @@ static final class GraphSONModuleV2d0 extends GraphSONModule {
145146
Order.values(),
146147
Pop.values(),
147148
SackFunctions.Barrier.values(),
149+
TraversalOptionParent.Pick.values(),
148150
Scope.values(),
149151
T.values()).flatMap(Stream::of).forEach(e -> put(e.getClass(), e.getDeclaringClass().getSimpleName()));
150152
Arrays.asList(
@@ -215,6 +217,7 @@ protected GraphSONModuleV2d0(final boolean normalize) {
215217
Pop.class,
216218
SackFunctions.Barrier.class,
217219
Scope.class,
220+
TraversalOptionParent.Pick.class,
218221
T.class).forEach(e -> addSerializer(e, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer()));
219222
addSerializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonSerializer());
220223
addSerializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonSerializer());
@@ -245,6 +248,7 @@ protected GraphSONModuleV2d0(final boolean normalize) {
245248
Pop.values(),
246249
SackFunctions.Barrier.values(),
247250
Scope.values(),
251+
TraversalOptionParent.Pick.values(),
248252
T.values()).flatMap(Stream::of).forEach(e -> addDeserializer(e.getClass(), new GraphSONTraversalSerializersV2d0.EnumJacksonDeserializer(e.getDeclaringClass())));
249253
addDeserializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonDeserializer());
250254
addDeserializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonDeserializer());

‎gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.tinkerpop.gremlin.process.traversal.Pop;
3333
import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
3434
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
35+
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
3536
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
3637
import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep;
3738
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupCountStep;
@@ -349,7 +350,8 @@ public final static class Builder implements Mapper.Builder<Builder> {
349350
add(GryoTypeReg.of(Column.class, 132));
350351
add(GryoTypeReg.of(Pop.class, 133));
351352
add(GryoTypeReg.of(SackFunctions.Barrier.class, 135));
352-
add(GryoTypeReg.of(HashSetSupplier.class, 136, new UtilSerializers.HashSetSupplierSerializer())); // ***LAST ID***
353+
add(GryoTypeReg.of(TraversalOptionParent.Pick.class, 137)); // ***LAST ID***
354+
add(GryoTypeReg.of(HashSetSupplier.class, 136, new UtilSerializers.HashSetSupplierSerializer()));
353355

354356
add(GryoTypeReg.of(TraverserSet.class, 58));
355357
add(GryoTypeReg.of(Tree.class, 61));

‎gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/CoreImports.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,20 @@
4444
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
4545
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
4646
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
47+
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
4748
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
4849
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy;
4950
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategy;
5051
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
5152
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
5253
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
53-
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy;
5454
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy;
5555
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
5656
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy;
5757
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy;
5858
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
5959
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IncidentToAdjacentStrategy;
60+
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy;
6061
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchPredicateStrategy;
6162
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy;
6263
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy;
@@ -123,6 +124,8 @@ public final class CoreImports {
123124
CLASS_IMPORTS.add(Pop.class);
124125
CLASS_IMPORTS.add(Scope.class);
125126
CLASS_IMPORTS.add(T.class);
127+
CLASS_IMPORTS.add(TraversalOptionParent.class);
128+
CLASS_IMPORTS.add(TraversalOptionParent.Pick.class);
126129
CLASS_IMPORTS.add(P.class);
127130
// remote
128131
CLASS_IMPORTS.add(RemoteConnection.class);
@@ -203,6 +206,7 @@ public final class CoreImports {
203206
Collections.addAll(ENUM_IMPORTS, Pop.values());
204207
Collections.addAll(ENUM_IMPORTS, Scope.values());
205208
Collections.addAll(ENUM_IMPORTS, T.values());
209+
Collections.addAll(ENUM_IMPORTS, TraversalOptionParent.Pick.values());
206210

207211
}
208212

‎gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyBranchTest.groovy

+12-1
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,24 @@ public abstract class GroovyBranchTest {
3535
}
3636

3737
@Override
38-
public Traversal<Vertex, Object> get_g_V_branchXlabelX_optionXperson__ageX_optionXsoftware__langX_optionXsoftware__nameX() {
38+
public Traversal<Vertex, Object> get_g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX() {
3939
new ScriptTraversal<>(g, "gremlin-groovy", """
4040
g.V.branch{it.label == 'person' ? 'a' : 'b'}
4141
.option('a', __.age)
4242
.option('b', __.lang)
4343
.option('b', __.name)
4444
""")
4545
}
46+
47+
@Override
48+
public Traversal<Vertex, Object> get_g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX_optionXany__labelX() {
49+
new ScriptTraversal<>(g, "gremlin-groovy", """
50+
g.V.branch(label().is("person").count)
51+
.option(1L,__.age)
52+
.option(0L,__.lang)
53+
.option(0L,__.name)
54+
.option(any,label())
55+
""")
56+
}
4657
}
4758
}

‎gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy

+10
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,15 @@ public abstract class GroovyChooseTest {
4343
public Traversal<Vertex, String> get_g_V_chooseXhasLabelXpersonX_and_outXcreatedX__outXknowsX__identityX_name() {
4444
new ScriptTraversal<>(g, "gremlin-groovy", "g.V.choose(hasLabel('person').and().out('created'), out('knows'), identity()).name")
4545
}
46+
47+
@Override
48+
public Traversal<Vertex, String> get_g_V_chooseXlabelX_optionXblah__outXknowsXX_optionXbleep__outXcreatedXX_optionXnone__identityX_name() {
49+
new ScriptTraversal<>(g, "gremlin-groovy", """
50+
g.V.choose(label())
51+
.option("blah", out("knows"))
52+
.option("bleep", out("created"))
53+
.option(none, identity()).name
54+
""")
55+
}
4656
}
4757
}

‎gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java

+3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
2828
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
2929
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
30+
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
3031
import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
3132
import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
3233
import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
@@ -151,6 +152,8 @@ else if (object instanceof SackFunctions.Barrier)
151152
return "SackFunctions.Barrier." + object.toString();
152153
else if (object instanceof VertexProperty.Cardinality)
153154
return "VertexProperty.Cardinality." + object.toString();
155+
else if (object instanceof TraversalOptionParent.Pick)
156+
return "TraversalOptionParent.Pick." + object.toString();
154157
else if (object instanceof Enum)
155158
return ((Enum) object).getDeclaringClass().getSimpleName() + "." + object.toString();
156159
else if (object instanceof Element)

‎gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java

+3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
3030
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
3131
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
32+
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
3233
import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
3334
import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
3435
import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
@@ -183,6 +184,8 @@ else if (object instanceof VertexProperty.Cardinality)
183184
return "Cardinality." + SymbolHelper.toPython(object.toString());
184185
else if (object instanceof SackFunctions.Barrier)
185186
return "Barrier." + SymbolHelper.toPython(object.toString());
187+
else if (object instanceof TraversalOptionParent.Pick)
188+
return "Pick." + SymbolHelper.toPython(object.toString());
186189
else if (object instanceof Enum)
187190
return convertStatic(((Enum) object).getDeclaringClass().getSimpleName() + ".") + SymbolHelper.toPython(object.toString());
188191
else if (object instanceof P)

‎gremlin-python/src/main/jython/gremlin_python/process/traversal.py

+4
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ def next(self, amount=None):
118118
statics.add_static('valueDecr', Order.valueDecr)
119119
statics.add_static('shuffle', Order.shuffle)
120120

121+
Pick = Enum('Pick', 'any none')
122+
statics.add_static('any', Pick.any)
123+
statics.add_static('none', Pick.none)
124+
121125
Pop = Enum('Pop', 'all_ first last')
122126
statics.add_static('first', Pop.first)
123127
statics.add_static('last', Pop.last)

‎gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchTest.java

+24-5
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
2323
import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
2424
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
25-
import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
2625
import org.apache.tinkerpop.gremlin.structure.Vertex;
2726
import org.junit.Test;
2827
import org.junit.runner.RunWith;
@@ -32,6 +31,7 @@
3231
import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
3332
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.label;
3433
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.values;
34+
import static org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent.Pick.any;
3535

3636
/**
3737
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -41,7 +41,9 @@ public abstract class BranchTest extends AbstractGremlinProcessTest {
4141

4242
public abstract Traversal<Vertex, Object> get_g_V_branchXlabel_eq_person__a_bX_optionXa__ageX_optionXb__langX_optionXb__nameX();
4343

44-
public abstract Traversal<Vertex, Object> get_g_V_branchXlabelX_optionXperson__ageX_optionXsoftware__langX_optionXsoftware__nameX();
44+
public abstract Traversal<Vertex, Object> get_g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX();
45+
46+
public abstract Traversal<Vertex, Object> get_g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX_optionXany__labelX();
4547

4648
@Test
4749
@LoadGraphWith(MODERN)
@@ -53,12 +55,20 @@ public void g_V_branchXlabel_eq_person__a_bX_optionXa__ageX_optionXb__langX_opti
5355

5456
@Test
5557
@LoadGraphWith(MODERN)
56-
public void g_V_branchXlabelX_optionXperson__ageX_optionXsoftware__langX_optionXsoftware__nameX() {
57-
final Traversal<Vertex, Object> traversal = get_g_V_branchXlabelX_optionXperson__ageX_optionXsoftware__langX_optionXsoftware__nameX();
58+
public void g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX() {
59+
final Traversal<Vertex, Object> traversal = get_g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX();
5860
printTraversalForm(traversal);
5961
checkResults(Arrays.asList("java", "java", "lop", "ripple", 29, 27, 32, 35), traversal);
6062
}
6163

64+
@Test
65+
@LoadGraphWith(MODERN)
66+
public void g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX_optionXany__labelX() {
67+
final Traversal<Vertex, Object> traversal = get_g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX_optionXany__labelX();
68+
printTraversalForm(traversal);
69+
checkResults(Arrays.asList("java", "java", "lop", "ripple", 29, 27, 32, 35, "person", "person", "person", "person", "software", "software"), traversal);
70+
}
71+
6272
public static class Traversals extends BranchTest {
6373

6474
@Override
@@ -70,11 +80,20 @@ public Traversal<Vertex, Object> get_g_V_branchXlabel_eq_person__a_bX_optionXa__
7080
}
7181

7282
@Override
73-
public Traversal<Vertex, Object> get_g_V_branchXlabelX_optionXperson__ageX_optionXsoftware__langX_optionXsoftware__nameX() {
83+
public Traversal<Vertex, Object> get_g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX() {
7484
return g.V().branch(label().is("person").count())
7585
.option(1L, values("age"))
7686
.option(0L, values("lang"))
7787
.option(0L, values("name"));
7888
}
89+
90+
@Override
91+
public Traversal<Vertex, Object> get_g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX_optionXany__labelX() {
92+
return g.V().branch(label().is("person").count())
93+
.option(1L, values("age"))
94+
.option(0L, values("lang"))
95+
.option(0L, values("name"))
96+
.option(any, label());
97+
}
7998
}
8099
}

‎gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseTest.java

+19
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
2323
import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
2424
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
25+
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
2526
import org.apache.tinkerpop.gremlin.process.traversal.step.util.MapHelper;
2627
import org.apache.tinkerpop.gremlin.structure.Vertex;
2728
import org.junit.Test;
@@ -35,6 +36,7 @@
3536
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.hasLabel;
3637
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.identity;
3738
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
39+
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.label;
3840
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
3941
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.valueMap;
4042
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.values;
@@ -54,6 +56,7 @@ public abstract class ChooseTest extends AbstractGremlinProcessTest {
5456

5557
public abstract Traversal<Vertex, String> get_g_V_chooseXhasLabelXpersonX_and_outXcreatedX__outXknowsX__identityX_name();
5658

59+
public abstract Traversal<Vertex, String> get_g_V_chooseXlabelX_optionXblah__outXknowsXX_optionXbleep__outXcreatedXX_optionXnone__identityX_name();
5760

5861
@Test
5962
@LoadGraphWith(MODERN)
@@ -89,6 +92,14 @@ public void g_V_chooseXhasLabelXpersonX_and_outXcreatedX__outXknowsX__identityX_
8992
checkResults(Arrays.asList("lop", "ripple", "josh", "vadas", "vadas"), traversal);
9093
}
9194

95+
@Test
96+
@LoadGraphWith(MODERN)
97+
public void g_V_chooseXlabelX_optionXblah__outXknowsXX_optionXbleep__outXcreatedXX_optionXnone__identityX_name() {
98+
final Traversal<Vertex, String> traversal = get_g_V_chooseXlabelX_optionXblah__outXknowsXX_optionXbleep__outXcreatedXX_optionXnone__identityX_name();
99+
printTraversalForm(traversal);
100+
checkResults(Arrays.asList("marko", "vadas", "peter", "josh", "lop", "ripple"), traversal);
101+
}
102+
92103
public static class Traversals extends ChooseTest {
93104

94105
@Override
@@ -107,5 +118,13 @@ public Traversal<Vertex, String> get_g_V_chooseXlabel_eqXpersonX__outXknowsX__in
107118
public Traversal<Vertex, String> get_g_V_chooseXhasLabelXpersonX_and_outXcreatedX__outXknowsX__identityX_name() {
108119
return g.V().choose(hasLabel("person").and().out("created"), out("knows"), identity()).values("name");
109120
}
121+
122+
@Override
123+
public Traversal<Vertex, String> get_g_V_chooseXlabelX_optionXblah__outXknowsXX_optionXbleep__outXcreatedXX_optionXnone__identityX_name() {
124+
return g.V().choose(label())
125+
.option("blah", out("knows"))
126+
.option("bleep", out("created"))
127+
.option(TraversalOptionParent.Pick.none, identity()).values("name");
128+
}
110129
}
111130
}

0 commit comments

Comments
 (0)
Please sign in to comment.