You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by sa...@apache.org on 2013/08/21 19:01:08 UTC

svn commit: r1516220 - in /jena/trunk: jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/ jena-arq/src/main/java/com/hp/hpl/jena/update/ jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/ jena-sdb/src/main/java/com/hp/hpl/jena/sdb/modify/ jena-td...

Author: sallen
Date: Wed Aug 21 17:01:07 2013
New Revision: 1516220

URL: http://svn.apache.org/r1516220
Log:
JENA-519 Add initial binding support to update queries

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineFactory.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineWorker.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorStreamingBase.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateAction.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateExecutionFactory.java
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/AbstractTestUpdateGraph.java
    jena/trunk/jena-sdb/src/main/java/com/hp/hpl/jena/sdb/modify/UpdateEngineSDB.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/modify/UpdateEngineTDB.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java Wed Aug 21 17:01:07 2013
@@ -21,6 +21,7 @@ package com.hp.hpl.jena.sparql.modify;
 import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.sparql.ARQConstants ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.sparql.util.NodeFactoryExtra ;
 import com.hp.hpl.jena.update.GraphStore ;
@@ -28,12 +29,15 @@ import com.hp.hpl.jena.update.GraphStore
 public abstract class UpdateEngineBase implements UpdateEngine
 {
     protected final GraphStore graphStore ;
+    protected final Binding inputBinding;
     protected final Context context ;
 
     public UpdateEngineBase(GraphStore graphStore,
+                            Binding inputBinding,
                             Context context)
     {
         this.graphStore = graphStore ;
+        this.inputBinding = inputBinding ;
         this.context = setupContext(context, graphStore) ;
     }
     

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineFactory.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineFactory.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineFactory.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineFactory.java Wed Aug 21 17:01:07 2013
@@ -18,6 +18,7 @@
 
 package com.hp.hpl.jena.sparql.modify;
 
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.update.GraphStore ;
 
@@ -30,5 +31,5 @@ public interface UpdateEngineFactory
     public boolean accept(GraphStore graphStore, Context context) ;
     
     /** Create the update engine - having returned true to accept, should not fail */
-    public UpdateEngine create(GraphStore graphStore, Context context);
+    public UpdateEngine create(GraphStore graphStore, Binding inputBinding, Context context);
 }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java Wed Aug 21 17:01:07 2013
@@ -18,6 +18,7 @@
 
 package com.hp.hpl.jena.sparql.modify;
 
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.modify.request.UpdateVisitor ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.update.GraphStore ;
@@ -33,11 +34,12 @@ public class UpdateEngineMain extends Up
     /**
      * Creates a new Update Engine
      * @param graphStore Graph Store the updates operate over
+     * @param inputBinding Initial binding to be applied to Update operations that can apply an initial binding (i.e. UpdateDeleteWhere, UpdateModify)
      * @param context Execution Context
      */
-    public UpdateEngineMain(GraphStore graphStore, Context context)
+    public UpdateEngineMain(GraphStore graphStore, Binding inputBinding, Context context)
     {
-        super(graphStore, context) ;
+        super(graphStore, inputBinding, context) ;
     }
 
     @Override
@@ -72,7 +74,7 @@ public class UpdateEngineMain extends Up
      * @return The update visitor to be used to apply the updates
      */
     protected UpdateVisitor prepareWorker() {
-        return new UpdateEngineWorker(graphStore, context) ;
+        return new UpdateEngineWorker(graphStore, inputBinding, context) ;
     }
     
     private static UpdateEngineFactory factory = new UpdateEngineFactory()
@@ -84,9 +86,9 @@ public class UpdateEngineMain extends Up
         }
         
         @Override
-        public UpdateEngine create(GraphStore graphStore, Context context)
+        public UpdateEngine create(GraphStore graphStore, Binding inputBinding, Context context)
         {
-            return new UpdateEngineMain(graphStore, context);
+            return new UpdateEngineMain(graphStore, inputBinding, context);
         }
     } ;
 

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java Wed Aug 21 17:01:07 2013
@@ -18,6 +18,7 @@
 
 package com.hp.hpl.jena.sparql.modify;
 
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.modify.request.UpdateVisitor ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.update.GraphStore ;
@@ -39,11 +40,12 @@ public class UpdateEngineNonStreaming ex
     /**
      * Creates a new Update Engine
      * @param graphStore Graph Store the updates operate over
+     * @param inputBinding Initial binding to be applied to Update operations that can apply an initial binding (i.e. UpdateDeleteWhere, UpdateModify)
      * @param context Execution Context
      */
-    public UpdateEngineNonStreaming(GraphStore graphStore, Context context)
+    public UpdateEngineNonStreaming(GraphStore graphStore, Binding inputBinding, Context context)
     {
-        super(graphStore, context) ;
+        super(graphStore, inputBinding, context) ;
         accRequests = new UpdateRequest();
         updateSink = new UpdateRequestSink(accRequests)
         {
@@ -97,9 +99,9 @@ public class UpdateEngineNonStreaming ex
         }
         
         @Override
-        public UpdateEngine create(GraphStore graphStore, Context context)
+        public UpdateEngine create(GraphStore graphStore, Binding inputBinding, Context context)
         {
-            return new UpdateEngineNonStreaming(graphStore, context);
+            return new UpdateEngineNonStreaming(graphStore, inputBinding, context);
         }
     } ;
 

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=1516220&r1=1516219&r2=1516220&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 Wed Aug 21 17:01:07 2013
@@ -67,11 +67,13 @@ public class UpdateEngineWorker implemen
 {
     protected final GraphStore graphStore ;
     protected final boolean alwaysSilent = true ;
+    protected final Binding inputBinding;  // Used for UpdateModify and UpdateDeleteWhere only
     protected final Context context ;
 
-    public UpdateEngineWorker(GraphStore graphStore, Context context)
+    public UpdateEngineWorker(GraphStore graphStore, Binding inputBinding, Context context)
     {
         this.graphStore = graphStore ;
+        this.inputBinding = inputBinding ;
         this.context = context ;
     }
 
@@ -394,7 +396,7 @@ public class UpdateEngineWorker implemen
         DataBag<Binding> db = BagFactory.newDefaultBag(policy, SerializationFactoryFinder.bindingSerializationFactory()) ;
         try
         {
-            Iterator<Binding> bindings = evalBindings(query, dsg, context) ;
+            Iterator<Binding> bindings = evalBindings(query, dsg, inputBinding, context) ;
             
             if ( false )
             {   
@@ -585,11 +587,11 @@ public class UpdateEngineWorker implemen
             }
         }
         
-        return evalBindings(query, dsg, context) ;
+        return evalBindings(query, dsg, inputBinding, context) ;
         
     }
     
-    protected static Iterator<Binding> evalBindings(Query query, DatasetGraph dsg, Context context)
+    protected static Iterator<Binding> evalBindings(Query query, DatasetGraph dsg, Binding inputBinding, Context context)
     {
         // SET UP CONTEXT
         // The UpdateProcessorBase already copied the context and made it safe ... but that's going to happen again :-(
@@ -598,12 +600,12 @@ public class UpdateEngineWorker implemen
         
         if ( query != null )
         {
-            Plan plan = QueryExecutionFactory.createPlan(query, dsg, null, context) ;
+            Plan plan = QueryExecutionFactory.createPlan(query, dsg, inputBinding, context) ;
             toReturn = plan.iterator();
         }
         else
         {
-            toReturn = Iter.singleton(BindingRoot.create()) ;
+            toReturn = Iter.singleton((null != inputBinding) ? inputBinding : BindingRoot.create()) ;
         }
         return toReturn ;
     }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java Wed Aug 21 17:01:07 2013
@@ -20,6 +20,7 @@ package com.hp.hpl.jena.sparql.modify;
 
 import org.apache.jena.atlas.iterator.Iter ;
 
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.update.GraphStore ;
 import com.hp.hpl.jena.update.UpdateProcessor ;
@@ -32,16 +33,19 @@ public class UpdateProcessorBase impleme
 {
     protected final UpdateRequest request ;
     protected final GraphStore graphStore ;
+    protected final Binding inputBinding;
     protected final UpdateEngineFactory factory ;
     protected final Context context ;
 
     public UpdateProcessorBase(UpdateRequest request, 
                                GraphStore graphStore, 
+                               Binding inputBinding,
                                Context context, 
                                UpdateEngineFactory factory)
     {
         this.request = request ;
         this.graphStore = graphStore ;
+        this.inputBinding = inputBinding;
         this.context = Context.setupContext(context, graphStore) ;
         this.factory = factory ;
     }
@@ -49,7 +53,7 @@ public class UpdateProcessorBase impleme
     @Override
     public void execute()
     {
-        UpdateEngine uProc = factory.create(graphStore, context);
+        UpdateEngine uProc = factory.create(graphStore, inputBinding, context);
         uProc.startRequest();
         
         try {

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorStreamingBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorStreamingBase.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorStreamingBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorStreamingBase.java Wed Aug 21 17:01:07 2013
@@ -18,6 +18,7 @@
 
 package com.hp.hpl.jena.sparql.modify;
 
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.update.GraphStore ;
 import com.hp.hpl.jena.update.UpdateProcessorStreaming ;
@@ -32,12 +33,12 @@ public class UpdateProcessorStreamingBas
     
     protected final UpdateEngine proc;
 
-    public UpdateProcessorStreamingBase(GraphStore graphStore, Context context, UpdateEngineFactory factory)
+    public UpdateProcessorStreamingBase(GraphStore graphStore, Binding inputBinding, Context context, UpdateEngineFactory factory)
     {
         this.graphStore = graphStore ;
         this.context = Context.setupContext(context, graphStore) ;
         
-        proc = factory.create(graphStore, context) ;
+        proc = factory.create(graphStore, inputBinding, context) ;
     }
     
     @Override

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateAction.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateAction.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateAction.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateAction.java Wed Aug 21 17:01:07 2013
@@ -28,6 +28,7 @@ import com.hp.hpl.jena.query.Syntax ;
 import com.hp.hpl.jena.rdf.model.Model ;
 import com.hp.hpl.jena.sparql.ARQException ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.lang.UpdateParser ;
 import com.hp.hpl.jena.sparql.modify.UpdateSink ;
 import com.hp.hpl.jena.sparql.modify.UsingList ;
@@ -35,7 +36,7 @@ import com.hp.hpl.jena.sparql.modify.Usi
 import com.hp.hpl.jena.sparql.modify.request.UpdateWithUsing ;
 
 /** A class of forms for executing SPARQL Update operations. 
- * parse* means the update request is in a string;
+ * parse* means the update request is in a String or an InputStream;
  * read* means read the contents of a file.    
  */
 
@@ -76,15 +77,25 @@ public class UpdateAction
     {
         readExecute(filename, GraphStoreFactory.create(graph)) ; 
     }
-
+    
     /** Read a file containing SPARQL Update operations, and execute the operations.
      * @param filename
      * @param graphStore
      */
     public static void readExecute(String filename, GraphStore graphStore)
     {
+        readExecute(filename, graphStore, null);
+    }
+
+    /** Read a file containing SPARQL Update operations, and execute the operations.
+     * @param filename
+     * @param graphStore
+     * @param inputBinding
+     */
+    public static void readExecute(String filename, GraphStore graphStore, Binding inputBinding)
+    {
         UpdateRequest req = UpdateFactory.read(filename) ;
-        execute(req, graphStore) ;
+        execute(req, graphStore, inputBinding) ;
     }
     
 
@@ -171,20 +182,30 @@ public class UpdateAction
     {
         execute(request, GraphStoreFactory.create(graph)) ; 
     }
-
+    
     /** Execute SPARQL Update operations.
      * @param request
      * @param graphStore
      */
     public static void execute(UpdateRequest request, GraphStore graphStore)
     {
-        execute$(request, graphStore) ;
+        execute(request, graphStore, null);
+    }
+
+    /** Execute SPARQL Update operations.
+     * @param request
+     * @param graphStore
+     * @param inputBinding
+     */
+    public static void execute(UpdateRequest request, GraphStore graphStore, Binding inputBinding)
+    {
+        execute$(request, graphStore, inputBinding) ;
     }
     
     // All non-streaming updates come through here.
-    private static void execute$(UpdateRequest request, GraphStore graphStore)
+    private static void execute$(UpdateRequest request, GraphStore graphStore, Binding inputBinding)
     {
-        UpdateProcessor uProc = UpdateExecutionFactory.create(request, graphStore);
+        UpdateProcessor uProc = UpdateExecutionFactory.create(request, graphStore, inputBinding);
         if (uProc == null)
             throw new ARQException("No suitable update procesors are registered/able to execute your updates");
         uProc.execute();
@@ -226,21 +247,31 @@ public class UpdateAction
     {
         execute(update, GraphStoreFactory.create(graph)) ; 
     }
-
+    
     /** Execute a single SPARQL Update operation.
      * @param update
      * @param graphStore
      */
     public static void execute(Update update, GraphStore graphStore)
     {
-        execute$(update, graphStore) ;
+        execute(update, graphStore, null);
+    }
+
+    /** Execute a single SPARQL Update operation.
+     * @param update
+     * @param graphStore
+     * @param inputBinding
+     */
+    public static void execute(Update update, GraphStore graphStore, Binding inputBinding)
+    {
+        execute$(update, graphStore, inputBinding) ;
     }
     
-    private static void execute$(Update update, GraphStore graphStore)
+    private static void execute$(Update update, GraphStore graphStore, Binding inputBinding)
     {
         UpdateRequest request = new UpdateRequest() ;
         request.add(update) ;
-        execute$(request, graphStore) ;
+        execute$(request, graphStore, inputBinding) ;
     }  
 
     
@@ -258,9 +289,15 @@ public class UpdateAction
     {
         parseExecute(usingList, dataset, fileName, null, syntax) ;
     }
-
+    
     /** Parse update operations into a GraphStore by reading it from a file */
     public static void parseExecute(UsingList usingList, DatasetGraph dataset, String fileName, String baseURI, Syntax syntax)
+    {
+        parseExecute(usingList, dataset, fileName, null, baseURI, syntax);
+    }
+
+    /** Parse update operations into a GraphStore by reading it from a file */
+    public static void parseExecute(UsingList usingList, DatasetGraph dataset, String fileName, Binding inputBinding, String baseURI, Syntax syntax)
     { 
         InputStream in = null ;
         if ( fileName.equals("-") )
@@ -271,7 +308,7 @@ public class UpdateAction
             if ( in == null )
                 throw new UpdateException("File could not be opened: "+fileName) ;
         }
-        parseExecute(usingList, dataset, in, baseURI, syntax) ;
+        parseExecute(usingList, dataset, in, inputBinding, baseURI, syntax) ;
     }
     
     /** 
@@ -311,14 +348,29 @@ public class UpdateAction
      * @param usingList A list of USING or USING NAMED statements that be added to all {@link UpdateWithUsing} queries
      * @param dataset   The dataset to apply the changes to
      * @param input     The source of the update request (must be UTF-8). 
-     * @param baseURI   The base URI for resolving relative URIs. 
+     * @param baseURI   The base URI for resolving relative URIs (may be <code>null</code>)
      * @param syntax    The update language syntax 
      */
     public static void parseExecute(UsingList usingList, DatasetGraph dataset, InputStream input, String baseURI, Syntax syntax)
     {
+        parseExecute(usingList, dataset, input, null, baseURI, syntax);
+    }
+    
+    /**
+     * Parse update operations into a GraphStore by parsing from an InputStream.
+     * @param usingList    A list of USING or USING NAMED statements that be added to all {@link UpdateWithUsing} queries
+     * @param dataset      The dataset to apply the changes to
+     * @param input        The source of the update request (must be UTF-8). 
+     * @param inputBinding Initial binding to be applied to Update operations that can apply an initial binding
+     *                     (i.e. UpdateDeleteWhere, UpdateModify).  May be <code>null</code>
+     * @param baseURI      The base URI for resolving relative URIs (may be <code>null</code>)
+     * @param syntax       The update language syntax 
+     */
+    public static void parseExecute(UsingList usingList, DatasetGraph dataset, InputStream input, Binding inputBinding, String baseURI, Syntax syntax)
+    {
         GraphStore graphStore = GraphStoreFactory.create(dataset);
         
-        UpdateProcessorStreaming uProc = UpdateExecutionFactory.createStreaming(graphStore) ;
+        UpdateProcessorStreaming uProc = UpdateExecutionFactory.createStreaming(graphStore, inputBinding) ;
         if (uProc == null)
             throw new ARQException("No suitable update procesors are registered/able to execute your updates");
         

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateExecutionFactory.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateExecutionFactory.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateExecutionFactory.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/update/UpdateExecutionFactory.java Wed Aug 21 17:01:07 2013
@@ -21,6 +21,7 @@ package com.hp.hpl.jena.update;
 import org.apache.jena.atlas.web.auth.HttpAuthenticator;
 
 import com.hp.hpl.jena.query.ARQ ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.modify.UpdateEngineFactory ;
 import com.hp.hpl.jena.sparql.modify.UpdateEngineRegistry ;
 import com.hp.hpl.jena.sparql.modify.UpdateProcessRemote ;
@@ -40,7 +41,18 @@ public class UpdateExecutionFactory
      */
     public static UpdateProcessor create(Update update, GraphStore graphStore)
     {
-        return create(new UpdateRequest(update), graphStore) ;
+        return create(new UpdateRequest(update), graphStore, null, null) ;
+    }
+    
+    /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
+     * @param update
+     * @param graphStore
+     * @param inputBinding Initial binding to be applied to Update operations that can apply an initial binding (i.e. UpdateDeleteWhere, UpdateModify)
+     * @return UpdateProcessor or null
+     */
+    public static UpdateProcessor create(Update update, GraphStore graphStore, Binding inputBinding)
+    {
+        return create(new UpdateRequest(update), graphStore, inputBinding) ;
     }
 
     /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
@@ -50,7 +62,18 @@ public class UpdateExecutionFactory
      */
     public static UpdateProcessor create(UpdateRequest updateRequest, GraphStore graphStore)
     {        
-        return make(updateRequest, graphStore, null) ;
+        return make(updateRequest, graphStore, null, null) ;
+    }
+    
+    /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
+     * @param updateRequest
+     * @param graphStore
+     * @param inputBinding Initial binding to be applied to Update operations that can apply an initial binding (i.e. UpdateDeleteWhere, UpdateModify)
+     * @return UpdateProcessor or null
+     */
+    public static UpdateProcessor create(UpdateRequest updateRequest, GraphStore graphStore, Binding inputBinding)
+    {        
+        return make(updateRequest, graphStore, inputBinding, null) ;
     }
     
     /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
@@ -59,7 +82,17 @@ public class UpdateExecutionFactory
      */
     public static UpdateProcessorStreaming createStreaming(GraphStore graphStore)
     {        
-        return makeStreaming(graphStore, null) ;
+        return makeStreaming(graphStore, null, null) ;
+    }
+    
+    /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
+     * @param graphStore
+     * @param inputBinding Initial binding to be applied to Update operations that can apply an initial binding (i.e. UpdateDeleteWhere, UpdateModify)
+     * @return UpdateProcessor or null
+     */
+    public static UpdateProcessorStreaming createStreaming(GraphStore graphStore, Binding inputBinding)
+    {        
+        return makeStreaming(graphStore, inputBinding, null) ;
     }
     
     /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
@@ -69,7 +102,18 @@ public class UpdateExecutionFactory
      */
     public static UpdateProcessorStreaming createStreaming(GraphStore graphStore, Context context)
     {        
-        return makeStreaming(graphStore, context) ;
+        return makeStreaming(graphStore, null, context) ;
+    }
+    
+    /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
+     * @param graphStore
+     * @param inputBinding Initial binding to be applied to Update operations that can apply an initial binding (i.e. UpdateDeleteWhere, UpdateModify)
+     * @param context  (null means use merge of global and graph store context))
+     * @return UpdateProcessor or null
+     */
+    public static UpdateProcessorStreaming createStreaming(GraphStore graphStore, Binding inputBinding, Context context)
+    {        
+        return makeStreaming(graphStore, inputBinding, context) ;
     }
 
     /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
@@ -80,11 +124,23 @@ public class UpdateExecutionFactory
      */
     public static UpdateProcessor create(UpdateRequest updateRequest, GraphStore graphStore, Context context)
     {        
-        return make(updateRequest, graphStore, context) ;
+        return make(updateRequest, graphStore, null, context) ;
+    }
+    
+    /** Create an UpdateProcessor appropriate to the GraphStore, or null if no available factory to make an UpdateProcessor 
+     * @param updateRequest
+     * @param graphStore
+     * @param inputBinding Initial binding to be applied to Update operations that can apply an initial binding (i.e. UpdateDeleteWhere, UpdateModify)
+     * @param context  (null means use merge of global and graph store context))
+     * @return UpdateProcessor or null
+     */
+    public static UpdateProcessor create(UpdateRequest updateRequest, GraphStore graphStore, Binding inputBinding, Context context)
+    {        
+        return make(updateRequest, graphStore, inputBinding, context) ;
     }
 
     // Everything comes through one of these two make methods
-    private static UpdateProcessor make(UpdateRequest updateRequest, GraphStore graphStore, Context context)
+    private static UpdateProcessor make(UpdateRequest updateRequest, GraphStore graphStore, Binding inputBinding, Context context)
     {
         if ( context == null )
         {
@@ -96,12 +152,12 @@ public class UpdateExecutionFactory
         if ( f == null )
             return null ;
         
-        UpdateProcessorBase uProc = new UpdateProcessorBase(updateRequest, graphStore, context, f) ;
+        UpdateProcessorBase uProc = new UpdateProcessorBase(updateRequest, graphStore, inputBinding, context, f) ;
         return uProc ;
     }
     
     // Everything comes through one of these two make methods
-    private static UpdateProcessorStreaming makeStreaming(GraphStore graphStore, Context context)
+    private static UpdateProcessorStreaming makeStreaming(GraphStore graphStore, Binding inputBinding, Context context)
     {
         if ( context == null )
         {
@@ -113,7 +169,7 @@ public class UpdateExecutionFactory
         if ( f == null )
             return null ;
         
-        UpdateProcessorStreamingBase uProc = new UpdateProcessorStreamingBase(graphStore, context, f) ;
+        UpdateProcessorStreamingBase uProc = new UpdateProcessorStreamingBase(graphStore, inputBinding, context, f) ;
         return uProc;
     }
     

Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/AbstractTestUpdateGraph.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/AbstractTestUpdateGraph.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/AbstractTestUpdateGraph.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/modify/AbstractTestUpdateGraph.java Wed Aug 21 17:01:07 2013
@@ -31,8 +31,18 @@ import com.hp.hpl.jena.query.QueryFactor
 import com.hp.hpl.jena.query.QueryParseException ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
 import com.hp.hpl.jena.sparql.core.Quad ;
+import com.hp.hpl.jena.sparql.core.Var ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
+import com.hp.hpl.jena.sparql.engine.binding.BindingFactory ;
 import com.hp.hpl.jena.sparql.graph.GraphFactory ;
-import com.hp.hpl.jena.sparql.modify.request.* ;
+import com.hp.hpl.jena.sparql.modify.request.QuadAcc ;
+import com.hp.hpl.jena.sparql.modify.request.QuadDataAcc ;
+import com.hp.hpl.jena.sparql.modify.request.Target ;
+import com.hp.hpl.jena.sparql.modify.request.UpdateCopy ;
+import com.hp.hpl.jena.sparql.modify.request.UpdateDataDelete ;
+import com.hp.hpl.jena.sparql.modify.request.UpdateDataInsert ;
+import com.hp.hpl.jena.sparql.modify.request.UpdateDeleteWhere ;
+import com.hp.hpl.jena.sparql.modify.request.UpdateModify ;
 import com.hp.hpl.jena.sparql.sse.SSE ;
 import com.hp.hpl.jena.sparql.syntax.Element ;
 import com.hp.hpl.jena.sparql.util.NodeFactoryExtra ;
@@ -245,6 +255,29 @@ public abstract class AbstractTestUpdate
         assertFalse(graphContains(gStore.getGraph(graphIRI), t));
     }
     
+    @Test public void testModifyInitialBindings()
+    {
+        GraphStore gStore = getEmptyGraphStore() ;
+        defaultGraphData(gStore, data12()) ;
+        namedGraphData(gStore, graphIRI, Factory.createDefaultGraph()) ;
+        
+        Binding initialBinding = BindingFactory.binding(Var.alloc("o"), o1) ;
+        
+        UpdateModify modify = new UpdateModify() ;
+        Element element = QueryFactory.createElement("{ ?s <http://example/p> ?o }" ) ;
+        modify.setElement(element) ;
+        modify.getInsertAcc().addQuad(new Quad(graphIRI, triple1)) ;
+        modify.getDeleteAcc().addTriple(SSE.parseTriple("(?s <http://example/p> ?o)")) ;
+        modify.getDeleteAcc().addQuad(SSE.parseQuad("(<http://example/graph> ?s <http://example/p> ?o)")) ; 
+        UpdateAction.execute(modify, gStore, initialBinding) ;
+        
+        assertFalse(graphEmpty(gStore.getGraph(graphIRI))) ;
+        assertFalse(graphEmpty(gStore.getDefaultGraph())) ;
+        assertTrue(graphContains(gStore.getGraph(graphIRI), triple1)) ;
+        assertTrue(graphContains(gStore.getDefaultGraph(), triple2)) ;
+        assertFalse(graphContains(gStore.getDefaultGraph(), triple1)) ;
+    }
+    
     @Test public void testCopy()
     {
         // Use blank nodes (will expose any problems in serialization when spill occurs)
@@ -351,16 +384,17 @@ public abstract class AbstractTestUpdate
 
     private static Graph data1()
     {
-        Graph graph = Factory.createDefaultGraph() ;
-        graph.add(triple1) ;
-        return graph ; 
+        return data(triple1) ;
     }
     
     private static Graph data2()
     {
-        Graph graph = Factory.createDefaultGraph() ;
-        graph.add(triple2) ;
-        return graph ; 
+        return data(triple2) ;
+    }
+    
+    private static Graph data12()
+    {
+        return data(triple1, triple2) ;
     }
     
     private static Graph data(Triple... triples)

Modified: jena/trunk/jena-sdb/src/main/java/com/hp/hpl/jena/sdb/modify/UpdateEngineSDB.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-sdb/src/main/java/com/hp/hpl/jena/sdb/modify/UpdateEngineSDB.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-sdb/src/main/java/com/hp/hpl/jena/sdb/modify/UpdateEngineSDB.java (original)
+++ jena/trunk/jena-sdb/src/main/java/com/hp/hpl/jena/sdb/modify/UpdateEngineSDB.java Wed Aug 21 17:01:07 2013
@@ -19,6 +19,7 @@
 package com.hp.hpl.jena.sdb.modify;
 
 import com.hp.hpl.jena.sdb.store.DatasetStoreGraph ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.modify.UpdateEngine ;
 import com.hp.hpl.jena.sparql.modify.UpdateEngineFactory ;
 import com.hp.hpl.jena.sparql.modify.UpdateEngineMain ;
@@ -30,8 +31,8 @@ public class UpdateEngineSDB extends Upd
 {
     // More of a placeholder currently.
     
-    public UpdateEngineSDB(DatasetStoreGraph graphStore, Context context)
-    { super(graphStore, context) ; }
+    public UpdateEngineSDB(DatasetStoreGraph graphStore, Binding inputBinding, Context context)
+    { super(graphStore, inputBinding, context) ; }
     
 
     // ---- Factory
@@ -45,9 +46,9 @@ public class UpdateEngineSDB extends Upd
             }
             
             @Override
-            public UpdateEngine create(GraphStore graphStore, Context context)
+            public UpdateEngine create(GraphStore graphStore, Binding inputBinding, Context context)
             {
-                return new UpdateEngineSDB((DatasetStoreGraph)graphStore, context);
+                return new UpdateEngineSDB((DatasetStoreGraph)graphStore, inputBinding, context);
             }
         } ;
     }

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/modify/UpdateEngineTDB.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/modify/UpdateEngineTDB.java?rev=1516220&r1=1516219&r2=1516220&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/modify/UpdateEngineTDB.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/modify/UpdateEngineTDB.java Wed Aug 21 17:01:07 2013
@@ -18,6 +18,7 @@
 
 package com.hp.hpl.jena.tdb.modify;
 
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.modify.UpdateEngine ;
 import com.hp.hpl.jena.sparql.modify.UpdateEngineFactory ;
 import com.hp.hpl.jena.sparql.modify.UpdateEngineMain ;
@@ -28,8 +29,8 @@ import com.hp.hpl.jena.update.GraphStore
 
 public class UpdateEngineTDB extends UpdateEngineMain
 {
-    public UpdateEngineTDB(DatasetGraphTDB graphStore, Context context)
-    { super(graphStore, context) ; }
+    public UpdateEngineTDB(DatasetGraphTDB graphStore, Binding inputBinding, Context context)
+    { super(graphStore, inputBinding, context) ; }
     
 
     // ---- Factory
@@ -43,9 +44,9 @@ public class UpdateEngineTDB extends Upd
             }
             
             @Override
-            public UpdateEngine create(GraphStore graphStore, Context context)
+            public UpdateEngine create(GraphStore graphStore, Binding inputBinding, Context context)
             {
-                return new UpdateEngineTDB((DatasetGraphTDB)graphStore, context);
+                return new UpdateEngineTDB((DatasetGraphTDB)graphStore, inputBinding, context);
             }
         } ;
     }