Re: hasId

2017-05-28 Thread Daniel Kuppitz
I created the ticket: https://issues.apache.org/jira/browse/TINKERPOP-1681

On Sun, May 28, 2017 at 11:12 AM, Daniel Kuppitz  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 
> 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 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 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

2017-05-28 Thread Daniel Kuppitz
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 
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 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 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

2017-05-28 Thread pieter gmail

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 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 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