diff --git a/asterixdb-jdbc/asterix-jdbc-core/pom.xml b/asterixdb-jdbc/asterix-jdbc-core/pom.xml
index 1fc08fe..b4a7163 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/pom.xml
+++ b/asterixdb-jdbc/asterix-jdbc-core/pom.xml
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>apache-asterixdb-jdbc</artifactId>
     <groupId>org.apache.asterix</groupId>
-    <version>0.9.7-SNAPSHOT</version>
+    <version>0.9.8-SNAPSHOT</version>
   </parent>
   <artifactId>asterix-jdbc-core</artifactId>
 
diff --git a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBPreparedStatement.java b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBPreparedStatement.java
index 7a6d5af..f87eede 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBPreparedStatement.java
+++ b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBPreparedStatement.java
@@ -54,8 +54,7 @@
         ADBProtocolBase.SubmitStatementOptions stmtOptions = createSubmitStatementOptions();
         stmtOptions.compileOnly = true;
         stmtOptions.timeoutSeconds = 0; /* TODO:timeout */
-        ADBProtocolBase.QueryServiceResponse response =
-                connection.protocol.submitStatement(sql, null, null, stmtOptions);
+        ADBProtocolBase.QueryServiceResponse response = connection.protocol.submitStatement(sql, null, stmtOptions);
         int parameterCount = connection.protocol.getStatementParameterCount(response);
         boolean isQuery = connection.protocol.isStatementCategory(response,
                 ADBProtocolBase.QueryServiceResponse.StatementCategory.QUERY);
diff --git a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBProtocolBase.java b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBProtocolBase.java
index 6bf6c1f..3186aa0 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBProtocolBase.java
+++ b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBProtocolBase.java
@@ -85,10 +85,11 @@
 
     public abstract boolean ping(int timeoutSeconds);
 
-    public abstract QueryServiceResponse submitStatement(String sql, List<?> args, UUID executionId,
-            SubmitStatementOptions options) throws SQLException;
+    public abstract QueryServiceResponse submitStatement(String sql, List<?> args, SubmitStatementOptions options)
+            throws SQLException;
 
-    public abstract JsonParser fetchResult(QueryServiceResponse response) throws SQLException;
+    public abstract JsonParser fetchResult(QueryServiceResponse response, SubmitStatementOptions options)
+            throws SQLException;
 
     public abstract void cancelRunningStatement(UUID executionId) throws SQLException;
 
@@ -264,6 +265,7 @@
         public boolean forceReadOnly;
         public boolean compileOnly;
         public boolean sqlCompatMode;
+        public UUID executionId;
     }
 
     public static class QueryServiceResponse {
diff --git a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBStatement.java b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBStatement.java
index 6eea813..cdbece6 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBStatement.java
+++ b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBStatement.java
@@ -90,6 +90,7 @@
     protected final ConcurrentLinkedQueue<WeakReference<ADBResultSet>> resultSetsWithoutResources;
 
     // execute() result field
+    protected ADBProtocolBase.SubmitStatementOptions executeStmtOptions;
     protected ADBProtocolBase.QueryServiceResponse executeResponse;
     protected ADBResultSet executeResultSet;
 
@@ -158,9 +159,9 @@
         // note: we're not assigning executeResponse field at this method
         try {
             ADBProtocolBase.SubmitStatementOptions stmtOptions = createSubmitStatementOptions();
+            stmtOptions.executionId = executionId;
             stmtOptions.forceReadOnly = true;
-            ADBProtocolBase.QueryServiceResponse response =
-                    connection.protocol.submitStatement(sql, args, executionId, stmtOptions);
+            ADBProtocolBase.QueryServiceResponse response = connection.protocol.submitStatement(sql, args, stmtOptions);
             boolean isQuery = connection.protocol.isStatementCategory(response,
                     ADBProtocolBase.QueryServiceResponse.StatementCategory.QUERY);
             if (!isQuery) {
@@ -168,7 +169,7 @@
             }
             warnings = connection.protocol.getWarningIfExists(response);
             updateCount = -1;
-            return fetchResultSet(response);
+            return fetchResultSet(response, stmtOptions);
         } finally {
             resetExecutionId();
         }
@@ -219,8 +220,8 @@
     protected int executeUpdateImpl(String sql, List<Object> args) throws SQLException {
         try {
             ADBProtocolBase.SubmitStatementOptions stmtOptions = createSubmitStatementOptions();
-            ADBProtocolBase.QueryServiceResponse response =
-                    connection.protocol.submitStatement(sql, args, executionId, stmtOptions);
+            stmtOptions.executionId = executionId;
+            ADBProtocolBase.QueryServiceResponse response = connection.protocol.submitStatement(sql, args, stmtOptions);
             boolean isQuery = connection.protocol.isStatementCategory(response,
                     ADBProtocolBase.QueryServiceResponse.StatementCategory.QUERY);
             // TODO: remove result set on the server (both query and update returning cases)
@@ -259,9 +260,10 @@
     protected boolean executeImpl(String sql, List<Object> args) throws SQLException {
         try {
             ADBProtocolBase.SubmitStatementOptions stmtOptions = createSubmitStatementOptions();
-            ADBProtocolBase.QueryServiceResponse response =
-                    connection.protocol.submitStatement(sql, args, executionId, stmtOptions);
+            stmtOptions.executionId = executionId;
+            ADBProtocolBase.QueryServiceResponse response = connection.protocol.submitStatement(sql, args, stmtOptions);
             warnings = connection.protocol.getWarningIfExists(response);
+            executeStmtOptions = stmtOptions;
             boolean isQuery = connection.protocol.isStatementCategory(response,
                     ADBProtocolBase.QueryServiceResponse.StatementCategory.QUERY);
             if (isQuery) {
@@ -347,9 +349,10 @@
         if (response == null) {
             return null;
         }
-        ADBResultSet rs = fetchResultSet(response);
+        ADBResultSet rs = fetchResultSet(response, executeStmtOptions);
         executeResultSet = rs;
         executeResponse = null;
+        executeStmtOptions = null;
         return rs;
     }
 
@@ -406,7 +409,8 @@
 
     // ResultSet lifecycle
 
-    protected ADBResultSet fetchResultSet(ADBProtocolBase.QueryServiceResponse execResponse) throws SQLException {
+    protected ADBResultSet fetchResultSet(ADBProtocolBase.QueryServiceResponse execResponse,
+            ADBProtocolBase.SubmitStatementOptions stmtOptions) throws SQLException {
         List<ADBColumn> columns = connection.protocol.getColumns(execResponse);
         if (getLogger().isLoggable(Level.FINER)) {
             getLogger().log(Level.FINE, "result schema " + columns);
@@ -417,7 +421,7 @@
                     connection.protocol.fetchExplainOnlyResult(execResponse, stringSer::serializeToString);
             return createSystemResultSet(columns, explainResult);
         } else {
-            JsonParser rowParser = connection.protocol.fetchResult(execResponse);
+            JsonParser rowParser = connection.protocol.fetchResult(execResponse, stmtOptions);
             return createResultSetImpl(columns, rowParser, true, maxRows);
         }
     }
