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 af3ac6936f1 add sessionContext for kernel (#19785)
af3ac6936f1 is described below

commit af3ac6936f1d74a1af7b6c7950b2372c50a1c81b
Author: Chuxin Chen <[email protected]>
AuthorDate: Tue Aug 9 10:57:57 2022 +0800

    add sessionContext for kernel (#19785)
    
    * add sessionContext for kernel
    
    * sessionContext
    
    * add session context for kernel
    
    * settings.jar
    
    * merge master
---
 .../infra/session/SessionContext.java              | 29 ++++++++++++++++++++++
 .../infra/context/kernel/KernelProcessor.java      |  6 +++--
 .../infra/context/kernel/KernelProcessorTest.java  |  4 ++-
 .../table/FilterableTableScanExecutor.java         |  7 ++++--
 .../shardingsphere/infra/merge/MergeEngine.java    |  6 ++++-
 .../infra/merge/MergeEngineTest.java               | 13 +++++++---
 .../core/connection/ShardingSphereConnection.java  |  5 ++++
 .../statement/ShardingSpherePreparedStatement.java |  4 +--
 .../core/statement/ShardingSphereStatement.java    |  6 ++---
 .../communication/DatabaseCommunicationEngine.java |  3 ++-
 .../jdbc/JDBCDatabaseCommunicationEngine.java      |  4 +--
 .../vertx/VertxDatabaseCommunicationEngine.java    |  4 +--
 .../handler/distsql/rul/sql/PreviewHandler.java    |  2 +-
 .../proxy/backend/session/ConnectionSession.java   |  4 +++
 .../jdbc/JDBCDatabaseCommunicationEngineTest.java  |  2 --
 .../text/query/MySQLMultiStatementsHandler.java    |  2 +-
 .../PostgreSQLBatchedStatementsExecutor.java       |  2 +-
 .../describe/PostgreSQLComDescribeExecutor.java    |  2 +-
 18 files changed, 79 insertions(+), 26 deletions(-)

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
new file mode 100644
index 00000000000..6880ecbbb48
--- /dev/null
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/session/SessionContext.java
@@ -0,0 +1,29 @@
+/*
+ * 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 a6433883abd..d556e7a05ba 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,6 +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;
 
 /**
  * Kernel processor.
@@ -42,10 +43,11 @@ public final class KernelProcessor {
      * @param database database
      * @param globalRuleMetaData global rule meta data
      * @param props configuration properties
+     * @param sessionContext session context
      * @return execution context
      */
-    public ExecutionContext generateExecutionContext(final LogicSQL logicSQL,
-                                                     final 
ShardingSphereDatabase database, final ShardingSphereRuleMetaData 
globalRuleMetaData, final ConfigurationProperties props) {
+    public ExecutionContext generateExecutionContext(final LogicSQL logicSQL, 
final ShardingSphereDatabase database, final ShardingSphereRuleMetaData 
globalRuleMetaData,
+                                                     final 
ConfigurationProperties props, final SessionContext sessionContext) {
         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 f38cf7c223a..6efbcbb93be 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,6 +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.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
@@ -53,7 +54,8 @@ public final class KernelProcessorTest {
         ShardingSphereDatabase database = new 
ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class),
                 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);
+        ExecutionContext actual = new 
KernelProcessor().generateExecutionContext(logicSQL, database, new 
ShardingSphereRuleMetaData(Collections.singleton(mock(SQLTranslatorRule.class))),
 props,
+                mock(SessionContext.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 4ccc74a5eaa..9e06555e546 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,6 +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.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
@@ -117,7 +118,8 @@ public final class FilterableTableScanExecutor implements 
TableScanExecutor {
         FederationContext federationContext = 
executorContext.getFederationContext();
         LogicSQL logicSQL = createLogicSQL(federationContext.getDatabases(), 
sqlString, databaseType);
         ShardingSphereDatabase database = 
federationContext.getDatabases().get(databaseName.toLowerCase());
-        ExecutionContext context = new 
KernelProcessor().generateExecutionContext(logicSQL, database, 
globalRuleMetaData, executorContext.getProps());
+        // TODO need to get session context
+        ExecutionContext context = new 
KernelProcessor().generateExecutionContext(logicSQL, database, 
globalRuleMetaData, executorContext.getProps(), new SessionContext());
         if (federationContext.isPreview() || 
databaseType.getSystemSchemas().contains(schemaName)) {
             
federationContext.getExecutionUnits().addAll(context.getExecutionUnits());
             return createEmptyEnumerable();
@@ -132,7 +134,8 @@ public final class FilterableTableScanExecutor implements 
TableScanExecutor {
             ExecuteProcessEngine.initialize(context.getLogicSQL(), 
executionGroupContext, eventBusContext);
             List<QueryResult> queryResults = execute(executionGroupContext, 
databaseType);
             
ExecuteProcessEngine.finish(executionGroupContext.getExecutionID(), 
eventBusContext);
-            MergeEngine mergeEngine = new MergeEngine(database, 
executorContext.getProps());
+            // TODO need to get session context
+            MergeEngine mergeEngine = new MergeEngine(database, 
executorContext.getProps(), new SessionContext());
             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 8f0bf0408f2..db4951252cb 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,6 +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.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngine;
 import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngineFactory;
@@ -49,10 +50,13 @@ public final class MergeEngine {
     @SuppressWarnings("rawtypes")
     private final Map<ShardingSphereRule, ResultProcessEngine> engines;
     
-    public MergeEngine(final ShardingSphereDatabase database, final 
ConfigurationProperties props) {
+    private final SessionContext sessionContext;
+    
+    public MergeEngine(final ShardingSphereDatabase database, final 
ConfigurationProperties props, final SessionContext sessionContext) {
         this.database = database;
         this.props = props;
         engines = 
ResultProcessEngineFactory.getInstances(database.getRuleMetaData().getRules());
+        this.sessionContext = sessionContext;
     }
     
     /**
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 d0a305e65ce..5cf53f36acc 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,6 +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.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.merge.fixture.rule.DecoratorRuleFixture;
 import org.apache.shardingsphere.infra.merge.fixture.rule.MergerRuleFixture;
@@ -54,28 +55,32 @@ 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())).merge(Collections.singletonList(queryResult), 
mock(SQLStatementContext.class));
+        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SessionContext.class)).merge(Collections.singletonList(queryResult),
+                mock(SQLStatementContext.class));
         assertThat(actual.getValue(1, String.class), is("test"));
     }
     
     @Test
     public void assertMergeWithMergerRuleOnly() throws SQLException {
         
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new
 MergerRuleFixture()));
-        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new 
Properties())).merge(Collections.singletonList(queryResult), 
mock(SQLStatementContext.class));
+        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SessionContext.class)).merge(Collections.singletonList(queryResult),
+                mock(SQLStatementContext.class));
         assertThat(actual.getValue(1, String.class), is("merged_value"));
     }
     
     @Test
     public void assertMergeWithDecoratorRuleOnly() throws SQLException {
         
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new
 DecoratorRuleFixture()));
-        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new 
Properties())).merge(Collections.singletonList(queryResult), 
mock(SQLStatementContext.class));
+        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SessionContext.class)).merge(Collections.singletonList(queryResult),
+                mock(SQLStatementContext.class));
         assertThat(actual.getValue(1, String.class), is("decorated_value"));
     }
     
     @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())).merge(Collections.singletonList(queryResult), 
mock(SQLStatementContext.class));
+        MergedResult actual = new MergeEngine(database, new 
ConfigurationProperties(new Properties()), 
mock(SessionContext.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 e28ba5215ea..a1360f64724 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,6 +23,7 @@ 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.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.sharding.merge.ddl.fetch.FetchOrderByValueGroupsHolder;
 import org.apache.shardingsphere.traffic.context.TrafficContextHolder;
@@ -60,11 +61,15 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
     
     private volatile boolean closed;
     
+    @Getter
+    private final SessionContext sessionContext;
+    
     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();
     }
     
     /**
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 72616e5542b..a2ec3b1170e 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
@@ -487,7 +487,7 @@ 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());
+                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), connection.getSessionContext());
         findGeneratedKey(result).ifPresent(generatedKey -> 
generatedValues.addAll(generatedKey.getGeneratedValues()));
         return result;
     }
@@ -506,7 +506,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());
+        MergeEngine mergeEngine = new 
MergeEngine(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()),
 metaDataContexts.getMetaData().getProps(), connection.getSessionContext());
         return mergeEngine.merge(queryResults, 
executionContext.getSqlStatementContext());
     }
     
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 4d67fc92fa7..78cd9509211 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
@@ -480,8 +480,8 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         SQLCheckEngine.check(logicSQL.getSqlStatementContext(), 
logicSQL.getParameters(),
                 
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());
+        return kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(),
+                metaDataContexts.getMetaData().getProps(), 
connection.getSessionContext());
     }
     
     private ExecutionGroupContext<JDBCExecutionUnit> createExecutionContext() 
throws SQLException {
@@ -554,7 +554,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());
+        MergeEngine mergeEngine = new 
MergeEngine(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()),
 metaDataContexts.getMetaData().getProps(), connection.getSessionContext());
         return mergeEngine.merge(queryResults, 
executionContext.getSqlStatementContext());
     }
     
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 d6c2fa06ec8..516efd32e84 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
@@ -182,7 +182,8 @@ 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());
+        MergeEngine mergeEngine = new MergeEngine(database, 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps(),
+                
getBackendConnection().getConnectionSession().getSessionContext());
         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 16ec024d1c3..1da7d87033f 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
@@ -123,8 +123,8 @@ public final class JDBCDatabaseCommunicationEngine extends 
DatabaseCommunication
             ResultSet resultSet = doExecuteFederation(logicSQL, 
metaDataContexts);
             return processExecuteFederation(resultSet, metaDataContexts);
         }
-        ExecutionContext executionContext = 
getKernelProcessor().generateExecutionContext(
-                logicSQL, getDatabase(), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps());
+        ExecutionContext executionContext = 
getKernelProcessor().generateExecutionContext(logicSQL, getDatabase(), 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
+                metaDataContexts.getMetaData().getProps(), 
backendConnection.getConnectionSession().getSessionContext());
         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 3d038457883..d6af5272060 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
@@ -62,8 +62,8 @@ public final class VertxDatabaseCommunicationEngine extends 
DatabaseCommunicatio
             if (deciderContext.isUseSQLFederation()) {
                 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());
+            ExecutionContext executionContext = 
getKernelProcessor().generateExecutionContext(getLogicSQL(), getDatabase(), 
metaData.getGlobalRuleMetaData(), 
+                    metaData.getProps(), 
getBackendConnection().getConnectionSession().getSessionContext());
             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 194f17d1aa6..2cc55e1edaf 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).getExecutionUnits();
+                : kernelProcessor.generateExecutionContext(logicSQL, database, 
globalRuleMetaData, props, 
getConnectionSession().getSessionContext()).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 7fe7ec5efff..efd1b65b78a 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,6 +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.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.ExecutorStatementManager;
@@ -77,6 +78,8 @@ public final class ConnectionSession {
     
     private final PreparedStatementRegistry preparedStatementRegistry = new 
PreparedStatementRegistry();
     
+    private final SessionContext sessionContext;
+    
     private final RequiredSessionVariableRecorder 
requiredSessionVariableRecorder = new RequiredSessionVariableRecorder();
     
     public ConnectionSession(final DatabaseType databaseType, final 
TransactionType initialTransactionType, final AttributeMap attributeMap) {
@@ -85,6 +88,7 @@ public final class ConnectionSession {
         this.attributeMap = attributeMap;
         backendConnection = determineBackendConnection();
         statementManager = determineStatementManager();
+        sessionContext = new SessionContext();
     }
     
     private BackendConnection determineBackendConnection() {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
index 6796ccee610..8c024b7c7a2 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
@@ -45,7 +45,6 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.util.SystemSchemaUtil;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -143,7 +142,6 @@ public final class JDBCDatabaseCommunicationEngineTest 
extends ProxyContextResto
         kernelProcessorField.setAccessible(true);
         KernelProcessor kernelProcessor = mock(KernelProcessor.class);
         kernelProcessorField.set(engine, kernelProcessor);
-        RouteContext routeContext = new RouteContext();
         
when(backendConnection.getConnectionSession().getStatementManager()).thenReturn(new
 JDBCBackendStatement());
         FederationExecutor federationExecutor = mock(FederationExecutor.class);
         try (
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 d28b5393ce8..94e27cd664c 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());
+                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), 
connectionSession.getSessionContext());
     }
     
     @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 e6822b5866f..a8792831408 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());
+                metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), 
connectionSession.getSessionContext());
     }
     
     /**
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 1aba228c75f..ed74bb2ad3e 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());
+                logicSQL, database, 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps(), 
connectionSession.getSessionContext());
         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