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