You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2013/04/29 19:29:07 UTC
svn commit: r1477219 -
/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpAsQuery.java
Author: rvesse
Date: Mon Apr 29 17:29:07 2013
New Revision: 1477219
URL: http://svn.apache.org/r1477219
Log:
New test case that demonstrates that some uses of sub-queries will result in algebra that cannot round trip back to the original query (JENA-445)
Modified:
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpAsQuery.java
Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpAsQuery.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpAsQuery.java?rev=1477219&r1=1477218&r2=1477219&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpAsQuery.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpAsQuery.java Mon Apr 29 17:29:07 2013
@@ -210,6 +210,14 @@ public class TestOpAsQuery {
}
@Test
+ public void testSubQuery3() {
+ String query = "SELECT * WHERE { { SELECT ?s ?p WHERE { ?s ?p ?o } } { SELECT ?x WHERE { ?x ?p ?o } } }";
+ //In this case there is insufficient information to correctly reverse translate the algebra so this query
+ //will not round trip
+ checkQueryNonRecoverable(query);
+ }
+
+ @Test
public void testAggregatesInSubQuery1() {
//Simplified form of a test case provided via the mailing list
String query = "SELECT ?key ?agg WHERE { { SELECT ?key (COUNT(*) AS ?agg) { ?key ?p ?o } GROUP BY ?key } }";
@@ -279,6 +287,24 @@ public class TestOpAsQuery {
return r;
}
+ public Query[] checkQueryNonRecoverable(String query) {
+ Query[] r = checkQuery(query);
+
+ // Strip namespaces and Base URI from each so comparison is not affected by those
+ stripNamespacesAndBase(r[0]);
+ stripNamespacesAndBase(r[1]);
+
+ // If this method is being called then we expect the strings to be non-equal and also
+ // the algebras to be non-equivalent because there will be insufficient information
+ // in the algebra to allow it to be translated back into a semantically equivalent query
+ Assert.assertNotEquals(r[0], r[1]);
+ Op a1 = Algebra.compile(r[0]);
+ Op a2 = Algebra.compile(r[1]);
+ Assert.assertNotEquals(a1, a2);
+
+ return r;
+ }
+
protected void stripNamespacesAndBase(Query q) {
Map<String, String> prefixes = q.getPrefixMapping().getNsPrefixMap();
for (String prefix : prefixes.keySet()) {