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;
 
 /**

Reply via email to