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 b8e05a250bd Refactor passing query context parameters to the merge
engine (#36881)
b8e05a250bd is described below
commit b8e05a250bda86861e428fb230ae38c12229f53b
Author: ZhangCheng <[email protected]>
AuthorDate: Wed Oct 15 09:55:08 2025 +0800
Refactor passing query context parameters to the merge engine (#36881)
* Refactor passing query context parameters to the merge engine
* Refactor passing query context parameters to the merge engine
* Refactor passing query context parameters to the merge engine
* Refactor passing query context parameters to the merge engine
* Refactor passing query context parameters to the merge engine
---
.../merge/dal/EncryptDALResultDecorator.java | 4 +++-
.../merge/dql/EncryptDQLResultDecorator.java | 4 +++-
.../merge/dal/EncryptDALResultDecoratorTest.java | 6 +++---
.../merge/dql/EncryptDQLResultDecoratorTest.java | 3 ++-
.../mask/merge/dql/MaskDQLResultDecorator.java | 4 +++-
.../mask/merge/dql/MaskDQLResultDecoratorTest.java | 3 ++-
.../shardingsphere/infra/merge/MergeEngine.java | 23 ++++++++++++----------
.../merge/engine/decorator/ResultDecorator.java | 4 +++-
.../decorator/impl/TransparentResultDecorator.java | 4 +++-
.../infra/merge/MergeEngineTest.java | 10 +++++-----
.../impl/TransparentResultDecoratorTest.java | 3 ++-
.../fixture/decorator/ResultDecoratorFixture.java | 3 ++-
.../executor/engine/DriverExecuteExecutor.java | 9 ++++-----
.../engine/facade/DriverExecutorFacade.java | 7 +++----
.../jdbc/DriverJDBCPushDownExecuteExecutor.java | 8 +++++---
.../resultset/ShardingSphereResultSetFactory.java | 2 +-
.../statement/ShardingSpherePreparedStatement.java | 8 +++++++-
.../core/statement/ShardingSphereStatement.java | 13 ++++++------
.../driver/jdbc/adapter/StatementAdapterTest.java | 4 ++--
.../implementor/EnumerableScanImplementor.java | 2 +-
.../connector/StandardDatabaseProxyConnector.java | 6 +++---
21 files changed, 77 insertions(+), 53 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
index a93e3f2e213..155ac930f54 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java
@@ -29,6 +29,8 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatemen
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.ColumnInResultSetSQLStatementAttribute;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableInResultSetSQLStatementAttribute;
+import java.util.List;
+
/**
* DAL result decorator for encrypt.
*/
@@ -38,7 +40,7 @@ public final class EncryptDALResultDecorator implements
ResultDecorator<EncryptR
private final RuleMetaData globalRuleMetaData;
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final EncryptRule rule) {
+ public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final List<Object> parameters, final
EncryptRule rule) {
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
if
(sqlStatement.getAttributes().findAttribute(ColumnInResultSetSQLStatementAttribute.class).isPresent())
{
return new EncryptShowColumnsMergedResult(mergedResult,
sqlStatementContext, rule);
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
index 56e46042370..eddd29795f4 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecorator.java
@@ -26,6 +26,8 @@ import
org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import java.util.List;
+
/**
* DQL result decorator for encrypt.
*/
@@ -39,7 +41,7 @@ public final class EncryptDQLResultDecorator implements
ResultDecorator<EncryptR
private final SelectStatementContext selectStatementContext;
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final EncryptRule rule) {
+ public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final List<Object> parameters, final
EncryptRule rule) {
return new EncryptMergedResult(database, metaData,
selectStatementContext, mergedResult);
}
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
index bddbed1055d..e45505e34e2 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java
@@ -61,7 +61,7 @@ class EncryptDALResultDecoratorTest {
void assertMergedResultWithShowColumnsStatement() {
sqlStatementContext =
mockColumnInResultSetSQLStatementAttributeContext();
EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(mock(RuleMetaData.class));
- assertThat(decorator.decorate(mock(MergedResult.class),
sqlStatementContext, rule), isA(EncryptShowColumnsMergedResult.class));
+ assertThat(decorator.decorate(mock(MergedResult.class),
sqlStatementContext, Collections.emptyList(), rule),
isA(EncryptShowColumnsMergedResult.class));
}
@Test
@@ -70,14 +70,14 @@ class EncryptDALResultDecoratorTest {
RuleMetaData ruleMetaData = mock(RuleMetaData.class);
when(ruleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(mock(SQLParserRule.class));
EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(ruleMetaData);
- assertThat(decorator.decorate(mock(MergedResult.class),
sqlStatementContext, rule), isA(EncryptShowCreateTableMergedResult.class));
+ assertThat(decorator.decorate(mock(MergedResult.class),
sqlStatementContext, Collections.emptyList(), rule),
isA(EncryptShowCreateTableMergedResult.class));
}
@Test
void assertMergedResultWithOtherStatement() {
sqlStatementContext = mock(SQLStatementContext.class,
RETURNS_DEEP_STUBS);
EncryptDALResultDecorator decorator = new
EncryptDALResultDecorator(mock(RuleMetaData.class));
- assertThat(decorator.decorate(mock(MergedResult.class),
sqlStatementContext, rule), isA(MergedResult.class));
+ assertThat(decorator.decorate(mock(MergedResult.class),
sqlStatementContext, Collections.emptyList(), rule), isA(MergedResult.class));
}
private SQLStatementContext
mockColumnInResultSetSQLStatementAttributeContext() {
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
index c7a80321d37..55bb454e064 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptDQLResultDecoratorTest.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.junit.jupiter.api.Test;
import java.sql.SQLException;
+import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
@@ -40,7 +41,7 @@ class EncryptDQLResultDecoratorTest {
when(mergedResult.next()).thenReturn(true);
EncryptDQLResultDecorator decorator =
new
EncryptDQLResultDecorator(mock(ShardingSphereDatabase.class),
mock(ShardingSphereMetaData.class), mock(SelectStatementContext.class,
RETURNS_DEEP_STUBS));
- MergedResult actual = decorator.decorate(mergedResult,
mock(SQLStatementContext.class), mock(EncryptRule.class));
+ MergedResult actual = decorator.decorate(mergedResult,
mock(SQLStatementContext.class), Collections.emptyList(),
mock(EncryptRule.class));
assertTrue(actual.next());
}
}
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
index 18c614bbc1b..1b681a9e402 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecorator.java
@@ -26,6 +26,8 @@ import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.mask.rule.MaskRule;
+import java.util.List;
+
/**
* DQL result decorator for mask.
*/
@@ -39,7 +41,7 @@ public final class MaskDQLResultDecorator implements
ResultDecorator<MaskRule> {
private final SelectStatementContext selectStatementContext;
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final MaskRule rule) {
+ public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final List<Object> parameters, final
MaskRule rule) {
return new MaskMergedResult(database, metaData,
selectStatementContext, mergedResult);
}
}
diff --git
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
index f41890abbe7..b4d7a9dbb08 100644
---
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
+++
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskDQLResultDecoratorTest.java
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.mask.rule.MaskRule;
import org.junit.jupiter.api.Test;
import java.sql.SQLException;
+import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
@@ -38,7 +39,7 @@ class MaskDQLResultDecoratorTest {
MergedResult mergedResult = mock(MergedResult.class);
when(mergedResult.next()).thenReturn(true);
MaskDQLResultDecorator decorator = new
MaskDQLResultDecorator(mock(ShardingSphereDatabase.class),
mock(ShardingSphereMetaData.class), mock(SelectStatementContext.class));
- MergedResult actual = decorator.decorate(mergedResult,
mock(SQLStatementContext.class), mock(MaskRule.class));
+ MergedResult actual = decorator.decorate(mergedResult,
mock(SQLStatementContext.class), Collections.emptyList(), mock(MaskRule.class));
assertTrue(actual.next());
}
}
diff --git
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
index bcb1802866e..9a1f8d70258 100644
---
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
+++
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
@@ -33,6 +33,7 @@ import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import java.sql.SQLException;
@@ -70,33 +71,35 @@ public final class MergeEngine {
* Merge.
*
* @param queryResults query results
- * @param sqlStatementContext SQL statement context
+ * @param queryContext SQL statement context
* @return merged result
* @throws SQLException SQL exception
*/
- public MergedResult merge(final List<QueryResult> queryResults, final
SQLStatementContext sqlStatementContext) throws SQLException {
- MergedResult mergedResult = executeMerge(queryResults,
sqlStatementContext).orElseGet(() -> new
TransparentMergedResult(queryResults.get(0)));
- return decorate(mergedResult, sqlStatementContext);
+ public MergedResult merge(final List<QueryResult> queryResults, final
QueryContext queryContext) throws SQLException {
+ MergedResult mergedResult = executeMerge(queryResults,
queryContext).orElseGet(() -> new TransparentMergedResult(queryResults.get(0)));
+ return decorate(mergedResult, queryContext);
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private Optional<MergedResult> executeMerge(final List<QueryResult>
queryResults, final SQLStatementContext sqlStatementContext) throws
SQLException {
+ private Optional<MergedResult> executeMerge(final List<QueryResult>
queryResults, final QueryContext queryContext) throws SQLException {
for (Entry<ShardingSphereRule, ResultProcessEngine> entry :
engines.entrySet()) {
if (entry.getValue() instanceof ResultMergerEngine) {
- ResultMerger resultMerger = ((ResultMergerEngine)
entry.getValue()).newInstance(database.getName(), database.getProtocolType(),
entry.getKey(), props, sqlStatementContext);
- return Optional.of(resultMerger.merge(queryResults,
sqlStatementContext, database, connectionContext));
+ ResultMerger resultMerger =
+ ((ResultMergerEngine)
entry.getValue()).newInstance(database.getName(), database.getProtocolType(),
entry.getKey(), props, queryContext.getSqlStatementContext());
+ return Optional.of(resultMerger.merge(queryResults,
queryContext.getSqlStatementContext(), database, connectionContext));
}
}
return Optional.empty();
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext) throws SQLException {
+ private MergedResult decorate(final MergedResult mergedResult, final
QueryContext queryContext) throws SQLException {
MergedResult result = null;
for (Entry<ShardingSphereRule, ResultProcessEngine> entry :
engines.entrySet()) {
if (entry.getValue() instanceof ResultDecoratorEngine) {
- ResultDecorator resultDecorator =
getResultDecorator(sqlStatementContext, entry.getValue());
- result = null == result ?
resultDecorator.decorate(mergedResult, sqlStatementContext, entry.getKey()) :
resultDecorator.decorate(result, sqlStatementContext, entry.getKey());
+ ResultDecorator resultDecorator =
getResultDecorator(queryContext.getSqlStatementContext(), entry.getValue());
+ result = null == result ?
resultDecorator.decorate(mergedResult, queryContext.getSqlStatementContext(),
queryContext.getParameters(), entry.getKey())
+ : resultDecorator.decorate(result,
queryContext.getSqlStatementContext(), queryContext.getParameters(),
entry.getKey());
}
}
return null == result ? mergedResult : result;
diff --git
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
index 93d6e4f8560..03f35c48c22 100644
---
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
+++
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecorator.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import java.sql.SQLException;
+import java.util.List;
/**
* Result decorator.
@@ -35,9 +36,10 @@ public interface ResultDecorator<T extends
ShardingSphereRule> {
*
* @param mergedResult merged result
* @param sqlStatementContext SQL statement context
+ * @param parameters parameters
* @param rule ShardingSphere rule
* @return merged result
* @throws SQLException SQL exception
*/
- MergedResult decorate(MergedResult mergedResult, SQLStatementContext
sqlStatementContext, T rule) throws SQLException;
+ MergedResult decorate(MergedResult mergedResult, SQLStatementContext
sqlStatementContext, List<Object> parameters, T rule) throws SQLException;
}
diff --git
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
index 726619bce11..78f46ac92e5 100644
---
a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
+++
b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecorator.java
@@ -22,13 +22,15 @@ import
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import java.util.List;
+
/**
* Transparent result decorator.
*/
public final class TransparentResultDecorator implements
ResultDecorator<ShardingSphereRule> {
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final ShardingSphereRule rule) {
+ public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final List<Object> parameters, final
ShardingSphereRule rule) {
return mergedResult;
}
}
diff --git
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
index 74a14cfd73a..428b6647fbc 100644
---
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
+++
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/MergeEngineTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.merge;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.merge.fixture.rule.DecoratorRuleFixture;
@@ -26,6 +25,7 @@ import
org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.test.infra.fixture.rule.MockedRule;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -62,7 +62,7 @@ class MergeEngineTest {
MergedResult actual =
new MergeEngine(mock(ShardingSphereMetaData.class), database,
new ConfigurationProperties(new Properties()),
mock(ConnectionContext.class)).merge(
Collections.singletonList(queryResult),
- mock(SQLStatementContext.class));
+ mock(QueryContext.class));
assertThat(actual.getValue(1, String.class), is("test"));
}
@@ -72,7 +72,7 @@ class MergeEngineTest {
MergedResult actual =
new MergeEngine(mock(ShardingSphereMetaData.class), database,
new ConfigurationProperties(new Properties()),
mock(ConnectionContext.class)).merge(
Collections.singletonList(queryResult),
- mock(SQLStatementContext.class));
+ mock(QueryContext.class));
assertThat(actual.getValue(1, String.class), is("merged_value"));
}
@@ -80,7 +80,7 @@ class MergeEngineTest {
void assertMergeWithDecoratorRuleOnly() throws SQLException {
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new
DecoratorRuleFixture()));
MergedResult actual = new
MergeEngine(mock(ShardingSphereMetaData.class), database, new
ConfigurationProperties(new Properties()), mock(ConnectionContext.class))
- .merge(Collections.singletonList(queryResult),
mock(SQLStatementContext.class));
+ .merge(Collections.singletonList(queryResult),
mock(QueryContext.class));
assertThat(actual.getValue(1, String.class),
is("decorated_merged_value"));
}
@@ -90,7 +90,7 @@ class MergeEngineTest {
MergedResult actual =
new MergeEngine(mock(ShardingSphereMetaData.class), database,
new ConfigurationProperties(new Properties()),
mock(ConnectionContext.class)).merge(
Collections.singletonList(queryResult),
- mock(SQLStatementContext.class));
+ mock(QueryContext.class));
assertThat(actual.getValue(1, String.class),
is("decorated_merged_value"));
}
}
diff --git
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
index cf71f6b7561..861846c8e78 100644
---
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
+++
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/engine/decorator/impl/TransparentResultDecoratorTest.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.junit.jupiter.api.Test;
import java.sql.SQLException;
+import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
@@ -35,6 +36,6 @@ class TransparentResultDecoratorTest {
MergedResult mergedResult = mock(MergedResult.class);
when(mergedResult.next()).thenReturn(true);
TransparentResultDecorator decorator = new
TransparentResultDecorator();
- assertTrue(decorator.decorate(mergedResult,
mock(SQLStatementContext.class), mock(ShardingSphereRule.class)).next());
+ assertTrue(decorator.decorate(mergedResult,
mock(SQLStatementContext.class), Collections.emptyList(),
mock(ShardingSphereRule.class)).next());
}
}
diff --git
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
index a6baa83d512..b1fc0c5a34c 100644
---
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
+++
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorFixture.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.merge.result.impl.transparent.Transparent
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.List;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -33,7 +34,7 @@ import static org.mockito.Mockito.when;
public final class ResultDecoratorFixture implements
ResultDecorator<DecoratorRuleFixture> {
@Override
- public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final DecoratorRuleFixture rule)
throws SQLException {
+ public MergedResult decorate(final MergedResult mergedResult, final
SQLStatementContext sqlStatementContext, final List<Object> parameters, final
DecoratorRuleFixture rule) throws SQLException {
ResultSet resultSet = mock(ResultSet.class);
when(resultSet.getString(1)).thenReturn("decorated_merged_value");
return new TransparentMergedResult(new
JDBCStreamQueryResult(resultSet));
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/DriverExecuteExecutor.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/DriverExecuteExecutor.java
index 1738872ace4..a93bc6be652 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/DriverExecuteExecutor.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/DriverExecuteExecutor.java
@@ -26,7 +26,6 @@ import
org.apache.shardingsphere.driver.executor.engine.pushdown.jdbc.DriverJDBC
import
org.apache.shardingsphere.driver.executor.engine.pushdown.raw.DriverRawPushDownExecuteExecutor;
import
org.apache.shardingsphere.driver.executor.engine.transaction.DriverTransactionSQLStatementExecutor;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
@@ -39,8 +38,8 @@ import
org.apache.shardingsphere.infra.rule.attribute.raw.RawExecutionRuleAttrib
import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.mode.metadata.refresher.federation.FederationMetaDataRefreshEngine;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.tcl.TCLStatement;
-import org.apache.shardingsphere.sqlfederation.engine.SQLFederationEngine;
import org.apache.shardingsphere.sqlfederation.context.SQLFederationContext;
+import org.apache.shardingsphere.sqlfederation.engine.SQLFederationEngine;
import java.sql.Connection;
import java.sql.ResultSet;
@@ -129,13 +128,13 @@ public final class DriverExecuteExecutor {
* Get result set.
*
* @param database database
- * @param sqlStatementContext SQL statement context
+ * @param queryContext query context
* @param statement statement
* @param statements statements
* @return result set
* @throws SQLException SQL exception
*/
- public Optional<ResultSet> getResultSet(final ShardingSphereDatabase
database, final SQLStatementContext sqlStatementContext,
+ public Optional<ResultSet> getResultSet(final ShardingSphereDatabase
database, final QueryContext queryContext,
final Statement statement, final
List<? extends Statement> statements) throws SQLException {
if (null == executeType) {
return Optional.empty();
@@ -144,7 +143,7 @@ public final class DriverExecuteExecutor {
case FEDERATION:
return Optional.of(sqlFederationEngine.getResultSet());
case JDBC_PUSH_DOWN:
- return jdbcPushDownExecutor.getResultSet(database,
sqlStatementContext, statement, statements);
+ return jdbcPushDownExecutor.getResultSet(database,
queryContext, statement, statements);
default:
return Optional.empty();
}
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/facade/DriverExecutorFacade.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/facade/DriverExecutorFacade.java
index 8fe2fd67450..a69e742126e 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/facade/DriverExecutorFacade.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/facade/DriverExecutorFacade.java
@@ -28,7 +28,6 @@ import
org.apache.shardingsphere.driver.executor.engine.DriverExecuteUpdateExecu
import
org.apache.shardingsphere.driver.executor.engine.transaction.DriverTransactionSQLStatementExecutor;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
import org.apache.shardingsphere.driver.jdbc.core.statement.StatementManager;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.executor.audit.SQLAuditEngine;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
@@ -158,15 +157,15 @@ public final class DriverExecutorFacade implements
AutoCloseable {
* Get result set.
*
* @param database database
- * @param sqlStatementContext SQL statement context
+ * @param queryContext query context
* @param statement statement
* @param statements statements
* @return result set
* @throws SQLException SQL exception
*/
public Optional<ResultSet> getResultSet(final ShardingSphereDatabase
database,
- final SQLStatementContext
sqlStatementContext, final Statement statement, final List<? extends Statement>
statements) throws SQLException {
- return executeExecutor.getResultSet(database, sqlStatementContext,
statement, statements);
+ final QueryContext queryContext,
final Statement statement, final List<? extends Statement> statements) throws
SQLException {
+ return executeExecutor.getResultSet(database, queryContext, statement,
statements);
}
@Override
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java
index f265d796e51..de1169d1088 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java
@@ -44,6 +44,7 @@ import org.apache.shardingsphere.infra.merge.MergeEngine;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.mode.metadata.refresher.pushdown.PushDownMetaDataRefreshEngine;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.DALStatement;
@@ -141,14 +142,15 @@ public final class DriverJDBCPushDownExecuteExecutor {
* Get result set.
*
* @param database database
- * @param sqlStatementContext SQL statement context
+ * @param queryContext query context
* @param statement statement
* @param statements statements
* @return result set
* @throws SQLException SQL exception
*/
- public Optional<ResultSet> getResultSet(final ShardingSphereDatabase
database, final SQLStatementContext sqlStatementContext,
+ public Optional<ResultSet> getResultSet(final ShardingSphereDatabase
database, final QueryContext queryContext,
final Statement statement, final
List<? extends Statement> statements) throws SQLException {
+ SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
if (sqlStatementContext instanceof SelectStatementContext ||
sqlStatementContext.getSqlStatement() instanceof DALStatement) {
List<ResultSet> resultSets = getResultSets(statements);
if (resultSets.isEmpty()) {
@@ -156,7 +158,7 @@ public final class DriverJDBCPushDownExecuteExecutor {
}
List<QueryResult> queryResults = getQueryResults(resultSets);
MergedResult mergedResult = new MergeEngine(metaData, database,
metaData.getProps(),
connection.getDatabaseConnectionManager().getConnectionContext())
- .merge(queryResults, sqlStatementContext);
+ .merge(queryResults, queryContext);
return Optional.of(new ShardingSphereResultSet(resultSets,
mergedResult, statement, sqlStatementContext));
}
return Optional.empty();
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetFactory.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetFactory.java
index d0203277b9b..cbc9a42e7b3 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetFactory.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetFactory.java
@@ -66,7 +66,7 @@ public final class ShardingSphereResultSetFactory {
public ResultSet newInstance(final ShardingSphereDatabase database, final
QueryContext queryContext, final List<QueryResult> queryResults,
final Statement statement, final Map<String,
Integer> columnLabelAndIndexMap) throws SQLException {
List<ResultSet> resultSets = getResultSets(queryResults);
- MergedResult mergedResult = new MergeEngine(metaData, database, props,
connectionContext).merge(queryResults, queryContext.getSqlStatementContext());
+ MergedResult mergedResult = new MergeEngine(metaData, database, props,
connectionContext).merge(queryResults, queryContext);
return new ShardingSphereResultSet(resultSets, mergedResult,
statement, queryContext.getSqlStatementContext(),
null == columnLabelAndIndexMap
?
ShardingSphereResultSetUtils.createColumnLabelAndIndexMap(queryContext.getSqlStatementContext(),
resultSets.get(0).getMetaData())
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index a60a2f44c0d..bbe803b4f99 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -110,6 +110,8 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
private ResultSet currentBatchGeneratedKeysResultSet;
+ private QueryContext queryContext;
+
public ShardingSpherePreparedStatement(final ShardingSphereConnection
connection, final String sql) throws SQLException {
this(connection, sql, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT, false, null);
}
@@ -167,6 +169,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
}
clearPrevious();
QueryContext queryContext = createQueryContext();
+ this.queryContext = queryContext;
handleAutoCommitBeforeExecution(queryContext.getSqlStatementContext().getSqlStatement(),
connection);
findGeneratedKey().ifPresent(optional ->
generatedValues.addAll(optional.getGeneratedValues()));
currentResultSet =
@@ -204,6 +207,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
}
clearPrevious();
QueryContext queryContext = createQueryContext();
+ this.queryContext = queryContext;
handleAutoCommitBeforeExecution(queryContext.getSqlStatementContext().getSqlStatement(),
connection);
int result = driverExecutorFacade.executeUpdate(usedDatabase,
metaData, queryContext,
(sql, statement) -> ((PreparedStatement)
statement).executeUpdate(), (StatementAddCallback<PreparedStatement>)
this::addStatements, this::replay);
@@ -228,6 +232,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
}
clearPrevious();
QueryContext queryContext = createQueryContext();
+ this.queryContext = queryContext;
handleAutoCommitBeforeExecution(queryContext.getSqlStatementContext().getSqlStatement(),
connection);
boolean result = driverExecutorFacade.execute(usedDatabase,
metaData, queryContext, (sql, statement) -> ((PreparedStatement)
statement).execute(),
(StatementAddCallback<PreparedStatement>)
this::addStatements, this::replay);
@@ -248,7 +253,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
if (null != currentResultSet) {
return currentResultSet;
}
- driverExecutorFacade.getResultSet(usedDatabase, sqlStatementContext,
this, statements).ifPresent(optional -> currentResultSet = optional);
+ driverExecutorFacade.getResultSet(usedDatabase, queryContext, this,
statements).ifPresent(optional -> currentResultSet = optional);
if (null == columnLabelAndIndexMap && currentResultSet instanceof
ShardingSphereResultSet) {
columnLabelAndIndexMap = ((ShardingSphereResultSet)
currentResultSet).getColumnLabelAndIndexMap();
}
@@ -315,6 +320,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
public void addBatch() {
currentResultSet = null;
QueryContext queryContext = createQueryContext();
+ this.queryContext = queryContext;
executeBatchExecutor.addBatch(queryContext, usedDatabase);
findGeneratedKey().ifPresent(optional ->
generatedValues.addAll(optional.getGeneratedValues()));
clearParameters();
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index e18139b6938..e9a96a18a15 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -82,7 +82,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private String usedDatabaseName;
- private SQLStatementContext sqlStatementContext;
+ private QueryContext queryContext;
private boolean returnGeneratedKeys;
@@ -263,9 +263,9 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private void prepareExecute(final QueryContext queryContext) throws
SQLException {
handleAutoCommitBeforeExecution(queryContext.getSqlStatementContext().getSqlStatement(),
connection);
- sqlStatementContext = queryContext.getSqlStatementContext();
- ShardingSpherePreconditions.checkNotNull(sqlStatementContext, () ->
new IllegalStateException("Statement context can not be null"));
- usedDatabaseName =
sqlStatementContext.getTablesContext().getDatabaseName().orElse(connection.getCurrentDatabaseName());
+ this.queryContext = queryContext;
+ ShardingSpherePreconditions.checkNotNull(this.queryContext, () -> new
IllegalStateException("Query context can not be null"));
+ usedDatabaseName =
queryContext.getSqlStatementContext().getTablesContext().getDatabaseName().orElse(connection.getCurrentDatabaseName());
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabaseName(connection.getCurrentDatabaseName());
clearStatements();
}
@@ -303,7 +303,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
if (null != currentResultSet) {
return currentResultSet;
}
-
driverExecutorFacade.getResultSet(metaData.getDatabase(usedDatabaseName),
sqlStatementContext, this, statements).ifPresent(optional -> currentResultSet =
optional);
+
driverExecutorFacade.getResultSet(metaData.getDatabase(usedDatabaseName),
queryContext, this, statements).ifPresent(optional -> currentResultSet =
optional);
return currentResultSet;
}
@@ -327,7 +327,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
@Override
public boolean isAccumulate() {
for (DataNodeRuleAttribute each :
metaData.getDatabase(usedDatabaseName).getRuleMetaData().getAttributes(DataNodeRuleAttribute.class))
{
- if
(each.isNeedAccumulate(sqlStatementContext.getTablesContext().getTableNames()))
{
+ if
(each.isNeedAccumulate(queryContext.getSqlStatementContext().getTablesContext().getTableNames()))
{
return true;
}
}
@@ -357,6 +357,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
}
private Optional<GeneratedKeyContext> findGeneratedKey() {
+ SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
return sqlStatementContext instanceof InsertStatementContext ?
((InsertStatementContext) sqlStatementContext).getGeneratedKeyContext() :
Optional.empty();
}
diff --git
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
index 5c97c81e41c..63c16c80780 100644
---
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
+++
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
@@ -21,10 +21,10 @@ import lombok.SneakyThrows;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
import
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.infra.rule.attribute.datanode.DataNodeRuleAttribute;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
@@ -267,6 +267,6 @@ class StatementAdapterTest {
@SneakyThrows(ReflectiveOperationException.class)
private void setExecutionContext(final ShardingSphereStatement statement) {
-
Plugins.getMemberAccessor().set(ShardingSphereStatement.class.getDeclaredField("sqlStatementContext"),
statement, mock(SQLStatementContext.class));
+
Plugins.getMemberAccessor().set(ShardingSphereStatement.class.getDeclaredField("queryContext"),
statement, mock(QueryContext.class));
}
}
diff --git
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementor.java
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementor.java
index f854b5b8ba8..095ecad083f 100644
---
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementor.java
+++
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/implementor/EnumerableScanImplementor.java
@@ -123,7 +123,7 @@ public final class EnumerableScanImplementor implements
ScanImplementor {
List<QueryResult> queryResults =
executorContext.getJdbcExecutor().execute(executionGroupContext,
executorContext.getCallback()).stream().map(QueryResult.class::cast).collect(Collectors.toList());
MergeEngine mergeEngine = new
MergeEngine(queryContext.getMetaData(), database,
queryContext.getMetaData().getProps(), queryContext.getConnectionContext());
- MergedResult mergedResult = mergeEngine.merge(queryResults,
queryContext.getSqlStatementContext());
+ MergedResult mergedResult = mergeEngine.merge(queryResults,
queryContext);
Collection<Statement> statements =
getStatements(executionGroupContext.getInputGroups());
return new JDBCDataRowEnumerator(mergedResult,
queryResults.get(0).getMetaData(), statements);
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
index 6f9d898d5e9..e1d7575157c 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
@@ -292,7 +292,7 @@ public final class StandardDatabaseProxyConnector
implements DatabaseProxyConnec
private QueryResponseHeader processExecuteQuery(final SQLStatementContext
sqlStatementContext, final List<QueryResult> queryResults, final QueryResult
queryResultSample) throws SQLException {
queryHeaders = createQueryHeaders(sqlStatementContext,
queryResultSample);
- mergedResult = mergeQuery(sqlStatementContext, queryResults);
+ mergedResult = mergeQuery(queryResults);
return new QueryResponseHeader(queryHeaders);
}
@@ -319,10 +319,10 @@ public final class StandardDatabaseProxyConnector
implements DatabaseProxyConnec
:
queryHeaderBuilderEngine.build(queryResultSample.getMetaData(), database,
columnIndex);
}
- private MergedResult mergeQuery(final SQLStatementContext
sqlStatementContext, final List<QueryResult> queryResults) throws SQLException {
+ private MergedResult mergeQuery(final List<QueryResult> queryResults)
throws SQLException {
MergeEngine mergeEngine = new
MergeEngine(contextManager.getMetaDataContexts().getMetaData(),
database,
contextManager.getMetaDataContexts().getMetaData().getProps(),
databaseConnectionManager.getConnectionSession().getConnectionContext());
- return mergeEngine.merge(queryResults, sqlStatementContext);
+ return mergeEngine.merge(queryResults, queryContext);
}
private UpdateResponseHeader processExecuteUpdate(final
Collection<UpdateResult> updateResults) {