You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Andrea Child (Jira)" <ji...@apache.org> on 2025/10/23 19:12:00 UTC
[jira] [Updated] (TINKERPOP-3202) Limit and range semantics change when used inside repeat
[ https://issues.apache.org/jira/browse/TINKERPOP-3202?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrea Child updated TINKERPOP-3202:
------------------------------------
Fix Version/s: 4.0.0
> Limit and range semantics change when used inside repeat
> --------------------------------------------------------
>
> Key: TINKERPOP-3202
> URL: https://issues.apache.org/jira/browse/TINKERPOP-3202
> Project: TinkerPop
> Issue Type: Improvement
> Components: process
> Affects Versions: 3.7.4
> Reporter: Andrea Child
> Priority: Major
> Labels: breaking
> Fix For: 4.0.0, 3.8.0
>
>
> Original dev list post: [https://lists.apache.org/thread/nclqpdb5d9wm6cgdxkk39k0co7gt564l]
> Currently, limit() and range() steps inside repeat() maintain global counters that persist across repeat iterations, leading to strange behaviour. To demonstrate, consider the following limit() traversals for the Grateful Dead toy graph which are querying for pairs of song sequences starting with the song 'JAM'.
> This repeat() traversal does not produce results because the limit(2) counter reaches the global limit after the first iteration (note that RepeatUnrollStrategy is disabled so that the repeat() step is not stripped by strategy optimization):
> gremlin> g.withoutStrategies(RepeatUnrollStrategy).V().has('name','JAM').repeat(out('followedBy').limit(2)).times(2).values('name’)
> gremlin>
> However, the following unrolled traversal without repeat() produces 2 results:
> gremlin> g.V().has('name','JAM').out('followedBy').limit(2).out('followedBy').limit(2).propertyMap('name’)
> ==>[name:[vp[name->HURTS ME TOO]]]
> ==>[name:[vp[name->BLACK THROATED WIND]]]
> These examples demonstrate how having globally tracked limit() and range() counters inside repeat() are counter intuitive and instead should be tracked per-iteration.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)