This is an automated email from the ASF dual-hosted git repository.

zhaojinchao 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 d391b6b3e8c Refactor ShardingStatementValidator to 
ShardingRouteContextChecker (#33836)
d391b6b3e8c is described below

commit d391b6b3e8c3862648b3efe946e583be4bce5ab1
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri Nov 29 08:27:16 2024 +0800

    Refactor ShardingStatementValidator to ShardingRouteContextChecker (#33836)
    
    * Refactor ShardingStatementValidator to ShardingRouteContextChecker
    
    * Merge too much parameter for RouteContextChecker
---
 .../sharding/route/engine/ShardingSQLRouter.java   | 11 ++--
 .../ShardingRouteContextChecker.java}              | 20 +++-----
 .../ShardingRouteContextCheckerFactory.java}       | 58 +++++++++++-----------
 .../ShardingAlterTableRouteContextChecker.java}    | 18 +++----
 .../ShardingCreateTableRouteContextChecker.java}   | 18 +++----
 .../ShardingCreateViewRouteContextChecker.java}    | 18 +++----
 .../ddl/ShardingDropIndexRouteContextChecker.java} | 19 +++----
 .../ddl/ShardingDropTableRouteContextChecker.java} | 17 +++----
 .../ddl/ShardingPrepareRouteContextChecker.java}   | 15 +++---
 .../ShardingRenameTableRouteContextChecker.java}   | 20 +++-----
 .../dml/ShardingDeleteRouteContextChecker.java}    | 18 +++----
 .../dml/ShardingInsertRouteContextChecker.java}    | 29 +++++------
 .../dml/ShardingUpdateRouteContextChecker.java}    | 25 +++++-----
 .../util/ShardingRouteContextCheckUtils.java}      | 22 ++++----
 ...ShardingAlterTableRouteContextCheckerTest.java} | 23 +++++----
 ...hardingCreateTableRouteContextCheckerTest.java} | 31 ++++++------
 ...ShardingCreateViewRouteContextCheckerTest.java} | 22 ++++----
 .../ShardingDropIndexRouteContextCheckerTest.java} | 23 +++++----
 .../ShardingDropTableRouteContextCheckerTest.java} | 41 +++++++--------
 .../ShardingPrepareRouteContextCheckerTest.java}   | 34 +++++--------
 ...hardingRenameTableRouteContextCheckerTest.java} | 21 ++++----
 .../ShardingInsertRouteContextCheckerTest.java}    | 57 ++++++++++++---------
 .../ShardingUpdateRouteContextCheckerTest.java}    | 33 ++++++------
 23 files changed, 289 insertions(+), 304 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/ShardingSQLRouter.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/ShardingSQLRouter.java
index 0fd20f7c09a..1d62baef30a 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/ShardingSQLRouter.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/ShardingSQLRouter.java
@@ -28,12 +28,11 @@ import 
org.apache.shardingsphere.infra.route.type.TableSQLRouter;
 import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.sharding.cache.route.CachedShardingSQLRouter;
 import org.apache.shardingsphere.sharding.constant.ShardingOrder;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextCheckerFactory;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.engine.ShardingConditionEngine;
 import 
org.apache.shardingsphere.sharding.route.engine.type.ShardingRouteEngineFactory;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidatorFactory;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DMLStatement;
@@ -70,12 +69,11 @@ public final class ShardingSQLRouter implements 
EntranceSQLRouter<ShardingRule>,
         }
         SQLStatement sqlStatement = 
queryContext.getSqlStatementContext().getSqlStatement();
         ShardingConditions shardingConditions = 
createShardingConditions(queryContext, globalRuleMetaData, database, rule);
-        Optional<ShardingStatementValidator> validator = 
ShardingStatementValidatorFactory.newInstance(sqlStatement, shardingConditions);
         if (sqlStatement instanceof DMLStatement && 
shardingConditions.isNeedMerge()) {
             shardingConditions.merge();
         }
         RouteContext result = ShardingRouteEngineFactory.newInstance(rule, 
database, queryContext, shardingConditions, logicTableNames, props).route(rule);
-        validator.ifPresent(optional -> optional.postValidate(rule, 
queryContext.getSqlStatementContext(), queryContext.getHintValueContext(), 
queryContext.getParameters(), database, props, result));
+        checkRouteContext(queryContext, database, rule, props, sqlStatement, 
shardingConditions, result);
         return result;
     }
     
@@ -90,6 +88,11 @@ public final class ShardingSQLRouter implements 
EntranceSQLRouter<ShardingRule>,
         return new ShardingConditions(shardingConditions, 
queryContext.getSqlStatementContext(), rule);
     }
     
+    private void checkRouteContext(final QueryContext queryContext, final 
ShardingSphereDatabase database, final ShardingRule rule, final 
ConfigurationProperties props,
+                                   final SQLStatement sqlStatement, final 
ShardingConditions shardingConditions, final RouteContext routeContext) {
+        ShardingRouteContextCheckerFactory.newInstance(sqlStatement, 
shardingConditions).ifPresent(optional -> optional.check(rule, queryContext, 
database, props, routeContext));
+    }
+    
     @Override
     public int getOrder() {
         return ShardingOrder.ORDER;
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ShardingStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ShardingRouteContextChecker.java
similarity index 61%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ShardingStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ShardingRouteContextChecker.java
index eadc83b753b..68935ed94b4 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ShardingStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ShardingRouteContextChecker.java
@@ -15,33 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator;
+package org.apache.shardingsphere.sharding.route.engine.checker;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
-import java.util.List;
-
 /**
- * Sharding statement validator.
+ * Sharding route context checker.
  */
-public interface ShardingStatementValidator {
+public interface ShardingRouteContextChecker {
     
     /**
-     * Validate whether sharding operation is supported after route.
+     * Check whether sharding operation is supported after route.
      *
      * @param shardingRule sharding rule
-     * @param sqlStatementContext SQL statement context
-     * @param hintValueContext hint value context
-     * @param params SQL parameters
+     * @param queryContext query context
      * @param database database
      * @param props props
      * @param routeContext route context
      */
-    void postValidate(ShardingRule shardingRule, SQLStatementContext 
sqlStatementContext, HintValueContext hintValueContext, List<Object> params,
-                      ShardingSphereDatabase database, ConfigurationProperties 
props, RouteContext routeContext);
+    void check(ShardingRule shardingRule, QueryContext queryContext, 
ShardingSphereDatabase database, ConfigurationProperties props, RouteContext 
routeContext);
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ShardingStatementValidatorFactory.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ShardingRouteContextCheckerFactory.java
similarity index 55%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ShardingStatementValidatorFactory.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ShardingRouteContextCheckerFactory.java
index 327b861369d..8b0aa3ff1da 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ShardingStatementValidatorFactory.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ShardingRouteContextCheckerFactory.java
@@ -15,21 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator;
+package org.apache.shardingsphere.sharding.route.engine.checker;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ddl.ShardingAlterTableRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ddl.ShardingCreateTableRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ddl.ShardingCreateViewRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ddl.ShardingDropIndexRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ddl.ShardingDropTableRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ddl.ShardingPrepareRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ddl.ShardingRenameTableRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.dml.ShardingDeleteRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.dml.ShardingInsertRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.dml.ShardingUpdateRouteContextChecker;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl.ShardingAlterTableStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl.ShardingCreateTableStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl.ShardingCreateViewStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl.ShardingDropIndexStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl.ShardingDropTableStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl.ShardingPrepareStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl.ShardingRenameTableStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.dml.impl.ShardingDeleteStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.dml.impl.ShardingInsertStatementValidator;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.dml.impl.ShardingUpdateStatementValidator;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
@@ -47,62 +47,62 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateS
 import java.util.Optional;
 
 /**
- * Sharding statement validator factory.
+ * Sharding route context checker factory.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ShardingStatementValidatorFactory {
+public final class ShardingRouteContextCheckerFactory {
     
     /**
-     * New instance of sharding statement validator.
+     * New instance of sharding route context checker.
      *
      * @param sqlStatement SQL statement
      * @param shardingConditions sharding conditions
      * @return created instance
      */
-    public static Optional<ShardingStatementValidator> newInstance(final 
SQLStatement sqlStatement, final ShardingConditions shardingConditions) {
+    public static Optional<ShardingRouteContextChecker> newInstance(final 
SQLStatement sqlStatement, final ShardingConditions shardingConditions) {
         if (sqlStatement instanceof DDLStatement) {
-            return getDDLStatementValidator(sqlStatement);
+            return getDDLRouteContextChecker(sqlStatement);
         }
         if (sqlStatement instanceof DMLStatement) {
-            return getDMLStatementValidator(sqlStatement, shardingConditions);
+            return getDMLRouteContextChecker(sqlStatement, shardingConditions);
         }
         return Optional.empty();
     }
     
-    private static Optional<ShardingStatementValidator> 
getDDLStatementValidator(final SQLStatement sqlStatement) {
+    private static Optional<ShardingRouteContextChecker> 
getDDLRouteContextChecker(final SQLStatement sqlStatement) {
         if (sqlStatement instanceof CreateTableStatement) {
-            return Optional.of(new ShardingCreateTableStatementValidator());
+            return Optional.of(new ShardingCreateTableRouteContextChecker());
         }
         if (sqlStatement instanceof CreateViewStatement) {
-            return Optional.of(new ShardingCreateViewStatementValidator());
+            return Optional.of(new ShardingCreateViewRouteContextChecker());
         }
         if (sqlStatement instanceof AlterTableStatement) {
-            return Optional.of(new ShardingAlterTableStatementValidator());
+            return Optional.of(new ShardingAlterTableRouteContextChecker());
         }
         if (sqlStatement instanceof RenameTableStatement) {
-            return Optional.of(new ShardingRenameTableStatementValidator());
+            return Optional.of(new ShardingRenameTableRouteContextChecker());
         }
         if (sqlStatement instanceof DropTableStatement) {
-            return Optional.of(new ShardingDropTableStatementValidator());
+            return Optional.of(new ShardingDropTableRouteContextChecker());
         }
         if (sqlStatement instanceof DropIndexStatement) {
-            return Optional.of(new ShardingDropIndexStatementValidator());
+            return Optional.of(new ShardingDropIndexRouteContextChecker());
         }
         if (sqlStatement instanceof PrepareStatement) {
-            return Optional.of(new ShardingPrepareStatementValidator());
+            return Optional.of(new ShardingPrepareRouteContextChecker());
         }
         return Optional.empty();
     }
     
-    private static Optional<ShardingStatementValidator> 
getDMLStatementValidator(final SQLStatement sqlStatement, final 
ShardingConditions shardingConditions) {
+    private static Optional<ShardingRouteContextChecker> 
getDMLRouteContextChecker(final SQLStatement sqlStatement, final 
ShardingConditions shardingConditions) {
         if (sqlStatement instanceof InsertStatement) {
-            return Optional.of(new 
ShardingInsertStatementValidator(shardingConditions));
+            return Optional.of(new 
ShardingInsertRouteContextChecker(shardingConditions));
         }
         if (sqlStatement instanceof UpdateStatement) {
-            return Optional.of(new ShardingUpdateStatementValidator());
+            return Optional.of(new ShardingUpdateRouteContextChecker());
         }
         if (sqlStatement instanceof DeleteStatement) {
-            return Optional.of(new ShardingDeleteStatementValidator());
+            return Optional.of(new ShardingDeleteRouteContextChecker());
         }
         return Optional.empty();
     }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterTableStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingAlterTableRouteContextChecker.java
similarity index 69%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterTableStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingAlterTableRouteContextChecker.java
index 212a4c9cae0..d352e1b95c8 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterTableStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingAlterTableRouteContextChecker.java
@@ -15,31 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.AlterTableStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.checker.sql.util.ShardingSupportedCheckUtils;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
-import java.util.List;
-
 /**
- * Sharding alter table statement validator.
+ * Sharding alter table route context checker.
  */
-public final class ShardingAlterTableStatementValidator implements 
ShardingStatementValidator {
+public final class ShardingAlterTableRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
-        AlterTableStatementContext alterTableStatementContext = 
(AlterTableStatementContext) sqlStatementContext;
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        AlterTableStatementContext alterTableStatementContext = 
(AlterTableStatementContext) queryContext.getSqlStatementContext();
         String primaryTable = 
alterTableStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
         
ShardingSpherePreconditions.checkState(!ShardingSupportedCheckUtils.isRouteUnitDataNodeDifferentSize(shardingRule,
 routeContext, primaryTable),
                 () -> new ShardingDDLRouteException("ALTER", "TABLE", 
alterTableStatementContext.getTablesContext().getTableNames()));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextChecker.java
similarity index 68%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextChecker.java
index 8c8b8bdb83e..13f9f9f149d 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextChecker.java
@@ -15,30 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateTableStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.checker.sql.util.ShardingSupportedCheckUtils;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
-import java.util.List;
-
 /**
- * Sharding create table statement validator.
+ * Sharding create table route context checker.
  */
-public final class ShardingCreateTableStatementValidator implements 
ShardingStatementValidator {
+public final class ShardingCreateTableRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
-        CreateTableStatementContext createTableStatementContext = 
(CreateTableStatementContext) sqlStatementContext;
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        CreateTableStatementContext createTableStatementContext = 
(CreateTableStatementContext) queryContext.getSqlStatementContext();
         String primaryTable = 
(createTableStatementContext.getSqlStatement()).getTable().getTableName().getIdentifier().getValue();
         if 
(ShardingSupportedCheckUtils.isRouteUnitDataNodeDifferentSize(shardingRule, 
routeContext, primaryTable)) {
             throw new ShardingDDLRouteException("CREATE", "TABLE", 
createTableStatementContext.getTablesContext().getTableNames());
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateViewStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateViewRouteContextChecker.java
similarity index 78%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateViewStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateViewRouteContextChecker.java
index de0071c79f0..e7a60e78686 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateViewStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateViewRouteContextChecker.java
@@ -15,34 +15,30 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedCreateViewException;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.AggregationProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateViewStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
 
-import java.util.List;
-
 /**
- * Sharding create view statement validator.
+ * Sharding create view route context checker.
  */
 @RequiredArgsConstructor
-public final class ShardingCreateViewStatementValidator implements 
ShardingStatementValidator {
+public final class ShardingCreateViewRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
-        SelectStatement selectStatement = ((CreateViewStatement) 
sqlStatementContext.getSqlStatement()).getSelect();
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        SelectStatement selectStatement = ((CreateViewStatement) 
queryContext.getSqlStatementContext().getSqlStatement()).getSelect();
         if (isContainsNotSupportedViewStatement(selectStatement, 
routeContext)) {
             throw new UnsupportedCreateViewException();
         }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextChecker.java
similarity index 79%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextChecker.java
index 445653b89e3..cadc11463fa 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextChecker.java
@@ -15,42 +15,39 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.checker.sql.util.ShardingSupportedCheckUtils;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropIndexStatement;
 
 import java.util.Collection;
-import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
- * Sharding drop index statement validator.
+ * Sharding drop index route context checker.
  */
-public final class ShardingDropIndexStatementValidator implements 
ShardingStatementValidator {
+public final class ShardingDropIndexRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
-        DropIndexStatement dropIndexStatement = (DropIndexStatement) 
sqlStatementContext.getSqlStatement();
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        DropIndexStatement dropIndexStatement = (DropIndexStatement) 
queryContext.getSqlStatementContext().getSqlStatement();
         Collection<IndexSegment> indexSegments = 
dropIndexStatement.getIndexes();
         Optional<String> logicTableName = 
dropIndexStatement.getSimpleTable().map(optional -> 
optional.getTableName().getIdentifier().getValue());
         if (logicTableName.isPresent()) {
             validateDropIndexRouteUnit(shardingRule, routeContext, 
indexSegments, logicTableName.get());
         } else {
-            String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
+            String defaultSchemaName = new 
DatabaseTypeRegistry(queryContext.getSqlStatementContext().getDatabaseType()).getDefaultSchemaName(database.getName());
             for (IndexSegment each : indexSegments) {
                 ShardingSphereSchema schema = each.getOwner().map(optional -> 
optional.getIdentifier().getValue())
                         .map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchemaName));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextChecker.java
similarity index 81%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextChecker.java
index 4466101c033..e6b311e7427 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextChecker.java
@@ -15,40 +15,37 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import com.cedarsoftware.util.CaseInsensitiveSet;
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.DropTableStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.checker.sql.util.ShardingSupportedCheckUtils;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
 import 
org.apache.shardingsphere.sharding.exception.metadata.InUsedTablesException;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
 
 import java.util.Collection;
-import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
- * Sharding drop table statement validator.
+ * Sharding drop table route context checker.
  */
-public final class ShardingDropTableStatementValidator implements 
ShardingStatementValidator {
+public final class ShardingDropTableRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
-        DropTableStatementContext dropTableStatementContext = 
(DropTableStatementContext) sqlStatementContext;
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        DropTableStatementContext dropTableStatementContext = 
(DropTableStatementContext) queryContext.getSqlStatementContext();
         DropTableStatement dropTableStatement = 
dropTableStatementContext.getSqlStatement();
         checkTableInUsed(shardingRule, dropTableStatementContext, 
routeContext);
         for (SimpleTableSegment each : dropTableStatement.getTables()) {
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingPrepareStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingPrepareRouteContextChecker.java
similarity index 69%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingPrepareStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingPrepareRouteContextChecker.java
index 118e5fb2a19..ff152b0a8bb 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingPrepareStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingPrepareRouteContextChecker.java
@@ -15,30 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.connection.EmptyShardingRouteResultException;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedPrepareRouteToSameDataSourceException;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
-import java.util.List;
 import java.util.stream.Collectors;
 
 /**
- * Sharding prepare statement validator.
+ * Sharding prepare route context checker.
  */
-public final class ShardingPrepareStatementValidator implements 
ShardingStatementValidator {
+public final class ShardingPrepareRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
         if (routeContext.getRouteUnits().isEmpty()) {
             throw new EmptyShardingRouteResultException();
         }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingRenameTableStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextChecker.java
similarity index 69%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingRenameTableStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextChecker.java
index c9082db3592..f947034b851 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingRenameTableStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextChecker.java
@@ -15,37 +15,33 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.RenameTableStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.checker.sql.util.ShardingSupportedCheckUtils;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.RenameTableStatement;
 
-import java.util.List;
-
 /**
- * Sharding rename table statement validator.
+ * Sharding rename table route context checker.
  */
-public final class ShardingRenameTableStatementValidator implements 
ShardingStatementValidator {
+public final class ShardingRenameTableRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
-        RenameTableStatement renameTableStatement = (RenameTableStatement) 
sqlStatementContext.getSqlStatement();
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        RenameTableStatement renameTableStatement = (RenameTableStatement) 
queryContext.getSqlStatementContext().getSqlStatement();
         for (RenameTableDefinitionSegment each : 
renameTableStatement.getRenameTables()) {
             String primaryTable = 
each.getTable().getTableName().getIdentifier().getValue();
             
ShardingSpherePreconditions.checkState(!ShardingSupportedCheckUtils.isRouteUnitDataNodeDifferentSize(shardingRule,
 routeContext, primaryTable),
-                    () -> new ShardingDDLRouteException("RENAME", "TABLE", 
((RenameTableStatementContext) 
sqlStatementContext).getTablesContext().getTableNames()));
+                    () -> new ShardingDDLRouteException("RENAME", "TABLE", 
((RenameTableStatementContext) 
queryContext.getSqlStatementContext()).getTablesContext().getTableNames()));
         }
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingDeleteStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingDeleteRouteContextChecker.java
similarity index 59%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingDeleteStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingDeleteRouteContextChecker.java
index f49fe92daf0..82f20e650b0 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingDeleteStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingDeleteRouteContextChecker.java
@@ -15,29 +15,25 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.dml.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.dml;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.syntax.DMLMultipleDataNodesWithLimitException;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.dml.ShardingDMLStatementValidator;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DeleteStatement;
 
-import java.util.List;
-
 /**
- * Sharding delete statement validator.
+ * Sharding delete route context checker.
  */
-public final class ShardingDeleteStatementValidator extends 
ShardingDMLStatementValidator {
+public final class ShardingDeleteRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
-        if (((DeleteStatement) 
sqlStatementContext.getSqlStatement()).getLimit().isPresent() && 
routeContext.getRouteUnits().size() > 1) {
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        if (((DeleteStatement) 
queryContext.getSqlStatementContext().getSqlStatement()).getLimit().isPresent() 
&& routeContext.getRouteUnits().size() > 1) {
             throw new DMLMultipleDataNodesWithLimitException("DELETE");
         }
     }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingInsertRouteContextChecker.java
similarity index 72%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingInsertRouteContextChecker.java
index 81e7282e3a4..f2b34390d23 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingInsertRouteContextChecker.java
@@ -15,21 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.dml.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.dml;
 
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.algorithm.DuplicateInsertDataRecordException;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedShardingOperationException;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedUpdatingShardingValueException;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.util.ShardingRouteContextCheckUtils;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions;
 import 
org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRouteEngine;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.dml.ShardingDMLStatementValidator;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.OnDuplicateKeyColumnsSegment;
@@ -38,20 +39,20 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.InsertS
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Optional;
 
 /**
- * Sharding insert statement validator.
+ * Sharding insert route context checker.
  */
 @RequiredArgsConstructor
-public final class ShardingInsertStatementValidator extends 
ShardingDMLStatementValidator {
+public final class ShardingInsertRouteContextChecker implements 
ShardingRouteContextChecker {
     
     private final ShardingConditions shardingConditions;
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext,
+                      final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        SQLStatementContext sqlStatementContext = 
queryContext.getSqlStatementContext();
         InsertStatement insertStatement = (InsertStatement) 
sqlStatementContext.getSqlStatement();
         Optional<SubquerySegment> insertSelect = 
insertStatement.getInsertSelect();
         String tableName = insertStatement.getTable().map(optional -> 
optional.getTableName().getIdentifier().getValue()).orElse("");
@@ -59,12 +60,12 @@ public final class ShardingInsertStatementValidator extends 
ShardingDMLStatement
             boolean singleRoutingOrSameShardingCondition = 
routeContext.isSingleRouting() || shardingConditions.isSameShardingCondition();
             
ShardingSpherePreconditions.checkState(singleRoutingOrSameShardingCondition, () 
-> new UnsupportedShardingOperationException("INSERT ... SELECT ...", 
tableName));
         }
-        Collection<ColumnAssignmentSegment> assignments = 
insertStatement.getOnDuplicateKeyColumns()
-                
.map(OnDuplicateKeyColumnsSegment::getColumns).orElse(Collections.emptyList());
-        Optional<ShardingConditions> onDuplicateKeyShardingConditions = 
createShardingConditions(sqlStatementContext, shardingRule, assignments, 
params);
-        Optional<RouteContext> onDuplicateKeyRouteContext = 
onDuplicateKeyShardingConditions.map(optional -> new 
ShardingStandardRouteEngine(tableName, optional,
-                sqlStatementContext, hintValueContext, 
props).route(shardingRule));
-        if (onDuplicateKeyRouteContext.isPresent() && 
!isSameRouteContext(routeContext, onDuplicateKeyRouteContext.get())) {
+        Collection<ColumnAssignmentSegment> assignments = 
insertStatement.getOnDuplicateKeyColumns().map(OnDuplicateKeyColumnsSegment::getColumns).orElse(Collections.emptyList());
+        Optional<ShardingConditions> onDuplicateKeyShardingConditions =
+                
ShardingRouteContextCheckUtils.createShardingConditions(sqlStatementContext, 
shardingRule, assignments, queryContext.getParameters());
+        Optional<RouteContext> onDuplicateKeyRouteContext = 
onDuplicateKeyShardingConditions
+                .map(optional -> new ShardingStandardRouteEngine(tableName, 
optional, sqlStatementContext, queryContext.getHintValueContext(), 
props).route(shardingRule));
+        if (onDuplicateKeyRouteContext.isPresent() && 
!ShardingRouteContextCheckUtils.isSameRouteContext(routeContext, 
onDuplicateKeyRouteContext.get())) {
             throw new UnsupportedUpdatingShardingValueException(tableName);
         }
         if (!routeContext.isSingleRouting()) {
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingUpdateStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextChecker.java
similarity index 63%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingUpdateStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextChecker.java
index 8f898831575..a0b5b4dae60 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingUpdateStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextChecker.java
@@ -15,41 +15,42 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.dml.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.dml;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.syntax.DMLMultipleDataNodesWithLimitException;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedUpdatingShardingValueException;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.ShardingRouteContextChecker;
+import 
org.apache.shardingsphere.sharding.route.engine.checker.util.ShardingRouteContextCheckUtils;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions;
 import 
org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRouteEngine;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.dml.ShardingDMLStatementValidator;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateStatement;
 
-import java.util.List;
 import java.util.Optional;
 
 /**
- * Sharding update statement validator.
+ * Sharding update route context checker.
  */
-public final class ShardingUpdateStatementValidator extends 
ShardingDMLStatementValidator {
+public final class ShardingUpdateRouteContextChecker implements 
ShardingRouteContextChecker {
     
     @Override
-    public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext sqlStatementContext, final HintValueContext 
hintValueContext, final List<Object> params,
-                             final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+    public void check(final ShardingRule shardingRule, final QueryContext 
queryContext, final ShardingSphereDatabase database, final 
ConfigurationProperties props, final RouteContext routeContext) {
+        SQLStatementContext sqlStatementContext = 
queryContext.getSqlStatementContext();
         UpdateStatementContext updateStatementContext = 
(UpdateStatementContext) sqlStatementContext;
         String tableName = 
updateStatementContext.getTablesContext().getTableNames().iterator().next();
         UpdateStatement updateStatement = 
updateStatementContext.getSqlStatement();
-        Optional<ShardingConditions> shardingConditions = 
createShardingConditions(sqlStatementContext, shardingRule, 
updateStatement.getSetAssignment().getAssignments(), params);
-        Optional<RouteContext> setAssignmentRouteContext = 
shardingConditions.map(optional -> new ShardingStandardRouteEngine(tableName, 
optional, sqlStatementContext,
-                hintValueContext, props).route(shardingRule));
-        if (setAssignmentRouteContext.isPresent() && 
!isSameRouteContext(routeContext, setAssignmentRouteContext.get())) {
+        Optional<ShardingConditions> shardingConditions =
+                
ShardingRouteContextCheckUtils.createShardingConditions(sqlStatementContext, 
shardingRule, updateStatement.getSetAssignment().getAssignments(), 
queryContext.getParameters());
+        Optional<RouteContext> setAssignmentRouteContext =
+                shardingConditions.map(optional -> new 
ShardingStandardRouteEngine(tableName, optional, sqlStatementContext, 
queryContext.getHintValueContext(), props).route(shardingRule));
+        if (setAssignmentRouteContext.isPresent() && 
!ShardingRouteContextCheckUtils.isSameRouteContext(routeContext, 
setAssignmentRouteContext.get())) {
             throw new UnsupportedUpdatingShardingValueException(tableName);
         }
         
ShardingSpherePreconditions.checkState(!updateStatement.getLimit().isPresent()
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingDMLStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/util/ShardingRouteContextCheckUtils.java
similarity index 86%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingDMLStatementValidator.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/util/ShardingRouteContextCheckUtils.java
index 0a8a69c5712..d0342fecc16 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/ShardingDMLStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/util/ShardingRouteContextCheckUtils.java
@@ -15,8 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.dml;
+package org.apache.shardingsphere.sharding.route.engine.checker.util;
 
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
@@ -26,7 +28,6 @@ import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditi
 import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.value.ListShardingConditionValue;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.value.ShardingConditionValue;
-import 
org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidator;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
@@ -41,9 +42,10 @@ import java.util.List;
 import java.util.Optional;
 
 /**
- * Sharding DML statement validator.
+ * Sharding route context check utility class.
  */
-public abstract class ShardingDMLStatementValidator implements 
ShardingStatementValidator {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShardingRouteContextCheckUtils {
     
     /**
      * Judge whether is same route context or not.
@@ -52,7 +54,7 @@ public abstract class ShardingDMLStatementValidator 
implements ShardingStatement
      * @param subRouteContext  sub route context
      * @return whether is same route context or not
      */
-    protected boolean isSameRouteContext(final RouteContext routeContext, 
final RouteContext subRouteContext) {
+    public static boolean isSameRouteContext(final RouteContext routeContext, 
final RouteContext subRouteContext) {
         if (routeContext.getRouteUnits().size() != 
subRouteContext.getRouteUnits().size()) {
             return false;
         }
@@ -72,7 +74,7 @@ public abstract class ShardingDMLStatementValidator 
implements ShardingStatement
         return true;
     }
     
-    private boolean isSameTableMapper(final Collection<RouteMapper> 
tableMappers, final Collection<RouteMapper> setAssignmentTableMappers) {
+    private static boolean isSameTableMapper(final Collection<RouteMapper> 
tableMappers, final Collection<RouteMapper> setAssignmentTableMappers) {
         if (tableMappers.size() != setAssignmentTableMappers.size()) {
             return false;
         }
@@ -90,7 +92,7 @@ public abstract class ShardingDMLStatementValidator 
implements ShardingStatement
     }
     
     /**
-     * Create shardingConditions.
+     * Create sharding conditions.
      *
      * @param sqlStatementContext SQL statement context
      * @param shardingRule shardingRule
@@ -99,8 +101,8 @@ public abstract class ShardingDMLStatementValidator 
implements ShardingStatement
      * @return sharding conditions
      */
     @SuppressWarnings({"rawtypes", "unchecked"})
-    protected Optional<ShardingConditions> createShardingConditions(final 
SQLStatementContext sqlStatementContext, final ShardingRule shardingRule,
-                                                                    final 
Collection<ColumnAssignmentSegment> assignments, final List<Object> params) {
+    public static Optional<ShardingConditions> createShardingConditions(final 
SQLStatementContext sqlStatementContext, final ShardingRule shardingRule,
+                                                                        final 
Collection<ColumnAssignmentSegment> assignments, final List<Object> params) {
         Collection<ShardingConditionValue> values = new LinkedList<>();
         String tableName = ((TableAvailable) 
sqlStatementContext).getTablesContext().getTableNames().iterator().next();
         for (ColumnAssignmentSegment each : assignments) {
@@ -118,7 +120,7 @@ public abstract class ShardingDMLStatementValidator 
implements ShardingStatement
         return Optional.of(new 
ShardingConditions(Collections.singletonList(shardingCondition), 
sqlStatementContext, shardingRule));
     }
     
-    private Optional<Object> getShardingColumnAssignmentValue(final 
ColumnAssignmentSegment assignmentSegment, final List<Object> params) {
+    private static Optional<Object> getShardingColumnAssignmentValue(final 
ColumnAssignmentSegment assignmentSegment, final List<Object> params) {
         ExpressionSegment segment = assignmentSegment.getValue();
         int shardingSetAssignIndex = -1;
         if (segment instanceof ParameterMarkerExpressionSegment) {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterTableStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingAlterTableRouteContextCheckerTest.java
similarity index 80%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterTableStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingAlterTableRouteContextCheckerTest.java
index 6200434eb41..f36674eea95 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterTableStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingAlterTableRouteContextCheckerTest.java
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.AlterTableStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sharding.rule.ShardingTable;
@@ -49,7 +49,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
-class ShardingAlterTableStatementValidatorTest {
+class ShardingAlterTableRouteContextCheckerTest {
     
     @Mock
     private ShardingRule shardingRule;
@@ -60,8 +60,11 @@ class ShardingAlterTableStatementValidatorTest {
     @Mock
     private RouteContext routeContext;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @Test
-    void 
assertPostValidateAlterTableWithSameRouteResultShardingTableForPostgreSQL() {
+    void assertCheckWithSameRouteResultShardingTableForPostgreSQL() {
         PostgreSQLAlterTableStatement sqlStatement = new 
PostgreSQLAlterTableStatement();
         sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0, 
0, new IdentifierValue("t_order"))));
         when(shardingRule.isShardingTable("t_order")).thenReturn(true);
@@ -70,13 +73,12 @@ class ShardingAlterTableStatementValidatorTest {
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         routeUnits.add(new RouteUnit(new RouteMapper("ds_1", "ds_1"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertDoesNotThrow(() -> new 
ShardingAlterTableStatementValidator().postValidate(
-                shardingRule, new AlterTableStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(), Collections.emptyList(), 
database, mock(ConfigurationProperties.class),
-                routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
AlterTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertDoesNotThrow(() -> new 
ShardingAlterTableRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void 
assertPostValidateAlterTableWithDifferentRouteResultShardingTableForPostgreSQL()
 {
+    void assertCheckWithDifferentRouteResultShardingTableForPostgreSQL() {
         PostgreSQLAlterTableStatement sqlStatement = new 
PostgreSQLAlterTableStatement();
         sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0, 
0, new IdentifierValue("t_order"))));
         when(shardingRule.isShardingTable("t_order")).thenReturn(true);
@@ -84,8 +86,7 @@ class ShardingAlterTableStatementValidatorTest {
         Collection<RouteUnit> routeUnits = new LinkedList<>();
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertThrows(ShardingDDLRouteException.class,
-                () -> new 
ShardingAlterTableStatementValidator().postValidate(shardingRule, new 
AlterTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME),
-                        new HintValueContext(), Collections.emptyList(), 
database, mock(ConfigurationProperties.class), routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
AlterTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertThrows(ShardingDDLRouteException.class, () -> new 
ShardingAlterTableRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextCheckerTest.java
similarity index 75%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextCheckerTest.java
index 7db429ca14e..4e6c0ec408f 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextCheckerTest.java
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateTableStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sharding.rule.ShardingTable;
@@ -49,7 +49,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
-class ShardingCreateTableStatementValidatorTest {
+class ShardingCreateTableRouteContextCheckerTest {
     
     @Mock
     private ShardingRule shardingRule;
@@ -60,8 +60,11 @@ class ShardingCreateTableStatementValidatorTest {
     @Mock
     private RouteContext routeContext;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @Test
-    void 
assertPostValidateCreateTableWithSameRouteResultShardingTableForPostgreSQL() {
+    void assertCheckWithSameRouteResultShardingTableForPostgreSQL() {
         PostgreSQLCreateTableStatement sqlStatement = new 
PostgreSQLCreateTableStatement(false);
         sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0, 
0, new IdentifierValue("t_order"))));
         when(shardingRule.isShardingTable("t_order")).thenReturn(true);
@@ -70,13 +73,12 @@ class ShardingCreateTableStatementValidatorTest {
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         routeUnits.add(new RouteUnit(new RouteMapper("ds_1", "ds_1"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertDoesNotThrow(() -> new 
ShardingCreateTableStatementValidator().postValidate(
-                shardingRule, new CreateTableStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(), Collections.emptyList(), 
database, mock(ConfigurationProperties.class),
-                routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
CreateTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertDoesNotThrow(() -> new 
ShardingCreateTableRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void 
assertPostValidateCreateTableWithDifferentRouteResultShardingTableForPostgreSQL()
 {
+    void assertCheckWithDifferentRouteResultShardingTableForPostgreSQL() {
         PostgreSQLCreateTableStatement sqlStatement = new 
PostgreSQLCreateTableStatement(false);
         sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0, 
0, new IdentifierValue("t_order"))));
         when(shardingRule.isShardingTable("t_order")).thenReturn(true);
@@ -84,17 +86,16 @@ class ShardingCreateTableStatementValidatorTest {
         Collection<RouteUnit> routeUnits = new LinkedList<>();
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertThrows(ShardingDDLRouteException.class, () -> new 
ShardingCreateTableStatementValidator().postValidate(shardingRule,
-                new CreateTableStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(), Collections.emptyList(), 
database, mock(ConfigurationProperties.class),
-                routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
CreateTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertThrows(ShardingDDLRouteException.class,
+                () -> new 
ShardingCreateTableRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void 
assertPostValidateCreateTableWithSameRouteResultBroadcastTableForPostgreSQL() {
+    void assertCheckWithSameRouteResultBroadcastTableForPostgreSQL() {
         PostgreSQLCreateTableStatement sqlStatement = new 
PostgreSQLCreateTableStatement(false);
         sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0, 
0, new IdentifierValue("t_config"))));
-        assertDoesNotThrow(() -> new 
ShardingCreateTableStatementValidator().postValidate(
-                shardingRule, new CreateTableStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(), Collections.emptyList(), 
database, mock(ConfigurationProperties.class),
-                routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
CreateTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertDoesNotThrow(() -> new 
ShardingCreateTableRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateViewStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateViewRouteContextCheckerTest.java
similarity index 81%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateViewStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateViewRouteContextCheckerTest.java
index 145bf13fd8b..36969868e6b 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateViewStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateViewRouteContextCheckerTest.java
@@ -15,13 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateViewStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedCreateViewException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionsSegment;
@@ -39,7 +39,6 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
 
-import java.util.Collections;
 import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -49,7 +48,7 @@ import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
 @MockitoSettings(strictness = Strictness.LENIENT)
-class ShardingCreateViewStatementValidatorTest {
+class ShardingCreateViewRouteContextCheckerTest {
     
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private RouteContext routeContext;
@@ -66,6 +65,9 @@ class ShardingCreateViewStatementValidatorTest {
     @Mock
     private SelectStatement selectStatement;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @BeforeEach
     void setUp() {
         
when(createViewStatementContext.getSqlStatement()).thenReturn(createViewStatement);
@@ -76,20 +78,20 @@ class ShardingCreateViewStatementValidatorTest {
     }
     
     @Test
-    void assertPostValidateCreateView() {
+    void assertCheck() {
         ProjectionsSegment projectionsSegment = mock(ProjectionsSegment.class);
         when(selectStatement.getProjections()).thenReturn(projectionsSegment);
-        assertDoesNotThrow(() -> new 
ShardingCreateViewStatementValidator().postValidate(
-                shardingRule, createViewStatementContext, new 
HintValueContext(), Collections.emptyList(), 
mock(ShardingSphereDatabase.class), mock(ConfigurationProperties.class), 
routeContext));
+        
when(queryContext.getSqlStatementContext()).thenReturn(createViewStatementContext);
+        assertDoesNotThrow(() -> new 
ShardingCreateViewRouteContextChecker().check(shardingRule, queryContext, 
mock(ShardingSphereDatabase.class), mock(ConfigurationProperties.class), 
routeContext));
     }
     
     @Test
-    void assertPostValidateCreateViewWithException() {
+    void assertCheckWithException() {
         ProjectionsSegment projectionsSegment = mock(ProjectionsSegment.class);
         when(projectionsSegment.isDistinctRow()).thenReturn(true);
         when(selectStatement.getProjections()).thenReturn(projectionsSegment);
+        
when(queryContext.getSqlStatementContext()).thenReturn(createViewStatementContext);
         assertThrows(UnsupportedCreateViewException.class,
-                () -> new 
ShardingCreateViewStatementValidator().postValidate(shardingRule,
-                        createViewStatementContext, new HintValueContext(), 
Collections.emptyList(), mock(ShardingSphereDatabase.class), 
mock(ConfigurationProperties.class), routeContext));
+                () -> new 
ShardingCreateViewRouteContextChecker().check(shardingRule, queryContext, 
mock(ShardingSphereDatabase.class), mock(ConfigurationProperties.class), 
routeContext));
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextCheckerTest.java
similarity index 83%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextCheckerTest.java
index 17b1bc35f30..21fa1aaa3d5 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextCheckerTest.java
@@ -15,17 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.DropIndexStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sharding.rule.ShardingTable;
@@ -50,7 +50,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
-class ShardingDropIndexStatementValidatorTest {
+class ShardingDropIndexRouteContextCheckerTest {
     
     @Mock
     private ShardingRule shardingRule;
@@ -61,8 +61,11 @@ class ShardingDropIndexStatementValidatorTest {
     @Mock
     private RouteContext routeContext;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @Test
-    void 
assertPostValidateDropIndexWithSameRouteResultShardingTableIndexForPostgreSQL() 
{
+    void assertCheckWithSameRouteResultShardingTableIndexForPostgreSQL() {
         PostgreSQLDropIndexStatement sqlStatement = new 
PostgreSQLDropIndexStatement(false);
         sqlStatement.getIndexes().add(new IndexSegment(0, 0, new 
IndexNameSegment(0, 0, new IdentifierValue("t_order_index"))));
         sqlStatement.getIndexes().add(new IndexSegment(0, 0, new 
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
@@ -76,13 +79,12 @@ class ShardingDropIndexStatementValidatorTest {
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         routeUnits.add(new RouteUnit(new RouteMapper("ds_1", "ds_1"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertDoesNotThrow(() -> new 
ShardingDropIndexStatementValidator().postValidate(
-                shardingRule, new DropIndexStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(), Collections.emptyList(), 
database, mock(ConfigurationProperties.class),
-                routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
DropIndexStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertDoesNotThrow(() -> new 
ShardingDropIndexRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void 
assertPostValidateDropIndexWithDifferentRouteResultShardingTableIndexForPostgreSQL()
 {
+    void assertCheckWithDifferentRouteResultShardingTableIndexForPostgreSQL() {
         PostgreSQLDropIndexStatement sqlStatement = new 
PostgreSQLDropIndexStatement(false);
         sqlStatement.getIndexes().add(new IndexSegment(0, 0, new 
IndexNameSegment(0, 0, new IdentifierValue("t_order_index"))));
         sqlStatement.getIndexes().add(new IndexSegment(0, 0, new 
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
@@ -95,8 +97,7 @@ class ShardingDropIndexStatementValidatorTest {
         Collection<RouteUnit> routeUnits = new LinkedList<>();
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertThrows(ShardingDDLRouteException.class,
-                () -> new 
ShardingDropIndexStatementValidator().postValidate(shardingRule, new 
DropIndexStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME), new 
HintValueContext(),
-                        Collections.emptyList(), database, 
mock(ConfigurationProperties.class), routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
DropIndexStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertThrows(ShardingDDLRouteException.class, () -> new 
ShardingDropIndexRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextCheckerTest.java
similarity index 79%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextCheckerTest.java
index cc249fc8a4a..37b8b9b24de 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropTableRouteContextCheckerTest.java
@@ -15,17 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.DropTableStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import org.apache.shardingsphere.infra.datanode.DataNode;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
 import 
org.apache.shardingsphere.sharding.exception.metadata.InUsedTablesException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
@@ -60,7 +60,7 @@ import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
 @MockitoSettings(strictness = Strictness.LENIENT)
-class ShardingDropTableStatementValidatorTest {
+class ShardingDropTableRouteContextCheckerTest {
     
     @Mock
     private ShardingRule shardingRule;
@@ -68,6 +68,9 @@ class ShardingDropTableStatementValidatorTest {
     @Mock
     private RouteContext routeContext;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @BeforeEach
     void init() {
         Map<String, ShardingTable> shardingTables = new LinkedHashMap<>(2, 1F);
@@ -77,7 +80,7 @@ class ShardingDropTableStatementValidatorTest {
     }
     
     @Test
-    void assertPostValidateWhenDropTableInUsedForMySQL() {
+    void assertCheckWhenDropTableInUsedForMySQL() {
         MySQLDropTableStatement sqlStatement = new 
MySQLDropTableStatement(false);
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_order_item"))));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
@@ -92,10 +95,8 @@ class ShardingDropTableStatementValidatorTest {
         routeUnits.add(routeUnit);
         RouteContext routeContext = mock(RouteContext.class);
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertThrows(InUsedTablesException.class,
-                () -> new 
ShardingDropTableStatementValidator().postValidate(shardingRule, new 
DropTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME), new 
HintValueContext(),
-                        Collections.emptyList(), database,
-                        mock(ConfigurationProperties.class), routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
DropTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertThrows(InUsedTablesException.class, () -> new 
ShardingDropTableRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
     
     private ShardingTable createShardingTable(final String tableName) {
@@ -118,7 +119,7 @@ class ShardingDropTableStatementValidatorTest {
     }
     
     @Test
-    void 
assertPostValidateDropTableWithSameRouteResultShardingTableForPostgreSQL() {
+    void assertCheckWithSameRouteResultShardingTableForPostgreSQL() {
         PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement(false, false);
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_order"))));
         when(shardingRule.isShardingTable("t_order")).thenReturn(true);
@@ -127,13 +128,13 @@ class ShardingDropTableStatementValidatorTest {
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singleton(new RouteMapper("t_order", "t_order_0"))));
         routeUnits.add(new RouteUnit(new RouteMapper("ds_1", "ds_1"), 
Collections.singleton(new RouteMapper("t_order", "t_order_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertDoesNotThrow(() -> new 
ShardingDropTableStatementValidator().postValidate(
-                shardingRule, new DropTableStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(), Collections.emptyList(),
-                mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS), 
mock(ConfigurationProperties.class), routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
DropTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertDoesNotThrow(() -> new 
ShardingDropTableRouteContextChecker().check(shardingRule, queryContext, 
mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS),
+                mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void 
assertPostValidateDropTableWithDifferentRouteResultShardingTableForPostgreSQL() 
{
+    void assertCheckWithDifferentRouteResultShardingTableForPostgreSQL() {
         PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement(false, false);
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_order"))));
         when(shardingRule.isShardingTable("t_order")).thenReturn(true);
@@ -141,13 +142,13 @@ class ShardingDropTableStatementValidatorTest {
         Collection<RouteUnit> routeUnits = new LinkedList<>();
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singleton(new RouteMapper("t_order", "t_order_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertThrows(ShardingDDLRouteException.class,
-                () -> new 
ShardingDropTableStatementValidator().postValidate(shardingRule, new 
DropTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME), new 
HintValueContext(),
-                        Collections.emptyList(), 
mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS), 
mock(ConfigurationProperties.class), routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
DropTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertThrows(ShardingDDLRouteException.class, () -> new 
ShardingDropTableRouteContextChecker().check(shardingRule, queryContext, 
mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS),
+                mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void 
assertPostValidateDropTableWithSameRouteResultBroadcastTableForPostgreSQL() {
+    void assertCheckWithSameRouteResultBroadcastTableForPostgreSQL() {
         PostgreSQLDropTableStatement sqlStatement = new 
PostgreSQLDropTableStatement(false, false);
         sqlStatement.getTables().add(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_config"))));
         when(shardingRule.getShardingTable("t_config")).thenReturn(new 
ShardingTable(Arrays.asList("ds_0", "ds_1"), "t_config"));
@@ -155,8 +156,8 @@ class ShardingDropTableStatementValidatorTest {
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"), 
Collections.singleton(new RouteMapper("t_config", "t_config"))));
         routeUnits.add(new RouteUnit(new RouteMapper("ds_1", "ds_1"), 
Collections.singleton(new RouteMapper("t_config", "t_config"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertDoesNotThrow(() -> new 
ShardingDropTableStatementValidator().postValidate(
-                shardingRule, new DropTableStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(),
-                Collections.emptyList(), mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS), mock(ConfigurationProperties.class), routeContext));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
DropTableStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME));
+        assertDoesNotThrow(() -> new 
ShardingDropTableRouteContextChecker().check(shardingRule, queryContext, 
mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS),
+                mock(ConfigurationProperties.class), routeContext));
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingPrepareStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingPrepareRouteContextCheckerTest.java
similarity index 63%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingPrepareStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingPrepareRouteContextCheckerTest.java
index 75436fec744..3a9542be300 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingPrepareStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingPrepareRouteContextCheckerTest.java
@@ -15,21 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
-import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.PrepareStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.connection.EmptyShardingRouteResultException;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedPrepareRouteToSameDataSourceException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.PrepareStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLPrepareStatement;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
@@ -46,7 +42,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
-class ShardingPrepareStatementValidatorTest {
+class ShardingPrepareRouteContextCheckerTest {
     
     @Mock
     private ShardingRule shardingRule;
@@ -57,38 +53,34 @@ class ShardingPrepareStatementValidatorTest {
     @Mock
     private RouteContext routeContext;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @Test
-    void assertPostValidatePrepareWithEmptyRouteResultForPostgreSQL() {
-        PrepareStatement sqlStatement = new PostgreSQLPrepareStatement();
+    void assertCheckWithEmptyRouteResultForPostgreSQL() {
         when(routeContext.getRouteUnits()).thenReturn(Collections.emptyList());
         assertThrows(EmptyShardingRouteResultException.class,
-                () -> new 
ShardingPrepareStatementValidator().postValidate(shardingRule, new 
PrepareStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME), new 
HintValueContext(),
-                        Collections.emptyList(), database, 
mock(ConfigurationProperties.class), routeContext));
+                () -> new 
ShardingPrepareRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void assertPostValidatePrepareWithDifferentDataSourceForPostgreSQL() {
-        PrepareStatement sqlStatement = new PostgreSQLPrepareStatement();
+    void assertCheckWithDifferentDataSourceForPostgreSQL() {
         Collection<RouteUnit> routeUnits = new LinkedList<>();
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"),
                 Arrays.asList(new RouteMapper("t_order", "t_order_0"), new 
RouteMapper("t_order_item", "t_order_item_0"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        assertDoesNotThrow(() -> new 
ShardingPrepareStatementValidator().postValidate(
-                shardingRule, new PrepareStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(), Collections.emptyList(), 
database, mock(ConfigurationProperties.class),
-                routeContext));
+        assertDoesNotThrow(() -> new 
ShardingPrepareRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void assertPostValidatePrepareWithSameDataSourceForPostgreSQL() {
+    void assertCheckWithSameDataSourceForPostgreSQL() {
         Collection<RouteUnit> routeUnits = new LinkedList<>();
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"),
                 Arrays.asList(new RouteMapper("t_order", "t_order_0"), new 
RouteMapper("t_order_item", "t_order_item_0"))));
         routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"),
                 Arrays.asList(new RouteMapper("t_order", "t_order_0"), new 
RouteMapper("t_order_item", "t_order_item_1"))));
         when(routeContext.getRouteUnits()).thenReturn(routeUnits);
-        PrepareStatement sqlStatement = new PostgreSQLPrepareStatement();
-        assertThrows(UnsupportedPrepareRouteToSameDataSourceException.class, 
() -> new ShardingPrepareStatementValidator().postValidate(
-                shardingRule, new PrepareStatementContext(sqlStatement, 
DefaultDatabase.LOGIC_NAME), new HintValueContext(), Collections.emptyList(), 
database, mock(ConfigurationProperties.class),
-                routeContext));
+        assertThrows(UnsupportedPrepareRouteToSameDataSourceException.class,
+                () -> new 
ShardingPrepareRouteContextChecker().check(shardingRule, queryContext, 
database, mock(ConfigurationProperties.class), routeContext));
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingRenameTableStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
similarity index 85%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingRenameTableStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
index 4224543e7f1..4c99f5ccf23 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingRenameTableStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingRenameTableRouteContextCheckerTest.java
@@ -15,17 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.RenameTableStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import org.apache.shardingsphere.infra.datanode.DataNode;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.sharding.exception.connection.ShardingDDLRouteException;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sharding.rule.ShardingTable;
@@ -48,13 +48,16 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
-class ShardingRenameTableStatementValidatorTest {
+class ShardingRenameTableRouteContextCheckerTest {
     
     @Mock
     private ShardingRule shardingRule;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @Test
-    void assertPostValidateDifferentRouteUnitsAndDataNodesSize() {
+    void assertCheckDifferentRouteUnitsAndDataNodesSize() {
         RouteContext routeContext = new RouteContext();
         routeContext.getRouteUnits().add(mock(RouteUnit.class));
         ShardingTable shardingTable = mock(ShardingTable.class);
@@ -64,12 +67,12 @@ class ShardingRenameTableStatementValidatorTest {
         SQLStatementContext sqlStatementContext = 
createRenameTableStatementContext();
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
         ConfigurationProperties props = mock(ConfigurationProperties.class);
-        assertThrows(ShardingDDLRouteException.class,
-                () -> new 
ShardingRenameTableStatementValidator().postValidate(shardingRule, 
sqlStatementContext, new HintValueContext(), Collections.emptyList(), database, 
props, routeContext));
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        assertThrows(ShardingDDLRouteException.class, () -> new 
ShardingRenameTableRouteContextChecker().check(shardingRule, queryContext, 
database, props, routeContext));
     }
     
     @Test
-    void assertPostValidateNormalCase() {
+    void assertCheckNormalCase() {
         RouteContext routeContext = new RouteContext();
         routeContext.getRouteUnits().add(mock(RouteUnit.class));
         ShardingTable shardingTable = mock(ShardingTable.class);
@@ -79,8 +82,8 @@ class ShardingRenameTableStatementValidatorTest {
         SQLStatementContext sqlStatementContext = 
createRenameTableStatementContext();
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
         ConfigurationProperties props = mock(ConfigurationProperties.class);
-        assertDoesNotThrow(() -> new 
ShardingRenameTableStatementValidator().postValidate(
-                shardingRule, sqlStatementContext, new HintValueContext(), 
Collections.emptyList(), database, props, routeContext));
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        assertDoesNotThrow(() -> new 
ShardingRenameTableRouteContextChecker().check(shardingRule, queryContext, 
database, props, routeContext));
     }
     
     private SQLStatementContext createRenameTableStatementContext() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingInsertRouteContextCheckerTest.java
similarity index 81%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingInsertRouteContextCheckerTest.java
index 36d2d13447f..219c3b40ee5 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingInsertStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingInsertRouteContextCheckerTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.dml.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.dml;
 
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
@@ -24,7 +24,6 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.datanode.DataNode;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
@@ -33,6 +32,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.exception.algorithm.DuplicateInsertDataRecordException;
@@ -76,11 +76,14 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
-class ShardingInsertStatementValidatorTest {
+class ShardingInsertRouteContextCheckerTest {
     
     @Mock
     private ShardingRule shardingRule;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @Mock
     private RouteContext routeContext;
     
@@ -91,11 +94,11 @@ class ShardingInsertStatementValidatorTest {
     private ShardingSphereDatabase database;
     
     @Test
-    void assertPostValidateWhenInsertWithSingleRouting() {
+    void assertCheckWhenInsertWithSingleRouting() {
         SQLStatementContext sqlStatementContext = 
createInsertStatementContext(Collections.singletonList(1), 
createInsertStatement());
         when(routeContext.isSingleRouting()).thenReturn(true);
-        assertDoesNotThrow(() -> new 
ShardingInsertStatementValidator(shardingConditions).postValidate(shardingRule, 
sqlStatementContext, new HintValueContext(),
-                Collections.emptyList(), database, 
mock(ConfigurationProperties.class), routeContext));
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        assertDoesNotThrow(() -> new 
ShardingInsertRouteContextChecker(shardingConditions).check(shardingRule, 
queryContext, database, mock(ConfigurationProperties.class), routeContext));
     }
     
     private InsertStatementContext createInsertStatementContext(final 
List<Object> params, final InsertStatement insertStatement) {
@@ -106,57 +109,63 @@ class ShardingInsertStatementValidatorTest {
     }
     
     @Test
-    void assertPostValidateWhenInsertWithBroadcastTable() {
+    void assertCheckWhenInsertWithBroadcastTable() {
         SQLStatementContext sqlStatementContext = 
createInsertStatementContext(Collections.singletonList(1), 
createInsertStatement());
         when(routeContext.isSingleRouting()).thenReturn(false);
-        assertDoesNotThrow(() -> new 
ShardingInsertStatementValidator(shardingConditions).postValidate(shardingRule, 
sqlStatementContext, new HintValueContext(),
-                Collections.emptyList(), database, 
mock(ConfigurationProperties.class), routeContext));
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        assertDoesNotThrow(() -> new 
ShardingInsertRouteContextChecker(shardingConditions).check(shardingRule, 
queryContext, database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void assertPostValidateWhenInsertWithRoutingToSingleDataNode() {
+    void assertCheckWhenInsertWithRoutingToSingleDataNode() {
         SQLStatementContext sqlStatementContext = 
createInsertStatementContext(Collections.singletonList(1), 
createInsertStatement());
         when(routeContext.isSingleRouting()).thenReturn(false);
         
when(routeContext.getOriginalDataNodes()).thenReturn(getSingleRouteDataNodes());
-        assertDoesNotThrow(() -> new 
ShardingInsertStatementValidator(shardingConditions).postValidate(shardingRule, 
sqlStatementContext, new HintValueContext(),
-                Collections.emptyList(), database, 
mock(ConfigurationProperties.class), routeContext));
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        assertDoesNotThrow(() -> new 
ShardingInsertRouteContextChecker(shardingConditions).check(shardingRule, 
queryContext, database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void assertPostValidateWhenInsertWithRoutingToMultipleDataNodes() {
+    void assertCheckWhenInsertWithRoutingToMultipleDataNodes() {
         SQLStatementContext sqlStatementContext = 
createInsertStatementContext(Collections.singletonList(1), 
createInsertStatement());
         when(routeContext.isSingleRouting()).thenReturn(false);
         
when(routeContext.getOriginalDataNodes()).thenReturn(getMultipleRouteDataNodes());
-        assertThrows(DuplicateInsertDataRecordException.class, () -> new 
ShardingInsertStatementValidator(shardingConditions).postValidate(shardingRule, 
sqlStatementContext, new HintValueContext(),
-                Collections.emptyList(), database, 
mock(ConfigurationProperties.class), routeContext));
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        assertThrows(DuplicateInsertDataRecordException.class,
+                () -> new 
ShardingInsertRouteContextChecker(shardingConditions).check(shardingRule, 
queryContext, database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void assertPostValidateWhenNotOnDuplicateKeyUpdateShardingColumn() {
+    void assertCheckWhenNotOnDuplicateKeyUpdateShardingColumn() {
         List<Object> params = Collections.singletonList(1);
         RouteContext routeContext = mock(RouteContext.class);
         when(routeContext.isSingleRouting()).thenReturn(true);
         InsertStatementContext insertStatementContext = 
createInsertStatementContext(params, createInsertStatement());
-        assertDoesNotThrow(() -> new 
ShardingInsertStatementValidator(mock(ShardingConditions.class)).postValidate(
-                shardingRule, insertStatementContext, new HintValueContext(), 
params, database, mock(ConfigurationProperties.class), routeContext));
+        
when(queryContext.getSqlStatementContext()).thenReturn(insertStatementContext);
+        when(queryContext.getParameters()).thenReturn(params);
+        assertDoesNotThrow(() -> new 
ShardingInsertRouteContextChecker(mock(ShardingConditions.class)).check(shardingRule,
 queryContext, database, mock(ConfigurationProperties.class), routeContext));
     }
     
     @Test
-    void 
assertPostValidateWhenOnDuplicateKeyUpdateShardingColumnWithSameRouteContext() {
+    void 
assertCheckWhenOnDuplicateKeyUpdateShardingColumnWithSameRouteContext() {
         mockShardingRuleForUpdateShardingColumn();
         List<Object> params = Collections.singletonList(1);
         InsertStatementContext insertStatementContext = 
createInsertStatementContext(params, createInsertStatement());
-        assertDoesNotThrow(() -> new 
ShardingInsertStatementValidator(mock(ShardingConditions.class)).postValidate(shardingRule,
-                insertStatementContext, new HintValueContext(), params, 
database, mock(ConfigurationProperties.class), createSingleRouteContext()));
+        
when(queryContext.getSqlStatementContext()).thenReturn(insertStatementContext);
+        when(queryContext.getParameters()).thenReturn(params);
+        assertDoesNotThrow(() -> new 
ShardingInsertRouteContextChecker(mock(ShardingConditions.class)).check(shardingRule,
 queryContext, database, mock(ConfigurationProperties.class),
+                createSingleRouteContext()));
     }
     
     @Test
-    void 
assertPostValidateWhenOnDuplicateKeyUpdateShardingColumnWithDifferentRouteContext()
 {
+    void 
assertCheckWhenOnDuplicateKeyUpdateShardingColumnWithDifferentRouteContext() {
         mockShardingRuleForUpdateShardingColumn();
         List<Object> params = Collections.singletonList(1);
         InsertStatementContext insertStatementContext = 
createInsertStatementContext(params, createInsertStatement());
-        assertThrows(UnsupportedUpdatingShardingValueException.class, () -> 
new 
ShardingInsertStatementValidator(mock(ShardingConditions.class)).postValidate(shardingRule,
-                insertStatementContext, new HintValueContext(), params, 
database, mock(ConfigurationProperties.class), createFullRouteContext()));
+        
when(queryContext.getSqlStatementContext()).thenReturn(insertStatementContext);
+        when(queryContext.getParameters()).thenReturn(params);
+        assertThrows(UnsupportedUpdatingShardingValueException.class,
+                () -> new 
ShardingInsertRouteContextChecker(mock(ShardingConditions.class)).check(shardingRule,
 queryContext, database, mock(ConfigurationProperties.class), 
createFullRouteContext()));
     }
     
     private void mockShardingRuleForUpdateShardingColumn() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingUpdateStatementValidatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
similarity index 79%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingUpdateStatementValidatorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
index c2856b2b1df..4503322886c 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/dml/impl/ShardingUpdateStatementValidatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.route.engine.validator.dml.impl;
+package org.apache.shardingsphere.sharding.route.engine.checker.dml;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.exception.syntax.UnsupportedUpdatingShardingValueException;
@@ -60,41 +60,44 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
-class ShardingUpdateStatementValidatorTest {
+class ShardingUpdateRouteContextCheckerTest {
     
     @Mock
     private ShardingRule shardingRule;
     
+    @Mock
+    private QueryContext queryContext;
+    
     @Mock
     private ShardingSphereDatabase database;
     
     @Test
-    void assertPostValidateWhenNotUpdateShardingColumn() {
+    void assertCheckWhenNotUpdateShardingColumn() {
         UpdateStatementContext sqlStatementContext = new 
UpdateStatementContext(createUpdateStatement(), DefaultDatabase.LOGIC_NAME);
-        assertDoesNotThrow(() -> new 
ShardingUpdateStatementValidator().postValidate(shardingRule,
-                sqlStatementContext, new HintValueContext(), 
Collections.emptyList(), database, mock(ConfigurationProperties.class), 
mock(RouteContext.class)));
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        assertDoesNotThrow(() -> new 
ShardingUpdateRouteContextChecker().check(shardingRule, queryContext, database, 
mock(ConfigurationProperties.class), mock(RouteContext.class)));
     }
     
     @Test
-    void assertPostValidateWhenUpdateShardingColumnWithSameRouteContext() {
+    void assertCheckWhenUpdateShardingColumnWithSameRouteContext() {
         mockShardingRuleForUpdateShardingColumn();
-        assertDoesNotThrow(() -> new 
ShardingUpdateStatementValidator().postValidate(shardingRule, new 
UpdateStatementContext(createUpdateStatement(), DefaultDatabase.LOGIC_NAME),
-                new HintValueContext(), Collections.emptyList(), database, 
mock(ConfigurationProperties.class), createSingleRouteContext()));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
UpdateStatementContext(createUpdateStatement(), DefaultDatabase.LOGIC_NAME));
+        assertDoesNotThrow(() -> new 
ShardingUpdateRouteContextChecker().check(shardingRule, queryContext, database, 
mock(ConfigurationProperties.class), createSingleRouteContext()));
     }
     
     @Test
-    void assertPostValidateWhenTableNameIsBroadcastTable() {
+    void assertCheckWhenTableNameIsBroadcastTable() {
         mockShardingRuleForUpdateShardingColumn();
-        assertDoesNotThrow(() -> new 
ShardingUpdateStatementValidator().postValidate(shardingRule, new 
UpdateStatementContext(createUpdateStatement(), DefaultDatabase.LOGIC_NAME),
-                new HintValueContext(), Collections.emptyList(), database, 
mock(ConfigurationProperties.class), createSingleRouteContext()));
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
UpdateStatementContext(createUpdateStatement(), DefaultDatabase.LOGIC_NAME));
+        assertDoesNotThrow(() -> new 
ShardingUpdateRouteContextChecker().check(shardingRule, queryContext, database, 
mock(ConfigurationProperties.class), createSingleRouteContext()));
     }
     
     @Test
-    void assertPostValidateWhenUpdateShardingColumnWithDifferentRouteContext() 
{
+    void assertCheckWhenUpdateShardingColumnWithDifferentRouteContext() {
         mockShardingRuleForUpdateShardingColumn();
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
UpdateStatementContext(createUpdateStatement(), DefaultDatabase.LOGIC_NAME));
         assertThrows(UnsupportedUpdatingShardingValueException.class,
-                () -> new 
ShardingUpdateStatementValidator().postValidate(shardingRule, new 
UpdateStatementContext(createUpdateStatement(), DefaultDatabase.LOGIC_NAME), 
new HintValueContext(),
-                        Collections.emptyList(), database, 
mock(ConfigurationProperties.class), createFullRouteContext()));
+                () -> new 
ShardingUpdateRouteContextChecker().check(shardingRule, queryContext, database, 
mock(ConfigurationProperties.class), createFullRouteContext()));
     }
     
     private void mockShardingRuleForUpdateShardingColumn() {

Reply via email to