Maybe outE() and inE() should only return non-self-referencing edges. Then
there should be a new step called selfE(). And every time it's called, it
posts a picture of Gremlin holding that edge to Facebook.  :-)

Hmm.. it seems like you made the engineering case.  What's the user
perspective?  I don't know. I don't use self-referencing edges.  I think
logically it would return what I expected.  But then again, I don't think
like most users.  Why would a user expect or even want it to show up only
once? So a user would expect bothE() to return the set of inE and outE
edges (unique) not the union of inE,outE?  I could see that. I'm not
against it.  Just need to make sure that's clearly documented.



Robert Dale

On Thu, Oct 26, 2017 at 9:32 AM, Daniel Kuppitz <m...@gremlin.guru> wrote:

> Well, if you want to get it duplicated, you can just do union(outE(),
> inE()),
> that's easy and inexpensive. However, any way to get rid of the duplicates
> can be expensive:
>
>    - local(bothE().dedup())                                     // needs to
>    keep track of all edges; requires internal memory structures
>    - union(outE(), __.as("a").inE().not(where(outV().as("a")))) // enables
>    partial path tracking; again that requires internal memory structures
>
> If we / providers implement the deduplication though, we wouldn't require
> any extra memory structures. Returning the duplicates makes sense to me
> from an engineering perspective, but not from a user perspective.
>
> Cheers,
> Daniel
>
>
> On Wed, Oct 25, 2017 at 6:53 PM, Robert Dale <robd...@gmail.com> wrote:
>
> > I think that bothE() == union(outE(),inE()) and outE().count() +
> > inE().count() == bothE().count().  If you don't want the self-referencing
> > edge to be returned twice, then either make it a unidirected edge (if
> > supported) so that it would still satisfy the two previous condition or
> > dedup(). In either case, it's left to the user to determine what edges
> are
> > returned.
> >
> > Also, I think it makes sense that g.E() == g.V().outE().  It should not
> be
> > g.V().inE() due to potential for unidirected edges.
> >
> >
> > Robert Dale
> >
> > On Wed, Oct 25, 2017 at 9:32 AM, Daniel Kuppitz <m...@gremlin.guru> wrote:
> >
> > > IMO it should return the edge only once.
> > >
> > > Cheers,
> > > Daniel
> > >
> > >
> > > On Wed, Oct 25, 2017 at 5:47 AM, Stephen Mallette <
> spmalle...@gmail.com>
> > > wrote:
> > >
> > > > The test suite doesn't seem to enforce behavior related to
> > self-relating
> > > > edges. TinkerGraph does this:
> > > >
> > > > gremlin> g = TinkerGraph.open().traversal()
> > > > ==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
> > > > gremlin> g.addV().as('a').addE('self').to('a')
> > > > ==>e[1][0-self->0]
> > > > gremlin> g.E()
> > > > ==>e[1][0-self->0]
> > > > gremlin> g.V().bothE().count()
> > > > ==>2
> > > >
> > > > Should bothE() return 2 in this case or 1? I think that we've said in
> > the
> > > > past that g.E() is the same as g.V().outE() or g.V().inE(), but not
> > > > necessarily g.V().bothE().  Thoughts?
> > > >
> > >
> >
>

Reply via email to