This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 5f7a8ed9592 Refactor ResultDecoratorEngine (#17965)
5f7a8ed9592 is described below
commit 5f7a8ed959276575c0438d88e952fd79996fd27e
Author: Liang Zhang <[email protected]>
AuthorDate: Thu May 26 15:45:07 2022 +0800
Refactor ResultDecoratorEngine (#17965)
* Refactor MergeEngine
* Refactor MergeEngine
* Refactor ResultDecoratorEngine
* Fix test case
---
.../encrypt/merge/EncryptResultDecoratorEngine.java | 5 ++---
.../encrypt/merge/dql/EncryptAlgorithmMetaData.java | 4 +---
.../encrypt/merge/EncryptResultDecoratorEngineTest.java | 12 +++---------
.../encrypt/merge/dql/EncryptAlgorithmMetaDataTest.java | 10 +++++-----
.../org/apache/shardingsphere/infra/merge/MergeEngine.java | 6 ++----
.../infra/merge/engine/decorator/ResultDecoratorEngine.java | 6 +-----
.../fixture/decorator/ResultDecoratorEngineFixture.java | 3 +--
7 files changed, 15 insertions(+), 31 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
index fed9daaa551..925574d3e9c 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngine.java
@@ -25,7 +25,6 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecoratorEngine;
import
org.apache.shardingsphere.infra.merge.engine.decorator.impl.TransparentResultDecorator;
@@ -38,10 +37,10 @@ import
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatemen
public final class EncryptResultDecoratorEngine implements
ResultDecoratorEngine<EncryptRule> {
@Override
- public ResultDecorator<?> newInstance(final DatabaseType databaseType,
final String databaseName, final ShardingSphereDatabase database,
+ public ResultDecorator<?> newInstance(final ShardingSphereDatabase
database,
final EncryptRule encryptRule, final
ConfigurationProperties props, final SQLStatementContext<?>
sqlStatementContext) {
if (sqlStatementContext instanceof SelectStatementContext) {
- EncryptAlgorithmMetaData algorithmMetaData = new
EncryptAlgorithmMetaData(databaseName, database, encryptRule,
(SelectStatementContext) sqlStatementContext);
+ EncryptAlgorithmMetaData algorithmMetaData = new
EncryptAlgorithmMetaData(database, encryptRule, (SelectStatementContext)
sqlStatementContext);
return new EncryptDQLResultDecorator(algorithmMetaData);
}
if (sqlStatementContext.getSqlStatement() instanceof DALStatement) {
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
index df086485d6b..9b8d8381cf6 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
@@ -40,8 +40,6 @@ import java.util.Optional;
@RequiredArgsConstructor
public final class EncryptAlgorithmMetaData {
- private final String databaseName;
-
private final ShardingSphereDatabase database;
private final EncryptRule encryptRule;
@@ -86,7 +84,7 @@ public final class EncryptAlgorithmMetaData {
Map<String, String> expressionTableNames =
tablesContext.findTableNamesByColumnProjection(
Collections.singletonList(columnProjection.get()),
database.getSchemas().get(schemaName));
Optional<String> tableName = findTableName(columnProjection.get(),
expressionTableNames);
- return tableName.map(optional ->
EncryptContextBuilder.build(databaseName, schemaName, optional,
columnProjection.get().getName(), encryptRule));
+ return tableName.map(optional ->
EncryptContextBuilder.build(database.getName(), schemaName, optional,
columnProjection.get().getName(), encryptRule));
}
private Optional<ColumnProjection> findColumnProjection(final int
columnIndex) {
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
index 644765ad8fa..de36d58eca5 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/EncryptResultDecoratorEngineTest.java
@@ -25,8 +25,6 @@ import
org.apache.shardingsphere.infra.binder.statement.dal.ExplainStatementCont
import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.DefaultDatabase;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngineFactory;
import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator;
import
org.apache.shardingsphere.infra.merge.engine.decorator.impl.TransparentResultDecorator;
@@ -52,17 +50,13 @@ public final class EncryptResultDecoratorEngineTest {
@Mock
private EncryptRule rule;
- @Mock
- private DatabaseType databaseType;
-
@Mock
private ShardingSphereDatabase database;
@Test
public void assertNewInstanceWithSelectStatement() {
EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine)
ResultProcessEngineFactory.getInstances(Collections.singleton(rule)).get(rule);
- ResultDecorator<?> actual = engine.newInstance(
- databaseType, DefaultDatabase.LOGIC_NAME, database, rule,
mock(ConfigurationProperties.class), mock(SelectStatementContext.class,
RETURNS_DEEP_STUBS));
+ ResultDecorator<?> actual = engine.newInstance(database, rule,
mock(ConfigurationProperties.class), mock(SelectStatementContext.class,
RETURNS_DEEP_STUBS));
assertThat(actual, instanceOf(EncryptDQLResultDecorator.class));
}
@@ -71,14 +65,14 @@ public final class EncryptResultDecoratorEngineTest {
SQLStatementContext<ExplainStatement> sqlStatementContext =
mock(ExplainStatementContext.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(MySQLExplainStatement.class));
EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine)
ResultProcessEngineFactory.getInstances(Collections.singleton(rule)).get(rule);
- ResultDecorator<?> actual = engine.newInstance(databaseType,
DefaultDatabase.LOGIC_NAME, database, rule,
mock(ConfigurationProperties.class), sqlStatementContext);
+ ResultDecorator<?> actual = engine.newInstance(database, rule,
mock(ConfigurationProperties.class), sqlStatementContext);
assertThat(actual, instanceOf(EncryptDALResultDecorator.class));
}
@Test
public void assertNewInstanceWithOtherStatement() {
EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine)
ResultProcessEngineFactory.getInstances(Collections.singleton(rule)).get(rule);
- ResultDecorator<?> actual = engine.newInstance(databaseType,
DefaultDatabase.LOGIC_NAME, database, rule,
mock(ConfigurationProperties.class), mock(InsertStatementContext.class));
+ ResultDecorator<?> actual = engine.newInstance(database, rule,
mock(ConfigurationProperties.class), mock(InsertStatementContext.class));
assertThat(actual, instanceOf(TransparentResultDecorator.class));
}
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaDataTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaDataTest.java
index f31479a4189..5b0620f12e7 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaDataTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaDataTest.java
@@ -96,7 +96,7 @@ public final class EncryptAlgorithmMetaDataTest {
Map<String, String> columnTableNames = new HashMap<>();
columnTableNames.put(columnProjection.getExpression(), "t_order");
when(tablesContext.findTableNamesByColumnProjection(Collections.singletonList(columnProjection),
schema)).thenReturn(columnTableNames);
- EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(DefaultDatabase.LOGIC_NAME, database, encryptRule,
selectStatementContext);
+ EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(database, encryptRule, selectStatementContext);
Optional<EncryptContext> actual =
encryptAlgorithmMetaData.findEncryptContext(1);
assertTrue(actual.isPresent());
assertThat(actual.get().getDatabaseName(),
is(DefaultDatabase.LOGIC_NAME));
@@ -109,7 +109,7 @@ public final class EncryptAlgorithmMetaDataTest {
when(tablesContext.findTableNamesByColumnProjection(Collections.singletonList(columnProjection),
schema)).thenReturn(Collections.emptyMap());
when(tablesContext.getTableNames()).thenReturn(Arrays.asList("t_user",
"t_user_item", "t_order_item"));
when(encryptRule.findEncryptor("t_order_item",
"id")).thenReturn(Optional.of(encryptAlgorithm));
- EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(DefaultDatabase.LOGIC_NAME, database, encryptRule,
selectStatementContext);
+ EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(database, encryptRule, selectStatementContext);
Optional<EncryptContext> actual =
encryptAlgorithmMetaData.findEncryptContext(1);
assertTrue(actual.isPresent());
assertThat(actual.get().getDatabaseName(),
is(DefaultDatabase.LOGIC_NAME));
@@ -120,7 +120,7 @@ public final class EncryptAlgorithmMetaDataTest {
@Test
public void assertFindEncryptContextWhenColumnProjectionIsNotExist() {
when(projectionsContext.getExpandProjections()).thenReturn(Collections.singletonList(mock(DerivedProjection.class)));
- EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(DefaultDatabase.LOGIC_NAME, database, encryptRule,
selectStatementContext);
+ EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(database, encryptRule, selectStatementContext);
Optional<EncryptContext> actual =
encryptAlgorithmMetaData.findEncryptContext(1);
assertFalse(actual.isPresent());
}
@@ -129,7 +129,7 @@ public final class EncryptAlgorithmMetaDataTest {
@Test
public void assertFindEncryptor() {
when(encryptRule.findEncryptor("t_order",
"id")).thenReturn(Optional.of(encryptAlgorithm));
- EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(DefaultDatabase.LOGIC_NAME, database, encryptRule,
selectStatementContext);
+ EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(database, encryptRule, selectStatementContext);
Optional<EncryptAlgorithm> actualEncryptor =
encryptAlgorithmMetaData.findEncryptor("t_order", "id");
assertTrue(actualEncryptor.isPresent());
assertThat(actualEncryptor.get().getType(), is("MD5"));
@@ -138,7 +138,7 @@ public final class EncryptAlgorithmMetaDataTest {
@Test
public void assertIsQueryWithCipherColumn() {
when(encryptRule.isQueryWithCipherColumn("t_order",
"id")).thenReturn(true);
- EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(DefaultDatabase.LOGIC_NAME, database, encryptRule,
selectStatementContext);
+ EncryptAlgorithmMetaData encryptAlgorithmMetaData = new
EncryptAlgorithmMetaData(database, encryptRule, selectStatementContext);
assertTrue(encryptAlgorithmMetaData.isQueryWithCipherColumn("t_order",
"id"));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
index 900fbad925b..8f0bf0408f2 100644
---
a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
@@ -86,8 +86,7 @@ public final class MergeEngine {
MergedResult result = null;
for (Entry<ShardingSphereRule, ResultProcessEngine> entry :
engines.entrySet()) {
if (entry.getValue() instanceof ResultDecoratorEngine) {
- ResultDecorator resultDecorator = ((ResultDecoratorEngine)
entry.getValue()).newInstance(
- database.getResource().getDatabaseType(),
database.getName(), database, entry.getKey(), props, sqlStatementContext);
+ ResultDecorator resultDecorator = ((ResultDecoratorEngine)
entry.getValue()).newInstance(database, entry.getKey(), props,
sqlStatementContext);
result = null == result ?
resultDecorator.decorate(mergedResult, sqlStatementContext, entry.getKey()) :
resultDecorator.decorate(result, sqlStatementContext, entry.getKey());
}
}
@@ -99,8 +98,7 @@ public final class MergeEngine {
MergedResult result = null;
for (Entry<ShardingSphereRule, ResultProcessEngine> entry :
engines.entrySet()) {
if (entry.getValue() instanceof ResultDecoratorEngine) {
- ResultDecorator resultDecorator = ((ResultDecoratorEngine)
entry.getValue()).newInstance(
- database.getResource().getDatabaseType(),
database.getName(), database, entry.getKey(), props, sqlStatementContext);
+ ResultDecorator resultDecorator = ((ResultDecoratorEngine)
entry.getValue()).newInstance(database, entry.getKey(), props,
sqlStatementContext);
result = null == result ?
resultDecorator.decorate(queryResult, sqlStatementContext, entry.getKey()) :
resultDecorator.decorate(result, sqlStatementContext, entry.getKey());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
index 78cfc4c809e..b6a1a73790d 100644
---
a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/engine/decorator/ResultDecoratorEngine.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.infra.merge.engine.decorator;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.merge.engine.ResultProcessEngine;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -34,14 +33,11 @@ public interface ResultDecoratorEngine<T extends
ShardingSphereRule> extends Res
/**
* Create new instance of result decorator.
*
- * @param databaseType database type
- * @param databaseName database name
* @param database database
* @param rule rule
* @param props configuration properties
* @param sqlStatementContext SQL statement context
* @return created instance
*/
- ResultDecorator<?> newInstance(DatabaseType databaseType, String
databaseName,
- ShardingSphereDatabase database, T rule,
ConfigurationProperties props, SQLStatementContext<?> sqlStatementContext);
+ ResultDecorator<?> newInstance(ShardingSphereDatabase database, T rule,
ConfigurationProperties props, SQLStatementContext<?> sqlStatementContext);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
b/shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
index 93f883d27ce..1dafc5f330f 100644
---
a/shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
+++
b/shardingsphere-infra/shardingsphere-infra-merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/decorator/ResultDecoratorEngineFixture.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.infra.merge.fixture.decorator;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
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;
@@ -28,7 +27,7 @@ import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
public final class ResultDecoratorEngineFixture implements
ResultDecoratorEngine<DecoratorRuleFixture> {
@Override
- public ResultDecorator<?> newInstance(final DatabaseType databaseType,
final String databaseName, final ShardingSphereDatabase database,
+ public ResultDecorator<?> newInstance(final ShardingSphereDatabase
database,
final DecoratorRuleFixture rule,
final ConfigurationProperties props, final SQLStatementContext<?>
sqlStatementContext) {
return new ResultDecoratorFixture();
}