Over the weekend, I experimented a bit with this proposal from Andrii, that
was of positive discussion on this list a few months back, that helped
bring some formality to the idea of making match() step take any
declarative query language (like GQL) such that its results would be
returned into a Gremlin traversal stream :

https://github.com/apache/tinkerpop/blob/master/docs/src/dev/future/proposal-declarative-match-step-9.asciidoc

I have the basics of it working:

gremlin> g.match("MATCH (a:person)-[:knows]->(b:person)").select("a","b")
==>[a:v[1],b:v[2]]
==>[a:v[1],b:v[4]]
gremlin> g.match("MATCH
(a:person)-[:knows]->(b:person)").select("a","b").by('name')
==>[a:marko,b:vadas]
==>[a:marko,b:josh]
gremlin> g.match("MATCH (a:person)-[:knows]->(b:person),
(b)-[:created]->(s:software)").
......1>   select("a","b","s").by("name").by("name").by("name")
==>[a:marko,b:josh,s:lop]
==>[a:marko,b:josh,s:ripple]

initially, I think this feature will come with the added restriction that
match() is a provider implemented step for 4.0. In other words, there won't
be generic support provided by the TinkerPop query processing engine. At
least, that would not be the initial main goal. It could however be
reserved for a future goal that arrives for 4.1 or some other later
version. For 4.0, the focus would be a basic implementation for TinkerGraph
only with a simple "TinkerGQL" grammar (i.e. a subset supported by
TinkerGraph that focuses on pattern matching and basic filtering).

I think that with these sorts of restrictions, this feature can comfortably
land for 4.0 among the myriad of other things 4.0 will contain. It will
allow both provider and user feedback on the feature in general and help
set the stage for future work in this area. It will take a few days yet to
get this to a PR stage - in the meantime please let me know if you have any
thoughts on this.

Reply via email to