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() {