[
https://issues.apache.org/jira/browse/TINKERPOP-3202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18033968#comment-18033968
]
ASF GitHub Bot commented on TINKERPOP-3202:
-------------------------------------------
kenhuuu commented on code in PR #3255:
URL: https://github.com/apache/tinkerpop/pull/3255#discussion_r2475573078
##########
gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Range.feature:
##########
@@ -546,104 +546,104 @@ Feature: Step - range()
| result |
| v[marko] |
- Scenario: g_V_repeatXout_whereXhasXnameX_limitX1XXX_timesX2X
+ Scenario: g_V_repeatXout_whereXhasXnameX_order_limitX1XXX_timesX2X
Given the modern graph
And the traversal of
"""
- g.V().repeat(out().where(has("name").limit(1))).times(2)
+ g.V().repeat(out().where(has("name").order().limit(1))).times(2)
Review Comment:
By default, `order()` **without** a `by()` will order by the underlying
Element equality, which is like based on the id. Providers may have different
Ids for these vertices so the output might still be different. You'll probably
need to do something like `order().by("name")` for modern and grateful.
> 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)