This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3178
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/TINKERPOP-3178 by this push:
new bda10d76a3 wip - use TokenTraversal
bda10d76a3 is described below
commit bda10d76a3567535ed339d394aaf1904812b32c6
Author: Stephen Mallette <[email protected]>
AuthorDate: Mon Jul 28 12:55:47 2025 -0400
wip - use TokenTraversal
---
CHANGELOG.asciidoc | 4 ++++
.../process/traversal/dsl/graph/GraphTraversal.java | 18 ++++++++++++++++++
.../process/traversal/step/branch/ChooseStep.java | 7 -------
3 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 3c91a6a80a..f3d57622ce 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -58,6 +58,10 @@ This release also includes changes from <<release-3-7-XXX,
3.7.XXX>>.
* Added integer overflow checks.
* Added missing strategies to the `TraversalStrategies` global cache as well
as `CoreImports` in `gremlin-groovy`.
* Added missing strategies to `strategies.py` in `gremlin-python`.
+* Preferred use of `TokenTraversal` when using `T` with `choose` instead of
`LambdaMapTraversal` which treats `T` more abstractly as a `Function`.
+* Changed `choose` to only use the first `option` matched.
+* Added `Pick.unproductive` to allow for matches on unproductive predicates.
+* Changed `choose` to pass through traversers of unproductive predicates.`
* Updated `OptionsStrategy` in `gremlin-python` to take options directly as
keyword arguments.
* Added static `instance()` method to `ElementIdStrategy` to an instance with
the default configuration.
* Updated `ElementIdStrategy.getConfiguration()` to help with serialization.
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 041888cb22..2678cf82b1 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
@@ -43,6 +43,7 @@ import
org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.LoopTraversal;
import
org.apache.tinkerpop.gremlin.process.traversal.lambda.PredicateTraverser;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.TrueTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
import org.apache.tinkerpop.gremlin.process.traversal.step.Configuring;
@@ -3326,6 +3327,21 @@ public interface GraphTraversal<S, E> extends
Traversal<S, E> {
return this.asAdmin().addStep(new ChooseStep<E, E2,
Boolean>(this.asAdmin(), (Traversal.Admin<E, ?>) traversalPredicate,
(Traversal.Admin<E, E2>) trueChoice, (Traversal.Admin<E, E2>) __.identity()));
}
+ /**
+ * Routes the current traverser to a particular traversal branch option
which allows the creation of if-then-else
+ * like semantics within a traversal. A {@code choose} is modified by
{@link #option} which provides the various
+ * branch choices.
+ *
+ * @param t extracts this value from an incoming element to match against
an option
+ * @return the traversal with the appended {@link ChooseStep}
+ * @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#choose-step"
target="_blank">Reference Documentation - Choose Step</a>
+ * @since 3.8.0
+ */
+ public default <E2> GraphTraversal<S, E2> choose(final T t) {
+ this.asAdmin().getBytecode().addStep(Symbols.choose, t);
+ return this.asAdmin().addStep(new ChooseStep<>(this.asAdmin(), new
TokenTraversal<>(t)));
+ }
+
/**
* Routes the current traverser to a particular traversal branch option
which allows the creation of if-then-else
* like semantics within a traversal. A {@code choose} is modified by
{@link #option} which provides the various
@@ -3337,6 +3353,8 @@ public interface GraphTraversal<S, E> extends
Traversal<S, E> {
* @since 3.0.0-incubating
*/
public default <M, E2> GraphTraversal<S, E2> choose(final Function<E, M>
choiceFunction) {
+ if (choiceFunction instanceof T) choose((T) choiceFunction);
+
this.asAdmin().getBytecode().addStep(Symbols.choose, choiceFunction);
return this.asAdmin().addStep(new ChooseStep<>(this.asAdmin(),
(Traversal.Admin<E, M>) __.map(new FunctionTraverser<>(choiceFunction))));
}
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseStep.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseStep.java
index cbd75b3f26..ea69c77705 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseStep.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseStep.java
@@ -20,17 +20,10 @@ package
org.apache.tinkerpop.gremlin.process.traversal.step.branch;
import org.apache.tinkerpop.gremlin.process.traversal.Pick;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.HasNextStep;
import
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
-import
org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalProduct;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
import java.util.List;
/**