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 2daad22de4d Fix sonar issues on Fix sonar issue on Remove usage of 
generic wildcard type (#26025)
2daad22de4d is described below

commit 2daad22de4de43e78db62f7971231df9274dbf0c
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jun 3 12:36:54 2023 +0800

    Fix sonar issues on Fix sonar issue on Remove usage of generic wildcard 
type (#26025)
    
    * Fix sonar issue on MetaDataReviseEntry
    
    * Fix sonar issue on ResultDecoratorEngine
    
    * Fix sonar issue on PipelineJobAPI
    
    * Fix sonar issue on HBaseCheckerFactory
    
    * Fix test cases
    
    * Fix test cases
---
 .../merge/EncryptResultDecoratorEngine.java        | 13 ++++++-----
 .../merge/EncryptResultDecoratorEngineTest.java    | 17 ++++++++------
 .../mask/merge/MaskResultDecoratorEngine.java      | 15 ++++++-------
 .../mask/merge/MaskResultDecoratorEngineTest.java  | 12 +++++-----
 .../reviser/ShardingMetaDataReviseEntry.java       |  3 +--
 .../schema/reviser/MetaDataReviseEntry.java        |  2 +-
 .../shardingsphere/infra/merge/MergeEngine.java    | 10 +++++++--
 .../engine/decorator/ResultDecoratorEngine.java    |  4 +++-
 .../decorator/ResultDecoratorEngineFixture.java    |  8 ++++---
 .../data/pipeline/core/api/PipelineJobAPI.java     |  2 +-
 .../AbstractInventoryIncrementalJobAPIImpl.java    |  2 +-
 .../core/api/impl/AbstractPipelineJobAPIImpl.java  |  2 +-
 .../CommonHeterogeneousSQLStatementChecker.java    | 26 +++++++++-------------
 .../backend/hbase/checker/HBaseCheckerFactory.java |  4 ++--
 .../HeterogeneousDeleteStatementChecker.java       | 10 ++++++---
 .../HeterogeneousInsertStatementChecker.java       | 16 +++++++------
 .../checker/HeterogeneousSQLStatementChecker.java  |  6 ++---
 .../HeterogeneousSelectStatementChecker.java       | 24 +++++++++++---------
 .../HeterogeneousUpdateStatementChecker.java       | 11 +++++----
 ...CommonHeterogeneousSQLStatementCheckerTest.java | 21 +++++++++--------
 .../hbase/checker/HBaseCheckerFactoryTest.java     | 10 ++++-----
 21 files changed, 119 insertions(+), 99 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 12cdc640ff4..5fd4c0184af 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
@@ -27,25 +27,26 @@ import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementConte
 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.engine.decorator.impl.TransparentResultDecorator;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
 
+import java.util.Optional;
+
 /**
  * Result decorator engine for encrypt.
  */
 public final class EncryptResultDecoratorEngine implements 
ResultDecoratorEngine<EncryptRule> {
     
     @Override
-    public ResultDecorator<?> newInstance(final ShardingSphereDatabase 
database, final EncryptRule encryptRule, final ConfigurationProperties props, 
final SQLStatementContext sqlStatementContext) {
+    public Optional<ResultDecorator<EncryptRule>> newInstance(final 
ShardingSphereDatabase database,
+                                                              final 
EncryptRule encryptRule, final ConfigurationProperties props, final 
SQLStatementContext sqlStatementContext) {
         if (sqlStatementContext instanceof SelectStatementContext) {
-            EncryptAlgorithmMetaData algorithmMetaData = new 
EncryptAlgorithmMetaData(database, encryptRule, (SelectStatementContext) 
sqlStatementContext);
-            return new EncryptDQLResultDecorator(algorithmMetaData);
+            return Optional.of(new EncryptDQLResultDecorator(new 
EncryptAlgorithmMetaData(database, encryptRule, (SelectStatementContext) 
sqlStatementContext)));
         }
         if (sqlStatementContext.getSqlStatement() instanceof DALStatement) {
-            return new EncryptDALResultDecorator();
+            return Optional.of(new EncryptDALResultDecorator());
         }
-        return new TransparentResultDecorator();
+        return Optional.empty();
     }
     
     @Override
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 446a196bcb3..bffd04b73da 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,7 +27,6 @@ import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementConte
 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.merge.engine.decorator.impl.TransparentResultDecorator;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLExplainStatement;
@@ -37,9 +36,12 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.util.Collections;
+import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -56,8 +58,9 @@ class EncryptResultDecoratorEngineTest {
     @Test
     void assertNewInstanceWithSelectStatement() {
         EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine) 
OrderedSPILoader.getServices(ResultProcessEngine.class, 
Collections.singleton(rule)).get(rule);
-        ResultDecorator<?> actual = engine.newInstance(database, rule, 
mock(ConfigurationProperties.class), mock(SelectStatementContext.class, 
RETURNS_DEEP_STUBS));
-        assertThat(actual, instanceOf(EncryptDQLResultDecorator.class));
+        Optional<ResultDecorator<EncryptRule>> actual = 
engine.newInstance(database, rule, mock(ConfigurationProperties.class), 
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS));
+        assertTrue(actual.isPresent());
+        assertThat(actual.get(), instanceOf(EncryptDQLResultDecorator.class));
     }
     
     @Test
@@ -65,14 +68,14 @@ 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);
-        ResultDecorator<?> actual = engine.newInstance(database, rule, 
mock(ConfigurationProperties.class), sqlStatementContext);
-        assertThat(actual, instanceOf(EncryptDALResultDecorator.class));
+        Optional<ResultDecorator<EncryptRule>> actual = 
engine.newInstance(database, rule, mock(ConfigurationProperties.class), 
sqlStatementContext);
+        assertTrue(actual.isPresent());
+        assertThat(actual.get(), instanceOf(EncryptDALResultDecorator.class));
     }
     
     @Test
     void assertNewInstanceWithOtherStatement() {
         EncryptResultDecoratorEngine engine = (EncryptResultDecoratorEngine) 
OrderedSPILoader.getServices(ResultProcessEngine.class, 
Collections.singleton(rule)).get(rule);
-        ResultDecorator<?> actual = engine.newInstance(database, rule, 
mock(ConfigurationProperties.class), mock(InsertStatementContext.class));
-        assertThat(actual, instanceOf(TransparentResultDecorator.class));
+        assertFalse(engine.newInstance(database, rule, 
mock(ConfigurationProperties.class), 
mock(InsertStatementContext.class)).isPresent());
     }
 }
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 a70e0c575f5..3b0dc33b3c4 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,26 +22,25 @@ import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementConte
 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.engine.decorator.impl.TransparentResultDecorator;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mask.constant.MaskOrder;
 import org.apache.shardingsphere.mask.merge.dql.MaskAlgorithmMetaData;
 import org.apache.shardingsphere.mask.merge.dql.MaskDQLResultDecorator;
 import org.apache.shardingsphere.mask.rule.MaskRule;
 
+import java.util.Optional;
+
 /**
  * Result decorator engine for mask.
  */
 public final class MaskResultDecoratorEngine implements 
ResultDecoratorEngine<MaskRule> {
     
     @Override
-    public ResultDecorator<?> newInstance(final ShardingSphereDatabase 
database, final MaskRule maskRule,
-                                          final ConfigurationProperties props, 
final SQLStatementContext sqlStatementContext) {
-        if (sqlStatementContext instanceof SelectStatementContext) {
-            MaskAlgorithmMetaData algorithmMetaData = new 
MaskAlgorithmMetaData(database, maskRule, (SelectStatementContext) 
sqlStatementContext);
-            return new MaskDQLResultDecorator(algorithmMetaData);
-        }
-        return new TransparentResultDecorator();
+    public Optional<ResultDecorator<MaskRule>> newInstance(final 
ShardingSphereDatabase database,
+                                                           final MaskRule 
maskRule, final ConfigurationProperties props, final SQLStatementContext 
sqlStatementContext) {
+        return sqlStatementContext instanceof SelectStatementContext
+                ? Optional.of(new MaskDQLResultDecorator(new 
MaskAlgorithmMetaData(database, maskRule, (SelectStatementContext) 
sqlStatementContext)))
+                : Optional.empty();
     }
     
     @Override
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 64c20e29dc8..832c6f6d7b5 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,7 +22,6 @@ import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementConte
 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.merge.engine.decorator.impl.TransparentResultDecorator;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.mask.merge.dql.MaskDQLResultDecorator;
@@ -33,9 +32,12 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.util.Collections;
+import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 
@@ -51,14 +53,14 @@ class MaskResultDecoratorEngineTest {
     @Test
     void assertNewInstanceWithSelectStatement() {
         MaskResultDecoratorEngine engine = (MaskResultDecoratorEngine) 
OrderedSPILoader.getServices(ResultProcessEngine.class, 
Collections.singleton(rule)).get(rule);
-        ResultDecorator<?> actual = engine.newInstance(database, rule, 
mock(ConfigurationProperties.class), mock(SelectStatementContext.class, 
RETURNS_DEEP_STUBS));
-        assertThat(actual, instanceOf(MaskDQLResultDecorator.class));
+        Optional<ResultDecorator<MaskRule>> actual = 
engine.newInstance(database, rule, mock(ConfigurationProperties.class), 
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS));
+        assertTrue(actual.isPresent());
+        assertThat(actual.get(), instanceOf(MaskDQLResultDecorator.class));
     }
     
     @Test
     void assertNewInstanceWithOtherStatement() {
         MaskResultDecoratorEngine engine = (MaskResultDecoratorEngine) 
OrderedSPILoader.getServices(ResultProcessEngine.class, 
Collections.singleton(rule)).get(rule);
-        ResultDecorator<?> actual = engine.newInstance(database, rule, 
mock(ConfigurationProperties.class), mock(InsertStatementContext.class));
-        assertThat(actual, instanceOf(TransparentResultDecorator.class));
+        assertFalse(engine.newInstance(database, rule, 
mock(ConfigurationProperties.class), 
mock(InsertStatementContext.class)).isPresent());
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
index 9db62691a3a..8f2524daedc 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.sharding.metadata.reviser;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.reviser.MetaDataReviseEntry;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.reviser.schema.SchemaTableAggregationReviser;
 import org.apache.shardingsphere.sharding.constant.ShardingOrder;
 import 
org.apache.shardingsphere.sharding.metadata.reviser.column.ShardingColumnGeneratedReviser;
 import 
org.apache.shardingsphere.sharding.metadata.reviser.constraint.ShardingConstraintReviser;
@@ -37,7 +36,7 @@ import java.util.Optional;
 public final class ShardingMetaDataReviseEntry implements 
MetaDataReviseEntry<ShardingRule> {
     
     @Override
-    public Optional<SchemaTableAggregationReviser<ShardingRule>> 
getSchemaTableAggregationReviser(final ConfigurationProperties props) {
+    public Optional<ShardingSchemaTableAggregationReviser> 
getSchemaTableAggregationReviser(final ConfigurationProperties props) {
         return Optional.of(new 
ShardingSchemaTableAggregationReviser(props.getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED)));
     }
     
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEntry.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEntry.java
index 30773c40aa0..1c2cdfa57a6 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEntry.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEntry.java
@@ -46,7 +46,7 @@ public interface MetaDataReviseEntry<T extends 
ShardingSphereRule> extends Order
      * @param props configuration properties
      * @return schema table aggregation reviser
      */
-    default Optional<SchemaTableAggregationReviser<T>> 
getSchemaTableAggregationReviser(final ConfigurationProperties props) {
+    default Optional<? extends SchemaTableAggregationReviser<T>> 
getSchemaTableAggregationReviser(final ConfigurationProperties props) {
         return Optional.empty();
     }
     
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 f61c700ee82..76ecf3c7811 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
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.merge;
 
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import 
org.apache.shardingsphere.infra.merge.engine.decorator.impl.TransparentResultDecorator;
 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.engine.ResultProcessEngine;
@@ -89,7 +90,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, entry.getKey(), props, 
sqlStatementContext);
+                ResultDecorator resultDecorator = 
getResultDecorator(sqlStatementContext, entry);
                 result = null == result ? 
resultDecorator.decorate(mergedResult, sqlStatementContext, entry.getKey()) : 
resultDecorator.decorate(result, sqlStatementContext, entry.getKey());
             }
         }
@@ -101,10 +102,15 @@ 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, entry.getKey(), props, 
sqlStatementContext);
+                ResultDecorator resultDecorator = 
getResultDecorator(sqlStatementContext, entry);
                 result = null == result ? 
resultDecorator.decorate(queryResult, sqlStatementContext, entry.getKey()) : 
resultDecorator.decorate(result, sqlStatementContext, entry.getKey());
             }
         }
         return Optional.ofNullable(result);
     }
+    
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private ResultDecorator getResultDecorator(final SQLStatementContext 
sqlStatementContext, final Entry<ShardingSphereRule, ResultProcessEngine> 
entry) {
+        return (ResultDecorator) ((ResultDecoratorEngine) 
entry.getValue()).newInstance(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 b3607595494..fa47462509c 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
@@ -23,6 +23,8 @@ import 
org.apache.shardingsphere.infra.merge.engine.ResultProcessEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 
+import java.util.Optional;
+
 /**
  * Result decorator engine.
  *
@@ -39,5 +41,5 @@ public interface ResultDecoratorEngine<T extends 
ShardingSphereRule> extends Res
      * @param sqlStatementContext SQL statement context
      * @return created instance
      */
-    ResultDecorator<?> newInstance(ShardingSphereDatabase database, T rule, 
ConfigurationProperties props, SQLStatementContext sqlStatementContext);
+    Optional<ResultDecorator<T>> newInstance(ShardingSphereDatabase database, 
T rule, ConfigurationProperties props, SQLStatementContext sqlStatementContext);
 }
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 52cc677dc2d..463a5d015c0 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
@@ -24,12 +24,14 @@ import 
org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecoratorEng
 import org.apache.shardingsphere.infra.merge.fixture.rule.DecoratorRuleFixture;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 
+import java.util.Optional;
+
 public final class ResultDecoratorEngineFixture implements 
ResultDecoratorEngine<DecoratorRuleFixture> {
     
     @Override
-    public ResultDecorator<?> newInstance(final ShardingSphereDatabase 
database,
-                                          final DecoratorRuleFixture rule, 
final ConfigurationProperties props, final SQLStatementContext 
sqlStatementContext) {
-        return new ResultDecoratorFixture();
+    public Optional<ResultDecorator<DecoratorRuleFixture>> newInstance(final 
ShardingSphereDatabase database,
+                                                                       final 
DecoratorRuleFixture rule, final ConfigurationProperties props, final 
SQLStatementContext sqlStatementContext) {
+        return Optional.of(new ResultDecoratorFixture());
     }
     
     @Override
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/PipelineJobAPI.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/PipelineJobAPI.java
index dea027322cc..e7841a64d8b 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/PipelineJobAPI.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/PipelineJobAPI.java
@@ -118,7 +118,7 @@ public interface PipelineJobAPI extends TypedSPI {
      * @param contextKey context key
      * @return job info list
      */
-    List<? extends PipelineJobInfo> list(PipelineContextKey contextKey);
+    List<PipelineJobInfo> list(PipelineContextKey contextKey);
     
     /**
      * Persist job item progress.
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/AbstractInventoryIncrementalJobAPIImpl.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/AbstractInventoryIncrementalJobAPIImpl.java
index 73ff026a3ae..3b3cbd2fd2a 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/AbstractInventoryIncrementalJobAPIImpl.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/AbstractInventoryIncrementalJobAPIImpl.java
@@ -189,7 +189,7 @@ public abstract class 
AbstractInventoryIncrementalJobAPIImpl extends AbstractPip
     @Override
     public Optional<InventoryIncrementalJobItemProgress> 
getJobItemProgress(final String jobId, final int shardingItem) {
         Optional<String> progress = 
PipelineAPIFactory.getGovernanceRepositoryAPI(PipelineJobIdUtils.parseContextKey(jobId)).getJobItemProgress(jobId,
 shardingItem);
-        return progress.map(s -> 
jobItemProgressSwapper.swapToObject(YamlEngine.unmarshal(s, 
YamlInventoryIncrementalJobItemProgress.class)));
+        return progress.map(optional -> 
jobItemProgressSwapper.swapToObject(YamlEngine.unmarshal(optional, 
YamlInventoryIncrementalJobItemProgress.class)));
     }
     
     @Override
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/AbstractPipelineJobAPIImpl.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/AbstractPipelineJobAPIImpl.java
index 47ca9669e75..c08303a9c89 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/AbstractPipelineJobAPIImpl.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/api/impl/AbstractPipelineJobAPIImpl.java
@@ -65,7 +65,7 @@ public abstract class AbstractPipelineJobAPIImpl implements 
PipelineJobAPI {
     protected abstract String marshalJobIdLeftPart(PipelineJobId 
pipelineJobId);
     
     @Override
-    public List<? extends PipelineJobInfo> list(final PipelineContextKey 
contextKey) {
+    public List<PipelineJobInfo> list(final PipelineContextKey contextKey) {
         return getJobBriefInfos(contextKey).map(each -> 
getJobInfo(each.getJobName())).collect(Collectors.toList());
     }
     
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/CommonHeterogeneousSQLStatementChecker.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/CommonHeterogeneousSQLStatementChecker.java
index 96d81470c2d..15f6f17572f 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/CommonHeterogeneousSQLStatementChecker.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/CommonHeterogeneousSQLStatementChecker.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.hbase.checker;
 
 import com.google.common.base.Preconditions;
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
@@ -33,24 +34,15 @@ import java.util.Arrays;
 import java.util.List;
 
 /**
- * Abstract checker.
- * 
- * @param <T> SQLStatement.
+ * Common heterogeneous SQL statement checker.
  */
+@RequiredArgsConstructor
 @Getter
-public class CommonHeterogeneousSQLStatementChecker<T extends SQLStatement> 
implements HeterogeneousSQLStatementChecker<T> {
+public class CommonHeterogeneousSQLStatementChecker implements 
HeterogeneousSQLStatementChecker {
     
     protected static final List<String> ALLOW_KEYS = Arrays.asList("rowKey", 
"row_key", "key", "pk", "id");
     
-    private final T sqlStatement;
-    
-    public CommonHeterogeneousSQLStatementChecker(final T sqlStatement) {
-        this.sqlStatement = sqlStatement;
-    }
-    
-    @Override
-    public void execute() {
-    }
+    private final SQLStatement sqlStatement;
     
     protected final void checkIsSinglePointQuery(final WhereSegment 
whereSegment) {
         ExpressionSegment whereExpr = whereSegment.getExpr();
@@ -77,9 +69,9 @@ public class CommonHeterogeneousSQLStatementChecker<T extends 
SQLStatement> impl
     /**
      * Check in expression.
      *
-     * @param whereExpr InExpression
+     * @param whereExpr In expression
      */
-    protected void checkInExpressionIsExpected(final ExpressionSegment 
whereExpr) {
+    protected final void checkInExpressionIsExpected(final ExpressionSegment 
whereExpr) {
         InExpression expression = (InExpression) whereExpr;
         Preconditions.checkArgument(expression.getLeft() instanceof 
ColumnSegment, "Left segment must column segment.");
         String rowKey = ((ColumnSegment) 
expression.getLeft()).getIdentifier().getValue();
@@ -88,4 +80,8 @@ public class CommonHeterogeneousSQLStatementChecker<T extends 
SQLStatement> impl
         Preconditions.checkArgument(!expression.isNot(), "Do not supported 
`not in`.");
         Preconditions.checkArgument(expression.getRight() instanceof 
ListExpression, "Only supported list expression.");
     }
+    
+    @Override
+    public void execute() {
+    }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HBaseCheckerFactory.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HBaseCheckerFactory.java
index 4f4b84d5dec..8d4bc6ca9f6 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HBaseCheckerFactory.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HBaseCheckerFactory.java
@@ -37,7 +37,7 @@ public final class HBaseCheckerFactory {
      * @param sqlStatement SQL statement
      * @return created instance
      */
-    public static HeterogeneousSQLStatementChecker<?> newInstance(final 
SQLStatement sqlStatement) {
+    public static HeterogeneousSQLStatementChecker newInstance(final 
SQLStatement sqlStatement) {
         if (sqlStatement instanceof SelectStatement) {
             return new HeterogeneousSelectStatementChecker((SelectStatement) 
sqlStatement);
         }
@@ -50,6 +50,6 @@ public final class HBaseCheckerFactory {
         if (sqlStatement instanceof UpdateStatement) {
             return new HeterogeneousUpdateStatementChecker((UpdateStatement) 
sqlStatement);
         }
-        return new CommonHeterogeneousSQLStatementChecker<>(sqlStatement);
+        return new CommonHeterogeneousSQLStatementChecker(sqlStatement);
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousDeleteStatementChecker.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousDeleteStatementChecker.java
index 7900c85030e..a1fe1d1c788 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousDeleteStatementChecker.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousDeleteStatementChecker.java
@@ -21,20 +21,24 @@ import com.google.common.base.Preconditions;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DeleteStatement;
+
 import java.util.Optional;
 
 /**
- * Checker for delete statement.
+ * Delete statement checker.
  */
-public class HeterogeneousDeleteStatementChecker extends 
CommonHeterogeneousSQLStatementChecker<DeleteStatement> {
+public final class HeterogeneousDeleteStatementChecker extends 
CommonHeterogeneousSQLStatementChecker {
+    
+    private final DeleteStatement sqlStatement;
     
     public HeterogeneousDeleteStatementChecker(final DeleteStatement 
sqlStatement) {
         super(sqlStatement);
+        this.sqlStatement = sqlStatement;
     }
     
     @Override
     public void execute() {
-        Optional<WhereSegment> whereSegment = getSqlStatement().getWhere();
+        Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
         Preconditions.checkArgument(whereSegment.isPresent(), "Must contain 
where segment.");
         if (whereSegment.get().getExpr() instanceof InExpression) {
             checkInExpressionIsExpected(whereSegment.get().getExpr());
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousInsertStatementChecker.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousInsertStatementChecker.java
index 998e82b4890..8794abfc205 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousInsertStatementChecker.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousInsertStatementChecker.java
@@ -26,12 +26,15 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 /**
- * Checker for insert statement.
+ * Insert statement checker.
  */
-public class HeterogeneousInsertStatementChecker extends 
CommonHeterogeneousSQLStatementChecker<InsertStatement> {
+public final class HeterogeneousInsertStatementChecker extends 
CommonHeterogeneousSQLStatementChecker {
+    
+    private final InsertStatement sqlStatement;
     
     public HeterogeneousInsertStatementChecker(final InsertStatement 
sqlStatement) {
         super(sqlStatement);
+        this.sqlStatement = sqlStatement;
     }
     
     @Override
@@ -43,7 +46,7 @@ public class HeterogeneousInsertStatementChecker extends 
CommonHeterogeneousSQLS
     }
     
     private void checkIsExistsRowKeyInInsertColumns() {
-        List<String> columns = 
getSqlStatement().getColumns().stream().map(each -> 
each.getIdentifier().getValue()).collect(Collectors.toList());
+        List<String> columns = sqlStatement.getColumns().stream().map(each -> 
each.getIdentifier().getValue()).collect(Collectors.toList());
         Preconditions.checkArgument(!columns.isEmpty(), "The inserted column 
must be explicitly specified.");
         Preconditions.checkArgument(ALLOW_KEYS.stream().anyMatch(each -> 
each.equalsIgnoreCase(columns.get(0))), "First column must be rowKey.");
         boolean isExists = columns.subList(1, 
columns.size()).stream().anyMatch(ALLOW_KEYS::contains);
@@ -51,11 +54,11 @@ public class HeterogeneousInsertStatementChecker extends 
CommonHeterogeneousSQLS
     }
     
     private void checkIsExistsSubQuery() {
-        
Preconditions.checkArgument(!getSqlStatement().getInsertSelect().isPresent(), 
"Do not supported `insert into...select...`");
+        
Preconditions.checkArgument(!sqlStatement.getInsertSelect().isPresent(), "Do 
not supported `insert into...select...`");
     }
     
     private void checkValueIsExpected() {
-        Collection<InsertValuesSegment> values = getSqlStatement().getValues();
+        Collection<InsertValuesSegment> values = sqlStatement.getValues();
         for (InsertValuesSegment insertValuesSegment : values) {
             boolean isAllMatch = 
insertValuesSegment.getValues().stream().allMatch(this::isAllowExpressionSegment);
             Preconditions.checkArgument(isAllMatch, "Value must is literal or 
parameter marker.");
@@ -63,7 +66,6 @@ public class HeterogeneousInsertStatementChecker extends 
CommonHeterogeneousSQLS
     }
     
     private void checkOnDuplicateKey() {
-        MySQLInsertStatement sqlStatement = (MySQLInsertStatement) 
getSqlStatement();
-        
Preconditions.checkArgument(!sqlStatement.getOnDuplicateKeyColumns().isPresent(),
 "Do not supported ON DUPLICATE KEY UPDATE");
+        Preconditions.checkArgument(!((MySQLInsertStatement) 
sqlStatement).getOnDuplicateKeyColumns().isPresent(), "Do not supported ON 
DUPLICATE KEY UPDATE");
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousSQLStatementChecker.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousSQLStatementChecker.java
index 6e04ba0070d..45361d158f2 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousSQLStatementChecker.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousSQLStatementChecker.java
@@ -21,17 +21,15 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 /**
  * Check where clause.
- * 
- * @param <T> SQL statement
  */
-public interface HeterogeneousSQLStatementChecker<T extends SQLStatement> {
+public interface HeterogeneousSQLStatementChecker {
     
     /**
      * Get SQL statement.
      *
      * @return SQL statement
      */
-    T getSqlStatement();
+    SQLStatement getSqlStatement();
     
     /**
      * do check.
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousSelectStatementChecker.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousSelectStatementChecker.java
index 1a0980751fd..57ccb500084 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousSelectStatementChecker.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousSelectStatementChecker.java
@@ -38,15 +38,19 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.Whe
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
+
 import java.util.Optional;
 
 /**
- * Checker for select statement.
+ * Select statement checker.
  */
-public final class HeterogeneousSelectStatementChecker extends 
CommonHeterogeneousSQLStatementChecker<SelectStatement> {
+public final class HeterogeneousSelectStatementChecker extends 
CommonHeterogeneousSQLStatementChecker {
+    
+    private final SelectStatement sqlStatement;
     
     public HeterogeneousSelectStatementChecker(final SelectStatement 
sqlStatement) {
         super(sqlStatement);
+        this.sqlStatement = sqlStatement;
     }
     
     @Override
@@ -58,10 +62,10 @@ public final class HeterogeneousSelectStatementChecker 
extends CommonHeterogeneo
     }
     
     private void checkDoNotSupportedSegment() {
-        Preconditions.checkArgument(getSqlStatement().getFrom() instanceof 
SimpleTableSegment, "Only supported simple table segment.");
-        
Preconditions.checkArgument(!getSqlStatement().getHaving().isPresent(), "Do not 
supported having segment.");
-        
Preconditions.checkArgument(!getSqlStatement().getGroupBy().isPresent(), "Do 
not supported group by segment.");
-        MySQLSelectStatement selectStatement = (MySQLSelectStatement) 
getSqlStatement();
+        Preconditions.checkArgument(sqlStatement.getFrom() instanceof 
SimpleTableSegment, "Only supported simple table segment.");
+        Preconditions.checkArgument(!sqlStatement.getHaving().isPresent(), "Do 
not supported having segment.");
+        Preconditions.checkArgument(!sqlStatement.getGroupBy().isPresent(), 
"Do not supported group by segment.");
+        MySQLSelectStatement selectStatement = (MySQLSelectStatement) 
sqlStatement;
         Preconditions.checkArgument(!selectStatement.getWindow().isPresent(), 
"Do not supported window segment.");
         Preconditions.checkArgument(!selectStatement.getLock().isPresent(), 
"Do not supported lock segment.");
         Optional<LimitSegment> limitSegment = selectStatement.getLimit();
@@ -74,7 +78,7 @@ public final class HeterogeneousSelectStatementChecker 
extends CommonHeterogeneo
     }
     
     private void checkProjectionsIsExpected() {
-        for (ProjectionSegment projectionSegment : 
getSqlStatement().getProjections().getProjections()) {
+        for (ProjectionSegment projectionSegment : 
sqlStatement.getProjections().getProjections()) {
             if (!(projectionSegment instanceof ShorthandProjectionSegment || 
projectionSegment instanceof ColumnProjectionSegment || 
HBaseHeterogeneousUtils.isCrcProjectionSegment(
                     projectionSegment))) {
                 throw new IllegalArgumentException("Only supported shorthand, 
column and crc32 expression projections.");
@@ -83,7 +87,7 @@ public final class HeterogeneousSelectStatementChecker 
extends CommonHeterogeneo
     }
     
     private void checkSupportedWhereSegment() {
-        Optional<WhereSegment> whereSegment = getSqlStatement().getWhere();
+        Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
         if (!whereSegment.isPresent()) {
             return;
         }
@@ -111,10 +115,10 @@ public final class HeterogeneousSelectStatementChecker 
extends CommonHeterogeneo
     }
     
     private void checkSupportedOrderBySegment() {
-        if (!getSqlStatement().getOrderBy().isPresent()) {
+        if (!sqlStatement.getOrderBy().isPresent()) {
             return;
         }
-        for (OrderByItemSegment orderByItemSegment : 
getSqlStatement().getOrderBy().get().getOrderByItems()) {
+        for (OrderByItemSegment orderByItemSegment : 
sqlStatement.getOrderBy().get().getOrderByItems()) {
             if (!(orderByItemSegment instanceof ColumnOrderByItemSegment)) {
                 throw new IllegalArgumentException("Only simple row key order 
by.");
             }
diff --git 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousUpdateStatementChecker.java
 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousUpdateStatementChecker.java
index 746c47df0a5..9296379552f 100644
--- 
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousUpdateStatementChecker.java
+++ 
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HeterogeneousUpdateStatementChecker.java
@@ -26,17 +26,20 @@ import java.util.Collection;
 import java.util.Optional;
 
 /**
- * Checker for update statement.
+ * Update statement checker.
  */
-public class HeterogeneousUpdateStatementChecker extends 
CommonHeterogeneousSQLStatementChecker<UpdateStatement> {
+public final class HeterogeneousUpdateStatementChecker extends 
CommonHeterogeneousSQLStatementChecker {
+    
+    private final UpdateStatement sqlStatement;
     
     public HeterogeneousUpdateStatementChecker(final UpdateStatement 
sqlStatement) {
         super(sqlStatement);
+        this.sqlStatement = sqlStatement;
     }
     
     @Override
     public void execute() {
-        Optional<WhereSegment> whereSegment = getSqlStatement().getWhere();
+        Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
         Preconditions.checkArgument(whereSegment.isPresent(), "Must contain 
where segment.");
         if (whereSegment.get().getExpr() instanceof InExpression) {
             checkInExpressionIsExpected(whereSegment.get().getExpr());
@@ -47,7 +50,7 @@ public class HeterogeneousUpdateStatementChecker extends 
CommonHeterogeneousSQLS
     }
     
     private void checkAssignmentIsOk() {
-        Collection<AssignmentSegment> assignmentSegments = 
getSqlStatement().getSetAssignment().getAssignments();
+        Collection<AssignmentSegment> assignmentSegments = 
sqlStatement.getSetAssignment().getAssignments();
         for (AssignmentSegment assignmentSegment : assignmentSegments) {
             
Preconditions.checkArgument(isAllowExpressionSegment(assignmentSegment.getValue()),
 "Assignment must is literal or parameter marker.");
             boolean isRowKey = ALLOW_KEYS.stream().anyMatch(each -> 
each.equalsIgnoreCase(assignmentSegment.getColumns().iterator().next().getIdentifier().getValue()));
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/checker/CommonHeterogeneousSQLStatementCheckerTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/checker/CommonHeterogeneousSQLStatementCheckerTest.java
index 1775a147daa..a96c1a8871f 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/checker/CommonHeterogeneousSQLStatementCheckerTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/checker/CommonHeterogeneousSQLStatementCheckerTest.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.proxy.backend.hbase.checker;
 import 
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.junit.jupiter.api.Test;
 
@@ -38,14 +37,14 @@ class CommonHeterogeneousSQLStatementCheckerTest {
     void assertIsSinglePoint() {
         SelectStatement sqlStatement = (SelectStatement) 
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from 
t_order where rowKey = '1'");
         assertTrue(sqlStatement.getWhere().isPresent());
-        new 
CommonHeterogeneousSQLStatementChecker<>(sqlStatement).checkIsSinglePointQuery(sqlStatement.getWhere().get());
+        new 
CommonHeterogeneousSQLStatementChecker(sqlStatement).checkIsSinglePointQuery(sqlStatement.getWhere().get());
     }
     
     @Test
     void assertIsSinglePointWithErrorKey() {
         SelectStatement sqlStatement = (SelectStatement) 
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from 
t_order where a = '1'");
         assertTrue(sqlStatement.getWhere().isPresent());
-        Exception ex = assertThrows(IllegalArgumentException.class, () -> new 
CommonHeterogeneousSQLStatementChecker<>(sqlStatement).checkIsSinglePointQuery(sqlStatement.getWhere().get()));
+        Exception ex = assertThrows(IllegalArgumentException.class, () -> new 
CommonHeterogeneousSQLStatementChecker(sqlStatement).checkIsSinglePointQuery(sqlStatement.getWhere().get()));
         assertThat(ex.getMessage(), is("a is not a allowed key."));
     }
     
@@ -53,7 +52,7 @@ class CommonHeterogeneousSQLStatementCheckerTest {
     void assertIsSinglePointWithErrorOperation() {
         SelectStatement sqlStatement = (SelectStatement) 
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from 
t_order where rowKey between '1' and '2' ");
         assertTrue(sqlStatement.getWhere().isPresent());
-        Exception ex = assertThrows(IllegalArgumentException.class, () -> new 
CommonHeterogeneousSQLStatementChecker<>(sqlStatement).checkIsSinglePointQuery(sqlStatement.getWhere().get()));
+        Exception ex = assertThrows(IllegalArgumentException.class, () -> new 
CommonHeterogeneousSQLStatementChecker(sqlStatement).checkIsSinglePointQuery(sqlStatement.getWhere().get()));
         assertThat(ex.getMessage(), is("Only support binary operation 
expression."));
     }
     
@@ -62,7 +61,7 @@ class CommonHeterogeneousSQLStatementCheckerTest {
         SelectStatement sqlStatement = (SelectStatement) 
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from 
t_order where rowKey in ('1', '2') ");
         Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
         assertTrue(whereSegment.isPresent());
-        new 
CommonHeterogeneousSQLStatementChecker<>(sqlStatement).checkInExpressionIsExpected(whereSegment.get().getExpr());
+        new 
CommonHeterogeneousSQLStatementChecker(sqlStatement).checkInExpressionIsExpected(whereSegment.get().getExpr());
     }
     
     @Test
@@ -70,7 +69,7 @@ class CommonHeterogeneousSQLStatementCheckerTest {
         SelectStatement sqlStatement = (SelectStatement) 
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from 
t_order where rowKey not in ('1', '2') ");
         Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
         assertTrue(whereSegment.isPresent());
-        Exception ex = assertThrows(IllegalArgumentException.class, () -> new 
CommonHeterogeneousSQLStatementChecker<>(sqlStatement).checkInExpressionIsExpected(whereSegment.get().getExpr()));
+        Exception ex = assertThrows(IllegalArgumentException.class, () -> new 
CommonHeterogeneousSQLStatementChecker(sqlStatement).checkInExpressionIsExpected(whereSegment.get().getExpr()));
         assertThat(ex.getMessage(), is("Do not supported `not in`."));
     }
     
@@ -79,7 +78,7 @@ class CommonHeterogeneousSQLStatementCheckerTest {
         SelectStatement sqlStatement = (SelectStatement) 
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from 
t_order where a in ('1', '2') ");
         Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
         assertTrue(whereSegment.isPresent());
-        Exception ex = assertThrows(IllegalArgumentException.class, () -> new 
CommonHeterogeneousSQLStatementChecker<>(sqlStatement).checkInExpressionIsExpected(whereSegment.get().getExpr()));
+        Exception ex = assertThrows(IllegalArgumentException.class, () -> new 
CommonHeterogeneousSQLStatementChecker(sqlStatement).checkInExpressionIsExpected(whereSegment.get().getExpr()));
         assertThat(ex.getMessage(), is("a is not a allowed key."));
     }
     
@@ -89,9 +88,9 @@ class CommonHeterogeneousSQLStatementCheckerTest {
         Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
         assertTrue(whereSegment.isPresent());
         BetweenExpression betweenExpression = (BetweenExpression) 
whereSegment.get().getExpr();
-        CommonHeterogeneousSQLStatementChecker<SQLStatement> 
commonHeterogeneousSQLStatementChecker = new 
CommonHeterogeneousSQLStatementChecker<>(sqlStatement);
-        
assertTrue(commonHeterogeneousSQLStatementChecker.isAllowExpressionSegment(betweenExpression.getBetweenExpr()));
-        
assertTrue(commonHeterogeneousSQLStatementChecker.isAllowExpressionSegment(betweenExpression.getAndExpr()));
+        CommonHeterogeneousSQLStatementChecker checker = new 
CommonHeterogeneousSQLStatementChecker(sqlStatement);
+        
assertTrue(checker.isAllowExpressionSegment(betweenExpression.getBetweenExpr()));
+        
assertTrue(checker.isAllowExpressionSegment(betweenExpression.getAndExpr()));
     }
     
     @Test
@@ -99,6 +98,6 @@ class CommonHeterogeneousSQLStatementCheckerTest {
         SelectStatement sqlStatement = (SelectStatement) 
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from 
t_order where rowKey = '1'");
         Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
         assertTrue(whereSegment.isPresent());
-        assertFalse(new 
CommonHeterogeneousSQLStatementChecker<>(sqlStatement).isAllowExpressionSegment(whereSegment.get().getExpr()));
+        assertFalse(new 
CommonHeterogeneousSQLStatementChecker(sqlStatement).isAllowExpressionSegment(whereSegment.get().getExpr()));
     }
 }
diff --git 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HBaseCheckerFactoryTest.java
 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HBaseCheckerFactoryTest.java
index 2e906d8ed67..9f4408e0505 100644
--- 
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HBaseCheckerFactoryTest.java
+++ 
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/checker/HBaseCheckerFactoryTest.java
@@ -35,7 +35,7 @@ class HBaseCheckerFactoryTest {
     @Test
     void assertExecuteSelectStatement() {
         SQLStatement sqlStatement = mock(MySQLSelectStatement.class);
-        HeterogeneousSQLStatementChecker<?> actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
+        HeterogeneousSQLStatementChecker actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
         assertThat(actual, 
instanceOf(HeterogeneousSelectStatementChecker.class));
         assertThat(actual.getSqlStatement(), is(sqlStatement));
     }
@@ -43,7 +43,7 @@ class HBaseCheckerFactoryTest {
     @Test
     void assertExecuteInsertStatement() {
         SQLStatement sqlStatement = mock(MySQLInsertStatement.class);
-        HeterogeneousSQLStatementChecker<?> actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
+        HeterogeneousSQLStatementChecker actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
         assertThat(actual, 
instanceOf(HeterogeneousInsertStatementChecker.class));
         assertThat(actual.getSqlStatement(), is(sqlStatement));
     }
@@ -51,7 +51,7 @@ class HBaseCheckerFactoryTest {
     @Test
     void assertExecuteUpdateStatement() {
         SQLStatement sqlStatement = mock(MySQLUpdateStatement.class);
-        HeterogeneousSQLStatementChecker<?> actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
+        HeterogeneousSQLStatementChecker actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
         assertThat(actual, 
instanceOf(HeterogeneousUpdateStatementChecker.class));
         assertThat(actual.getSqlStatement(), is(sqlStatement));
     }
@@ -59,7 +59,7 @@ class HBaseCheckerFactoryTest {
     @Test
     void assertExecuteDeleteStatement() {
         SQLStatement sqlStatement = mock(MySQLDeleteStatement.class);
-        HeterogeneousSQLStatementChecker<?> actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
+        HeterogeneousSQLStatementChecker actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
         assertThat(actual, 
instanceOf(HeterogeneousDeleteStatementChecker.class));
         assertThat(actual.getSqlStatement(), is(sqlStatement));
     }
@@ -67,7 +67,7 @@ class HBaseCheckerFactoryTest {
     @Test
     void assertExecuteOtherStatement() {
         SQLStatement sqlStatement = mock(MySQLShowCreateTableStatement.class);
-        HeterogeneousSQLStatementChecker<?> actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
+        HeterogeneousSQLStatementChecker actual = 
HBaseCheckerFactory.newInstance(sqlStatement);
         assertThat(actual, 
instanceOf(CommonHeterogeneousSQLStatementChecker.class));
         assertThat(actual.getSqlStatement(), is(sqlStatement));
     }

Reply via email to