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

duanzhengqiang 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 30674fdab8c remove TrafficContextHolder.java use sql session to 
replace (#20020)
30674fdab8c is described below

commit 30674fdab8cb33342c66fd3feed2b7e32abb4bd1
Author: Chuxin Chen <[email protected]>
AuthorDate: Wed Aug 10 15:25:17 2022 +0800

    remove TrafficContextHolder.java use sql session to replace (#20020)
    
    * rename SessionContext.java to SQLSession.java
    
    * remove TrafficContextHolder.java
    
    * remove TrafficContextHolder.java
    
    * remove TrafficContextHolder.java
    
    * remove TrafficContextHolder.java
---
 .../shardingsphere/infra/session/SQLSession.java   | 37 +++++++-----
 .../infra/session/SessionContext.java              | 29 ---------
 .../infra/context/kernel/KernelProcessor.java      |  6 +-
 .../infra/context/kernel/KernelProcessorTest.java  |  4 +-
 .../table/FilterableTableScanExecutor.java         |  6 +-
 .../shardingsphere/infra/merge/MergeEngine.java    |  8 +--
 .../infra/merge/MergeEngineTest.java               | 10 ++--
 .../core/connection/ShardingSphereConnection.java  | 11 ++--
 .../statement/ShardingSpherePreparedStatement.java | 60 ++++++++++---------
 .../core/statement/ShardingSphereStatement.java    | 68 +++++++++++-----------
 .../traffic/context/TrafficContextHolder.java      | 57 ------------------
 .../traffic/engine/TrafficEngine.java              | 12 ++--
 .../algorithm/context/TrafficContextTest.java      | 40 -------------
 .../algorithm/engine/TrafficEngineTest.java        | 19 +++---
 .../traffic/context/TrafficContextHolderTest.java  | 42 -------------
 .../communication/DatabaseCommunicationEngine.java |  2 +-
 .../jdbc/JDBCDatabaseCommunicationEngine.java      |  2 +-
 .../vertx/VertxDatabaseCommunicationEngine.java    |  2 +-
 .../handler/distsql/rul/sql/PreviewHandler.java    |  2 +-
 .../proxy/backend/session/ConnectionSession.java   |  6 +-
 .../text/query/MySQLMultiStatementsHandler.java    |  2 +-
 .../PostgreSQLBatchedStatementsExecutor.java       |  2 +-
 .../describe/PostgreSQLComDescribeExecutor.java    |  2 +-
 23 files changed, 135 insertions(+), 294 deletions(-)

diff --git 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/context/TrafficContext.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/session/SQLSession.java
similarity index 60%
rename from 
shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/context/TrafficContext.java
rename to 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/session/SQLSession.java
index 61f8fc52b3c..34da226158b 100644
--- 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/context/TrafficContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/session/SQLSession.java
@@ -15,29 +15,38 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.traffic.context;
+package org.apache.shardingsphere.infra.session;
 
-import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
+
+import java.util.Optional;
 
 /**
- * Traffic context.
+ * SQL session.
  */
-@Getter
-@Setter
-public final class TrafficContext {
-    
-    private String instanceId;
+public final class SQLSession implements AutoCloseable {
     
-    private RouteContext routeContext = new RouteContext();
+    @Setter
+    private String trafficInstanceId;
     
     /**
-     * Judge whether statement is match traffic or not.
+     * Get traffic instance id.
      * 
-     * @return whether statement is match traffic or not
+     * @return traffic instance id
+     */
+    public Optional<String> getTrafficInstanceId() {
+        return Optional.ofNullable(trafficInstanceId);
+    }
+    
+    @Override
+    public void close() {
+        clearTrafficInstance();
+    }
+    
+    /**
+     * Clear traffic instance.
      */
-    public boolean isMatchTraffic() {
-        return null != instanceId;
+    public void clearTrafficInstance() {
+        trafficInstanceId = null;
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/session/SessionContext.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/session/SessionContext.java
deleted file mode 100644
index 6880ecbbb48..00000000000
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/session/SessionContext.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.session;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * Session context.
- */
-@RequiredArgsConstructor
-@Getter
-public final class SessionContext {
-}
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
index d556e7a05ba..ba26e2f5ca9 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
@@ -29,7 +29,7 @@ import 
org.apache.shardingsphere.infra.rewrite.SQLRewriteEntry;
 import org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteResult;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.engine.SQLRouteEngine;
-import org.apache.shardingsphere.infra.session.SessionContext;
+import org.apache.shardingsphere.infra.session.SQLSession;
 
 /**
  * Kernel processor.
@@ -43,11 +43,11 @@ public final class KernelProcessor {
      * @param database database
      * @param globalRuleMetaData global rule meta data
      * @param props configuration properties
-     * @param sessionContext session context
+     * @param sqlSession session context
      * @return execution context
      */
     public ExecutionContext generateExecutionContext(final LogicSQL logicSQL, 
final ShardingSphereDatabase database, final ShardingSphereRuleMetaData 
globalRuleMetaData,
-                                                     final 
ConfigurationProperties props, final SessionContext sessionContext) {
+                                                     final 
ConfigurationProperties props, final SQLSession sqlSession) {
         RouteContext routeContext = route(logicSQL, database, props);
         SQLRewriteResult rewriteResult = rewrite(logicSQL, database, 
globalRuleMetaData, props, routeContext);
         ExecutionContext result = createExecutionContext(logicSQL, database, 
routeContext, rewriteResult);
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessorTest.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessorTest.java
index 6efbcbb93be..9ec90091b32 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessorTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessorTest.java
@@ -28,7 +28,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResource;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.session.SessionContext;
+import org.apache.shardingsphere.infra.session.SQLSession;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
@@ -55,7 +55,7 @@ public final class KernelProcessorTest {
                 mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), new 
ShardingSphereRuleMetaData(Collections.singleton(mock(SQLTranslatorRule.class))),
 Collections.emptyMap());
         ConfigurationProperties props = new 
ConfigurationProperties(createProperties());
         ExecutionContext actual = new 
KernelProcessor().generateExecutionContext(logicSQL, database, new 
ShardingSphereRuleMetaData(Collections.singleton(mock(SQLTranslatorRule.class))),
 props,
-                mock(SessionContext.class));
+                mock(SQLSession.class));
         assertThat(actual.getExecutionUnits().size(), is(1));
     }
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
index 9e06555e546..c3a65b1533c 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
@@ -39,7 +39,7 @@ import org.apache.shardingsphere.infra.binder.LogicSQL;
 import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.context.kernel.KernelProcessor;
-import org.apache.shardingsphere.infra.session.SessionContext;
+import org.apache.shardingsphere.infra.session.SQLSession;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
@@ -119,7 +119,7 @@ public final class FilterableTableScanExecutor implements 
TableScanExecutor {
         LogicSQL logicSQL = createLogicSQL(federationContext.getDatabases(), 
sqlString, databaseType);
         ShardingSphereDatabase database = 
federationContext.getDatabases().get(databaseName.toLowerCase());
         // TODO need to get session context
-        ExecutionContext context = new 
KernelProcessor().generateExecutionContext(logicSQL, database, 
globalRuleMetaData, executorContext.getProps(), new SessionContext());
+        ExecutionContext context = new 
KernelProcessor().generateExecutionContext(logicSQL, database, 
globalRuleMetaData, executorContext.getProps(), new SQLSession());
         if (federationContext.isPreview() || 
databaseType.getSystemSchemas().contains(schemaName)) {
             
federationContext.getExecutionUnits().addAll(context.getExecutionUnits());
             return createEmptyEnumerable();
@@ -135,7 +135,7 @@ public final class FilterableTableScanExecutor implements 
TableScanExecutor {
             List<QueryResult> queryResults = execute(executionGroupContext, 
databaseType);
             
ExecuteProcessEngine.finish(executionGroupContext.getExecutionID(), 
eventBusContext);
             // TODO need to get session context
-            MergeEngine mergeEngine = new MergeEngine(database, 
executorContext.getProps(), new SessionContext());
+            MergeEngine mergeEngine = new MergeEngine(database, 
executorContext.getProps(), new SQLSession());
             MergedResult mergedResult = mergeEngine.merge(queryResults, 
logicSQL.getSqlStatementContext());
             Collection<Statement> statements = 
getStatements(executionGroupContext.getInputGroups());
             return createEnumerable(mergedResult, 
queryResults.get(0).getMetaData(), statements);
diff --git 
a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
index db4951252cb..abe502ebd8c 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.infra.merge;
 
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.session.SessionContext;
+import org.apache.shardingsphere.infra.session.SQLSession;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngine;
 import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngineFactory;
@@ -50,13 +50,13 @@ public final class MergeEngine {
     @SuppressWarnings("rawtypes")
     private final Map<ShardingSphereRule, ResultProcessEngine> engines;
     
-    private final SessionContext sessionContext;
+    private final SQLSession sqlSession;
     
-    public MergeEngine(final ShardingSphereDatabase database, final 
ConfigurationProperties props, final SessionContext sessionContext) {
+    public MergeEngine(final ShardingSphereDatabase database, final 
ConfigurationProperties props, final SQLSession sqlSession) {
         this.database = database;
         this.props = props;
         engines = 
ResultProcessEngineFactory.getInstances(database.getRuleMetaData().getRules());
-        this.sessionContext = sessionContext;
+        this.sqlSession = sqlSession;
     }
     
     /**
diff --git 
a/shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
 
b/shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
index 5cf53f36acc..91f43f2f788 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.infra.merge;
 
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.session.SessionContext;
+import org.apache.shardingsphere.infra.session.SQLSession;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.merge.fixture.rule.DecoratorRuleFixture;
 import org.apache.shardingsphere.infra.merge.fixture.rule.MergerRuleFixture;
@@ -55,7 +55,7 @@ public final class MergeEngineTest {
     public void assertMergeWithIndependentRule() throws SQLException {
         
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new
 MockedRule()));
         when(queryResult.getValue(1, String.class)).thenReturn("test");
-        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SessionContext.class)).merge(Collections.singletonList(queryResult),
+        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SQLSession.class)).merge(Collections.singletonList(queryResult),
                 mock(SQLStatementContext.class));
         assertThat(actual.getValue(1, String.class), is("test"));
     }
@@ -63,7 +63,7 @@ public final class MergeEngineTest {
     @Test
     public void assertMergeWithMergerRuleOnly() throws SQLException {
         
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new
 MergerRuleFixture()));
-        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SessionContext.class)).merge(Collections.singletonList(queryResult),
+        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SQLSession.class)).merge(Collections.singletonList(queryResult),
                 mock(SQLStatementContext.class));
         assertThat(actual.getValue(1, String.class), is("merged_value"));
     }
@@ -71,7 +71,7 @@ public final class MergeEngineTest {
     @Test
     public void assertMergeWithDecoratorRuleOnly() throws SQLException {
         
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new
 DecoratorRuleFixture()));
-        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SessionContext.class)).merge(Collections.singletonList(queryResult),
+        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SQLSession.class)).merge(Collections.singletonList(queryResult),
                 mock(SQLStatementContext.class));
         assertThat(actual.getValue(1, String.class), is("decorated_value"));
     }
@@ -79,7 +79,7 @@ public final class MergeEngineTest {
     @Test
     public void assertMergeWithMergerRuleAndDecoratorRuleTogether() throws 
SQLException {
         
when(database.getRuleMetaData().getRules()).thenReturn(Arrays.asList(new 
MergerRuleFixture(), new DecoratorRuleFixture()));
-        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SessionContext.class)).merge(Collections.singletonList(queryResult),
+        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SQLSession.class)).merge(Collections.singletonList(queryResult),
                 mock(SQLStatementContext.class));
         assertThat(actual.getValue(1, String.class), 
is("decorated_merged_value"));
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
index a1360f64724..24812dff6f7 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
@@ -23,10 +23,9 @@ import 
org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
 import 
org.apache.shardingsphere.driver.jdbc.core.datasource.metadata.ShardingSphereDatabaseMetaData;
 import 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement;
 import 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement;
-import org.apache.shardingsphere.infra.session.SessionContext;
+import org.apache.shardingsphere.infra.session.SQLSession;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.sharding.merge.ddl.fetch.FetchOrderByValueGroupsHolder;
-import org.apache.shardingsphere.traffic.context.TrafficContextHolder;
 import org.apache.shardingsphere.transaction.TransactionHolder;
 
 import java.sql.Array;
@@ -62,14 +61,14 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
     private volatile boolean closed;
     
     @Getter
-    private final SessionContext sessionContext;
+    private final SQLSession sqlSession;
     
     public ShardingSphereConnection(final String databaseName, final 
ContextManager contextManager, final JDBCContext jdbcContext) {
         this.databaseName = databaseName;
         this.contextManager = contextManager;
         this.jdbcContext = jdbcContext;
         connectionManager = new ConnectionManager(databaseName, 
contextManager);
-        sessionContext = new SessionContext();
+        sqlSession = new SQLSession();
     }
     
     /**
@@ -175,7 +174,7 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
         } finally {
             
connectionManager.getConnectionTransaction().setRollbackOnly(false);
             TransactionHolder.clear();
-            TrafficContextHolder.remove();
+            sqlSession.clearTrafficInstance();
             FetchOrderByValueGroupsHolder.remove();
         }
     }
@@ -187,7 +186,7 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
         } finally {
             
connectionManager.getConnectionTransaction().setRollbackOnly(false);
             TransactionHolder.clear();
-            TrafficContextHolder.remove();
+            sqlSession.clearTrafficInstance();
             FetchOrderByValueGroupsHolder.remove();
         }
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index a2ec3b1170e..320995a3f34 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -73,6 +73,7 @@ import 
org.apache.shardingsphere.infra.merge.result.MergedResult;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
 import org.apache.shardingsphere.infra.rule.identifier.type.RawExecutionRule;
@@ -82,8 +83,6 @@ import 
org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
-import org.apache.shardingsphere.traffic.context.TrafficContext;
-import org.apache.shardingsphere.traffic.context.TrafficContextHolder;
 import org.apache.shardingsphere.traffic.engine.TrafficEngine;
 import org.apache.shardingsphere.traffic.rule.TrafficRule;
 
@@ -148,7 +147,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private ResultSet currentResultSet;
     
-    private TrafficContext trafficContext;
+    private String trafficInstanceId;
     
     private SQLFederationDeciderContext deciderContext;
     
@@ -211,9 +210,9 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             }
             clearPrevious();
             LogicSQL logicSQL = createLogicSQL();
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
(statement, sql) -> ((PreparedStatement) statement).executeQuery());
             }
             deciderContext = decide(logicSQL, 
metaDataContexts.getMetaData().getProps(), 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()));
@@ -239,29 +238,32 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
         return deciderEngine.decide(logicSQL, database);
     }
     
-    private JDBCExecutionUnit createTrafficExecutionUnit(final TrafficContext 
trafficContext, final LogicSQL logicSQL) throws SQLException {
+    private JDBCExecutionUnit createTrafficExecutionUnit(final String 
trafficInstanceId, final LogicSQL logicSQL) throws SQLException {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine();
-        ExecutionUnit executionUnit = new 
ExecutionUnit(trafficContext.getInstanceId(), new SQLUnit(logicSQL.getSql(), 
logicSQL.getParameters()));
-        ExecutionGroupContext<JDBCExecutionUnit> context = 
prepareEngine.prepare(trafficContext.getRouteContext(), 
Collections.singletonList(executionUnit));
+        ExecutionUnit executionUnit = new ExecutionUnit(trafficInstanceId, new 
SQLUnit(logicSQL.getSql(), logicSQL.getParameters()));
+        ExecutionGroupContext<JDBCExecutionUnit> context = 
prepareEngine.prepare(new RouteContext(), 
Collections.singletonList(executionUnit));
         if (context.getInputGroups().isEmpty() || 
context.getInputGroups().iterator().next().getInputs().isEmpty()) {
             throw new ShardingSphereException("Can not get traffic execution 
unit.");
         }
         return 
context.getInputGroups().iterator().next().getInputs().iterator().next();
     }
     
-    private TrafficContext getTrafficContext(final LogicSQL logicSQL) {
-        TrafficContext result = TrafficContextHolder.get().orElseGet(() -> 
createTrafficContext(logicSQL));
-        if (connection.isHoldTransaction()) {
-            TrafficContextHolder.set(result);
+    private Optional<String> getInstanceIdAndSet(final LogicSQL logicSQL) {
+        Optional<String> result = 
connection.getSqlSession().getTrafficInstanceId();
+        if (!result.isPresent()) {
+            result = getInstanceId(logicSQL);
+        }
+        if (connection.isHoldTransaction() && result.isPresent()) {
+            connection.getSqlSession().setTrafficInstanceId(result.get());
         }
         return result;
     }
     
-    private TrafficContext createTrafficContext(final LogicSQL logicSQL) {
+    private Optional<String> getInstanceId(final LogicSQL logicSQL) {
         InstanceContext instanceContext = 
connection.getContextManager().getInstanceContext();
         return null != trafficRule && !trafficRule.getStrategyRules().isEmpty()
                 ? new TrafficEngine(trafficRule, 
instanceContext).dispatch(logicSQL, connection.isHoldTransaction())
-                : new TrafficContext();
+                : Optional.empty();
     }
     
     private void resetParameters() throws SQLException {
@@ -314,9 +316,9 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             }
             clearPrevious();
             LogicSQL logicSQL = createLogicSQL();
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
(statement, sql) -> ((PreparedStatement) statement).executeUpdate());
             }
             executionContext = createExecutionContext(logicSQL);
@@ -371,9 +373,9 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             }
             clearPrevious();
             LogicSQL logicSQL = createLogicSQL();
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
(statement, sql) -> ((PreparedStatement) statement).execute());
             }
             deciderContext = decide(logicSQL, 
metaDataContexts.getMetaData().getProps(), 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()));
@@ -442,7 +444,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         if (null != currentResultSet) {
             return currentResultSet;
         }
-        if (trafficContext.isMatchTraffic()) {
+        if (null != trafficInstanceId) {
             return executor.getTrafficExecutor().getResultSet();
         }
         if (null != deciderContext && deciderContext.isUseSQLFederation()) {
@@ -487,14 +489,14 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
                 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules(),
                 connection.getDatabaseName(), 
metaDataContexts.getMetaData().getDatabases(), null);
         ExecutionContext result = 
kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()),
-                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), connection.getSessionContext());
+                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), connection.getSqlSession());
         findGeneratedKey(result).ifPresent(generatedKey -> 
generatedValues.addAll(generatedKey.getGeneratedValues()));
         return result;
     }
     
-    private ExecutionContext createExecutionContext(final LogicSQL logicSQL, 
final TrafficContext trafficContext) {
-        ExecutionUnit executionUnit = new 
ExecutionUnit(trafficContext.getInstanceId(), new SQLUnit(logicSQL.getSql(), 
logicSQL.getParameters()));
-        return new ExecutionContext(logicSQL, 
Collections.singletonList(executionUnit), trafficContext.getRouteContext());
+    private ExecutionContext createExecutionContext(final LogicSQL logicSQL, 
final String trafficInstanceId) {
+        ExecutionUnit executionUnit = new ExecutionUnit(trafficInstanceId, new 
SQLUnit(logicSQL.getSql(), logicSQL.getParameters()));
+        return new ExecutionContext(logicSQL, 
Collections.singletonList(executionUnit), new RouteContext());
     }
     
     private LogicSQL createLogicSQL() {
@@ -506,7 +508,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     }
     
     private MergedResult mergeQuery(final List<QueryResult> queryResults) 
throws SQLException {
-        MergeEngine mergeEngine = new 
MergeEngine(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()),
 metaDataContexts.getMetaData().getProps(), connection.getSessionContext());
+        MergeEngine mergeEngine = new 
MergeEngine(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()),
 metaDataContexts.getMetaData().getProps(), connection.getSqlSession());
         return mergeEngine.merge(queryResults, 
executionContext.getSqlStatementContext());
     }
     
@@ -565,8 +567,8 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     public void addBatch() {
         try {
             LogicSQL logicSQL = createLogicSQL();
-            trafficContext = getTrafficContext(logicSQL);
-            executionContext = trafficContext.isMatchTraffic() ? 
createExecutionContext(logicSQL, trafficContext) : 
createExecutionContext(logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            executionContext = null != trafficInstanceId ? 
createExecutionContext(logicSQL, trafficInstanceId) : 
createExecutionContext(logicSQL);
             
batchPreparedStatementExecutor.addBatchForExecutionUnits(executionContext.getExecutionUnits());
         } finally {
             currentResultSet = null;
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 78cd9509211..2e66734f4b7 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -67,6 +67,7 @@ import 
org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.merge.MergeEngine;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
 import org.apache.shardingsphere.infra.rule.identifier.type.RawExecutionRule;
@@ -75,8 +76,6 @@ import 
org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
-import org.apache.shardingsphere.traffic.context.TrafficContext;
-import org.apache.shardingsphere.traffic.context.TrafficContextHolder;
 import org.apache.shardingsphere.traffic.engine.TrafficEngine;
 import org.apache.shardingsphere.traffic.rule.TrafficRule;
 
@@ -124,7 +123,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     private ResultSet currentResultSet;
     
-    private TrafficContext trafficContext;
+    private String trafficInstanceId;
     
     private SQLFederationDeciderContext deciderContext;
     
@@ -157,9 +156,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         ResultSet result;
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
Statement::executeQuery);
             }
             deciderContext = decide(logicSQL, 
metaDataContexts.getMetaData().getProps(), 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()));
@@ -185,19 +184,22 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         return deciderEngine.decide(logicSQL, database);
     }
     
-    private TrafficContext getTrafficContext(final LogicSQL logicSQL) {
-        TrafficContext result = TrafficContextHolder.get().orElseGet(() -> 
createTrafficContext(logicSQL));
-        if (connection.isHoldTransaction()) {
-            TrafficContextHolder.set(result);
+    private Optional<String> getInstanceIdAndSet(final LogicSQL logicSQL) {
+        Optional<String> result = 
connection.getSqlSession().getTrafficInstanceId();
+        if (!result.isPresent()) {
+            result = getInstanceId(logicSQL);
+        }
+        if (connection.isHoldTransaction() && result.isPresent()) {
+            connection.getSqlSession().setTrafficInstanceId(result.get());
         }
         return result;
     }
     
-    private TrafficContext createTrafficContext(final LogicSQL logicSQL) {
+    private Optional<String> getInstanceId(final LogicSQL logicSQL) {
         InstanceContext instanceContext = 
connection.getContextManager().getInstanceContext();
         return null != trafficRule && !trafficRule.getStrategyRules().isEmpty()
                 ? new TrafficEngine(trafficRule, 
instanceContext).dispatch(logicSQL, connection.isHoldTransaction())
-                : new TrafficContext();
+                : Optional.empty();
     }
     
     private List<ResultSet> getShardingSphereResultSets() {
@@ -233,9 +235,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     public int executeUpdate(final String sql) throws SQLException {
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
Statement::executeUpdate);
             }
             executionContext = createExecutionContext(logicSQL);
@@ -261,9 +263,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
(statement, actualSQL) -> statement.executeUpdate(actualSQL, 
autoGeneratedKeys));
             }
             executionContext = createExecutionContext(logicSQL);
@@ -287,9 +289,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         returnGeneratedKeys = true;
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
(statement, actualSQL) -> statement.executeUpdate(actualSQL, columnIndexes));
             }
             executionContext = createExecutionContext(logicSQL);
@@ -313,9 +315,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         returnGeneratedKeys = true;
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
(statement, actualSQL) -> statement.executeUpdate(actualSQL, columnNames));
             }
             executionContext = createExecutionContext(logicSQL);
@@ -429,9 +431,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     private boolean execute0(final String sql, final ExecuteCallback callback) 
throws SQLException {
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            trafficContext = getTrafficContext(logicSQL);
-            if (trafficContext.isMatchTraffic()) {
-                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficContext, logicSQL);
+            trafficInstanceId = getInstanceIdAndSet(logicSQL).orElse(null);
+            if (null != trafficInstanceId) {
+                JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, logicSQL);
                 return executor.getTrafficExecutor().execute(executionUnit, 
(statement, actualSQL) -> callback.execute(actualSQL, statement));
             }
             deciderContext = decide(logicSQL, 
metaDataContexts.getMetaData().getProps(), 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()));
@@ -453,10 +455,10 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
     }
     
-    private JDBCExecutionUnit createTrafficExecutionUnit(final TrafficContext 
trafficContext, final LogicSQL logicSQL) throws SQLException {
+    private JDBCExecutionUnit createTrafficExecutionUnit(final String 
trafficInstanceId, final LogicSQL logicSQL) throws SQLException {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine();
-        ExecutionUnit executionUnit = new 
ExecutionUnit(trafficContext.getInstanceId(), new SQLUnit(logicSQL.getSql(), 
logicSQL.getParameters()));
-        ExecutionGroupContext<JDBCExecutionUnit> context = 
prepareEngine.prepare(trafficContext.getRouteContext(), 
Collections.singletonList(executionUnit));
+        ExecutionUnit executionUnit = new ExecutionUnit(trafficInstanceId, new 
SQLUnit(logicSQL.getSql(), logicSQL.getParameters()));
+        ExecutionGroupContext<JDBCExecutionUnit> context = 
prepareEngine.prepare(new RouteContext(), 
Collections.singletonList(executionUnit));
         return context.getInputGroups().stream().flatMap(each -> 
each.getInputs().stream()).findFirst().orElseThrow(() -> new 
ShardingSphereException("Can not get traffic execution unit."));
     }
     
@@ -481,7 +483,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
                 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules(),
                 connection.getDatabaseName(), 
metaDataContexts.getMetaData().getDatabases(), null);
         return kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(),
-                metaDataContexts.getMetaData().getProps(), 
connection.getSessionContext());
+                metaDataContexts.getMetaData().getProps(), 
connection.getSqlSession());
     }
     
     private ExecutionGroupContext<JDBCExecutionUnit> createExecutionContext() 
throws SQLException {
@@ -513,7 +515,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         if (null != currentResultSet) {
             return currentResultSet;
         }
-        if (trafficContext.isMatchTraffic()) {
+        if (null != trafficInstanceId) {
             return executor.getTrafficExecutor().getResultSet();
         }
         if (null != deciderContext && deciderContext.isUseSQLFederation()) {
@@ -554,7 +556,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     }
     
     private MergedResult mergeQuery(final List<QueryResult> queryResults) 
throws SQLException {
-        MergeEngine mergeEngine = new 
MergeEngine(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()),
 metaDataContexts.getMetaData().getProps(), connection.getSessionContext());
+        MergeEngine mergeEngine = new 
MergeEngine(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()),
 metaDataContexts.getMetaData().getProps(), connection.getSqlSession());
         return mergeEngine.merge(queryResults, 
executionContext.getSqlStatementContext());
     }
     
diff --git 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/context/TrafficContextHolder.java
 
b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/context/TrafficContextHolder.java
deleted file mode 100644
index fb3db9645d3..00000000000
--- 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/context/TrafficContextHolder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.traffic.context;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-import java.util.Optional;
-
-/**
- * Hold traffic context for current thread.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class TrafficContextHolder {
-    
-    private static final ThreadLocal<TrafficContext> TRAFFIC_CONTEXT = new 
ThreadLocal<>();
-    
-    /**
-     * Set traffic context.
-     *
-     * @param trafficContext traffic context
-     */
-    public static void set(final TrafficContext trafficContext) {
-        TRAFFIC_CONTEXT.set(trafficContext);
-    }
-    
-    /**
-     * Get traffic context.
-     *
-     * @return traffic context
-     */
-    public static Optional<TrafficContext> get() {
-        return Optional.ofNullable(TRAFFIC_CONTEXT.get());
-    }
-    
-    /**
-     * Remove traffic context.
-     */
-    public static void remove() {
-        TRAFFIC_CONTEXT.remove();
-    }
-}
diff --git 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/engine/TrafficEngine.java
 
b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/engine/TrafficEngine.java
index 89cd23255e7..fff0b708f3f 100644
--- 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/engine/TrafficEngine.java
+++ 
b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/engine/TrafficEngine.java
@@ -22,7 +22,6 @@ import org.apache.shardingsphere.infra.binder.LogicSQL;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
-import org.apache.shardingsphere.traffic.context.TrafficContext;
 import org.apache.shardingsphere.traffic.rule.TrafficRule;
 import org.apache.shardingsphere.traffic.rule.TrafficStrategyRule;
 import org.apache.shardingsphere.traffic.spi.TrafficLoadBalanceAlgorithm;
@@ -45,21 +44,20 @@ public final class TrafficEngine {
      *
      * @param logicSQL logic SQL
      * @param inTransaction is in transaction
-     * @return traffic context
+     * @return instance id
      */
-    public TrafficContext dispatch(final LogicSQL logicSQL, final boolean 
inTransaction) {
+    public Optional<String> dispatch(final LogicSQL logicSQL, final boolean 
inTransaction) {
         Optional<TrafficStrategyRule> strategyRule = 
trafficRule.findMatchedStrategyRule(logicSQL, inTransaction);
-        TrafficContext result = new TrafficContext();
         if (!strategyRule.isPresent() || 
isInvalidStrategyRule(strategyRule.get())) {
-            return result;
+            return Optional.empty();
         }
         List<InstanceMetaData> instances = 
instanceContext.getAllClusterInstances(InstanceType.PROXY, 
strategyRule.get().getLabels());
         if (!instances.isEmpty()) {
             TrafficLoadBalanceAlgorithm loadBalancer = 
strategyRule.get().getLoadBalancer();
             InstanceMetaData instanceMetaData = 1 == instances.size() ? 
instances.iterator().next() : 
loadBalancer.getInstanceId(strategyRule.get().getName(), instances);
-            result.setInstanceId(instanceMetaData.getId());
+            return Optional.of(instanceMetaData.getId());
         }
-        return result;
+        return Optional.empty();
     }
     
     private boolean isInvalidStrategyRule(final TrafficStrategyRule 
strategyRule) {
diff --git 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/context/TrafficContextTest.java
 
b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/context/TrafficContextTest.java
deleted file mode 100644
index ce9a6e55c2e..00000000000
--- 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/context/TrafficContextTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.traffic.algorithm.context;
-
-import org.apache.shardingsphere.traffic.context.TrafficContext;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public final class TrafficContextTest {
-    
-    @Test
-    public void assertIsMatchTrafficWhenExistInstanceId() {
-        TrafficContext trafficContext = new TrafficContext();
-        trafficContext.setInstanceId("127.0.0.1@3307");
-        assertTrue(trafficContext.isMatchTraffic());
-    }
-    
-    @Test
-    public void assertIsMatchTrafficWhenNotExistInstanceId() {
-        TrafficContext trafficContext = new TrafficContext();
-        assertFalse(trafficContext.isMatchTraffic());
-    }
-}
diff --git 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/engine/TrafficEngineTest.java
 
b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/engine/TrafficEngineTest.java
index 72cf85298d7..ad45af93189 100644
--- 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/engine/TrafficEngineTest.java
+++ 
b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/engine/TrafficEngineTest.java
@@ -22,7 +22,6 @@ import 
org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
 import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
-import org.apache.shardingsphere.traffic.context.TrafficContext;
 import org.apache.shardingsphere.traffic.engine.TrafficEngine;
 import org.apache.shardingsphere.traffic.rule.TrafficRule;
 import org.apache.shardingsphere.traffic.rule.TrafficStrategyRule;
@@ -39,7 +38,7 @@ import java.util.List;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -63,8 +62,8 @@ public final class TrafficEngineTest {
     public void assertDispatchWhenNotExistTrafficStrategyRule() {
         TrafficEngine trafficEngine = new TrafficEngine(trafficRule, 
instanceContext);
         when(trafficRule.findMatchedStrategyRule(logicSQL, 
false)).thenReturn(Optional.empty());
-        TrafficContext actual = trafficEngine.dispatch(logicSQL, false);
-        assertNull(actual.getInstanceId());
+        Optional<String> actual = trafficEngine.dispatch(logicSQL, false);
+        assertFalse(actual.isPresent());
     }
     
     @Test
@@ -73,8 +72,8 @@ public final class TrafficEngineTest {
         TrafficStrategyRule strategyRule = mock(TrafficStrategyRule.class);
         when(strategyRule.getLabels()).thenReturn(Collections.emptyList());
         when(trafficRule.findMatchedStrategyRule(logicSQL, 
false)).thenReturn(Optional.of(strategyRule));
-        TrafficContext actual = trafficEngine.dispatch(logicSQL, false);
-        assertNull(actual.getInstanceId());
+        Optional<String> actual = trafficEngine.dispatch(logicSQL, false);
+        assertFalse(actual.isPresent());
     }
     
     @Test
@@ -82,8 +81,8 @@ public final class TrafficEngineTest {
         TrafficEngine trafficEngine = new TrafficEngine(trafficRule, 
instanceContext);
         when(trafficRule.findMatchedStrategyRule(logicSQL, 
false)).thenReturn(Optional.of(strategyRule));
         when(strategyRule.getLabels()).thenReturn(Arrays.asList("OLTP", 
"OLAP"));
-        TrafficContext actual = trafficEngine.dispatch(logicSQL, false);
-        assertNull(actual.getInstanceId());
+        Optional<String> actual = trafficEngine.dispatch(logicSQL, false);
+        assertFalse(actual.isPresent());
     }
     
     @Test
@@ -97,8 +96,8 @@ public final class TrafficEngineTest {
         when(strategyRule.getLoadBalancer()).thenReturn(loadBalancer);
         when(strategyRule.getName()).thenReturn("traffic");
         when(instanceContext.getAllClusterInstances(InstanceType.PROXY, 
Arrays.asList("OLTP", "OLAP"))).thenReturn(instanceIds);
-        TrafficContext actual = trafficEngine.dispatch(logicSQL, false);
-        assertThat(actual.getInstanceId(), is("foo_id"));
+        Optional<String> actual = trafficEngine.dispatch(logicSQL, false);
+        assertThat(actual, is(Optional.of("foo_id")));
     }
     
     private List<InstanceMetaData> mockComputeNodeInstances() {
diff --git 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/context/TrafficContextHolderTest.java
 
b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/context/TrafficContextHolderTest.java
deleted file mode 100644
index 6d7aa2582b1..00000000000
--- 
a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/context/TrafficContextHolderTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.traffic.context;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(MockitoJUnitRunner.class)
-public final class TrafficContextHolderTest {
-    
-    @Mock
-    private TrafficContext trafficContext;
-    
-    @Test
-    public void assertTrafficContextHolder() {
-        assertFalse(TrafficContextHolder.get().isPresent());
-        TrafficContextHolder.set(trafficContext);
-        assertTrue(TrafficContextHolder.get().isPresent());
-        TrafficContextHolder.remove();
-        assertFalse(TrafficContextHolder.get().isPresent());
-    }
-}
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index 86ce03274b4..c6e5bc327e1 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -177,7 +177,7 @@ public abstract class DatabaseCommunicationEngine 
implements DatabaseBackendHand
     
     protected MergedResult mergeQuery(final SQLStatementContext<?> 
sqlStatementContext, final List<QueryResult> queryResults) throws SQLException {
         MergeEngine mergeEngine = new MergeEngine(database, 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps(),
-                
getBackendConnection().getConnectionSession().getSessionContext());
+                getBackendConnection().getConnectionSession().getSqlSession());
         return mergeEngine.merge(queryResults, sqlStatementContext);
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index 414c05bdaa8..26c2a087de8 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -124,7 +124,7 @@ public final class JDBCDatabaseCommunicationEngine extends 
DatabaseCommunication
             return processExecuteFederation(resultSet, metaDataContexts);
         }
         ExecutionContext executionContext = 
getKernelProcessor().generateExecutionContext(logicSQL, getDatabase(), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(),
-                metaDataContexts.getMetaData().getProps(), 
backendConnection.getConnectionSession().getSessionContext());
+                metaDataContexts.getMetaData().getProps(), 
backendConnection.getConnectionSession().getSqlSession());
         if (executionContext.getExecutionUnits().isEmpty()) {
             return new 
UpdateResponseHeader(executionContext.getSqlStatementContext().getSqlStatement());
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/vertx/VertxDatabaseCommunicationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/vertx/VertxDatabaseCommunicationEngine.java
index 21c96a3d60e..1a103420e22 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/vertx/VertxDatabaseCommunicationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/vertx/VertxDatabaseCommunicationEngine.java
@@ -63,7 +63,7 @@ public final class VertxDatabaseCommunicationEngine extends 
DatabaseCommunicatio
                 return Future.failedFuture(new 
UnsupportedOperationException("Executing federated query by Vert.x is not 
supported yet."));
             }
             ExecutionContext executionContext = 
getKernelProcessor().generateExecutionContext(getLogicSQL(), getDatabase(), 
metaData.getGlobalRuleMetaData(),
-                    metaData.getProps(), 
getBackendConnection().getConnectionSession().getSessionContext());
+                    metaData.getProps(), 
getBackendConnection().getConnectionSession().getSqlSession());
             if (executionContext.getExecutionUnits().isEmpty()) {
                 return Future.succeededFuture(new 
UpdateResponseHeader(executionContext.getSqlStatementContext().getSqlStatement()));
             }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
index 458d80573fc..db6cdaf2a03 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
@@ -118,7 +118,7 @@ public final class PreviewHandler extends 
SQLRULBackendHandler<PreviewStatement>
         ConfigurationProperties props = 
metaDataContexts.getMetaData().getProps();
         SQLFederationDeciderContext deciderContext = decide(logicSQL, props, 
metaDataContexts.getMetaData().getDatabase(getConnectionSession().getDatabaseName()));
         Collection<ExecutionUnit> executionUnits = 
deciderContext.isUseSQLFederation() ? getFederationExecutionUnits(logicSQL, 
databaseName, metaDataContexts)
-                : kernelProcessor.generateExecutionContext(logicSQL, database, 
globalRuleMetaData, props, 
getConnectionSession().getSessionContext()).getExecutionUnits();
+                : kernelProcessor.generateExecutionContext(logicSQL, database, 
globalRuleMetaData, props, 
getConnectionSession().getSqlSession()).getExecutionUnits();
         return 
executionUnits.stream().map(this::buildRow).collect(Collectors.toList());
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
index efd1b65b78a..75ba35b5326 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
@@ -23,7 +23,7 @@ import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.infra.binder.statement.ddl.CursorStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
-import org.apache.shardingsphere.infra.session.SessionContext;
+import org.apache.shardingsphere.infra.session.SQLSession;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.ExecutorStatementManager;
@@ -78,7 +78,7 @@ public final class ConnectionSession {
     
     private final PreparedStatementRegistry preparedStatementRegistry = new 
PreparedStatementRegistry();
     
-    private final SessionContext sessionContext;
+    private final SQLSession sqlSession;
     
     private final RequiredSessionVariableRecorder 
requiredSessionVariableRecorder = new RequiredSessionVariableRecorder();
     
@@ -88,7 +88,7 @@ public final class ConnectionSession {
         this.attributeMap = attributeMap;
         backendConnection = determineBackendConnection();
         statementManager = determineStatementManager();
-        sessionContext = new SessionContext();
+        sqlSession = new SQLSession();
     }
     
     private BackendConnection determineBackendConnection() {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index 94e27cd664c..4a672b038cb 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -131,7 +131,7 @@ public final class MySQLMultiStatementsHandler implements 
ProxyBackendHandler {
                 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getRuleMetaData().getRules(),
                 connectionSession.getDatabaseName(), 
metaDataContexts.getMetaData().getDatabases(), null);
         return kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()),
-                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), 
connectionSession.getSessionContext());
+                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), connectionSession.getSqlSession());
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index a8792831408..f93285271df 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -128,7 +128,7 @@ public final class PostgreSQLBatchedStatementsExecutor {
                 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getRuleMetaData().getRules(),
                 connectionSession.getDatabaseName(), 
metaDataContexts.getMetaData().getDatabases(), null);
         return kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()),
-                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), 
connectionSession.getSessionContext());
+                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), connectionSession.getSqlSession());
     }
     
     /**
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
index ed74bb2ad3e..61f8b936c97 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
@@ -200,7 +200,7 @@ public final class PostgreSQLComDescribeExecutor implements 
CommandExecutor {
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, 
preparedStatement.getSql(), Collections.emptyList());
         ShardingSphereDatabase database = 
ProxyContext.getInstance().getDatabase(databaseName);
         ExecutionContext executionContext = new 
KernelProcessor().generateExecutionContext(
-                logicSQL, database, 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), 
connectionSession.getSessionContext());
+                logicSQL, database, 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), connectionSession.getSqlSession());
         ExecutionUnit executionUnitSample = 
executionContext.getExecutionUnits().iterator().next();
         JDBCBackendConnection backendConnection = (JDBCBackendConnection) 
connectionSession.getBackendConnection();
         Connection connection = 
backendConnection.getConnections(executionUnitSample.getDataSourceName(), 1, 
ConnectionMode.CONNECTION_STRICTLY).iterator().next();

Reply via email to