[
https://issues.apache.org/jira/browse/TINKERPOP-968?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15169262#comment-15169262
]
pieter martin commented on TINKERPOP-968:
-----------------------------------------
I had a deja vu moment with the {{choose}} option.
This was discussed way back with
[https://issues.apache.org/jira/browse/TINKERPOP-924].
So choose works but only if it is nested.
{{g.V().choose(out("knows"), out("knows"), identity()).choose(out("created"),
out("created"), identity()).path()}}
This will also traverse the {{created}} edge on the {{identity()}} if there is
no {{knows}} edge.
The {{optional}} semantics I envisage will not traverse {{created}} if
{{knows}} can not be traversed.
In the previous example
{code}
==>[v[4], v[5]]
==>[v[4], v[3]]
==>[v[6], v[3]]
{code}
are incorrect as {{v\[4\], v\[5\], v\[6\]}} {{knows}} nobody and {{created}}
should not have been traversed.
{code}
gt = graph.traversal().V()
.choose(
__.out("knows"),
__.out("knows").choose(
__.out("created"),
__.out("created"),
__.identity()
),
__.identity()
).path();
[v[1], v[2]]
[v[1], v[4], v[5]]
[v[1], v[4], v[3]]
[v[2]]
[v[3]]
[v[4]]
[v[5]]
[v[6]]
{code}
is the expected results.
If we agree that the nested {{choose}} implements the expected semantics of
{{optional}} then the question is whether {{optional}} does not deserve its own
step.
The primary reason for this, is to ease the optimization of the {{optional}}
step for implementers.
Optimizing nested {{choose}} steps is rather difficult.
> Add first class support for an optional traversal
> -------------------------------------------------
>
> Key: TINKERPOP-968
> URL: https://issues.apache.org/jira/browse/TINKERPOP-968
> Project: TinkerPop
> Issue Type: Improvement
> Components: process
> Affects Versions: 3.1.0-incubating
> Reporter: pieter martin
>
> Both SparQL and Cypher use the "Optional" keyword to indicate an optional
> traversal. SQL uses the "left join".
> Gremlin has no first class support for an optional traversal. It can be
> achieved with the choose step but it is verbose, unintuitive and not what the
> choose step is intended for.
> The benefits of optional traversals are many. In particular it makes it
> trivial to load complete subgraphs/trees with one easy to read intuitive
> gremlin statement.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)