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();