You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by co...@apache.org on 2025/09/17 23:47:36 UTC
(tinkerpop) branch repeatSemanticsPoC created (now b4db1b3771)
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a change to branch repeatSemanticsPoC
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
at b4db1b3771 PoC attempting to make repeat() act as a global parent not a local parent
This branch includes the following new commits:
new b4db1b3771 PoC attempting to make repeat() act as a global parent not a local parent
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(tinkerpop) 01/01: PoC attempting to make repeat() act as a global parent not a local parent
Posted by co...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch repeatSemanticsPoC
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit b4db1b3771dd71e529135069f7f14de39947e7af
Author: Cole-Greer <Co...@improving.com>
AuthorDate: Wed Sep 17 16:47:22 2025 -0700
PoC attempting to make repeat() act as a global parent not a local parent
---
.../process/traversal/step/branch/RepeatStep.java | 42 +++++++++++++++-------
.../gremlin/test/features/integrated/Paths.feature | 4 +--
.../TinkerGraphParameterizedFeatureTest.java | 2 +-
3 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
index 17b8a2ef4e..e56b2c06b2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
@@ -21,9 +21,12 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.branch;
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.Barrier;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ComputerAwareStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -46,6 +49,7 @@ public final class RepeatStep<S> extends ComputerAwareStep<S, S> implements Trav
private String loopName = null;
public boolean untilFirst = false;
public boolean emitFirst = false;
+ private boolean first = true;
public RepeatStep(final Traversal.Admin traversal) {
super(traversal);
@@ -206,25 +210,39 @@ public final class RepeatStep<S> extends ComputerAwareStep<S, S> implements Trav
throw new IllegalStateException("The repeat()-traversal was not defined: " + this);
while (true) {
- if (this.repeatTraversal.getEndStep().hasNext()) {
+ if (!first && this.repeatTraversal.getEndStep().hasNext()) {
return this.repeatTraversal.getEndStep();
} else {
- final Traverser.Admin<S> start = this.starts.next();
- start.initialiseLoops(this.getId(), this.loopName);
- if (doUntil(start, true)) {
- start.resetLoops();
- return IteratorUtils.of(start);
- }
- this.repeatTraversal.addStart(start);
- if (doEmit(start, true)) {
- final Traverser.Admin<S> emitSplit = start.split();
- emitSplit.resetLoops();
- return IteratorUtils.of(emitSplit);
+ this.first = false;
+ if (!TraversalHelper.getStepsOfAssignableClassRecursively(Barrier.class, repeatTraversal).isEmpty()) {
+ if (!this.starts.hasNext())
+ throw FastNoSuchElementException.instance();
+ while (this.starts.hasNext()) {
+ initStart(this.starts.next());
+ }
+ } else {
+ Iterator<Traverser.Admin<S>> iter = initStart(this.starts.next());
+ return iter == null ? Collections.emptyIterator() : iter;
}
}
}
}
+ private Iterator<Traverser.Admin<S>> initStart(final Traverser.Admin<S> start) {
+ start.initialiseLoops(this.getId(), this.loopName);
+ if (doUntil(start, true)) {
+ start.resetLoops();
+ return IteratorUtils.of(start);
+ }
+ this.repeatTraversal.addStart(start);
+ if (doEmit(start, true)) {
+ final Traverser.Admin<S> emitSplit = start.split();
+ emitSplit.resetLoops();
+ return IteratorUtils.of(emitSplit);
+ }
+ return null;
+ }
+
@Override
protected Iterator<Traverser.Admin<S>> computerAlgorithm() throws NoSuchElementException {
if (null == this.repeatTraversal)
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/Paths.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/Paths.feature
index 172754f81a..ad3a4a74ce 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/Paths.feature
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/Paths.feature
@@ -18,7 +18,7 @@
@StepClassIntegrated
Feature: Step - paths
- @GraphComputerVerificationReferenceOnly @InsertionOrderingRequired
+ @GraphComputerVerificationReferenceOnly @InsertionOrderingRequired @PoCIgnore
Scenario: g_V_shortestpath
Given the modern graph
And the traversal of
@@ -82,7 +82,7 @@ Feature: Step - paths
| l[lop,josh]|
| l[marko,lop,peter]|
- @GraphComputerVerificationStarGraphExceeded @WithSeedStrategy @InsertionOrderingRequired
+ @GraphComputerVerificationStarGraphExceeded @WithSeedStrategy @InsertionOrderingRequired @PoCIgnore
Scenario: g_V_playlist_paths
Given the grateful graph
And the traversal of
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphParameterizedFeatureTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphParameterizedFeatureTest.java
index 88b6e4f246..198ecfe957 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphParameterizedFeatureTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphParameterizedFeatureTest.java
@@ -30,7 +30,7 @@ import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
- tags = "not @GraphComputerOnly and not @AllowNullPropertyValues",
+ tags = "not @GraphComputerOnly and not @AllowNullPropertyValues and not @PoCIgnore",
glue = { "org.apache.tinkerpop.gremlin.features" },
objectFactory = TinkerGraphParameterizedFeatureTest.TinkerGraphGuiceFactory.class,
features = { "classpath:/org/apache/tinkerpop/gremlin/test/features" },