tinkerpop-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matt Frantz (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (TINKERPOP3-781) Local aggregation should not destroy path
Date Mon, 03 Aug 2015 17:39:05 GMT

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

Matt Frantz commented on TINKERPOP3-781:
----------------------------------------

The path history should include the common portion of the path, i.e. the part leading up to
the {{local}} step.  That is how {{map(Traversal)}} works, for example.  Even though {{map}}'s
argument is a traversal containing a {{ReducingBarrierStep}}, it preserves the path prefix.

Aggregating the paths for the reduced portion of the traversal is another issue to consider.
 How would you express that this additional computation was desired?  Here's a case where
you do NOT need the path:
{noformat}
g.V(1).as('a').local(out().as('b').count()).as('c')
  .select('a','c')
==>[a:v[1], c:3]
{noformat}

What if you asked for the "b" vertex, too?  You would expect the same cardinality result.
 That means "b" should be reduced with a default function, e.g. make a list.
{noformat}
g.V(1).as('a').local(out().as('b').count()).as('c')
  .select('a','b','c')
==>[a:v[1], b:[v[3],v[2],v[4]], c:3]
{noformat}

You could use {{by}} to modulate the value that is reduced.
{noformat}
g.V(1).as('a').local(out().as('b').count()).as('c')
  .select('a','b','c')
  .by('name').by('name').by()
==>[a:'marko', b:['lop','vadas','josh'], c:3]
{noformat}

Perhaps a second {{by}} argument could provide the reducing function?  Complicated.
{noformat}
g.V(1).as('a').local(out().as('b').count()).as('c')
  .select('a','b','c')
  .by('name').by('name', { acc, it -> acc += it.get().length() }).by()
==>[a:'marko', b:12, c:3]
{noformat}

Does this all become sugar for {{group}} of {{path}}?
{noformat}
g.V(1).as('a').out().as('b').path()
  .group()
  .by()
  .by('name')
  .by(/* Path reducing logic goes here */))
{noformat}


> Local aggregation should not destroy path
> -----------------------------------------
>
>                 Key: TINKERPOP3-781
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP3-781
>             Project: TinkerPop 3
>          Issue Type: Improvement
>          Components: process
>            Reporter: Matt Frantz
>
> Currently, if we do an aggregating step (e.g. {{fold}}, {{groupCount}}, etc.) within
the {{local}} step, we lose the path information.
> {noformat}
> gremlin> g.V(1).local(both().fold()).path()
> ==>[[v[3], v[2], v[4]]]
> {noformat}
> It would be better if the preceding portion of the path were still retained like so:
> {noformat}
> gremlin> g.V(1).local(both().fold()).path()
> ==>[v[1], [v[3], v[2], v[4]]]
> {noformat}



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

Mime
View raw message