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 <[email protected]>
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);
}