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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 2b28b4caaec Refactor ExecutionGroupContext none-final fields and add 
new ExecutionGroupReportContext (#23783)
2b28b4caaec is described below

commit 2b28b4caaecf53f6c056b51f7e7f118f96b217eb
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Sun Jan 29 21:39:10 2023 +0800

    Refactor ExecutionGroupContext none-final fields and add new 
ExecutionGroupReportContext (#23783)
    
    * Refactor ExecutionGroupContext none-final fields and add new 
ExecutionGroupReportContext
    
    * fix unit test
    
    * fix checkstyle
---
 .../kernel/model/ExecutionGroupContext.java        |  9 +-----
 ...ntext.java => ExecutionGroupReportContext.java} | 33 +++++++++++++---------
 .../sql/execute/engine/raw/RawExecutor.java        |  2 +-
 .../prepare/AbstractExecutionPrepareEngine.java    | 10 ++++---
 .../sql/prepare/ExecutionPrepareEngine.java        |  4 ++-
 .../executor/sql/process/ExecuteProcessEngine.java | 17 +++--------
 .../sql/process/ExecuteProcessReporter.java        |  2 +-
 .../sql/process/model/ExecuteProcessContext.java   |  6 ++--
 .../infra/executor/kernel/ExecutorEngineTest.java  |  5 ++--
 .../sql/execute/engine/jdbc/JDBCExecutorTest.java  | 14 +++++----
 .../sql/process/ExecuteProcessReporterTest.java    |  7 +++--
 .../driver/executor/DriverJDBCExecutor.java        |  6 ++--
 .../batch/BatchPreparedStatementExecutor.java      |  5 ++--
 .../statement/ShardingSpherePreparedStatement.java | 10 ++++---
 .../core/statement/ShardingSphereStatement.java    |  8 ++++--
 .../batch/BatchPreparedStatementExecutorTest.java  |  4 ++-
 .../executor/FilterableTableScanExecutor.java      |  6 ++--
 .../executor/TranslatableTableScanExecutor.java    | 11 +++++---
 .../backend/communication/ProxySQLExecutor.java    | 13 ++++-----
 .../jdbc/executor/ProxyJDBCExecutor.java           |  2 +-
 .../text/query/MySQLMultiStatementsHandler.java    |  4 ++-
 .../PostgreSQLBatchedStatementsExecutor.java       |  4 ++-
 22 files changed, 99 insertions(+), 83 deletions(-)

diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupContext.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupContext.java
index da7e93bcd4c..541e684c76b 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupContext.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupContext.java
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.executor.kernel.model;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-import org.apache.shardingsphere.infra.metadata.user.Grantee;
 
 import java.util.Collection;
 
@@ -31,14 +29,9 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-@Setter
 public final class ExecutionGroupContext<T> {
     
     private final Collection<ExecutionGroup<T>> inputGroups;
     
-    private volatile String executionID;
-    
-    private volatile String databaseName;
-    
-    private volatile Grantee grantee;
+    private final ExecutionGroupReportContext reportContext;
 }
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupContext.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupReportContext.java
similarity index 52%
copy from 
infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupContext.java
copy to 
infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupReportContext.java
index da7e93bcd4c..94867ff37f4 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupContext.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/kernel/model/ExecutionGroupReportContext.java
@@ -18,27 +18,34 @@
 package org.apache.shardingsphere.infra.executor.kernel.model;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 
-import java.util.Collection;
+import java.util.UUID;
+import java.util.concurrent.ThreadLocalRandom;
 
 /**
- * Execution group context.
- *
- * @param <T> type of execution input value
+ * Execution group report context.
  */
-@RequiredArgsConstructor
 @Getter
-@Setter
-public final class ExecutionGroupContext<T> {
+public final class ExecutionGroupReportContext {
+    
+    private final String databaseName;
+    
+    private final Grantee grantee;
     
-    private final Collection<ExecutionGroup<T>> inputGroups;
+    private final String executionID;
     
-    private volatile String executionID;
+    public ExecutionGroupReportContext(final String databaseName) {
+        this(databaseName, new Grantee("", ""));
+    }
     
-    private volatile String databaseName;
+    public ExecutionGroupReportContext(final String databaseName, final 
Grantee grantee) {
+        this(databaseName, grantee, new 
UUID(ThreadLocalRandom.current().nextLong(), 
ThreadLocalRandom.current().nextLong()).toString().replace("-", ""));
+    }
     
-    private volatile Grantee grantee;
+    public ExecutionGroupReportContext(final String databaseName, final 
Grantee grantee, final String executionID) {
+        this.databaseName = databaseName;
+        this.grantee = grantee;
+        this.executionID = executionID;
+    }
 }
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/raw/RawExecutor.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/raw/RawExecutor.java
index e79e9ad70c4..a206757a445 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/raw/RawExecutor.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/raw/RawExecutor.java
@@ -62,7 +62,7 @@ public final class RawExecutor {
             executeProcessEngine.initializeExecution(executionGroupContext, 
queryContext);
             // TODO Load query header for first query
             List<ExecuteResult> results = execute(executionGroupContext, 
(RawSQLExecutorCallback) null, callback);
-            
executeProcessEngine.finishExecution(executionGroupContext.getExecutionID(), 
eventBusContext);
+            
executeProcessEngine.finishExecution(executionGroupContext.getReportContext().getExecutionID(),
 eventBusContext);
             return results.isEmpty() || Objects.isNull(results.get(0)) ? 
Collections.singletonList(new UpdateResult(0, 0L)) : results;
         } finally {
             executeProcessEngine.cleanExecution();
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
index 4e621ff4410..d9bd2c13ef9 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.executor.sql.prepare;
 import com.google.common.collect.Lists;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
@@ -53,7 +54,8 @@ public abstract class AbstractExecutionPrepareEngine<T> 
implements ExecutionPrep
     }
     
     @Override
-    public final ExecutionGroupContext<T> prepare(final RouteContext 
routeContext, final Collection<ExecutionUnit> executionUnits) throws 
SQLException {
+    public final ExecutionGroupContext<T> prepare(final RouteContext 
routeContext, final Collection<ExecutionUnit> executionUnits,
+                                                  final 
ExecutionGroupReportContext reportContext) throws SQLException {
         Collection<ExecutionGroup<T>> result = new LinkedList<>();
         for (Entry<String, List<SQLUnit>> entry : 
aggregateSQLUnitGroups(executionUnits).entrySet()) {
             String dataSourceName = entry.getKey();
@@ -62,7 +64,7 @@ public abstract class AbstractExecutionPrepareEngine<T> 
implements ExecutionPrep
             ConnectionMode connectionMode = maxConnectionsSizePerQuery < 
sqlUnits.size() ? ConnectionMode.CONNECTION_STRICTLY : 
ConnectionMode.MEMORY_STRICTLY;
             result.addAll(group(dataSourceName, sqlUnitGroups, 
connectionMode));
         }
-        return decorate(routeContext, result);
+        return decorate(routeContext, result, reportContext);
     }
     
     private List<List<SQLUnit>> group(final List<SQLUnit> sqlUnits) {
@@ -84,11 +86,11 @@ public abstract class AbstractExecutionPrepareEngine<T> 
implements ExecutionPrep
     }
     
     @SuppressWarnings({"unchecked", "rawtypes"})
-    private ExecutionGroupContext<T> decorate(final RouteContext routeContext, 
final Collection<ExecutionGroup<T>> executionGroups) {
+    private ExecutionGroupContext<T> decorate(final RouteContext routeContext, 
final Collection<ExecutionGroup<T>> executionGroups, final 
ExecutionGroupReportContext reportContext) {
         Collection<ExecutionGroup<T>> result = executionGroups;
         for (Entry<ShardingSphereRule, ExecutionPrepareDecorator> each : 
decorators.entrySet()) {
             result = each.getValue().decorate(routeContext, each.getKey(), 
result);
         }
-        return new ExecutionGroupContext(result);
+        return new ExecutionGroupContext(result, reportContext);
     }
 }
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/ExecutionPrepareEngine.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/ExecutionPrepareEngine.java
index 45c5678f165..7a876f0b1b6 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/ExecutionPrepareEngine.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/ExecutionPrepareEngine.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.infra.executor.sql.prepare;
 
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 
@@ -36,8 +37,9 @@ public interface ExecutionPrepareEngine<T> {
      *
      * @param routeContext route context
      * @param executionUnits execution units
+     * @param reportContext report context
      * @return execution group context
      * @throws SQLException SQL exception
      */
-    ExecutionGroupContext<T> prepare(RouteContext routeContext, 
Collection<ExecutionUnit> executionUnits) throws SQLException;
+    ExecutionGroupContext<T> prepare(RouteContext routeContext, 
Collection<ExecutionUnit> executionUnits, ExecutionGroupReportContext 
reportContext) throws SQLException;
 }
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessEngine.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessEngine.java
index 86b618de0b3..fefd721dcec 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessEngine.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessEngine.java
@@ -17,9 +17,9 @@
 
 package org.apache.shardingsphere.infra.executor.sql.process;
 
-import com.google.common.base.Strings;
 import org.apache.shardingsphere.infra.binder.QueryContext;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutorDataMap;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.process.model.ExecuteProcessConstants;
@@ -31,8 +31,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DMLStatemen
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
 
 import java.util.Collections;
-import java.util.UUID;
-import java.util.concurrent.ThreadLocalRandom;
 
 /**
  * Execute process engine.
@@ -51,15 +49,11 @@ public final class ExecuteProcessEngine {
     public String initializeConnection(final Grantee grantee, final String 
databaseName) {
         ExecutionGroupContext<SQLExecutionUnit> executionGroupContext = 
createExecutionGroupContext(grantee, databaseName);
         reporter.report(executionGroupContext);
-        return executionGroupContext.getExecutionID();
+        return executionGroupContext.getReportContext().getExecutionID();
     }
     
     private ExecutionGroupContext<SQLExecutionUnit> 
createExecutionGroupContext(final Grantee grantee, final String databaseName) {
-        ExecutionGroupContext<SQLExecutionUnit> result = new 
ExecutionGroupContext<>(Collections.emptyList());
-        result.setExecutionID(new UUID(ThreadLocalRandom.current().nextLong(), 
ThreadLocalRandom.current().nextLong()).toString().replace("-", ""));
-        result.setGrantee(grantee);
-        result.setDatabaseName(databaseName);
-        return result;
+        return new ExecutionGroupContext<>(Collections.emptyList(), new 
ExecutionGroupReportContext(databaseName, grantee));
     }
     
     /**
@@ -78,11 +72,8 @@ public final class ExecuteProcessEngine {
      * @param queryContext query context
      */
     public void initializeExecution(final ExecutionGroupContext<? extends 
SQLExecutionUnit> executionGroupContext, final QueryContext queryContext) {
-        if (Strings.isNullOrEmpty(executionGroupContext.getExecutionID())) {
-            executionGroupContext.setExecutionID(new 
UUID(ThreadLocalRandom.current().nextLong(), 
ThreadLocalRandom.current().nextLong()).toString().replace("-", ""));
-        }
         if 
(isMySQLDDLOrDMLStatement(queryContext.getSqlStatementContext().getSqlStatement()))
 {
-            
ExecutorDataMap.getValue().put(ExecuteProcessConstants.EXECUTE_ID.name(), 
executionGroupContext.getExecutionID());
+            
ExecutorDataMap.getValue().put(ExecuteProcessConstants.EXECUTE_ID.name(), 
executionGroupContext.getReportContext().getExecutionID());
             reporter.report(queryContext, executionGroupContext, 
ExecuteProcessConstants.EXECUTE_STATUS_START);
         }
     }
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessReporter.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessReporter.java
index c3c6b86b629..2341c206e30 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessReporter.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessReporter.java
@@ -51,7 +51,7 @@ public final class ExecuteProcessReporter {
      */
     public void report(final QueryContext queryContext, final 
ExecutionGroupContext<? extends SQLExecutionUnit> executionGroupContext,
                        final ExecuteProcessConstants constants) {
-        ExecuteProcessContext originExecuteProcessContext = 
ShowProcessListManager.getInstance().getProcessContext(executionGroupContext.getExecutionID());
+        ExecuteProcessContext originExecuteProcessContext = 
ShowProcessListManager.getInstance().getProcessContext(executionGroupContext.getReportContext().getExecutionID());
         boolean isProxyContext = null != originExecuteProcessContext && 
originExecuteProcessContext.isProxyContext();
         ExecuteProcessContext executeProcessContext = new 
ExecuteProcessContext(queryContext.getSql(), executionGroupContext, constants, 
isProxyContext);
         
ShowProcessListManager.getInstance().putProcessContext(executeProcessContext.getExecutionID(),
 executeProcessContext);
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/model/ExecuteProcessContext.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/model/ExecuteProcessContext.java
index f951d137508..457b13ea3f6 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/model/ExecuteProcessContext.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/process/model/ExecuteProcessContext.java
@@ -58,10 +58,10 @@ public final class ExecuteProcessContext {
     
     public ExecuteProcessContext(final String sql, final 
ExecutionGroupContext<? extends SQLExecutionUnit> executionGroupContext, final 
ExecuteProcessConstants constants,
                                  final boolean isProxyContext) {
-        this.executionID = executionGroupContext.getExecutionID();
+        this.executionID = 
executionGroupContext.getReportContext().getExecutionID();
         this.sql = sql;
-        this.databaseName = executionGroupContext.getDatabaseName();
-        Grantee grantee = executionGroupContext.getGrantee();
+        this.databaseName = 
executionGroupContext.getReportContext().getDatabaseName();
+        Grantee grantee = 
executionGroupContext.getReportContext().getGrantee();
         this.username = null != grantee ? grantee.getUsername() : null;
         this.hostname = null != grantee ? grantee.getHostname() : null;
         executeProcessConstants = constants;
diff --git 
a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/kernel/ExecutorEngineTest.java
 
b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/kernel/ExecutorEngineTest.java
index c52b09a3deb..92aee212d5f 100644
--- 
a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/kernel/ExecutorEngineTest.java
+++ 
b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/kernel/ExecutorEngineTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.executor.kernel;
 import 
org.apache.shardingsphere.infra.executor.kernel.fixture.ExecutorCallbackFixture;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -64,7 +65,7 @@ public final class ExecutorEngineTest {
         for (int i = 0; i < groupSize; i++) {
             result.add(new ExecutionGroup<>(createMockedInputs(unitSize)));
         }
-        return new ExecutionGroupContext(result);
+        return new ExecutionGroupContext<>(result, 
mock(ExecutionGroupReportContext.class));
     }
     
     private List<Object> createMockedInputs(final int size) {
@@ -99,7 +100,7 @@ public final class ExecutorEngineTest {
     @Test
     public void assertExecutionGroupIsEmpty() throws SQLException {
         CountDownLatch latch = new CountDownLatch(1);
-        List<String> actual = executorEngine.execute(new 
ExecutionGroupContext<>(new LinkedList<>()), new 
ExecutorCallbackFixture(latch));
+        List<String> actual = executorEngine.execute(new 
ExecutionGroupContext<>(new LinkedList<>(), 
mock(ExecutionGroupReportContext.class)), new ExecutorCallbackFixture(latch));
         latch.countDown();
         assertTrue(actual.isEmpty());
     }
diff --git 
a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorTest.java
 
b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorTest.java
index d5d428a2eb2..25b1b23cc61 100644
--- 
a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorTest.java
+++ 
b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.context.ConnectionContext;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutorExceptionHandler;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
@@ -44,7 +45,7 @@ public final class JDBCExecutorTest {
     public void assertExecute() throws SQLException {
         ExecutorEngine executorEngine = mock(ExecutorEngine.class);
         ExecutionGroup<JDBCExecutionUnit> group = new 
ExecutionGroup<>(Collections.singletonList(mock(JDBCExecutionUnit.class)));
-        ExecutionGroupContext context = new 
ExecutionGroupContext(Collections.singletonList(group));
+        ExecutionGroupContext context = new 
ExecutionGroupContext(Collections.singletonList(group), 
mock(ExecutionGroupReportContext.class));
         when(executorEngine.execute(any(), any(), any(), 
anyBoolean())).thenReturn(Collections.singletonList("test"));
         JDBCExecutor jdbcExecutor = new JDBCExecutor(executorEngine, new 
ConnectionContext());
         List<?> actual1 = jdbcExecutor.execute(context, null);
@@ -57,9 +58,11 @@ public final class JDBCExecutorTest {
     public void assertExecuteSQLException() {
         try {
             ExecutorEngine executorEngine = mock(ExecutorEngine.class);
-            when(executorEngine.execute(new 
ExecutionGroupContext<>(anyCollection()), any(), any(), 
anyBoolean())).thenThrow(new SQLException("TestSQLException"));
+            ExecutionGroupReportContext reportContext = 
mock(ExecutionGroupReportContext.class);
+            when(executorEngine.execute(new 
ExecutionGroupContext<>(anyCollection(), reportContext), any(), any(), 
anyBoolean()))
+                    .thenThrow(new SQLException("TestSQLException"));
             JDBCExecutor jdbcExecutor = new JDBCExecutor(executorEngine, new 
ConnectionContext());
-            jdbcExecutor.execute(new 
ExecutionGroupContext<>(Collections.emptyList()), null);
+            jdbcExecutor.execute(new 
ExecutionGroupContext<>(Collections.emptyList(), reportContext), null);
         } catch (final SQLException ex) {
             assertThat(ex.getMessage(), is("TestSQLException"));
         }
@@ -68,10 +71,11 @@ public final class JDBCExecutorTest {
     @Test
     public void assertExecuteNotThrownSQLException() throws SQLException {
         ExecutorEngine executorEngine = mock(ExecutorEngine.class);
-        when(executorEngine.execute(new 
ExecutionGroupContext<>(anyCollection()), any(), any(), 
anyBoolean())).thenThrow(new SQLException("TestSQLException"));
+        ExecutionGroupReportContext reportContext = 
mock(ExecutionGroupReportContext.class);
+        when(executorEngine.execute(new 
ExecutionGroupContext<>(anyCollection(), reportContext), any(), any(), 
anyBoolean())).thenThrow(new SQLException("TestSQLException"));
         JDBCExecutor jdbcExecutor = new JDBCExecutor(executorEngine, new 
ConnectionContext());
         SQLExecutorExceptionHandler.setExceptionThrown(false);
-        List<?> actual = jdbcExecutor.execute(new 
ExecutionGroupContext<>(Collections.emptyList()), null);
+        List<?> actual = jdbcExecutor.execute(new 
ExecutionGroupContext<>(Collections.emptyList(), reportContext), null);
         assertThat(actual, is(Collections.emptyList()));
     }
 }
diff --git 
a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessReporterTest.java
 
b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessReporterTest.java
index 132bb71fa4b..8b9c9740c4a 100644
--- 
a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessReporterTest.java
+++ 
b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ExecuteProcessReporterTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.executor.sql.process;
 
 import org.apache.shardingsphere.infra.binder.QueryContext;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.process.model.ExecuteProcessConstants;
@@ -59,13 +60,15 @@ public class ExecuteProcessReporterTest {
         QueryContext queryContext = new QueryContext(null, null, null);
         ExecutionGroupContext<? extends SQLExecutionUnit> 
executionGroupContext = mockExecutionGroupContext();
         reporter.report(queryContext, executionGroupContext, 
ExecuteProcessConstants.EXECUTE_ID);
-        verify(showProcessListManager, 
times(1)).putProcessContext(eq(executionGroupContext.getExecutionID()), any());
+        verify(showProcessListManager, 
times(1)).putProcessContext(eq(executionGroupContext.getReportContext().getExecutionID()),
 any());
     }
     
     @SuppressWarnings("unchecked")
     private ExecutionGroupContext<? extends SQLExecutionUnit> 
mockExecutionGroupContext() {
         ExecutionGroupContext<? extends SQLExecutionUnit> result = 
mock(ExecutionGroupContext.class);
-        when(result.getExecutionID()).thenReturn(UUID.randomUUID().toString());
+        ExecutionGroupReportContext reportContext = 
mock(ExecutionGroupReportContext.class);
+        
when(reportContext.getExecutionID()).thenReturn(UUID.randomUUID().toString());
+        when(result.getReportContext()).thenReturn(reportContext);
         return result;
     }
     
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
index 8104d035c1b..ef227efa7e9 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
@@ -77,7 +77,7 @@ public final class DriverJDBCExecutor {
         try {
             executeProcessEngine.initializeExecution(executionGroupContext, 
queryContext);
             List<QueryResult> result = 
jdbcExecutor.execute(executionGroupContext, callback);
-            
executeProcessEngine.finishExecution(executionGroupContext.getExecutionID(), 
eventBusContext);
+            
executeProcessEngine.finishExecution(executionGroupContext.getReportContext().getExecutionID(),
 eventBusContext);
             return result;
         } finally {
             executeProcessEngine.cleanExecution();
@@ -102,7 +102,7 @@ public final class DriverJDBCExecutor {
             SQLStatementContext<?> sqlStatementContext = 
queryContext.getSqlStatementContext();
             List<Integer> results = doExecute(executionGroupContext, 
sqlStatementContext, routeUnits, callback);
             int result = 
isNeedAccumulate(metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
 sqlStatementContext) ? accumulate(results) : results.get(0);
-            
executeProcessEngine.finishExecution(executionGroupContext.getExecutionID(), 
eventBusContext);
+            
executeProcessEngine.finishExecution(executionGroupContext.getReportContext().getExecutionID(),
 eventBusContext);
             return result;
         } finally {
             executeProcessEngine.cleanExecution();
@@ -143,7 +143,7 @@ public final class DriverJDBCExecutor {
             executeProcessEngine.initializeExecution(executionGroupContext, 
queryContext);
             List<Boolean> results = doExecute(executionGroupContext, 
queryContext.getSqlStatementContext(), routeUnits, callback);
             boolean result = null != results && !results.isEmpty() && null != 
results.get(0) && results.get(0);
-            
executeProcessEngine.finishExecution(executionGroupContext.getExecutionID(), 
eventBusContext);
+            
executeProcessEngine.finishExecution(executionGroupContext.getReportContext().getExecutionID(),
 eventBusContext);
             return result;
         } finally {
             executeProcessEngine.cleanExecution();
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
index 19cb5608f37..67ca95c4d50 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
@@ -20,9 +20,9 @@ package org.apache.shardingsphere.driver.executor.batch;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutorExceptionHandler;
@@ -31,6 +31,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.J
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
+import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
@@ -70,7 +71,7 @@ public final class BatchPreparedStatementExecutor {
         this.metaDataContexts = metaDataContexts;
         this.jdbcExecutor = jdbcExecutor;
         this.eventBusContext = eventBusContext;
-        executionGroupContext = new ExecutionGroupContext<>(new 
LinkedList<>());
+        executionGroupContext = new ExecutionGroupContext<>(new 
LinkedList<>(), new ExecutionGroupReportContext(databaseName));
         batchExecutionUnits = new LinkedList<>();
     }
     
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 727a11fb5d3..685d290d794 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -50,6 +50,7 @@ import 
org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
@@ -265,7 +266,8 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     private JDBCExecutionUnit createTrafficExecutionUnit(final String 
trafficInstanceId, final QueryContext queryContext) throws SQLException {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine();
         ExecutionUnit executionUnit = new ExecutionUnit(trafficInstanceId, new 
SQLUnit(queryContext.getSql(), queryContext.getParameters()));
-        ExecutionGroupContext<JDBCExecutionUnit> context = 
prepareEngine.prepare(new RouteContext(), 
Collections.singletonList(executionUnit));
+        ExecutionGroupContext<JDBCExecutionUnit> context =
+                prepareEngine.prepare(new RouteContext(), 
Collections.singletonList(executionUnit), new 
ExecutionGroupReportContext(connection.getDatabaseName()));
         if (context.getInputGroups().isEmpty() || 
context.getInputGroups().iterator().next().getInputs().isEmpty()) {
             throw new EmptyTrafficExecutionUnitException();
         }
@@ -436,7 +438,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionGroupContext() throws SQLException {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules())
-                .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
+                .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(connection.getDatabaseName()));
     }
     
     private boolean isNeedImplicitCommitTransaction(final ExecutionContext 
executionContext) {
@@ -504,7 +506,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private ExecutionGroupContext<JDBCExecutionUnit> 
createExecutionGroupContext() throws SQLException {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine();
-        return prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
+        return prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(connection.getDatabaseName()));
     }
     
     @Override
@@ -674,7 +676,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             ExecutionUnit executionUnit = each.getExecutionUnit();
             executionUnits.add(executionUnit);
         }
-        
batchPreparedStatementExecutor.init(prepareEngine.prepare(executionContext.getRouteContext(),
 executionUnits));
+        
batchPreparedStatementExecutor.init(prepareEngine.prepare(executionContext.getRouteContext(),
 executionUnits, new 
ExecutionGroupReportContext(connection.getDatabaseName())));
         setBatchParametersForStatements();
     }
     
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 7010d4119c9..5fd0efb30bb 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -49,6 +49,7 @@ import 
org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
@@ -499,7 +500,8 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     private JDBCExecutionUnit createTrafficExecutionUnit(final String 
trafficInstanceId, final QueryContext queryContext) throws SQLException {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine();
         ExecutionUnit executionUnit = new ExecutionUnit(trafficInstanceId, new 
SQLUnit(queryContext.getSql(), queryContext.getParameters()));
-        ExecutionGroupContext<JDBCExecutionUnit> context = 
prepareEngine.prepare(new RouteContext(), 
Collections.singletonList(executionUnit));
+        ExecutionGroupContext<JDBCExecutionUnit> context =
+                prepareEngine.prepare(new RouteContext(), 
Collections.singletonList(executionUnit), new 
ExecutionGroupReportContext(connection.getDatabaseName()));
         return context.getInputGroups().stream().flatMap(each -> 
each.getInputs().stream()).findFirst().orElseThrow(EmptyTrafficExecutionUnitException::new);
     }
     
@@ -530,13 +532,13 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     private ExecutionGroupContext<JDBCExecutionUnit> 
createExecutionGroupContext() throws SQLException {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine();
-        return prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
+        return prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(connection.getDatabaseName()));
     }
     
     private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionContext() throws SQLException {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules())
-                .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
+                .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(connection.getDatabaseName()));
     }
     
     private boolean isNeedImplicitCommitTransaction(final ExecutionContext 
executionContext) {
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
index dcd6695c9f5..91a69553073 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutorTest.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
@@ -147,7 +148,8 @@ public final class BatchPreparedStatementExecutorTest 
extends AbstractBaseExecut
     
     @SneakyThrows(ReflectiveOperationException.class)
     private void setFields(final Collection<ExecutionGroup<JDBCExecutionUnit>> 
executionGroups, final Collection<BatchExecutionUnit> batchExecutionUnits) {
-        
Plugins.getMemberAccessor().set(BatchPreparedStatementExecutor.class.getDeclaredField("executionGroupContext"),
 actual, new ExecutionGroupContext<>(executionGroups));
+        
Plugins.getMemberAccessor().set(BatchPreparedStatementExecutor.class.getDeclaredField("executionGroupContext"),
 actual, new ExecutionGroupContext<>(executionGroups,
+                new ExecutionGroupReportContext("logic_db")));
         
Plugins.getMemberAccessor().set(BatchPreparedStatementExecutor.class.getDeclaredField("batchExecutionUnits"),
 actual, batchExecutionUnits);
         
Plugins.getMemberAccessor().set(BatchPreparedStatementExecutor.class.getDeclaredField("batchCount"),
 actual, 2);
     }
diff --git 
a/kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/FilterableTableScanExecutor.java
 
b/kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/FilterableTableScanExecutor.java
index 84ce5fea378..c3daad3a068 100644
--- 
a/kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/FilterableTableScanExecutor.java
+++ 
b/kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/FilterableTableScanExecutor.java
@@ -45,6 +45,7 @@ import 
org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
@@ -152,11 +153,12 @@ public final class FilterableTableScanExecutor implements 
TableScanExecutor {
     private AbstractEnumerable<Object[]> execute(final DatabaseType 
databaseType, final QueryContext queryContext, final ShardingSphereDatabase 
database, final ExecutionContext context) {
         ExecuteProcessEngine executeProcessEngine = new ExecuteProcessEngine();
         try {
-            ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
prepareEngine.prepare(context.getRouteContext(), context.getExecutionUnits());
+            ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
+                    prepareEngine.prepare(context.getRouteContext(), 
context.getExecutionUnits(), new 
ExecutionGroupReportContext(database.getName()));
             setParameters(executionGroupContext.getInputGroups());
             executeProcessEngine.initializeExecution(executionGroupContext, 
context.getQueryContext());
             List<QueryResult> queryResults = execute(executionGroupContext, 
databaseType);
-            
executeProcessEngine.finishExecution(executionGroupContext.getExecutionID(), 
eventBusContext);
+            
executeProcessEngine.finishExecution(executionGroupContext.getReportContext().getExecutionID(),
 eventBusContext);
             // TODO need to get session context
             MergeEngine mergeEngine = new MergeEngine(database, 
executorContext.getProps(), new ConnectionContext());
             MergedResult mergedResult = mergeEngine.merge(queryResults, 
queryContext.getSqlStatementContext());
diff --git 
a/kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/TranslatableTableScanExecutor.java
 
b/kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/TranslatableTableScanExecutor.java
index 191221306eb..64bd9fc4119 100644
--- 
a/kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/TranslatableTableScanExecutor.java
+++ 
b/kernel/sql-federation/executor/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/TranslatableTableScanExecutor.java
@@ -49,6 +49,7 @@ import 
org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
@@ -179,11 +180,12 @@ public final class TranslatableTableScanExecutor 
implements TableScanExecutor {
                                                                final 
ShardingSphereDatabase database, final ExecutionContext context) {
         ExecuteProcessEngine executeProcessEngine = new ExecuteProcessEngine();
         try {
-            ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
prepareEngine.prepare(context.getRouteContext(), context.getExecutionUnits());
+            ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
+                    prepareEngine.prepare(context.getRouteContext(), 
context.getExecutionUnits(), new 
ExecutionGroupReportContext(database.getName()));
             setParameters(executionGroupContext.getInputGroups());
             executeProcessEngine.initializeExecution(executionGroupContext, 
context.getQueryContext());
             List<QueryResult> queryResults = execute(executionGroupContext, 
databaseType);
-            
executeProcessEngine.finishExecution(executionGroupContext.getExecutionID(), 
eventBusContext);
+            
executeProcessEngine.finishExecution(executionGroupContext.getReportContext().getExecutionID(),
 eventBusContext);
             MergeEngine mergeEngine = new MergeEngine(database, 
executorContext.getProps(), new ConnectionContext());
             MergedResult mergedResult = mergeEngine.merge(queryResults, 
queryContext.getSqlStatementContext());
             Collection<Statement> statements = 
getStatements(executionGroupContext.getInputGroups());
@@ -240,11 +242,12 @@ public final class TranslatableTableScanExecutor 
implements TableScanExecutor {
     private AbstractEnumerable<Object[]> execute(final DatabaseType 
databaseType, final QueryContext queryContext, final ShardingSphereDatabase 
database, final ExecutionContext context) {
         ExecuteProcessEngine executeProcessEngine = new ExecuteProcessEngine();
         try {
-            ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
prepareEngine.prepare(context.getRouteContext(), context.getExecutionUnits());
+            ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
+                    prepareEngine.prepare(context.getRouteContext(), 
context.getExecutionUnits(), new 
ExecutionGroupReportContext(database.getName()));
             setParameters(executionGroupContext.getInputGroups());
             executeProcessEngine.initializeExecution(executionGroupContext, 
context.getQueryContext());
             List<QueryResult> queryResults = execute(executionGroupContext, 
databaseType);
-            
executeProcessEngine.finishExecution(executionGroupContext.getExecutionID(), 
eventBusContext);
+            
executeProcessEngine.finishExecution(executionGroupContext.getReportContext().getExecutionID(),
 eventBusContext);
             MergeEngine mergeEngine = new MergeEngine(database, 
executorContext.getProps(), new ConnectionContext());
             MergedResult mergedResult = mergeEngine.merge(queryResults, 
queryContext.getSqlStatementContext());
             Collection<Statement> statements = 
getStatements(executionGroupContext.getInputGroups());
diff --git 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
index 427139951a0..69b6ebffd49 100644
--- 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
+++ 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.infra.context.ConnectionContext;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutorExceptionHandler;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
@@ -197,13 +198,11 @@ public final class ProxySQLExecutor {
         RawExecutionPrepareEngine prepareEngine = new 
RawExecutionPrepareEngine(maxConnectionsSizePerQuery, rules);
         ExecutionGroupContext<RawSQLExecutionUnit> executionGroupContext;
         try {
-            executionGroupContext = 
prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
+            executionGroupContext = 
prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new ExecutionGroupReportContext(
+                    
backendConnection.getConnectionSession().getDatabaseName(), 
backendConnection.getConnectionSession().getGrantee(), 
backendConnection.getConnectionSession().getExecutionId()));
         } catch (final SQLException ex) {
             return getSaneExecuteResults(executionContext, ex);
         }
-        
executionGroupContext.setExecutionID(backendConnection.getConnectionSession().getExecutionId());
-        
executionGroupContext.setDatabaseName(backendConnection.getConnectionSession().getDatabaseName());
-        
executionGroupContext.setGrantee(backendConnection.getConnectionSession().getGrantee());
         // TODO handle query header
         return rawExecutor.execute(executionGroupContext, 
executionContext.getQueryContext(), new RawSQLExecutorCallback());
     }
@@ -216,13 +215,11 @@ public final class ProxySQLExecutor {
                 
ProxyContext.getInstance().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageTypes());
         ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext;
         try {
-            executionGroupContext = 
prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
+            executionGroupContext = 
prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new ExecutionGroupReportContext(
+                    
backendConnection.getConnectionSession().getDatabaseName(), 
backendConnection.getConnectionSession().getGrantee(), 
backendConnection.getConnectionSession().getExecutionId()));
         } catch (final SQLException ex) {
             return getSaneExecuteResults(executionContext, ex);
         }
-        
executionGroupContext.setExecutionID(backendConnection.getConnectionSession().getExecutionId());
-        
executionGroupContext.setDatabaseName(backendConnection.getConnectionSession().getDatabaseName());
-        
executionGroupContext.setGrantee(backendConnection.getConnectionSession().getGrantee());
         return jdbcExecutor.execute(executionContext.getQueryContext(), 
executionGroupContext, isReturnGeneratedKeys, isExceptionThrown);
     }
     
diff --git 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/ProxyJDBCExecutor.java
 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/ProxyJDBCExecutor.java
index cca1b8bf448..2cb2c8a223f 100644
--- 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/ProxyJDBCExecutor.java
+++ 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/ProxyJDBCExecutor.java
@@ -78,7 +78,7 @@ public final class ProxyJDBCExecutor {
                             true),
                     ProxyJDBCExecutorCallbackFactory.newInstance(type, 
protocolType, storageTypes, context.getSqlStatement(), 
databaseCommunicationEngine, isReturnGeneratedKeys, isExceptionThrown,
                             false));
-            
executeProcessEngine.finishExecution(executionGroupContext.getExecutionID(), 
eventBusContext);
+            
executeProcessEngine.finishExecution(executionGroupContext.getReportContext().getExecutionID(),
 eventBusContext);
             return result;
         } finally {
             executeProcessEngine.cleanExecution();
diff --git 
a/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
 
b/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index 6f8e4154af0..3ecbbb9a4de 100644
--- 
a/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++ 
b/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
@@ -140,7 +141,8 @@ public final class MySQLMultiStatementsHandler implements 
ProxyBackendHandler {
                 
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY), 
connectionSession.getBackendConnection(),
                 (JDBCBackendStatement) 
connectionSession.getStatementManager(), new StatementOption(false), rules,
                 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageTypes());
-        ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
prepareEngine.prepare(anyExecutionContext.getRouteContext(), 
samplingExecutionUnit());
+        ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
prepareEngine.prepare(anyExecutionContext.getRouteContext(), 
samplingExecutionUnit(),
+                new 
ExecutionGroupReportContext(connectionSession.getDatabaseName(), 
connectionSession.getGrantee(), connectionSession.getExecutionId()));
         for (ExecutionGroup<JDBCExecutionUnit> eachGroup : 
executionGroupContext.getInputGroups()) {
             for (JDBCExecutionUnit each : eachGroup.getInputs()) {
                 prepareBatchedStatement(each);
diff --git 
a/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
 
b/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index 8e6dc960ab4..d235a836dc6 100644
--- 
a/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++ 
b/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
+import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
@@ -150,7 +151,8 @@ public final class PostgreSQLBatchedStatementsExecutor {
                 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
                 connectionSession.getBackendConnection(), 
(JDBCBackendStatement) connectionSession.getStatementManager(),
                 new StatementOption(false), rules, 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageTypes());
-        executionGroupContext = 
prepareEngine.prepare(anyExecutionContext.getRouteContext(), 
executionUnitParams.keySet());
+        executionGroupContext = 
prepareEngine.prepare(anyExecutionContext.getRouteContext(), 
executionUnitParams.keySet(),
+                new 
ExecutionGroupReportContext(connectionSession.getDatabaseName(), 
connectionSession.getGrantee(), connectionSession.getExecutionId()));
         for (ExecutionGroup<JDBCExecutionUnit> eachGroup : 
executionGroupContext.getInputGroups()) {
             for (JDBCExecutionUnit each : eachGroup.getInputs()) {
                 prepareJDBCExecutionUnit(each);

Reply via email to