TINKERPOP-1878 More tests for ordering Factored the order index creation into its own method to tidy up a bit.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/326e35d0 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/326e35d0 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/326e35d0 Branch: refs/heads/TINKERPOP-1878 Commit: 326e35d052f7d6aa011b022c503f1ff38d844bc9 Parents: bb21a3d Author: Stephen Mallette <sp...@genoprime.com> Authored: Fri Jan 26 15:56:55 2018 -0500 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Wed Aug 8 07:47:30 2018 -0400 ---------------------------------------------------------------------- .../sparql/SparqlToGremlinTranspiler.java | 29 ++++++++++++++------ .../dsl/sparql/SparqlTraversalSourceTest.java | 6 ++++ 2 files changed, 26 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/326e35d0/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinTranspiler.java ---------------------------------------------------------------------- diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinTranspiler.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinTranspiler.java index ea3f828..c3bc907 100644 --- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinTranspiler.java +++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinTranspiler.java @@ -99,15 +99,8 @@ public class SparqlToGremlinTranspiler { arrayOfAllTraversals[traversalIndex++] = tempTrav; } - final Map<String, Order> orderingIndex = new HashMap<>(); - if (query.hasOrderBy()) { - final List<SortCondition> sortingConditions = query.getOrderBy(); - - for (SortCondition sortCondition : sortingConditions) { - final Expr expr = sortCondition.getExpression(); - orderingIndex.put(expr.getVarName(), sortCondition.getDirection() == 1 ? Order.incr : Order.decr); - } - } + // 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); @@ -203,6 +196,24 @@ public class SparqlToGremlinTranspiler { return traversal; } + /** + * Extracts any {@code SortCondition} instances from the SPARQL query and holds them in an index of their keys + * where the value is that keys sorting direction. + */ + private static Map<String, Order> createOrderIndexFromQuery(final Query query) { + final Map<String, Order> orderingIndex = new HashMap<>(); + if (query.hasOrderBy()) { + final List<SortCondition> sortingConditions = query.getOrderBy(); + + for (SortCondition sortCondition : sortingConditions) { + final Expr expr = sortCondition.getExpression(); + orderingIndex.put(expr.getVarName(), sortCondition.getDirection() == 1 ? Order.incr : Order.decr); + } + } + + return orderingIndex; + } + private static GraphTraversal<Vertex, ?> transpile(final GraphTraversalSource g, final Query query) { return new SparqlToGremlinTranspiler(g).transpile(query); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/326e35d0/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java ---------------------------------------------------------------------- diff --git a/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java b/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java index 2743255..1b39813 100644 --- a/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java +++ b/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java @@ -82,4 +82,10 @@ public class SparqlTraversalSourceTest { }} )); } + + @Test + public void shouldFindAllNamesOrdered() { + final List<?> x = g.sparql("SELECT ?name WHERE { ?person v:name ?name } ORDER BY DESC(?name)").toList(); + assertThat(x, contains("vadas", "ripple", "peter", "marko", "lop", "josh")); + } }