You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ch...@apache.org on 2024/10/31 07:51:42 UTC
(shardingsphere) branch master updated: Minor refactor for encrypt merge decorate logic (#33479)
This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 05d9b258a6b Minor refactor for encrypt merge decorate logic (#33479)
05d9b258a6b is described below
commit 05d9b258a6baf96b8ec24f9963f923ba9b84c9d1
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Thu Oct 31 15:51:24 2024 +0800
Minor refactor for encrypt merge decorate logic (#33479)
---
.../encrypt/merge/EncryptResultDecoratorEngine.java | 8 ++++----
.../encrypt/merge/dql/EncryptDQLResultDecorator.java | 7 ++++---
.../encrypt/merge/dql/EncryptMergedResult.java | 7 ++++++-
.../projection/EncryptProjectionTokenGenerator.java | 3 +--
.../EncryptSelectProjectionSupportedCheckerTest.java | 13 +++++--------
.../encrypt/merge/EncryptResultDecoratorEngineTest.java | 8 ++++----
.../encrypt/merge/dql/EncryptDQLResultDecoratorTest.java | 5 +++--
.../encrypt/merge/dql/EncryptMergedResultTest.java | 14 +++++++-------
.../mask/merge/MaskResultDecoratorEngine.java | 4 ++--
.../mask/merge/MaskResultDecoratorEngineTest.java | 6 +++---
.../select/projection/engine/ProjectionEngine.java | 3 +--
.../segment/select/projection/impl/ColumnProjection.java | 14 +++++++-------
.../select/projection/impl/ColumnProjectionTest.java | 9 +++++----
.../apache/shardingsphere/infra/merge/MergeEngine.java | 10 +++++-----
.../merge/engine/decorator/ResultDecoratorEngine.java | 6 +++---
.../shardingsphere/infra/merge/MergeEngineTest.java | 16 ++++++++++------
.../fixture/decorator/ResultDecoratorEngineFixture.java | 4 ++--
.../pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java | 2 +-
.../jdbc/DriverJDBCPushDownExecuteQueryExecutor.java | 9 ++++-----
.../raw/DriverRawPushDownExecuteQueryExecutor.java | 9 ++++-----
.../core/resultset/ShardingSphereResultSetFactory.java | 6 +++---
.../executor/enumerable/EnumerableScanExecutor.java | 2 +-
.../proxy/backend/connector/DatabaseConnector.java | 2 +-
23 files changed, 86 insertions(+), 81 deletions(-)
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
index dd36e718dc1..9dd12b54067 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
@@ -26,8 +26,8 @@ import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecoratorEngine;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
import java.util.Optional;
@@ -38,13 +38,13 @@ import java.util.Optional;
public final class EncryptResultDecoratorEngine implements ResultDecoratorEngine<EncryptRule> {
@Override
- public Optional<ResultDecorator<EncryptRule>> newInstance(final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database,
+ public Optional<ResultDecorator<EncryptRule>> newInstance(final ShardingSphereMetaData metaData, final ShardingSphereDatabase database,
final EncryptRule encryptRule, final ConfigurationProperties props, final SQLStatementContext sqlStatementContext) {
if (sqlStatementContext instanceof SelectStatementContext) {
- return Optional.of(new EncryptDQLResultDecorator(database, encryptRule, (SelectStatementContext) sqlStatementContext));
+ return Optional.of(new EncryptDQLResultDecorator(database, metaData, (SelectStatementContext) sqlStatementContext));
}
if (sqlStatementContext.getSqlStatement() instanceof DALStatement) {
- return Optional.of(new EncryptDALResultDecorator(globalRuleMetaData));
+ return Optional.of(new EncryptDALResultDecorator(metaData.getGlobalRuleMetaData()));
}
return Optional.empty();
}
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 07b4535d18c..679e46bf8ce 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
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryRe
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
/**
@@ -35,17 +36,17 @@ public final class EncryptDQLResultDecorator implements ResultDecorator<EncryptR
private final ShardingSphereDatabase database;
- private final EncryptRule encryptRule;
+ private final ShardingSphereMetaData metaData;
private final SelectStatementContext selectStatementContext;
@Override
public MergedResult decorate(final QueryResult queryResult, final SQLStatementContext sqlStatementContext, final EncryptRule rule) {
- return new EncryptMergedResult(database, encryptRule, selectStatementContext, new TransparentMergedResult(queryResult));
+ return new EncryptMergedResult(database, metaData, selectStatementContext, new TransparentMergedResult(queryResult));
}
@Override
public MergedResult decorate(final MergedResult mergedResult, final SQLStatementContext sqlStatementContext, final EncryptRule rule) {
- return new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult);
+ return new EncryptMergedResult(database, metaData, selectStatementContext, mergedResult);
}
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
index a7b7141385e..4eafb680c7a 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.exception.core.external.sql.identifier.SQLExceptionIdentifier;
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.io.InputStream;
@@ -42,7 +43,7 @@ public final class EncryptMergedResult implements MergedResult {
private final ShardingSphereDatabase database;
- private final EncryptRule encryptRule;
+ private final ShardingSphereMetaData metaData;
private final SelectStatementContext selectStatementContext;
@@ -61,6 +62,10 @@ public final class EncryptMergedResult implements MergedResult {
}
String originalTableName = columnProjection.get().getOriginalTable().getValue();
String originalColumnName = columnProjection.get().getOriginalColumn().getValue();
+ ShardingSphereDatabase database = metaData.containsDatabase(columnProjection.get().getColumnBoundInfo().getOriginalDatabase().getValue())
+ ? metaData.getDatabase(columnProjection.get().getColumnBoundInfo().getOriginalDatabase().getValue())
+ : this.database;
+ EncryptRule encryptRule = database.getRuleMetaData().getSingleRule(EncryptRule.class);
if (!encryptRule.findEncryptTable(originalTableName).map(optional -> optional.isEncryptColumn(originalColumnName)).orElse(false)) {
return mergedResult.getValue(columnIndex, type);
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
index 2949565bcaf..bb001274e5e 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
@@ -144,8 +144,7 @@ public final class EncryptProjectionTokenGenerator {
IdentifierValue owner = segment.getColumn().getOwner().map(OwnerSegment::getIdentifier).orElse(null);
ColumnProjection result = new ColumnProjection(owner, segment.getColumn().getIdentifier(), segment.getAliasName().isPresent() ? segment.getAlias().orElse(null) : null, databaseType,
segment.getColumn().getLeftParentheses().orElse(null), segment.getColumn().getRightParentheses().orElse(null));
- result.setOriginalColumn(segment.getColumn().getColumnBoundInfo().getOriginalColumn());
- result.setOriginalTable(segment.getColumn().getColumnBoundInfo().getOriginalTable());
+ result.setColumnBoundInfo(segment.getColumn().getColumnBoundInfo());
return result;
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedCheckerTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedCheckerTest.java
index 96b52ee0bb1..af8131f0eb8 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedCheckerTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedCheckerTest.java
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.combine.CombineSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ShorthandProjectionSegment;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
@@ -58,19 +59,15 @@ class EncryptSelectProjectionSupportedCheckerTest {
CombineSegment combineSegment = mock(CombineSegment.class, RETURNS_DEEP_STUBS);
when(sqlStatementContext.getSqlStatement().getCombine().get()).thenReturn(combineSegment);
ColumnProjection orderIdColumn = new ColumnProjection("o", "order_id", null, new MySQLDatabaseType());
- orderIdColumn.setOriginalTable(new IdentifierValue("t_order"));
- orderIdColumn.setOriginalColumn(new IdentifierValue("order_id"));
+ orderIdColumn.setColumnBoundInfo(new ColumnSegmentBoundInfo(new IdentifierValue(""), new IdentifierValue(""), new IdentifierValue("t_order"), new IdentifierValue("order_id")));
ColumnProjection userIdColumn = new ColumnProjection("o", "user_id", null, new MySQLDatabaseType());
- userIdColumn.setOriginalTable(new IdentifierValue("t_order"));
- userIdColumn.setOriginalColumn(new IdentifierValue("user_id"));
+ userIdColumn.setColumnBoundInfo(new ColumnSegmentBoundInfo(new IdentifierValue(""), new IdentifierValue(""), new IdentifierValue("t_order"), new IdentifierValue("user_id")));
SelectStatementContext leftSelectStatementContext = mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
when(leftSelectStatementContext.getProjectionsContext().getExpandProjections()).thenReturn(Arrays.asList(orderIdColumn, userIdColumn));
ColumnProjection merchantIdColumn = new ColumnProjection("m", "merchant_id", null, new MySQLDatabaseType());
- merchantIdColumn.setOriginalTable(new IdentifierValue("t_merchant"));
- merchantIdColumn.setOriginalColumn(new IdentifierValue("merchant_id"));
+ merchantIdColumn.setColumnBoundInfo(new ColumnSegmentBoundInfo(new IdentifierValue(""), new IdentifierValue(""), new IdentifierValue("t_merchant"), new IdentifierValue("merchant_id")));
ColumnProjection merchantNameColumn = new ColumnProjection("m", "merchant_name", null, new MySQLDatabaseType());
- merchantNameColumn.setOriginalTable(new IdentifierValue("t_merchant"));
- merchantNameColumn.setOriginalColumn(new IdentifierValue("merchant_name"));
+ merchantNameColumn.setColumnBoundInfo(new ColumnSegmentBoundInfo(new IdentifierValue(""), new IdentifierValue(""), new IdentifierValue("t_merchant"), new IdentifierValue("merchant_name")));
SelectStatementContext rightSelectStatementContext = mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
when(rightSelectStatementContext.getProjectionsContext().getExpandProjections()).thenReturn(Arrays.asList(merchantIdColumn, merchantNameColumn));
Map<Integer, SelectStatementContext> subqueryContexts = new LinkedHashMap<>(2, 1F);
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
index ac3cf265b97..9254e1dd623 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
@@ -27,8 +27,8 @@ import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngine;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLExplainStatement;
import org.junit.jupiter.api.Test;
@@ -60,7 +60,7 @@ class EncryptResultDecoratorEngineTest {
void assertNewInstanceWithSelectStatement() {
EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine) OrderedSPILoader.getServices(ResultProcessEngine.class, Collections.singleton(rule)).get(rule);
Optional<ResultDecorator<EncryptRule>> actual =
- engine.newInstance(mock(RuleMetaData.class), database, rule, mock(ConfigurationProperties.class), mock(SelectStatementContext.class, RETURNS_DEEP_STUBS));
+ engine.newInstance(mock(ShardingSphereMetaData.class), database, rule, mock(ConfigurationProperties.class), mock(SelectStatementContext.class, RETURNS_DEEP_STUBS));
assertTrue(actual.isPresent());
assertThat(actual.get(), instanceOf(EncryptDQLResultDecorator.class));
}
@@ -70,7 +70,7 @@ class EncryptResultDecoratorEngineTest {
SQLStatementContext sqlStatementContext = mock(ExplainStatementContext.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(MySQLExplainStatement.class));
EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine) OrderedSPILoader.getServices(ResultProcessEngine.class, Collections.singleton(rule)).get(rule);
- Optional<ResultDecorator<EncryptRule>> actual = engine.newInstance(mock(RuleMetaData.class), database, rule, mock(ConfigurationProperties.class), sqlStatementContext);
+ Optional<ResultDecorator<EncryptRule>> actual = engine.newInstance(mock(ShardingSphereMetaData.class), database, rule, mock(ConfigurationProperties.class), sqlStatementContext);
assertTrue(actual.isPresent());
assertThat(actual.get(), instanceOf(EncryptDALResultDecorator.class));
}
@@ -78,6 +78,6 @@ class EncryptResultDecoratorEngineTest {
@Test
void assertNewInstanceWithOtherStatement() {
EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine) OrderedSPILoader.getServices(ResultProcessEngine.class, Collections.singleton(rule)).get(rule);
- assertFalse(engine.newInstance(mock(RuleMetaData.class), database, rule, mock(ConfigurationProperties.class), mock(InsertStatementContext.class)).isPresent());
+ assertFalse(engine.newInstance(mock(ShardingSphereMetaData.class), database, rule, mock(ConfigurationProperties.class), mock(InsertStatementContext.class)).isPresent());
}
}
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 f9c1709a055..0b73a14bd52 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
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
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.junit.jupiter.api.Test;
@@ -37,7 +38,7 @@ class EncryptDQLResultDecoratorTest {
void assertDecorateQueryResult() throws SQLException {
QueryResult queryResult = mock(QueryResult.class);
when(queryResult.next()).thenReturn(true);
- EncryptDQLResultDecorator decorator = new EncryptDQLResultDecorator(mock(ShardingSphereDatabase.class), mock(EncryptRule.class), mock(SelectStatementContext.class));
+ EncryptDQLResultDecorator decorator = new EncryptDQLResultDecorator(mock(ShardingSphereDatabase.class), mock(ShardingSphereMetaData.class), mock(SelectStatementContext.class));
MergedResult actual = decorator.decorate(queryResult, mock(SQLStatementContext.class), mock(EncryptRule.class));
assertTrue(actual.next());
}
@@ -46,7 +47,7 @@ class EncryptDQLResultDecoratorTest {
void assertDecorateMergedResult() throws SQLException {
MergedResult mergedResult = mock(MergedResult.class);
when(mergedResult.next()).thenReturn(true);
- EncryptDQLResultDecorator decorator = new EncryptDQLResultDecorator(mock(ShardingSphereDatabase.class), mock(EncryptRule.class), mock(SelectStatementContext.class));
+ EncryptDQLResultDecorator decorator = new EncryptDQLResultDecorator(mock(ShardingSphereDatabase.class), mock(ShardingSphereMetaData.class), mock(SelectStatementContext.class));
MergedResult actual = decorator.decorate(mergedResult, mock(SQLStatementContext.class), mock(EncryptRule.class));
assertTrue(actual.next());
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
index 76e9ae65702..13f0082f2df 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
@@ -17,9 +17,9 @@
package org.apache.shardingsphere.encrypt.merge.dql;
-import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
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.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -45,7 +45,7 @@ class EncryptMergedResultTest {
private ShardingSphereDatabase database;
@Mock
- private EncryptRule encryptRule;
+ private ShardingSphereMetaData metaData;
@Mock
private SelectStatementContext selectStatementContext;
@@ -55,32 +55,32 @@ class EncryptMergedResultTest {
@Test
void assertNext() throws SQLException {
- assertFalse(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).next());
+ assertFalse(new EncryptMergedResult(database, metaData, selectStatementContext, mergedResult).next());
}
@Test
void assertGetCalendarValue() throws SQLException {
Calendar calendar = Calendar.getInstance();
when(mergedResult.getCalendarValue(1, Date.class, calendar)).thenReturn(new Date(0L));
- assertThat(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).getCalendarValue(1, Date.class, calendar), is(new Date(0L)));
+ assertThat(new EncryptMergedResult(database, metaData, selectStatementContext, mergedResult).getCalendarValue(1, Date.class, calendar), is(new Date(0L)));
}
@Test
void assertGetInputStream() throws SQLException {
InputStream inputStream = mock(InputStream.class);
when(mergedResult.getInputStream(1, "asc")).thenReturn(inputStream);
- assertThat(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).getInputStream(1, "asc"), is(inputStream));
+ assertThat(new EncryptMergedResult(database, metaData, selectStatementContext, mergedResult).getInputStream(1, "asc"), is(inputStream));
}
@Test
void assertGetCharacterStream() throws SQLException {
Reader reader = mock(Reader.class);
when(mergedResult.getCharacterStream(1)).thenReturn(reader);
- assertThat(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).getCharacterStream(1), is(reader));
+ assertThat(new EncryptMergedResult(database, metaData, selectStatementContext, mergedResult).getCharacterStream(1), is(reader));
}
@Test
void assertWasNull() throws SQLException {
- assertFalse(new EncryptMergedResult(database, encryptRule, selectStatementContext, mergedResult).wasNull());
+ assertFalse(new EncryptMergedResult(database, metaData, selectStatementContext, mergedResult).wasNull());
}
}
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
index 01d8e896e20..12f2dadbde7 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
@@ -22,8 +22,8 @@ import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecoratorEngine;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.mask.constant.MaskOrder;
import org.apache.shardingsphere.mask.merge.dql.MaskDQLResultDecorator;
import org.apache.shardingsphere.mask.rule.MaskRule;
@@ -36,7 +36,7 @@ import java.util.Optional;
public final class MaskResultDecoratorEngine implements ResultDecoratorEngine<MaskRule> {
@Override
- public Optional<ResultDecorator<MaskRule>> newInstance(final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database,
+ public Optional<ResultDecorator<MaskRule>> newInstance(final ShardingSphereMetaData metaData, final ShardingSphereDatabase database,
final MaskRule maskRule, final ConfigurationProperties props, final SQLStatementContext sqlStatementContext) {
return sqlStatementContext instanceof SelectStatementContext ? Optional.of(new MaskDQLResultDecorator(maskRule, (SelectStatementContext) sqlStatementContext)) : Optional.empty();
}
diff --git a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngineTest.java b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngineTest.java
index c7db8e81096..cac3b85b121 100644
--- a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngineTest.java
+++ b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngineTest.java
@@ -22,8 +22,8 @@ import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngine;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import org.apache.shardingsphere.mask.merge.dql.MaskDQLResultDecorator;
import org.apache.shardingsphere.mask.rule.MaskRule;
@@ -55,7 +55,7 @@ class MaskResultDecoratorEngineTest {
void assertNewInstanceWithSelectStatement() {
MaskResultDecoratorEngine engine = (MaskResultDecoratorEngine) OrderedSPILoader.getServices(ResultProcessEngine.class, Collections.singleton(rule)).get(rule);
Optional<ResultDecorator<MaskRule>> actual =
- engine.newInstance(mock(RuleMetaData.class), database, rule, mock(ConfigurationProperties.class), mock(SelectStatementContext.class, RETURNS_DEEP_STUBS));
+ engine.newInstance(mock(ShardingSphereMetaData.class), database, rule, mock(ConfigurationProperties.class), mock(SelectStatementContext.class, RETURNS_DEEP_STUBS));
assertTrue(actual.isPresent());
assertThat(actual.get(), instanceOf(MaskDQLResultDecorator.class));
}
@@ -63,6 +63,6 @@ class MaskResultDecoratorEngineTest {
@Test
void assertNewInstanceWithOtherStatement() {
MaskResultDecoratorEngine engine = (MaskResultDecoratorEngine) OrderedSPILoader.getServices(ResultProcessEngine.class, Collections.singleton(rule)).get(rule);
- assertFalse(engine.newInstance(mock(RuleMetaData.class), database, rule, mock(ConfigurationProperties.class), mock(InsertStatementContext.class)).isPresent());
+ assertFalse(engine.newInstance(mock(ShardingSphereMetaData.class), database, rule, mock(ConfigurationProperties.class), mock(InsertStatementContext.class)).isPresent());
}
}
diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionEngine.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionEngine.java
index f6b86183941..46a24422a41 100644
--- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionEngine.java
+++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionEngine.java
@@ -110,8 +110,7 @@ public final class ProjectionEngine {
IdentifierValue alias = projectionSegment.getAliasName().isPresent() ? projectionSegment.getAlias().orElse(null) : null;
ColumnProjection result = new ColumnProjection(owner, projectionSegment.getColumn().getIdentifier(), alias, databaseType, projectionSegment.getColumn().getLeftParentheses().orElse(null),
projectionSegment.getColumn().getRightParentheses().orElse(null));
- result.setOriginalColumn(projectionSegment.getColumn().getColumnBoundInfo().getOriginalColumn());
- result.setOriginalTable(projectionSegment.getColumn().getColumnBoundInfo().getOriginalTable());
+ result.setColumnBoundInfo(projectionSegment.getColumn().getColumnBoundInfo());
return result;
}
diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/impl/ColumnProjection.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/impl/ColumnProjection.java
index 039d6f8be08..dc53d030945 100644
--- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/impl/ColumnProjection.java
+++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/impl/ColumnProjection.java
@@ -29,6 +29,7 @@ import org.apache.shardingsphere.infra.database.core.metadata.database.enums.Quo
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.ParenthesesSegment;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import java.util.Optional;
@@ -39,7 +40,7 @@ import java.util.Optional;
@RequiredArgsConstructor
@Getter
@Setter
-@EqualsAndHashCode(exclude = {"originalTable", "originalColumn"})
+@EqualsAndHashCode(exclude = "columnBoundInfo")
@ToString
public final class ColumnProjection implements Projection {
@@ -55,9 +56,7 @@ public final class ColumnProjection implements Projection {
private final ParenthesesSegment rightParentheses;
- private IdentifierValue originalTable;
-
- private IdentifierValue originalColumn;
+ private ColumnSegmentBoundInfo columnBoundInfo;
public ColumnProjection(final String owner, final String name, final String alias, final DatabaseType databaseType) {
this(null == owner ? null : new IdentifierValue(owner, QuoteCharacter.NONE), new IdentifierValue(name, QuoteCharacter.NONE),
@@ -83,10 +82,10 @@ public final class ColumnProjection implements Projection {
* @return original table
*/
public IdentifierValue getOriginalTable() {
- if (null == originalTable || Strings.isNullOrEmpty(originalTable.getValue())) {
+ if (null == columnBoundInfo || null == columnBoundInfo.getOriginalTable() || Strings.isNullOrEmpty(columnBoundInfo.getOriginalTable().getValue())) {
return null == owner ? new IdentifierValue("") : owner;
}
- return originalTable;
+ return columnBoundInfo.getOriginalTable();
}
/**
@@ -95,7 +94,8 @@ public final class ColumnProjection implements Projection {
* @return original column
*/
public IdentifierValue getOriginalColumn() {
- return null == originalColumn || Strings.isNullOrEmpty(originalColumn.getValue()) ? name : originalColumn;
+ return null == columnBoundInfo || null == columnBoundInfo.getOriginalColumn() || Strings.isNullOrEmpty(columnBoundInfo.getOriginalColumn().getValue()) ? name
+ : columnBoundInfo.getOriginalColumn();
}
/**
diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/impl/ColumnProjectionTest.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/impl/ColumnProjectionTest.java
index 5f7ed51cc9e..6e5193671b3 100644
--- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/impl/ColumnProjectionTest.java
+++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/impl/ColumnProjectionTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.binder.context.segment.select.projection
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
import org.junit.jupiter.api.Test;
@@ -45,14 +46,14 @@ class ColumnProjectionTest {
@Test
void assertGetOriginalTableWithEmptyOriginalTableAndWithOwner() {
ColumnProjection projection = new ColumnProjection("owner", "name", "alias", databaseType);
- projection.setOriginalTable(new IdentifierValue(""));
+ projection.setColumnBoundInfo(new ColumnSegmentBoundInfo(new IdentifierValue("")));
assertThat(projection.getOriginalTable(), is(new IdentifierValue("owner")));
}
@Test
void assertGetOriginalTable() {
ColumnProjection projection = new ColumnProjection("owner", "name", "alias", databaseType);
- projection.setOriginalTable(new IdentifierValue("tbl"));
+ projection.setColumnBoundInfo(new ColumnSegmentBoundInfo(new IdentifierValue(""), new IdentifierValue(""), new IdentifierValue("tbl"), new IdentifierValue("")));
assertThat(projection.getOriginalTable(), is(new IdentifierValue("tbl")));
}
@@ -64,14 +65,14 @@ class ColumnProjectionTest {
@Test
void assertGetOriginalColumnWithEmptyOriginalColumn() {
ColumnProjection projection = new ColumnProjection(null, "name", "alias", databaseType);
- projection.setOriginalColumn(new IdentifierValue(""));
+ projection.setColumnBoundInfo(new ColumnSegmentBoundInfo(new IdentifierValue("")));
assertThat(projection.getOriginalColumn(), is(new IdentifierValue("name")));
}
@Test
void assertGetOriginalColumn() {
ColumnProjection projection = new ColumnProjection(null, "name", "alias", databaseType);
- projection.setOriginalColumn(new IdentifierValue("col"));
+ projection.setColumnBoundInfo(new ColumnSegmentBoundInfo(new IdentifierValue("col")));
assertThat(projection.getOriginalColumn(), is(new IdentifierValue("col")));
}
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 cd931787c1d..f410b4240c9 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
@@ -29,8 +29,8 @@ import org.apache.shardingsphere.infra.merge.engine.merger.ResultMerger;
import org.apache.shardingsphere.infra.merge.engine.merger.ResultMergerEngine;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
@@ -47,7 +47,7 @@ import java.util.Optional;
@HighFrequencyInvocation
public final class MergeEngine {
- private final RuleMetaData globalRuleMetaData;
+ private final ShardingSphereMetaData metaData;
private final ShardingSphereDatabase database;
@@ -58,8 +58,8 @@ public final class MergeEngine {
private final ConnectionContext connectionContext;
- public MergeEngine(final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database, final ConfigurationProperties props, final ConnectionContext connectionContext) {
- this.globalRuleMetaData = globalRuleMetaData;
+ public MergeEngine(final ShardingSphereMetaData metaData, final ShardingSphereDatabase database, final ConfigurationProperties props, final ConnectionContext connectionContext) {
+ this.metaData = metaData;
this.database = database;
this.props = props;
engines = OrderedSPILoader.getServices(ResultProcessEngine.class, database.getRuleMetaData().getRules());
@@ -117,7 +117,7 @@ public final class MergeEngine {
@SuppressWarnings({"unchecked", "rawtypes"})
private ResultDecorator getResultDecorator(final SQLStatementContext sqlStatementContext, final Entry<ShardingSphereRule, ResultProcessEngine> entry) {
- return (ResultDecorator) ((ResultDecoratorEngine) entry.getValue()).newInstance(globalRuleMetaData, database, entry.getKey(), props, sqlStatementContext)
+ return (ResultDecorator) ((ResultDecoratorEngine) entry.getValue()).newInstance(metaData, database, entry.getKey(), props, sqlStatementContext)
.orElseGet(TransparentResultDecorator::new);
}
}
diff --git a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
index 83baab91121..b2a1d282eb6 100644
--- a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
+++ b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
@@ -20,8 +20,8 @@ package org.apache.shardingsphere.infra.merge.engine.decorator;
import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngine;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import java.util.Optional;
@@ -36,12 +36,12 @@ public interface ResultDecoratorEngine<T extends ShardingSphereRule> extends Res
/**
* Create new instance of result decorator.
*
- * @param globalRuleMetaData global rule meta data
+ * @param metaData meta data
* @param database database
* @param rule rule
* @param props configuration properties
* @param sqlStatementContext SQL statement context
* @return created instance
*/
- Optional<ResultDecorator<T>> newInstance(RuleMetaData globalRuleMetaData, ShardingSphereDatabase database, T rule, ConfigurationProperties props, SQLStatementContext sqlStatementContext);
+ Optional<ResultDecorator<T>> newInstance(ShardingSphereMetaData metaData, ShardingSphereDatabase database, T rule, ConfigurationProperties props, SQLStatementContext sqlStatementContext);
}
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 e22aed41204..ee2810b5bea 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
@@ -19,13 +19,13 @@ 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.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
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;
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.test.fixture.infra.rule.MockedRule;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -60,7 +60,8 @@ class MergeEngineTest {
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new MockedRule()));
when(queryResult.getValue(1, String.class)).thenReturn("test");
MergedResult actual =
- new MergeEngine(mock(RuleMetaData.class), database, new ConfigurationProperties(new Properties()), mock(ConnectionContext.class)).merge(Collections.singletonList(queryResult),
+ new MergeEngine(mock(ShardingSphereMetaData.class), database, new ConfigurationProperties(new Properties()), mock(ConnectionContext.class)).merge(
+ Collections.singletonList(queryResult),
mock(SQLStatementContext.class));
assertThat(actual.getValue(1, String.class), is("test"));
}
@@ -69,7 +70,8 @@ class MergeEngineTest {
void assertMergeWithMergerRuleOnly() throws SQLException {
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new MergerRuleFixture()));
MergedResult actual =
- new MergeEngine(mock(RuleMetaData.class), database, new ConfigurationProperties(new Properties()), mock(ConnectionContext.class)).merge(Collections.singletonList(queryResult),
+ new MergeEngine(mock(ShardingSphereMetaData.class), database, new ConfigurationProperties(new Properties()), mock(ConnectionContext.class)).merge(
+ Collections.singletonList(queryResult),
mock(SQLStatementContext.class));
assertThat(actual.getValue(1, String.class), is("merged_value"));
}
@@ -78,7 +80,8 @@ class MergeEngineTest {
void assertMergeWithDecoratorRuleOnly() throws SQLException {
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(new DecoratorRuleFixture()));
MergedResult actual =
- new MergeEngine(mock(RuleMetaData.class), database, new ConfigurationProperties(new Properties()), mock(ConnectionContext.class)).merge(Collections.singletonList(queryResult),
+ new MergeEngine(mock(ShardingSphereMetaData.class), database, new ConfigurationProperties(new Properties()), mock(ConnectionContext.class)).merge(
+ Collections.singletonList(queryResult),
mock(SQLStatementContext.class));
assertThat(actual.getValue(1, String.class), is("decorated_value"));
}
@@ -87,7 +90,8 @@ class MergeEngineTest {
void assertMergeWithMergerRuleAndDecoratorRuleTogether() throws SQLException {
when(database.getRuleMetaData().getRules()).thenReturn(Arrays.asList(new MergerRuleFixture(), new DecoratorRuleFixture()));
MergedResult actual =
- new MergeEngine(mock(RuleMetaData.class), database, new ConfigurationProperties(new Properties()), mock(ConnectionContext.class)).merge(Collections.singletonList(queryResult),
+ new MergeEngine(mock(ShardingSphereMetaData.class), database, new ConfigurationProperties(new Properties()), mock(ConnectionContext.class)).merge(
+ Collections.singletonList(queryResult),
mock(SQLStatementContext.class));
assertThat(actual.getValue(1, String.class), is("decorated_merged_value"));
}
diff --git a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
index fe559ebbae9..7c0296f9cc1 100644
--- a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
+++ b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
@@ -22,15 +22,15 @@ import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecoratorEngine;
import org.apache.shardingsphere.infra.merge.fixture.rule.DecoratorRuleFixture;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import java.util.Optional;
public final class ResultDecoratorEngineFixture implements ResultDecoratorEngine<DecoratorRuleFixture> {
@Override
- public Optional<ResultDecorator<DecoratorRuleFixture>> newInstance(final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database,
+ public Optional<ResultDecorator<DecoratorRuleFixture>> newInstance(final ShardingSphereMetaData metaData, final ShardingSphereDatabase database,
final DecoratorRuleFixture rule, final ConfigurationProperties props, final SQLStatementContext sqlStatementContext) {
return Optional.of(new ResultDecoratorFixture());
}
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 19fc46a5ea1..b385d5d2ab9 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
@@ -145,7 +145,7 @@ public final class DriverJDBCPushDownExecuteExecutor {
return Optional.empty();
}
List<QueryResult> queryResults = getQueryResults(resultSets);
- MergedResult mergedResult = new MergeEngine(metaData.getGlobalRuleMetaData(), database, metaData.getProps(), connection.getDatabaseConnectionManager().getConnectionContext())
+ MergedResult mergedResult = new MergeEngine(metaData, database, metaData.getProps(), connection.getDatabaseConnectionManager().getConnectionContext())
.merge(queryResults, sqlStatementContext);
return Optional.of(new ShardingSphereResultSet(resultSets, mergedResult, statement, sqlStatementContext));
}
diff --git a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteQueryExecutor.java b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteQueryExecutor.java
index 35b8a7cb171..ed64ea06e64 100644
--- a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteQueryExecutor.java
+++ b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteQueryExecutor.java
@@ -36,7 +36,6 @@ import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.JDBCDriv
import org.apache.shardingsphere.infra.executor.sql.process.ProcessEngine;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import org.apache.shardingsphere.infra.session.query.QueryContext;
@@ -59,7 +58,7 @@ public final class DriverJDBCPushDownExecuteQueryExecutor {
private final String processId;
- private final RuleMetaData globalRuleMetaData;
+ private final ShardingSphereMetaData metaData;
private final ConfigurationProperties props;
@@ -70,7 +69,7 @@ public final class DriverJDBCPushDownExecuteQueryExecutor {
public DriverJDBCPushDownExecuteQueryExecutor(final ShardingSphereConnection connection, final ShardingSphereMetaData metaData, final JDBCExecutor jdbcExecutor) {
connectionContext = connection.getDatabaseConnectionManager().getConnectionContext();
processId = connection.getProcessId();
- globalRuleMetaData = metaData.getGlobalRuleMetaData();
+ this.metaData = metaData;
props = metaData.getProps();
this.jdbcExecutor = jdbcExecutor;
statements = new LinkedList<>();
@@ -95,14 +94,14 @@ public final class DriverJDBCPushDownExecuteQueryExecutor {
final Map<String, Integer> columnLabelAndIndexMap,
final StatementAddCallback addCallback, final StatementReplayCallback replayCallback) throws SQLException {
List<QueryResult> queryResults = getQueryResults(database, queryContext, prepareEngine, addCallback, replayCallback);
- return new ShardingSphereResultSetFactory(connectionContext, globalRuleMetaData, props, statements).newInstance(database, queryContext, queryResults, statement, columnLabelAndIndexMap);
+ return new ShardingSphereResultSetFactory(connectionContext, metaData, props, statements).newInstance(database, queryContext, queryResults, statement, columnLabelAndIndexMap);
}
@SuppressWarnings({"rawtypes", "unchecked"})
private List<QueryResult> getQueryResults(final ShardingSphereDatabase database, final QueryContext queryContext, final DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
final StatementAddCallback addCallback, final StatementReplayCallback replayCallback) throws SQLException {
statements.clear();
- ExecutionContext executionContext = new KernelProcessor().generateExecutionContext(queryContext, globalRuleMetaData, props);
+ ExecutionContext executionContext = new KernelProcessor().generateExecutionContext(queryContext, metaData.getGlobalRuleMetaData(), props);
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = prepareEngine.prepare(database.getName(), executionContext.getRouteContext(), executionContext.getExecutionUnits(),
new ExecutionGroupReportContext(processId, database.getName(), connectionContext.getGrantee()));
for (ExecutionGroup<JDBCExecutionUnit> each : executionGroupContext.getInputGroups()) {
diff --git a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/raw/DriverRawPushDownExecuteQueryExecutor.java b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/raw/DriverRawPushDownExecuteQueryExecutor.java
index 2fd83d4c978..a115f340f22 100644
--- a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/raw/DriverRawPushDownExecuteQueryExecutor.java
+++ b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/raw/DriverRawPushDownExecuteQueryExecutor.java
@@ -32,7 +32,6 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryRe
import org.apache.shardingsphere.infra.executor.sql.prepare.raw.RawExecutionPrepareEngine;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import org.apache.shardingsphere.infra.session.query.QueryContext;
@@ -53,7 +52,7 @@ public final class DriverRawPushDownExecuteQueryExecutor {
private final String processId;
- private final RuleMetaData globalRuleMetaData;
+ private final ShardingSphereMetaData metaData;
private final ConfigurationProperties props;
@@ -62,7 +61,7 @@ public final class DriverRawPushDownExecuteQueryExecutor {
public DriverRawPushDownExecuteQueryExecutor(final ShardingSphereConnection connection, final ShardingSphereMetaData metaData, final RawExecutor rawExecutor) {
connectionContext = connection.getDatabaseConnectionManager().getConnectionContext();
processId = connection.getProcessId();
- globalRuleMetaData = metaData.getGlobalRuleMetaData();
+ this.metaData = metaData;
props = metaData.getProps();
this.rawExecutor = rawExecutor;
}
@@ -80,12 +79,12 @@ public final class DriverRawPushDownExecuteQueryExecutor {
public ResultSet executeQuery(final ShardingSphereDatabase database, final QueryContext queryContext, final Statement statement,
final Map<String, Integer> columnLabelAndIndexMap) throws SQLException {
List<QueryResult> queryResults = getQueryResults(database, queryContext);
- return new ShardingSphereResultSetFactory(connectionContext, globalRuleMetaData, props, Collections.emptyList())
+ return new ShardingSphereResultSetFactory(connectionContext, metaData, props, Collections.emptyList())
.newInstance(database, queryContext, queryResults, statement, columnLabelAndIndexMap);
}
private List<QueryResult> getQueryResults(final ShardingSphereDatabase database, final QueryContext queryContext) throws SQLException {
- ExecutionContext executionContext = new KernelProcessor().generateExecutionContext(queryContext, globalRuleMetaData, props);
+ ExecutionContext executionContext = new KernelProcessor().generateExecutionContext(queryContext, metaData.getGlobalRuleMetaData(), props);
return rawExecutor.execute(
createRawExecutionGroupContext(database, executionContext), queryContext, new RawSQLExecutorCallback()).stream().map(QueryResult.class::cast).collect(Collectors.toList());
}
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 4d9f8ade6e3..fe5de62de54 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
@@ -23,8 +23,8 @@ 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.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.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import org.apache.shardingsphere.infra.session.query.QueryContext;
@@ -45,7 +45,7 @@ public final class ShardingSphereResultSetFactory {
private final ConnectionContext connectionContext;
- private final RuleMetaData globalRuleMetaData;
+ private final ShardingSphereMetaData metaData;
private final ConfigurationProperties props;
@@ -65,7 +65,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();
- MergedResult mergedResult = new MergeEngine(globalRuleMetaData, database, props, connectionContext).merge(queryResults, queryContext.getSqlStatementContext());
+ MergedResult mergedResult = new MergeEngine(metaData, database, props, connectionContext).merge(queryResults, queryContext.getSqlStatementContext());
return new ShardingSphereResultSet(resultSets, mergedResult, statement, queryContext.getSqlStatementContext(),
null == columnLabelAndIndexMap
? ShardingSphereResultSetUtils.createColumnLabelAndIndexMap(queryContext.getSqlStatementContext(), resultSets.get(0).getMetaData())
diff --git a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
index 6242a06c745..3be60e46f33 100644
--- a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
+++ b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
@@ -135,7 +135,7 @@ public final class EnumerableScanExecutor implements ScanExecutor {
ShardingSpherePreconditions.checkState(!ProcessRegistry.getInstance().get(federationContext.getProcessId()).isInterrupted(), SQLExecutionInterruptedException::new);
processEngine.executeSQL(executionGroupContext, federationContext.getQueryContext());
List<QueryResult> queryResults = jdbcExecutor.execute(executionGroupContext, callback).stream().map(QueryResult.class::cast).collect(Collectors.toList());
- MergeEngine mergeEngine = new MergeEngine(federationContext.getMetaData().getGlobalRuleMetaData(), database, executorContext.getProps(), new ConnectionContext(Collections::emptySet));
+ MergeEngine mergeEngine = new MergeEngine(federationContext.getMetaData(), database, executorContext.getProps(), new ConnectionContext(Collections::emptySet));
MergedResult mergedResult = mergeEngine.merge(queryResults, queryContext.getSqlStatementContext());
Collection<Statement> statements = getStatements(executionGroupContext.getInputGroups());
return new JDBCRowEnumerator(mergedResult, queryResults.get(0).getMetaData(), statements);
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
index 42bec4c3bc0..46cd93db397 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
@@ -314,7 +314,7 @@ public final class DatabaseConnector implements DatabaseBackendHandler {
}
private MergedResult mergeQuery(final SQLStatementContext sqlStatementContext, final List<QueryResult> queryResults) throws SQLException {
- MergeEngine mergeEngine = new MergeEngine(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
+ MergeEngine mergeEngine = new MergeEngine(contextManager.getMetaDataContexts().getMetaData(),
database, contextManager.getMetaDataContexts().getMetaData().getProps(), databaseConnectionManager.getConnectionSession().getConnectionContext());
return mergeEngine.merge(queryResults, sqlStatementContext);
}