You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by pieter gmail <pi...@gmail.com> on 2017/05/28 08:45:45 UTC

RE: hasId

Hi,

The following code illustrates my concern/confusion.

     @Test
     public void testHasId() {
         final TinkerGraph graph = TinkerGraph.open();
         Vertex a = graph.addVertex(T.label, "A");
         Vertex b = graph.addVertex(T.label, "B");

         List<Vertex> vertices = 
graph.traversal().V().hasId(a.id()).hasId(b.id()).toList();
         Assert.assertTrue(vertices.isEmpty());
     }

The test fails as the both vertices are returned.
Is this expected, I expected 'and' not 'or' behavior.

Similar to,

     @Test
     public void testHasLabel() {
         final TinkerGraph graph = TinkerGraph.open();
         Vertex a = graph.addVertex(T.label, "A");
         Vertex b = graph.addVertex(T.label, "B");

         List<Vertex> vertices = 
graph.traversal().V().hasLabel("A").hasLabel("B").toList();
         Assert.assertTrue(vertices.isEmpty());
     }

This one passes.

I checked the docs,

|hasLabel(labels...)|: Remove the traverser if its element does not have 
any of the labels.
|hasId(ids...)|: Remove the traverser if its element does not have any 
of the ids.

Seems they should behave the same?

I am working on version 3.2.4

Thanks
Pieter


Re: hasId

Posted by Daniel Kuppitz <me...@gremlin.guru>.
I created the ticket: https://issues.apache.org/jira/browse/TINKERPOP-1681

On Sun, May 28, 2017 at 11:12 AM, Daniel Kuppitz <me...@gremlin.guru> wrote:

> Hi Pieter,
>
> that's a nasty bug. I just verified that it's also a bug in master/:
>
> gremlin> graph = TinkerGraph.open()
> ==>tinkergraph[vertices:0 edges:0]
> gremlin> a = graph.addVertex(label, "A")
> ==>v[0]
> gremlin> b = graph.addVertex(label, "B")
> ==>v[1]
> gremlin> graph.traversal().V().hasId(a.id()).hasId(b.id())
> ==>v[0]
> ==>v[1]
> gremlin> graph.traversal().V().hasId(a.id()).hasId(b.id()).explain()
> ==>Traversal Explanation
> ============================================================
> ==============================
> Original Traversal                 [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
>
> ConnectiveStrategy           [D]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> MatchPredicateStrategy       [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> FilterRankingStrategy        [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> InlineFilterStrategy         [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> IncidentToAdjacentStrategy   [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> AdjacentToIncidentStrategy   [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> RepeatUnrollStrategy         [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> CountStrategy                [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> PathRetractionStrategy       [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> LazyBarrierStrategy          [O]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> TinkerGraphCountStrategy     [P]   [GraphStep(vertex,[]),
> HasStep([~id.eq(0), ~id.eq(1)])]
> TinkerGraphStepStrategy      [P]   [TinkerGraphStep(vertex,[0, 1])]
> ProfileStrategy              [F]   [TinkerGraphStep(vertex,[0, 1])]
> StandardVerificationStrategy [V]   [TinkerGraphStep(vertex,[0, 1])]
>
> Final Traversal                    [TinkerGraphStep(vertex,[0, 1])]
> gremlin> Gremlin.version()
> ==>3.3.0-SNAPSHOT
>
> Can you create a ticket?
>
> Cheers,
> Daniel
>
>
> On Sun, May 28, 2017 at 10:45 AM, pieter gmail <pi...@gmail.com>
> wrote:
>
>> Hi,
>>
>> The following code illustrates my concern/confusion.
>>
>>     @Test
>>     public void testHasId() {
>>         final TinkerGraph graph = TinkerGraph.open();
>>         Vertex a = graph.addVertex(T.label, "A");
>>         Vertex b = graph.addVertex(T.label, "B");
>>
>>         List<Vertex> vertices = graph.traversal().V().hasId(a.id
>> ()).hasId(b.id()).toList();
>>         Assert.assertTrue(vertices.isEmpty());
>>     }
>>
>> The test fails as the both vertices are returned.
>> Is this expected, I expected 'and' not 'or' behavior.
>>
>> Similar to,
>>
>>     @Test
>>     public void testHasLabel() {
>>         final TinkerGraph graph = TinkerGraph.open();
>>         Vertex a = graph.addVertex(T.label, "A");
>>         Vertex b = graph.addVertex(T.label, "B");
>>
>>         List<Vertex> vertices = graph.traversal().V().hasLabel
>> ("A").hasLabel("B").toList();
>>         Assert.assertTrue(vertices.isEmpty());
>>     }
>>
>> This one passes.
>>
>> I checked the docs,
>>
>> |hasLabel(labels...)|: Remove the traverser if its element does not have
>> any of the labels.
>> |hasId(ids...)|: Remove the traverser if its element does not have any of
>> the ids.
>>
>> Seems they should behave the same?
>>
>> I am working on version 3.2.4
>>
>> Thanks
>> Pieter
>>
>>
>

Re: hasId

Posted by Daniel Kuppitz <me...@gremlin.guru>.
Hi Pieter,

that's a nasty bug. I just verified that it's also a bug in master/:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> a = graph.addVertex(label, "A")
==>v[0]
gremlin> b = graph.addVertex(label, "B")
==>v[1]
gremlin> graph.traversal().V().hasId(a.id()).hasId(b.id())
==>v[0]
==>v[1]
gremlin> graph.traversal().V().hasId(a.id()).hasId(b.id()).explain()
==>Traversal Explanation
==========================================================================================
Original Traversal                 [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]

ConnectiveStrategy           [D]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
MatchPredicateStrategy       [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
FilterRankingStrategy        [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
InlineFilterStrategy         [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
IncidentToAdjacentStrategy   [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
AdjacentToIncidentStrategy   [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
RepeatUnrollStrategy         [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
CountStrategy                [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
PathRetractionStrategy       [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
LazyBarrierStrategy          [O]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
TinkerGraphCountStrategy     [P]   [GraphStep(vertex,[]),
HasStep([~id.eq(0), ~id.eq(1)])]
TinkerGraphStepStrategy      [P]   [TinkerGraphStep(vertex,[0, 1])]
ProfileStrategy              [F]   [TinkerGraphStep(vertex,[0, 1])]
StandardVerificationStrategy [V]   [TinkerGraphStep(vertex,[0, 1])]

Final Traversal                    [TinkerGraphStep(vertex,[0, 1])]
gremlin> Gremlin.version()
==>3.3.0-SNAPSHOT

Can you create a ticket?

Cheers,
Daniel


On Sun, May 28, 2017 at 10:45 AM, pieter gmail <pi...@gmail.com>
wrote:

> Hi,
>
> The following code illustrates my concern/confusion.
>
>     @Test
>     public void testHasId() {
>         final TinkerGraph graph = TinkerGraph.open();
>         Vertex a = graph.addVertex(T.label, "A");
>         Vertex b = graph.addVertex(T.label, "B");
>
>         List<Vertex> vertices = graph.traversal().V().hasId(a.id()).hasId(
> b.id()).toList();
>         Assert.assertTrue(vertices.isEmpty());
>     }
>
> The test fails as the both vertices are returned.
> Is this expected, I expected 'and' not 'or' behavior.
>
> Similar to,
>
>     @Test
>     public void testHasLabel() {
>         final TinkerGraph graph = TinkerGraph.open();
>         Vertex a = graph.addVertex(T.label, "A");
>         Vertex b = graph.addVertex(T.label, "B");
>
>         List<Vertex> vertices = graph.traversal().V().hasLabel
> ("A").hasLabel("B").toList();
>         Assert.assertTrue(vertices.isEmpty());
>     }
>
> This one passes.
>
> I checked the docs,
>
> |hasLabel(labels...)|: Remove the traverser if its element does not have
> any of the labels.
> |hasId(ids...)|: Remove the traverser if its element does not have any of
> the ids.
>
> Seems they should behave the same?
>
> I am working on version 3.2.4
>
> Thanks
> Pieter
>
>