Author: andy
Date: Thu Jul 31 18:32:01 2014
New Revision: 1614951

URL: http://svn.apache.org/r1614951
Log:
JENA-754 : Rewrite element for WHERE when an update using WITH.

Modified:
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphAltDefaultGraph.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/GraphView.java
    
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineWorker.java

Modified: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphAltDefaultGraph.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphAltDefaultGraph.java?rev=1614951&r1=1614950&r2=1614951&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphAltDefaultGraph.java
 (original)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphAltDefaultGraph.java
 Thu Jul 31 18:32:01 2014
@@ -23,9 +23,12 @@ import java.util.Iterator ;
 import com.hp.hpl.jena.graph.Graph ;
 import com.hp.hpl.jena.graph.Node ;
 
-/** DatasetGraph that switch teh default graph to another graph.
+/** DatasetGraph that switches the default graph to another graph.
  *  This different graph can be one of the underlying dataset or a completely
  *  unconnected graph.   
+ *  This wrapper should used with care at scale because it masks the
+ *  query execution from storage, so generic query execution happens,
+ *  not, for example, TDB quad execution.     
  */
 
 public class DatasetGraphAltDefaultGraph extends DatasetGraphCollection {

Modified: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/GraphView.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/GraphView.java?rev=1614951&r1=1614950&r2=1614951&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/GraphView.java 
(original)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/GraphView.java 
Thu Jul 31 18:32:01 2014
@@ -82,7 +82,6 @@ public class GraphView extends GraphBase
         return dsg ;
     }
     
-    
     protected final boolean isDefaultGraph() { return isDefaultGraph(gn) ; }
     protected final boolean isUnionGraph()   { return isUnionGraph(gn) ; }
 

Modified: 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineWorker.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineWorker.java?rev=1614951&r1=1614950&r2=1614951&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineWorker.java
 (original)
+++ 
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineWorker.java
 Thu Jul 31 18:32:01 2014
@@ -33,9 +33,9 @@ import org.apache.jena.atlas.web.TypedIn
 import org.apache.jena.riot.Lang ;
 import org.apache.jena.riot.RDFDataMgr ;
 import org.apache.jena.riot.RDFLanguages ;
+import org.apache.jena.riot.system.SerializationFactoryFinder ;
 import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.riot.system.StreamRDFLib ;
-import org.apache.jena.riot.system.SerializationFactoryFinder ;
 
 import com.hp.hpl.jena.graph.Graph ;
 import com.hp.hpl.jena.graph.GraphUtil ;
@@ -381,18 +381,37 @@ public class UpdateEngineWorker implemen
     public void visit(UpdateModify update)
     {
         Node withGraph = update.getWithIRI() ;
-        Query query = elementToQuery(update.getWherePattern()) ;
+        Element elt = update.getWherePattern() ;
         
+        // null or a dataset for USING clause. 
         // USING/USING NAMED
         DatasetGraph dsg = processUsing(update) ;
         
+        // -------------------
+        // WITH
         // USING overrides WITH
-        if ( dsg == null && withGraph != null )
-            dsg = processWith(update) ;    
-            
+        if ( dsg == null && withGraph != null ) {
+            if ( false ) 
+                // Ye Olde way - create a special dataset
+                dsg = processWith(update) ;
+            else
+                // Better, 
+                // Wrap WHERE clause in GRAPH <with_uri>
+                // and can remove DatasetGraphAltDefaultGraph, 
+                // or at least comment its implications.
+                elt = new ElementNamedGraph(withGraph, elt) ;
+        }
+
+        // WITH :
+        // The quads from deletion/insertion are altered when streamed
+        // into the templates later on. 
+        
+        // -------------------
+        
         if ( dsg == null )
             dsg = graphStore ;
         
+        Query query = elementToQuery(elt) ;
         ThresholdPolicy<Binding> policy = 
ThresholdPolicyFactory.policyFromContext(graphStore.getContext());
         DataBag<Binding> db = BagFactory.newDefaultBag(policy, 
SerializationFactoryFinder.bindingSerializationFactory()) ;
         try


Reply via email to