You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2018/08/01 13:32:52 UTC
[1/3] tinkerpop git commit: Update SparqlToGremlinCompiler.java
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1878 a07332991 -> 98975edc4
Update SparqlToGremlinCompiler.java
adding an updated file with SPARQL OPTIONAL clause:
- added optional
- added left-join with optional
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/56dce705
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/56dce705
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/56dce705
Branch: refs/heads/TINKERPOP-1878
Commit: 56dce705f0288c20c446b835570615a30a976a81
Parents: a073329
Author: Harsh Thakkar <ha...@gmail.com>
Authored: Wed Aug 1 11:14:54 2018 +0200
Committer: GitHub <no...@github.com>
Committed: Wed Aug 1 11:14:54 2018 +0200
----------------------------------------------------------------------
.../gremlin/sparql/SparqlToGremlinCompiler.java | 64 ++++++++++++++++++--
1 file changed, 60 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/56dce705/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java
----------------------------------------------------------------------
diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java
index b43de41..e3b4ecb 100644
--- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java
+++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java
@@ -35,6 +35,7 @@ import org.apache.jena.sparql.algebra.OpVisitorBase;
import org.apache.jena.sparql.algebra.OpWalker;
import org.apache.jena.sparql.algebra.op.OpBGP;
import org.apache.jena.sparql.algebra.op.OpFilter;
+ import org.apache.jena.sparql.algebra.op.OpLeftJoin;
import org.apache.jena.sparql.algebra.op.OpUnion;
import org.apache.jena.sparql.core.Var;
import org.apache.jena.sparql.core.VarExprList;
@@ -58,6 +59,9 @@ public class SparqlToGremlinCompiler {
private GraphTraversal<Vertex, ?> traversal;
private List<Traversal> traversalList = new ArrayList<>();
+ List<Traversal> optionalTraversals = new ArrayList<Traversal>();
+ List<String> optionalVariable = new ArrayList<String>();
+ boolean optionalFlag = false;
private SparqlToGremlinCompiler(final GraphTraversal<Vertex, ?> traversal) {
this.traversal = traversal;
@@ -93,18 +97,38 @@ public class SparqlToGremlinCompiler {
int traversalIndex = 0;
final int numberOfTraversal = traversalList.size();
- final Traversal arrayOfAllTraversals[] = new Traversal[numberOfTraversal];
+ final int numberOfOptionalTraversal = optionalTraversals.size();
+ Traversal arrayOfAllTraversals[] = null;
+
+ if (numberOfOptionalTraversal > 0) {
+ arrayOfAllTraversals = new Traversal[numberOfTraversal - numberOfOptionalTraversal +1];
+ } else {
+ arrayOfAllTraversals = new Traversal[numberOfTraversal - numberOfOptionalTraversal];
+ }
+
+ Traversal arrayOfOptionalTraversals[] = new Traversal[numberOfOptionalTraversal];
for (Traversal tempTrav : traversalList) {
arrayOfAllTraversals[traversalIndex++] = tempTrav;
}
- // creates a map of ordering keys and their ordering direction
+ traversalIndex = 0;
+ for (Traversal tempTrav : optionalTraversals)
+ arrayOfOptionalTraversals[traversalIndex++] = tempTrav;
+
+ // creates a map of ordering keys and their ordering direction
final Map<String, Order> orderingIndex = createOrderIndexFromQuery(query);
if (traversalList.size() > 0)
traversal = traversal.match(arrayOfAllTraversals);
+ if (optionalTraversals.size() > 0) {
+ traversal = traversal.coalesce(__.match(arrayOfOptionalTraversals), (Traversal) __.constant("N/A"));
+ for (int i = 0; i < optionalVariable.size(); i++) {
+ traversal = traversal.as(optionalVariable.get(i).substring(1));
+ }
+ }
+
final List<String> vars = query.getResultVars();
if (!query.isQueryResultStar() && !query.hasGroupBy()) {
final String[] all = new String[vars.size()];
@@ -157,7 +181,6 @@ public class SparqlToGremlinCompiler {
traversal = traversal.groupCount();
}
}
-
if (expr.getAggregator().getName().contains("MAX")) {
traversal = traversal.max();
}
@@ -220,7 +243,14 @@ public class SparqlToGremlinCompiler {
*/
@Override
public void visit(final OpBGP opBGP) {
- opBGP.getPattern().getList().forEach(triple -> traversalList.add(TraversalBuilder.transform(triple)));
+ if(optionalFlag)
+ {
+ opBGP.getPattern().getList().forEach(triple -> optionalTraversals.add(TraversalBuilder.transform(triple)));
+ opBGP.getPattern().getList().forEach(triple -> optionalVariable.add(triple.getObject().toString()));
+
+ }
+ else
+ opBGP.getPattern().getList().forEach(triple -> traversalList.add(TraversalBuilder.transform(triple)));
}
/**
@@ -237,6 +267,32 @@ public class SparqlToGremlinCompiler {
}
}
+
+ /**
+ * Visiting LeftJoin(Optional) in SPARQL algebra.
+ */
+ @Override
+ public void visit(final OpLeftJoin opLeftJoin) {
+ optionalFlag = true;
+ optionalVisit(opLeftJoin.getRight());
+ if (opLeftJoin.getExprs() != null) {
+ for (Expr expr : opLeftJoin.getExprs().getList()) {
+ if (expr != null) {
+ if (optionalFlag)
+ optionalTraversals.add(__.where(WhereTraversalBuilder.transform(expr)));
+ }
+ }
+ }
+ }
+
+ /**
+ * Walking OP for Optional in SPARQL algebra.
+ */
+ private void optionalVisit(final Op op) {
+
+ OpWalker.walk(op, this);
+ }
+
/**
* Visiting unions in SPARQL algebra.
*/
[2/3] tinkerpop git commit: Update compilers.asciidoc
Posted by sp...@apache.org.
Update compilers.asciidoc
Updating documentation:
- fixed optional clause
- updated optional clause limitation while in nesting with union & order-by
- went through other examples and limitations
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/70834ee3
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/70834ee3
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/70834ee3
Branch: refs/heads/TINKERPOP-1878
Commit: 70834ee3acc15cd429b3db72bd150b8d5053d845
Parents: a073329
Author: Harsh Thakkar <ha...@gmail.com>
Authored: Wed Aug 1 11:27:59 2018 +0200
Committer: GitHub <no...@github.com>
Committed: Wed Aug 1 11:27:59 2018 +0200
----------------------------------------------------------------------
docs/src/reference/compilers.asciidoc | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/70834ee3/docs/src/reference/compilers.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/compilers.asciidoc b/docs/src/reference/compilers.asciidoc
index e015cc8..5b6ab2e 100644
--- a/docs/src/reference/compilers.asciidoc
+++ b/docs/src/reference/compilers.asciidoc
@@ -206,9 +206,8 @@ WHERE { ?person v:label "person" . ?person v:age ?age . ?person v:name ?name . }
The the variable encountered first will be the ordering decider, i.e. since we have `?person` being encountered first, the result set will be ordered according to the `?person` variable (which are vertex id).
* OPTIONAL
-....
-currently fixing this...
-....
+In the current implementation, `OPTIONAL` clause doesn't work under nesting with `UNION` clause (i.e. multiple optional clauses with in a union clause) and `ORDER-By` clause (i.e. declaring ordering over triple patterns within optional clauses). Everything else with SPARQL `OPTIONAL` works just fine.
+
[[examples]]
=== Examples
[3/3] tinkerpop git commit: Merge branch 'pr-900' into TINKERPOP-1878
Posted by sp...@apache.org.
Merge branch 'pr-900' into TINKERPOP-1878
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/98975edc
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/98975edc
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/98975edc
Branch: refs/heads/TINKERPOP-1878
Commit: 98975edc49d351861531ad2ee2d4b1f5b24e52dc
Parents: 70834ee 56dce70
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Aug 1 09:25:35 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 1 09:25:35 2018 -0400
----------------------------------------------------------------------
.../gremlin/sparql/SparqlToGremlinCompiler.java | 64 ++++++++++++++++++--
1 file changed, 60 insertions(+), 4 deletions(-)
----------------------------------------------------------------------