Updated Branches: refs/heads/develop 9432e3117 -> efb2d27a3
fixed a bug in iterating over SPARQL results, now SPARQL results do not directly iterate over the result set, instead return a list (to avoid having several result sets open at the same time) Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/efb2d27a Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/efb2d27a Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/efb2d27a Branch: refs/heads/develop Commit: efb2d27a3226348f257bc12c6edd75402098d0e1 Parents: 9432e31 Author: Sebastian Schaffert <[email protected]> Authored: Fri May 3 14:33:48 2013 +0200 Committer: Sebastian Schaffert <[email protected]> Committed: Fri May 3 14:33:48 2013 +0200 ---------------------------------------------------------------------- .../sparql/persistence/KiWiSparqlConnection.java | 5 ++++- .../kiwi/sparql/test/KiWiSparqlJoinTest.java | 12 ++++++++++++ .../marmotta/kiwi/sparql/test/query11.sparql | 8 ++++++++ .../marmotta/kiwi/sparql/test/query12.sparql | 7 +++++++ 4 files changed, 31 insertions(+), 1 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/efb2d27a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java index b675ddf..a192c2c 100644 --- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java +++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java @@ -19,6 +19,8 @@ package org.apache.marmotta.kiwi.sparql.persistence; import com.google.common.base.Preconditions; import info.aduna.iteration.CloseableIteration; +import info.aduna.iteration.CloseableIteratorIteration; +import info.aduna.iteration.Iterations; import org.apache.commons.lang.StringUtils; import org.apache.marmotta.commons.sesame.model.Namespaces; import org.apache.marmotta.commons.util.DateUtils; @@ -290,7 +292,7 @@ public class KiWiSparqlConnection { PreparedStatement queryStatement = parent.getJDBCConnection().prepareStatement(queryString); ResultSet result = queryStatement.executeQuery(); - return new ResultSetIteration<BindingSet>(result, true, new ResultTransformerFunction<BindingSet>() { + ResultSetIteration<BindingSet> it = new ResultSetIteration<BindingSet>(result, true, new ResultTransformerFunction<BindingSet>() { @Override public BindingSet apply(ResultSet row) throws SQLException { MapBindingSet resultRow = new MapBindingSet(); @@ -309,6 +311,7 @@ public class KiWiSparqlConnection { } }); + return new CloseableIteratorIteration<BindingSet, SQLException>(Iterations.asList(it).iterator()); } private String evaluateExpression(ValueExpr expr, Map<Var, List<String>> queryVariables, OPTypes optype) { http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/efb2d27a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java index 861c564..2aab4c4 100644 --- a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java +++ b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java @@ -257,6 +257,18 @@ public class KiWiSparqlJoinTest { testQuery("query10.sparql"); } + // optional + @Test + public void testQuery11() throws Exception { + testQuery("query11.sparql"); + } + + // optional with join + @Test + public void testQuery12() throws Exception { + testQuery("query12.sparql"); + } + private void testQuery(String filename) throws Exception { String queryString = IOUtils.toString(this.getClass().getResourceAsStream(filename), "UTF-8"); http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/efb2d27a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query11.sparql ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query11.sparql b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query11.sparql new file mode 100644 index 0000000..f784eb1 --- /dev/null +++ b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query11.sparql @@ -0,0 +1,8 @@ +PREFIX foaf: <http://xmlns.com/foaf/0.1/> +PREFIX dc: <http://purl.org/dc/elements/1.1/> + +SELECT ?p1 ?fn ?age ?i WHERE { + ?p1 foaf:name ?fn . + OPTIONAL { ?p1 foaf:age ?age } . + ?p1 foaf:interest ?i +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/efb2d27a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query12.sparql ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query12.sparql b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query12.sparql new file mode 100644 index 0000000..c025a19 --- /dev/null +++ b/libraries/kiwi/kiwi-sparql/src/test/resources/org/apache/marmotta/kiwi/sparql/test/query12.sparql @@ -0,0 +1,7 @@ +PREFIX foaf: <http://xmlns.com/foaf/0.1/> +PREFIX dc: <http://purl.org/dc/elements/1.1/> + +SELECT ?p1 ?fn ?p2 ?age WHERE { + ?p1 foaf:name ?fn . + OPTIONAL { ?p1 foaf:knows ?p2 . ?p2 foaf:age ?age } +} \ No newline at end of file
