You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2013/07/15 19:36:19 UTC

svn commit: r1503363 - in /clerezza/trunk/rdf.jena.sparql/src: main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java

Author: reto
Date: Mon Jul 15 17:36:19 2013
New Revision: 1503363

URL: http://svn.apache.org/r1503363
Log:
CLEREZZA-803: added support for sparql update. Incomplete testing because of limited support in SpaqrlPreParser 

Modified:
    clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java
    clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java

Modified: clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java?rev=1503363&r1=1503362&r2=1503363&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java (original)
+++ clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java Mon Jul 15 17:36:19 2013
@@ -31,10 +31,17 @@ import org.apache.clerezza.rdf.core.spar
 import org.apache.clerezza.rdf.jena.storage.JenaGraphAdaptor;
 
 import com.hp.hpl.jena.query.Dataset;
+import com.hp.hpl.jena.query.QueryException;
 import com.hp.hpl.jena.query.QueryExecException;
 import com.hp.hpl.jena.query.QueryExecution;
 import com.hp.hpl.jena.query.QueryExecutionFactory;
 import com.hp.hpl.jena.query.QueryFactory;
+import com.hp.hpl.jena.sparql.resultset.SPARQLResult;
+import com.hp.hpl.jena.update.GraphStore;
+import com.hp.hpl.jena.update.GraphStoreFactory;
+import com.hp.hpl.jena.update.UpdateAction;
+import com.hp.hpl.jena.update.UpdateFactory;
+import com.hp.hpl.jena.update.UpdateRequest;
 
 /**
  * 
@@ -52,40 +59,7 @@ public class JenaSparqlEngine implements
 	@Override
 	public Object execute(TcManager tcManager, TripleCollection defaultGraph,
 			final Query query) {
-		final Dataset dataset = new TcDataset(tcManager, defaultGraph);
-
-		// Missing permission (java.lang.RuntimePermission getClassLoader)
-		// when calling QueryFactory.create causes ExceptionInInitializerError
-		// to be thrown.
-		// QueryExecutionFactory.create requires
-		// (java.io.FilePermission [etc/]location-mapping.* read)
-		// Thus, they are placed within doPrivileged
-		QueryExecution qexec = AccessController
-				.doPrivileged(new PrivilegedAction<QueryExecution>() {
-
-					@Override
-					public QueryExecution run() {
-						com.hp.hpl.jena.query.Query jenaQuery = QueryFactory
-								.create(query.toString());
-						return QueryExecutionFactory.create(jenaQuery, dataset);
-					}
-				});
-
-		try {
-			if (query instanceof AskQuery) {
-				return Boolean.valueOf(qexec.execAsk());
-			} else if (query instanceof DescribeQuery) {
-				return new JenaGraphAdaptor(qexec.execDescribe().getGraph())
-						.getGraph();
-			} else if (query instanceof ConstructQuery) {
-				return new JenaGraphAdaptor(qexec.execConstruct().getGraph())
-						.getGraph();
-			} else {
-				return new ResultSetWrapper(qexec.execSelect());
-			}
-		} finally {
-			qexec.close();
-		}
+		return execute(tcManager, defaultGraph, query.toString());
 	}
 
 	@Override
@@ -104,12 +78,23 @@ public class JenaSparqlEngine implements
 
 					@Override
 					public QueryExecution run() {
-						com.hp.hpl.jena.query.Query jenaQuery = QueryFactory
-								.create(query);
-						return QueryExecutionFactory.create(jenaQuery, dataset);
+                        try {
+                            com.hp.hpl.jena.query.Query jenaQuery = QueryFactory
+                                	.create(query);
+                            if (jenaQuery.isUnknownType()) {
+                                return null;
+                            }
+                            return QueryExecutionFactory.create(jenaQuery, dataset);
+                        } catch (QueryException ex) {
+                            return null;
+                        }
+                        
 					}
 				});
-
+        if (qexec == null) {
+            return executeUpdate(dataset, query);
+        }
+        //TODO check with rather than trial and error: if (qexec.getQuery().isSelectType()) {
 		try {
 			try {
 				return new ResultSetWrapper(qexec.execSelect());
@@ -130,4 +115,10 @@ public class JenaSparqlEngine implements
 			qexec.close();
 		}
 	}
+
+    private Object executeUpdate(Dataset dataset, String query) {
+        GraphStore graphStore = GraphStoreFactory.create(dataset) ;
+        UpdateAction.parseExecute(query, graphStore) ;
+        return true;
+    }
 }

Modified: clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java?rev=1503363&r1=1503362&r2=1503363&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java (original)
+++ clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java Mon Jul 15 17:36:19 2013
@@ -118,4 +118,30 @@ public class SimpleTest {
 				((Graph) TcManager.getInstance().executeSparqlQuery(
 						QueryParser.getInstance().parse(query), data)).size());
 	}
+    
+    /* Currently fails because of Preparser not yet supporting this type of queries
+    @Test
+	public void simpleInsert() throws ParseException {
+		SimpleMGraph data = new SimpleMGraph();
+		final String titleValue = "SPARQL Tutorial";
+		data.add(new TripleImpl(new UriRef("http://example.org/book/book1"),
+				DC.title, new PlainLiteralImpl(titleValue)));
+        
+		String query = "PREFIX foaf:   <http://xmlns.com/foaf/0.1/> "
+				+ "INSERT DATA { <http://foo/bar> foaf:name 'Fred'}";
+        TcManager.getInstance().executeSparqlQuery(query, data);
+		Assert.assertEquals("Not having the right number of triples after insert",2,data.size());
+	}*/
+    
+    @Test
+	public void simpleDrop() throws ParseException {
+		SimpleMGraph data = new SimpleMGraph();
+		final String titleValue = "SPARQL Tutorial";
+		data.add(new TripleImpl(new UriRef("http://example.org/book/book1"),
+				DC.title, new PlainLiteralImpl(titleValue)));
+        
+		String query = "DROP ALL";
+        TcManager.getInstance().executeSparqlQuery(query, data);
+		Assert.assertEquals("GRAPH not empty after DROP ALL",0,data.size());
+	}
 }