Andrea Child created TINKERPOP-3202:
---------------------------------------

             Summary: 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


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)

Reply via email to