You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Marko A. Rodriguez (JIRA)" <ji...@apache.org> on 2017/11/01 15:46:00 UTC

[jira] [Commented] (TINKERPOP-1817) OLAP loses vertex labels

    [ https://issues.apache.org/jira/browse/TINKERPOP-1817?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16234246#comment-16234246 ] 

Marko A. Rodriguez commented on TINKERPOP-1817:
-----------------------------------------------

There are two solutions to this problem w/ one of them being extremely backwards incompatible.

1. Ensure that adjacent vertices in a {{StarGraph}} have labels and not just ids.
2. Make path storing done after a message pass.

The first is deadly for backwards compatibility as providers have always assumed that adjacents don't include labels. The latter is possible, but it would introduce more message passing than desirable (i.e. outside the scope of using {{TraverserRequirement.PATH}}).





> OLAP loses vertex labels
> ------------------------
>
>                 Key: TINKERPOP-1817
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1817
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>    Affects Versions: 3.3.0, 3.2.6
>            Reporter: Daniel Kuppitz
>            Priority: Major
>
> Working on this SO question: https://stackoverflow.com/questions/46962237/how-to-perform-cross-join-on-different-vertices-in-gremlin-tinkerpop/46977603
> ...I noticed that the connected components query randomly loses the vertex labels.
> *Init Graph:*
> {noformat}
> graph = TinkerGraph.open()
> g = graph.traversal()
> a = graph.addVertex(label, "person", "user", "A")
> b = graph.addVertex(label, "person", "user", "B")
> c = graph.addVertex(label, "person", "user", "C")
> d = graph.addVertex(label, "person", "user", "D")
> one = graph.addVertex('rec_id')
> one.property('ids', '1')
> two = graph.addVertex('rec_id')
> two.property('ids', '2')
> three = graph.addVertex('rec_id')
> three.property('ids', '3')
> four = graph.addVertex('rec_id')
> four.property('ids', '4')
> five = graph.addVertex('rec_id')
> five.property('ids', '5')
> a.addEdge('part_of',one)
> a.addEdge('part_of',two)
> b.addEdge('part_of', three)
> b.addEdge('part_of',four)
> c.addEdge('part_of',five)
> d.addEdge('part_of',four)
> d.addEdge('part_of',two)
> g = graph.traversal().withComputer()
> {noformat}
> *Query:*
> {noformat}
> g.V().
>   emit(cyclicPath().or().not(both())).
>     repeat(both()).
>     until(cyclicPath()).
>   aggregate("p").by(path()).cap("p").
>   unfold().limit(local, 1).dedup().
>   map(__.as("v").select("p").unfold().
>          filter(unfold().where(eq("v"))).
>          unfold().dedup().order().by(id).fold()).dedup().
>   project("Users","associated_ids").
>     by(unfold().label().fold()).
>     by(unfold().label().fold())
> {noformat}
> *Sample Output:*
> {noformat}
> gremlin> g.V().
> ......1>   emit(cyclicPath().or().not(both())).
> ......2>     repeat(both()).
> ......3>     until(cyclicPath()).
> ......4>   aggregate("p").by(path()).cap("p").
> ......5>   unfold().limit(local, 1).dedup().
> ......6>   map(__.as("v").select("p").unfold().
> ......7>          filter(unfold().where(eq("v"))).
> ......8>          unfold().dedup().order().by(id).fold()).dedup().
> ......9>   project("Users","associated_ids").
> .....10>     by(unfold().label()./*hasLabel("person").*/fold()).
> .....11>     by(unfold().label()./*hasLabel("rec_id").*/fold())
> ==>[Users:[person,person,person,vertex,vertex,vertex,vertex],associated_ids:[person,person,person,vertex,vertex,vertex,vertex]]
> ==>[Users:[vertex,rec_id],associated_ids:[vertex,rec_id]]
> gremlin> g = graph.traversal().withComputer()
> ==>graphtraversalsource[tinkergraph[vertices:9 edges:7], graphcomputer]
> gremlin> g.V().
> ......1>   emit(cyclicPath().or().not(both())).
> ......2>     repeat(both()).
> ......3>     until(cyclicPath()).
> ......4>   aggregate("p").by(path()).cap("p").
> ......5>   unfold().limit(local, 1).dedup().
> ......6>   map(__.as("v").select("p").unfold().
> ......7>          filter(unfold().where(eq("v"))).
> ......8>          unfold().dedup().order().by(id).fold()).dedup().
> ......9>   project("Users","associated_ids").
> .....10>     by(unfold().label()./*hasLabel("person").*/fold()).
> .....11>     by(unfold().label()./*hasLabel("rec_id").*/fold())
> ==>[Users:[person,person,person,rec_id,vertex,vertex,vertex],associated_ids:[person,person,person,rec_id,vertex,vertex,vertex]]
> ==>[Users:[vertex,rec_id],associated_ids:[vertex,rec_id]]
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)