You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Cyril Scetbon (Jira)" <ji...@apache.org> on 2020/03/12 20:32:00 UTC
[jira] [Commented] (TINKERPOP-2315) Implement some form of clone()
or reset() for Traversal in GLVs
[ https://issues.apache.org/jira/browse/TINKERPOP-2315?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17058234#comment-17058234 ]
Cyril Scetbon commented on TINKERPOP-2315:
------------------------------------------
[~spmallette], there is something wrong cause I can't use it to refactor code. The original traversal is updated when I touch the cloned object :
{noformat}
In [12]: t0 = g.V().hasLabel('OID')
In [13]: t0
Out[13]: [['V'], ['hasLabel', 'OID'], ['values', '_ipython_canary_method_should_not_exist_']]
In [14]: t1 = t0.clone()
In [15]: t1
Out[15]: [['V'], ['hasLabel', 'OID'], ['values', '_ipython_canary_method_should_not_exist_'], ['values', '_ipython_canary_method_should_not_exist_']]
In [16]: t1 = t1.has('u1', 'v1')
In [17]: t1 Out[17]: [['V'], ['hasLabel', 'OID'], ['values', '_ipython_canary_method_should_not_exist_'], ['values', '_ipython_canary_method_should_not_exist_'], ['has', 'u1', 'v1'], ['values', '_ipython_canary_method_should_not_exist_']]
In [18]: t0
Out[18]: [['V'], ['hasLabel', 'OID'], ['values', '_ipython_canary_method_should_not_exist_'], ['values', '_ipython_canary_method_should_not_exist_'], ['has', 'u1', 'v1'], ['values', '_ipython_canary_method_should_not_exist_'], ['values', '_ipython_canary_method_should_not_exist_']]
{noformat}
Why is t0 updated too ? I'm trying to use clone() to use the same traversal but then do different lookups after that.
Here is another example :
{noformat}
In [50]: graph_traversal = g.V().hasLabel('OID')
In [51]: graph_traversal.clone().limit(10).count().next()
Out[51]: 1
In [52]: graph_traversal.clone().limit(10).count().next()
Out[52]: 1
In [53]: graph_traversal.clone().limit(10).count().next()
Out[53]: 1
In [54]: graph_traversal.clone().limit(10).count()
Out[54]: [['V'], ['hasLabel', 'OID'], ['limit', 10], ['count'], ['limit', 10], ['count'], ['limit', 10], ['count'], ['limit', 10], ['count'], ['values', '_ipython_canary_method_should_not_exist_']]
{noformat}
You see that if the traversal is cloned 4 times it has all 4 calls on it and does not do what we think it does ...
> Implement some form of clone() or reset() for Traversal in GLVs
> ---------------------------------------------------------------
>
> Key: TINKERPOP-2315
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2315
> Project: TinkerPop
> Issue Type: Improvement
> Components: dotnet, javascript, python
> Affects Versions: 3.3.9
> Reporter: Stephen Mallette
> Assignee: Stephen Mallette
> Priority: Major
> Fix For: 3.5.0, 3.4.5, 3.3.10
>
>
> There doesn't seem to be a method to do what we do in Java fairly often:
> {code}
> attached = g.V().hasLabel('OID').out('attached')
> assert attached.clone().count().next() == 4
> uids = attached.clone().dedup().toList()
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)