Hi,

`coalesce` was discussed way back when `optional` was first discussed.
@Daniel's comment seems to show that `coalesce` was not what we wanted.
@Marko's comment indicated "Ah smart. The reason choose works and
coalesce doesn't is because one uses globalTraversals and the other uses
localTraversals"

Do there comments still hold?

Thanks
Pieter

On 21/10/2016 23:42, Marko A. Rodriguez (JIRA) wrote:
>     [ 
> https://issues.apache.org/jira/browse/TINKERPOP-1506?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15596463#comment-15596463
>  ] 
>
> Marko A. Rodriguez commented on TINKERPOP-1506:
> -----------------------------------------------
>
> Huh. I just reailzed we can implement {{optional()}} using {{ColesceStep}} 
> and we don't have this problem.
>
> {code}
> gremlin> g.inject(1).coalesce(addV('twin'),identity())
> ==>v[0]
> gremlin> g.V()
> ==>v[0]
> {code}
>
> Thus, {{optional(x)}} -> {{coalesce(x,identity())}}. Easy fix. Any objections 
> to this direction?
>
>
>> Optional/Coalesce should not allow sideEffect traversals.
>> ---------------------------------------------------------
>>
>>                 Key: TINKERPOP-1506
>>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1506
>>             Project: TinkerPop
>>          Issue Type: Improvement
>>          Components: process
>>    Affects Versions: 3.1.4, 3.2.2
>>            Reporter: Marko A. Rodriguez
>>
>> It took me a long time to realize what was wrong with a traversal I wrote 
>> that used {{optional(blah.sideEffect.blah)}}. {{optional()}} maps to 
>> {{ChooseStep}} under the hood and the provide traversal is first tested for 
>> a {{hasNext()}}. If so, the it plays itself out. The problem is that if 
>> there is a side-effect in the traversal child, then it gets executed twice. 
>> {code}
>> gremlin> g = TinkerGraph.open().traversal()
>> ==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
>> gremlin> g.inject(1).optional(addV('twin'))
>> ==>v[1]
>> gremlin> g.V().valueMap(true)
>> ==>[id:0,label:twin]
>> ==>[id:1,label:twin]
>> {code}
>> We should NOT allow {{optional()}} to have {{SideEffectStep}} steps in it so 
>> as not to cause unexpected behavior. {{StandardVerificationStrategy}} can 
>> analyze and throw an exception if necessary.
>> Also, {{coalesce()}} has a similar problem, though perhaps it can be a 
>> useful 'technique.'
>> {code}
>> gremlin> g = TinkerGraph.open().traversal()
>> ==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
>> gremlin> g.inject(1).coalesce(addV('twin1').limit(0), addV('twin2'))
>> ==>v[1]
>> gremlin> g.V().valueMap(true)
>> ==>[id:0,label:twin1]
>> ==>[id:1,label:twin2]
>> gremlin>
>> {code}
>
>
> --
> This message was sent by Atlassian JIRA
> (v6.3.4#6332)

Reply via email to