[ https://issues.apache.org/jira/browse/TINKERPOP-2325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17013020#comment-17013020 ]
Marco Valzelli commented on TINKERPOP-2325: ------------------------------------------- I succedeed in modifing the original sparql-to-gremlin code in a more optimized copy that can be found at [https://github.com/thevalzo/sparql-to-gremlin] . The main changes that has been made in: TraversalBuilder class: use traversal.has instead of traversal.hasValue WhereTraversalBuilder class: examinate previous graph pattern in order to able to write "__.as(subject).has(uri, P.eq(value));" I have made an attempt to fix also the union operator (in SparqlToGremlinCompiler) transforming it in an or, but it not works. So there still some case to fix: -UNION operator -OR operator -AND, OR inside a filter Of course there are to be done extensive tests, but I think i have done some step forward and i wanted to share it > Generate traversals that will better yield index lookups with SPARQL > -------------------------------------------------------------------- > > Key: TINKERPOP-2325 > URL: https://issues.apache.org/jira/browse/TINKERPOP-2325 > Project: TinkerPop > Issue Type: Improvement > Components: sparql > Affects Versions: 3.4.4 > Reporter: Stephen Mallette > Priority: Major > > The following simple bit of SPARQL generates a {{match()}} that wont easily > be converted to further utilize indices. > {code} > gremlin> s.sparql("SELECT ?x WHERE { ?x v:name 'marko' }").explain() > ==>Traversal Explanation > =========================================================================================================================================================================================== > Original Traversal [InjectStep([SELECT ?x WHERE { ?x v:name > 'marko' }])] > ConnectiveStrategy [D] [InjectStep([SELECT ?x WHERE { ?x v:name > 'marko' }])] > SparqlStrategy [D] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > MatchPredicateStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > FilterRankingStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > EarlyLimitStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > InlineFilterStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > RepeatUnrollStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > CountStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > PathRetractionStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > LazyBarrierStrategy [O] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > TinkerGraphCountStrategy [P] [GraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > ProfileStrategy [F] [TinkerGraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > Final Traversal [TinkerGraphStep(vertex,[]), > MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value), > IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)] > {code} > {{sparql-gremlin}} needs some improvements in this area. -- This message was sent by Atlassian Jira (v8.3.4#803005)