[ 
https://issues.apache.org/jira/browse/TINKERPOP3-924?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

pieter martin closed TINKERPOP3-924.
------------------------------------
    Resolution: Fixed

Better described by [https://issues.apache.org/jira/browse/TINKERPOP3-968]

> Have an easier way to select full subgraphs/paths/trees
> -------------------------------------------------------
>
>                 Key: TINKERPOP3-924
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP3-924
>             Project: TinkerPop 3
>          Issue Type: Improvement
>          Components: process
>    Affects Versions: 3.1.0-incubating
>            Reporter: pieter martin
>            Assignee: Marko A. Rodriguez
>
> This issue follows on after some discussion on the gremlin users [mailing 
> list | https://groups.google.com/forum/#!topic/gremlin-users/wziSPqeMxLg]  
> where [~dkuppitz] has provided help.
> The requirement is to query a full subgraph from the graph. By full subgraph 
> I mean that every element touched along the path is returned and not just the 
> leaf elements at the n'th degree as is standard.
> The need to lift complete subgraphs is I think very common. Think of any tree 
> structure, code or ui. It generally has leaf nodes at all sorts of depths.
> The other, is for any OGM tool to be able to eagerly hydrate an object graph 
> with one gremlin query (optimized). This is something that if its supported 
> greatly improves the usability and performance of the ORM tool.
> So at the ORM level or at pure gremlin its common usecase.
> Gremlin can do the above but not well. This requirement seeks an easier 
> manner in which to return all friends and their addresses, in particular 
> including friends that have no address.
> There is currently 2 ways in which gremlin already does return the full tree. 
> As an simple example consider the following.
> {noformat}
> John--friend-->Peter--address-->NewYork
>     --friend-->Joe
>     --address-->Boston
> {noformat}
> I am looking for the full tree of john's friends and their addresses.
> It should return,
> {noformat}
> {John={Peter={NewYork}, Joe}} 
> {noformat}
> h2. gremlin 1
> {noformat}
> g.V(person1).emit().repeat(out("friend", "address")).times(2).tree()
> {noformat}
> returns,
> {noformat}
> {John={Boston, Peter={NewYork}, Joe}} 
> {noformat}
> This pattern is almost right but because "friend" and "address" is always 
> traversed it returns John's address which is wrong for this use-case.
> This pattern is generally weak as just repeating all labels x times is 
> inaccurate and fault prone and just plane semantically not what is required. 
> The requirement is to specify the path exactly.
> h2. gremlin 2
> {noformat}
> g.V(john).choose(
>                 __.out("friend"), __.out("friend").choose(
>                         __.out("address"), __.out("address"), __.identity()
>                 ), __.identity()
>         ).tree()
> {noformat}
> returns,
> {noformat}
> {John={Peter={NewYork}, Joe}}
> {noformat}
> This is correct and the path is specified exactly. 
> But alas its a pain to construct, reads difficult and, at least in sqlg's 
> case, very difficult  to optimize.
> What I propose is direct support for returning a complete sub-graph. 
> Something like, (only thinking about readability, not implementation here)
> {noformat}
> g.V(person1).emit(out("friend").out("address")).tree()
> or
> g.V(person1).emit().out("friend").out("address").tree()
> or
> g.V(person1).out("friend").out("address").fullTree()
> or
> g.V(person1).out("friend").out("address").completeTree()
> or
> g.V(person1).out("friend").out("address").subGraph()
> {noformat}
> Thanks
> Pieter



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to