I see what you mean.
At the same time, I find it a funny reason, considering the fact that it is 
actually _the_ traver framework under the hood. If I am not mistaken, the 
original traverer is implemented on top of the TraversalDesription framework in 
org.neo4j.kernel.impl.traversal.OldTraversalWrapper.
Anyway, it would be nice to have composable traversals no matter how it is 
actually implemented. So I am looking forward seeing the results of your work.
Niels
> Date: Wed, 3 Aug 2011 09:04:08 +0200
> From: [email protected]
> To: [email protected]
> Subject: Re: [Neo4j] Composable traversals
> 
> Well, I've got none of those concerns really. Just the fact that
> TraversalDescription is viewed as "that other" traversal framework makes it
> slightly odd to use its interface in the core API. When it will be _the_
> framework, or another one is built upon it (I sometimes more look at it as
> an engine which one can build a better API on) something like what you
> propose will happen, I'm sure.
> 
> And Node/Relationship/Path should all extend the same traversable interface
> then IMHO. But just to add these methods to TraversalDescription will in
> effect do the same thing up until the time where Neo4j is less ambivalent
> regarding traversal frameworks.
> 
> 2011/8/2 Niels Hoogeveen <[email protected]>
> 
> >
> > It looks like this does the same I suggested. It's a bit clunkier, but I
> > understand you don't want to changed the Node interface. OTOH is there any
> > reason not to extend the Node interface, after all it is only one "extends"
> > more? Since Nodes are all created in the neo4j-kernel component, there is no
> > real reason to maintain strict binary backwards compatibility between
> > versions, or do you expect people having projects with two separate
> > neo4j-kernel jars having different versions?
> > Niels
> >
> > > Date: Tue, 2 Aug 2011 23:05:17 +0200
> > > From: [email protected]
> > > To: [email protected]
> > > Subject: Re: [Neo4j] Composable traversals
> > >
> > > Cool. To not mess around with interfaces too much I'm thinking of having:
> > >
> > >     TraversalDescription#traverse( Node startNode, Node...
> > > additionalStartNodes );
> > >     TraversalDescription#traverse( Path startPath, Path...
> > > additionalStartPaths );
> > >     TraversalDescription#traverse( Iterable<Path> startPaths );
> > >
> > > that would be rather similar, wouldn't it?
> > >
> > > 2011/7/30 Niels Hoogeveen <[email protected]>
> > >
> > > >
> > > > I would be all for it if this could become part of 1.5.
> > > > I am willing to put time into this.
> > > > > Date: Sat, 30 Jul 2011 11:33:01 +0200
> > > > > From: [email protected]
> > > > > To: [email protected]
> > > > > Subject: Re: [Neo4j] Composable traversals
> > > > >
> > > > > Yes, FYI that's the exact thing we've been discussing :)
> > > > >
> > > > > 2011/7/29 Niels Hoogeveen <[email protected]>
> > > > >
> > > > > >
> > > > > > Great, I would much rather see this become part of the core API
> > than
> > > > have
> > > > > > this as part of the Enhanced API.
> > > > > > To make things work correctly, one important change to core is
> > needed:
> > > > The
> > > > > > Node interface needs to extends Traverser (the interface in
> > > > > > org.neo4j.graphdb.traversal, not the one in org.neo4j.graphdb).
> > > > > > This is actually not a big deal. There Traverser interface supports
> > > > three
> > > > > > methods:
> > > > > > Iterator<path> iterator() [return 1 path with 1 element in the
> > path,
> > > > being
> > > > > > the node itself]Iterable<Node> nodes() [return an iterable over the
> > > > node
> > > > > > itself]Iterable<Relationship> relationships() [return an empty
> > > > iterable]
> > > > > > With that addition, it's not all too difficult to enhance the
> > current
> > > > > > implementation of Traverser. It only adds one more iteration level
> > over
> > > > the
> > > > > > current implementation. Instead of having one start node, we now
> > have
> > > > > > multiple start paths. When returning values from the Traverser, the
> > > > start
> > > > > > paths and the result paths need to be concatenated.
> > > > > > In the new scenario, all "old" traverse() methods can remain the
> > same,
> > > > > > since Node becomes a Traverser, so those methods are just special
> > cases
> > > > > > where Iterable<Path> consists of 1 path, with just 1 element.
> > > > > > Niels
> > > > > > > Date: Fri, 29 Jul 2011 18:36:28 +0200
> > > > > > > From: [email protected]
> > > > > > > To: [email protected]
> > > > > > > Subject: Re: [Neo4j] Composable traversals
> > > > > > >
> > > > > > > There have been thoughts a long while to make something like this
> > > > with
> > > > > > the
> > > > > > > traversal framework, but time has never been allocated to evolve
> > it.
> > > > I'm
> > > > > > > adding stuff to the framework in a side track and will surely add
> > > > some
> > > > > > > aspect of composable traversers also.
> > > > > > >
> > > > > > > 2011/7/29 Niels Hoogeveen <[email protected]>
> > > > > > >
> > > > > > > >
> > > > > > > > I'd like to take a stab at implementing traversals in the
> > Enhanced
> > > > API.
> > > > > > One
> > > > > > > > of the things I'd like to do, is to make traversals composable.
> > > > > > > >
> > > > > > > > Right now a Traverser is created by either calling the traverse
> > > > method
> > > > > > on
> > > > > > > > Node, or to call the traverse(Node) method on
> > TraversalDescription.
> > > > > > > >
> > > > > > > > This makes traversals inherently non-composable, so we can't
> > define
> > > > a
> > > > > > > > single traversal that returns the parents of all our friends.
> > > > > > > >
> > > > > > > > To make Traversers composable we need a function:
> > > > > > > >
> > > > > > > > Traverser traverse(Traverser, TraversalDescription)
> > > > > > > >
> > > > > > > > My take on it is to make Element (which is a superinterface of
> > > > Node)
> > > > > > into a
> > > > > > > > Traverser.
> > > > > > > >
> > > > > > > > Traverser is basically another name for Iterable<Path>.
> > > > > > > >
> > > > > > > > Every Node (or more generally every Element) can be seen as an
> > > > > > > > Iterabe<Path>, returning a single Path, which contains a single
> > > > > > > > path-element, the Node/Element itself.
> > > > > > > >
> > > > > > > > Composing traversals would entail the concatenation of the
> > paths
> > > > > > returned
> > > > > > > > with the paths supplied, so when we ask for the parents of all
> > our
> > > > > > friends,
> > > > > > > > the returned paths would take the form:
> > > > > > > >
> > > > > > > > Node --FRIEND--> Node --> PARENT --> Node
> > > > > > > >
> > > > > > > > Niels
> > > > > > > >
> > > > > > > > _______________________________________________
> > > > > > > > Neo4j mailing list
> > > > > > > > [email protected]
> > > > > > > > https://lists.neo4j.org/mailman/listinfo/user
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Mattias Persson, [[email protected]]
> > > > > > > Hacker, Neo Technology
> > > > > > > www.neotechnology.com
> > > > > > > _______________________________________________
> > > > > > > Neo4j mailing list
> > > > > > > [email protected]
> > > > > > > https://lists.neo4j.org/mailman/listinfo/user
> > > > > >
> > > > > > _______________________________________________
> > > > > > Neo4j mailing list
> > > > > > [email protected]
> > > > > > https://lists.neo4j.org/mailman/listinfo/user
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Mattias Persson, [[email protected]]
> > > > > Hacker, Neo Technology
> > > > > www.neotechnology.com
> > > > > _______________________________________________
> > > > > Neo4j mailing list
> > > > > [email protected]
> > > > > https://lists.neo4j.org/mailman/listinfo/user
> > > >
> > > > _______________________________________________
> > > > Neo4j mailing list
> > > > [email protected]
> > > > https://lists.neo4j.org/mailman/listinfo/user
> > > >
> > >
> > >
> > >
> > > --
> > > Mattias Persson, [[email protected]]
> > > Hacker, Neo Technology
> > > www.neotechnology.com
> > > _______________________________________________
> > > Neo4j mailing list
> > > [email protected]
> > > https://lists.neo4j.org/mailman/listinfo/user
> >
> > _______________________________________________
> > Neo4j mailing list
> > [email protected]
> > https://lists.neo4j.org/mailman/listinfo/user
> >
> 
> 
> 
> -- 
> Mattias Persson, [[email protected]]
> Hacker, Neo Technology
> www.neotechnology.com
> _______________________________________________
> Neo4j mailing list
> [email protected]
> https://lists.neo4j.org/mailman/listinfo/user
                                          
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to