[ https://issues.apache.org/jira/browse/TINKERPOP-1741?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marko A. Rodriguez closed TINKERPOP-1741. ----------------------------------------- Resolution: Invalid You can't {{select('a')}}. You have to {{cap('a')}}. This is because {{GroupStep}} requires a "on completion" computation. https://github.com/apache/tinkerpop/blob/master/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java#L146-L149 When does that get called? https://github.com/apache/tinkerpop/blob/master/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java#L97 Why is it like this? When should reduction happen? {{select()}} just grabs the side-effect and if it hasn't been reduced (because it might be reduced laster), then thats that. Why not have it reduced at {{group('a')}} -- nope, you can't cause you typically use side-effects repeatedly (e.g. in a {{repeat()}}). If you wanted it reduced after {{group('a')}}, you would use {{group().store('a')}}. Thus, the only step that we have the forces reduction on a side-effect is {{cap()}}. > GroupStep's on-the-fly reducer is a bit screwy > ----------------------------------------------- > > Key: TINKERPOP-1741 > URL: https://issues.apache.org/jira/browse/TINKERPOP-1741 > Project: TinkerPop > Issue Type: Bug > Components: process > Affects Versions: 3.2.5 > Reporter: Daniel Kuppitz > Assignee: Marko A. Rodriguez > > Without {{dedup():}} > {noformat} > gremlin> > g.V().both().has("age").group("a").by("age").by(values("name").fold()).barrier().select("a").limit(1) > ==>[32:[josh,josh,josh],35:[peter],27:[vadas],29:[marko,marko,marko]] > {noformat} > With {{dedup()}}: > {noformat} > gremlin> > g.V().both().has("age").group("a").by("age").by(values("name").dedup().fold()).barrier().select("a").limit(1) > ==>[32:[josh:josh],35:[peter:peter],27:[vadas:vadas],29:[marko:marko]] > {noformat} > Why do the values end up being maps? That's pretty unexpected. > As a workaround we can do this: > {noformat} > gremlin> g.withSideEffect("a", [:].withDefault {[] as > Set}).V().both().has("age").group("a").by("age").by(values("name").fold()).barrier().select("a").limit(1) > ==>[27:[vadas],32:[josh],29:[marko],35:[peter]] > {noformat} > Also note, that {{cap()}} behaves correctly, even though we're using > {{dedup()}}: > {noformat} > gremlin> > g.V().both().has("age").group("a").by("age").by(values("name").dedup().fold()).barrier().cap("a") > ==>[32:[josh],35:[peter],27:[vadas],29:[marko]] > {noformat} -- This message was sent by Atlassian JIRA (v6.4.14#64029)