Daniel Kuppitz created TINKERPOP-1463:
-----------------------------------------

             Summary: Improve has(propertyKey, traversal)
                 Key: TINKERPOP-1463
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1463
             Project: TinkerPop
          Issue Type: Improvement
          Components: process
            Reporter: Daniel Kuppitz


Two issues here:

{{.has(propertyKey, traversal)}} kinda doesn't work as expected:
{code}
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.addV(label, "software",  "lang", "python")
==>v[12]
gremlin> g.V().has("name","lop").values("lang").as("l").V().has("lang", 
select("l"))
==>v[3]
==>v[5]
==>v[12]
gremlin> g.V().has("name","lop").values("lang").as("l").V().has("lang", 
__.where(eq("l")))
==>v[3]
==>v[5]
{code}

>From a user perspective {{.has("lang", select("l"))}} is / would be 
>self-explanatory, {{.has("lang", __.where(eq("l")))}} on the other hand is 
>confusing and I don't see good use-cases for it, as you could also write:

{code}
g.V().has("name","lop").values("lang").as("l").V().where(values("lang").as("l"))
{code}

The second issue or follow-up issue is, that has-traversal should be folded 
into the {{GraphStep}}, so that the mid-traversal {{V()}} is not a full graph 
scan. Given the traversal:

{code}
g.V().has("name","lop").values("lang").as("l").V().has("lang", select("l"))
{code}

... we would know the value of {{"l"}} at runtime. Thus it's not much different 
from

{code}
g.V().has("name","lop").values("lang").as("l").V().has("lang", "java")
{code}

The only difference is that the latter traversal knows that the {{lang}} value 
is {{java}} at compile time and the former traversal only knows it at runtime. 
In either case the value is known before it's needed for the mid-traversal 
{{V().has(...)}} lookup part.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to