This is an automated email from the ASF dual-hosted git repository.

afs pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit d0bca10a8e7e9fc8d2565ecf2813ef07ed0d0ee0
Author: Andy Seaborne <[email protected]>
AuthorDate: Sun Jul 26 10:35:37 2026 +0100

    GH-4094: Allow execution timestamp to be set by query/update builders
---
 .../java/org/apache/jena/sparql/engine/QueryEngineBase.java    |  2 +-
 .../java/org/apache/jena/sparql/exec/QueryExecDataset.java     |  2 +-
 .../java/org/apache/jena/sparql/modify/UpdateEngineBase.java   | 10 +++-------
 .../org/apache/jena/sparql/modify/UpdateProcessorBase.java     |  2 +-
 .../jena/sparql/modify/UpdateProcessorStreamingBase.java       | 10 +++++-----
 .../src/main/java/org/apache/jena/sparql/util/Context.java     |  7 +++++++
 6 files changed, 18 insertions(+), 15 deletions(-)

diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryEngineBase.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryEngineBase.java
index f9427eea7d..f60bf0e5ae 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryEngineBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/QueryEngineBase.java
@@ -97,7 +97,7 @@ public abstract class QueryEngineBase implements OpEval, 
Closeable
         // so it can be changed after initialization.
         if ( context == null )
             context = Context.setupContextForDataset(context, dataset);
-        Context.setCurrentDateTime(context);
+        Context.setCurrentDateTimeIfUndef(context);
         this.query = null;
         setOp(op);
     }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/exec/QueryExecDataset.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/exec/QueryExecDataset.java
index 430f6facd0..7c23f1b829 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/exec/QueryExecDataset.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/exec/QueryExecDataset.java
@@ -114,7 +114,7 @@ public class QueryExecDataset implements QueryExec
     }
 
     private void init() {
-        Context.setCurrentDateTime(context);
+        Context.setCurrentDateTimeIfUndef(context);
         if ( query != null )
             context.put(ARQConstants.sysCurrentQuery, query);
     }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineBase.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineBase.java
index 186690713d..33d67f58d4 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineBase.java
@@ -21,31 +21,27 @@
 
 package org.apache.jena.sparql.modify;
 
-import org.apache.jena.sparql.ARQConstants ;
 import org.apache.jena.sparql.core.DatasetGraph ;
 import org.apache.jena.sparql.util.Context ;
-import org.apache.jena.sparql.util.NodeFactoryExtra ;
 
 public abstract class UpdateEngineBase implements UpdateEngine
 {
     protected final DatasetGraph datasetGraph ;
     protected final Context context ;
 
-    public UpdateEngineBase(DatasetGraph datasetGraph, Context context)
-    {
+    public UpdateEngineBase(DatasetGraph datasetGraph, Context context) {
         this.datasetGraph = datasetGraph ;
         this.context = setupContext(context, datasetGraph) ;
     }
 
-    private Context setupContext(Context cxt, DatasetGraph dataset)
-    {
+    private Context setupContext(Context cxt, DatasetGraph dataset) {
         // The following setup is effectively the same as in QueryEngineBase
         Context result = cxt;
 
         if ( result == null )
             result = Context.setupContextForDataset(cxt, dataset);
 
-        result.set(ARQConstants.sysCurrentTime, 
NodeFactoryExtra.nowAsDateTime()) ;
+        Context.setCurrentDateTimeIfUndef(result);
         return result ;
     }
 }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessorBase.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessorBase.java
index 3ff59cc2bb..7c9db09e9e 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessorBase.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessorBase.java
@@ -53,7 +53,7 @@ public class UpdateProcessorBase implements UpdateProcessor
         this.request = request ;
         this.datasetGraph = datasetGraph ;
         this.context = context;
-        Context.setCurrentDateTime(this.context) ;
+        Context.setCurrentDateTimeIfUndef(this.context) ;
         this.factory = factory ;
         this.timeout = timeout;
         Context.getOrSetCancelSignal(this.context) ;
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessorStreamingBase.java
 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessorStreamingBase.java
index 7bbf64a5cd..41b77826a6 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessorStreamingBase.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessorStreamingBase.java
@@ -26,8 +26,9 @@ import org.apache.jena.sparql.core.Prologue;
 import org.apache.jena.sparql.util.Context;
 import org.apache.jena.update.UpdateProcessorStreaming;
 
-/** Class to hold the general state of a update request execution.
- *  See query ExecutionContext
+/**
+ * Class to hold the general state of a update request execution.
+ * See query ExecutionContext
  */
 public class UpdateProcessorStreamingBase implements UpdateProcessorStreaming
 {
@@ -37,12 +38,11 @@ public class UpdateProcessorStreamingBase implements 
UpdateProcessorStreaming
     protected final UpdateEngine proc;
     protected final Prologue prologue;
 
-    public UpdateProcessorStreamingBase(DatasetGraph datasetGraph, Prologue 
prologue, Context context, UpdateEngineFactory factory)
-    {
+    public UpdateProcessorStreamingBase(DatasetGraph datasetGraph, Prologue 
prologue, Context context, UpdateEngineFactory factory) {
         this.datasetGraph = datasetGraph;
         this.prologue = prologue;
         this.context = context;
-        Context.setCurrentDateTime(this.context);
+        Context.setCurrentDateTimeIfUndef(this.context);
         proc = factory.create(datasetGraph, context);
     }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
index d497f04782..f75af215aa 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
@@ -445,10 +445,17 @@ public class Context {
         return context;
     }
 
+    /** Set the current time in the context, overwriting any previous setting 
*/
     public static void setCurrentDateTime(Context context) {
         context.set(ARQConstants.sysCurrentTime, 
NodeFactoryExtra.nowAsDateTime());
     }
 
+    /** Set the current time in the context if there is no setting */
+    public static void setCurrentDateTimeIfUndef(Context context) {
+        if ( ! context.isDefined(ARQConstants.sysCurrentTime) )
+            setCurrentDateTime(context);
+    }
+
     public static AtomicBoolean getCancelSignal(Context context) {
         if ( context == null )
             return null;

Reply via email to