Kelvin Lawrence created TINKERPOP-2906:
------------------------------------------
Summary: Query using coalesce adding the same vertex twice
Key: TINKERPOP-2906
URL: https://issues.apache.org/jira/browse/TINKERPOP-2906
Project: TinkerPop
Issue Type: Bug
Affects Versions: 3.6.2, 3.6.0
Reporter: Kelvin Lawrence
Will looking into a question on Stack Overflow about selectively adding a
vertex based on a set of values in a list, I think I may have run into an odd
issue. Note that this can also be solved using mergeV, but that
notwithstanding, the behavior below seems odd. It can be reproduced just using
TinkerGraph and the Gremlin Console. Everything works as expected until the RHS
of the coalesce() step is an addV() step.
gremlin> g.addV('Person').property('name','Sam')
==>v[16]gremlin> g
==>graphtraversalsource[tinkergraph[vertices:1 edges:0], standard]gremlin>
g.inject(['Sam','Peter','Frank']).
......1> unfold().as('find').
......2> V().as('p').
......3> coalesce(
......4> where(eq('p')).
......5> by(select('find')).
......6> by('name'),constant(1))
==>v[16]
==>1
==>1gremlin> g.inject(['Sam','Peter','Frank']).
......1> unfold().as('find').
......2> V().as('p').
......3> coalesce(
......4> where(eq('p')).
......5> by(select('find')).
......6> by('name'),select('find'))
==>v[16]
==>Peter
==>Frankgremlin> g.inject(['Sam','Peter','Frank']).
......1> unfold().as('find').
......2> V().as('p').
......3> coalesce(
......4> where(eq('p')).
......5> by(select('find')).
......6> by('name'),addV('Person').property('name',select('find'))
......7> )
==>v[16]
==>v[18]
==>v[20]
==>v[22]gremlin> g.V().valueMap(true)
==>[id:16,label:Person,name:[Sam]]
==>[id:18,label:Person,name:[Peter]]
==>[id:20,label:Person,name:[Frank]]
==>[id:22,label:Person,name:[Frank]]
gremlin> g.V().drop()gremlin> g.addV('Person').property('name','Sam')
==>v[24]gremlin> g.inject(['Sam','Peter','Frank']).
......1> unfold().as('find').
......2> V().as('p').
......3> coalesce(
......4> where(eq('p')).
......5> by(select('find')).
......6> by('name'),
......7> addV('Person').property('name',select('find'))).profile()
==>Traversal Metrics
Step Count
Traversers Time (ms) % Dur
=============================================================================================================
InjectStep([[Sam, Peter, Frank]]) 1
1 0.043 4.19
UnfoldStep@[find] 3
3 0.083 8.00
TinkerGraphStep(vertex,[])@[p] 4
4 0.155 14.91
CoalesceStep([[WherePredicateStep(null,eq(p),[[... 4
4 0.761 72.89
WherePredicateStep(null,eq(p),[[SelectOneStep... 1
1 0.181
SelectOneStep(last,find,null) 4
4 0.057
AddVertexStep({name=[[SelectOneStep(last,find... 3
3 0.246
SelectOneStep(last,find,null) 3
3 0.025
>TOTAL -
- 1.044 -
gremlin> g.inject(['Sam','Peter','Frank']).
......1> unfold().as('find').V().profile()
==>Traversal Metrics
Step Count
Traversers Time (ms) % Dur
=============================================================================================================
InjectStep([[Sam, Peter, Frank]]) 1
1 0.028 8.93
UnfoldStep@[find] 3
3 0.043 13.97
TinkerGraphStep(vertex,[]) 3
3 0.241 77.10
>TOTAL -
- 0.313 -
--
This message was sent by Atlassian Jira
(v8.20.10#820010)