This is an automated email from the ASF dual-hosted git repository.
chengzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 4d30358a266 Move tableless route in single to
TablelessRouteEngineFactory and refactor single validator (#33830)
4d30358a266 is described below
commit 4d30358a2664183993e75711491d874afe1a1b7c
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Nov 27 17:23:22 2024 +0800
Move tableless route in single to TablelessRouteEngineFactory and refactor
single validator (#33830)
* Move tableless route in single to TablelessRouteEngineFactory and
refactor single validator
* fix unit test
---
.../EncryptOrderByItemSupportedChecker.java | 5 +-
.../EncryptPredicateColumnSupportedChecker.java | 7 ++-
...ryptInsertSelectProjectionSupportedChecker.java | 5 +-
.../EncryptSelectProjectionSupportedChecker.java | 3 +-
.../EncryptOrderByItemSupportedCheckerTest.java | 6 +-
...EncryptPredicateColumnSupportedCheckerTest.java | 6 +-
...InsertSelectProjectionSupportedCheckerTest.java | 4 +-
...ncryptSelectProjectionSupportedCheckerTest.java | 6 +-
.../infra/checker/SupportedSQLCheckEngine.java | 12 ++--
.../infra/checker/SupportedSQLChecker.java | 6 +-
.../infra/connection/kernel/KernelProcessor.java | 2 +-
.../tableless/TablelessRouteEngineFactory.java | 14 ++++-
.../tableless/TablelessRouteEngineFactoryTest.java | 27 +++++++++
.../SingleRuleConfigurationEmptyChecker.java | 2 +-
.../sql/SingleSupportedSQLCheckersBuilder.java | 51 ++++++++++++++++
.../schema/SingleDropSchemaSupportedChecker.java} | 17 ++++--
.../table/SingleDropTableSupportedChecker.java} | 18 ++++--
.../single/route/SingleSQLRouter.java | 24 ++++----
.../engine/SingleDatabaseBroadcastRouteEngine.java | 38 ------------
.../route/engine/SingleRouteEngineFactory.java | 17 +-----
.../{ => standard}/SingleStandardRouteEngine.java | 3 +-
.../route/validator/SingleMetaDataValidator.java | 37 ------------
.../validator/SingleMetaDataValidatorFactory.java | 51 ----------------
...here.infra.checker.SupportedSQLCheckersBuilder} | 2 +-
...ule.scope.DatabaseRuleConfigurationEmptyChecker | 2 +-
.../SingleRuleConfigurationEmptyCheckerTest.java | 2 +-
.../sql/SingleDropSchemaSupportedCheckerTest.java} | 23 ++++----
.../sql/SingleDropTableSupportedCheckerTest.java} | 37 +++++-------
.../SingleDatabaseBroadcastRouteEngineTest.java | 69 ----------------------
.../route/engine/SingleRouteEngineFactoryTest.java | 18 ------
.../SingleStandardRouteEngineTest.java | 3 +-
.../SingleMetaDataValidatorFactoryTest.java | 39 ------------
32 files changed, 199 insertions(+), 357 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/orderby/EncryptOrderByItemSupportedChecker.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/orderby/EncryptOrderByItemSupportedChecker.java
index b53b9b352de..f12994d2ea1 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/orderby/EncryptOrderByItemSupportedChecker.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/orderby/EncryptOrderByItemSupportedChecker.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.checker.SupportedSQLChecker;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.item.ColumnOrderByItemSegment;
@@ -60,10 +61,10 @@ public final class EncryptOrderByItemSupportedChecker
implements SupportedSQLChe
}
@Override
- public void check(final EncryptRule rule, final ShardingSphereSchema
schema, final SelectStatementContext sqlStatementContext) {
+ public void check(final EncryptRule rule, final ShardingSphereDatabase
database, final ShardingSphereSchema currentSchema, final
SelectStatementContext sqlStatementContext) {
for (OrderByItem each : getOrderByItems(sqlStatementContext)) {
if (each.getSegment() instanceof ColumnOrderByItemSegment) {
- checkColumnOrderByItem(rule, schema, sqlStatementContext,
((ColumnOrderByItemSegment) each.getSegment()).getColumn());
+ checkColumnOrderByItem(rule, currentSchema,
sqlStatementContext, ((ColumnOrderByItemSegment)
each.getSegment()).getColumn());
}
}
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedChecker.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedChecker.java
index 73e9fbfc242..9938819dc23 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedChecker.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedChecker.java
@@ -30,13 +30,14 @@ import
org.apache.shardingsphere.infra.binder.context.type.WhereAvailable;
import org.apache.shardingsphere.infra.checker.SupportedSQLChecker;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.sql.parser.statement.core.extractor.ExpressionExtractor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.AndPredicate;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
-import
org.apache.shardingsphere.sql.parser.statement.core.extractor.ExpressionExtractor;
import java.util.Collection;
import java.util.Map;
@@ -54,12 +55,12 @@ public final class EncryptPredicateColumnSupportedChecker
implements SupportedSQ
}
@Override
- public void check(final EncryptRule rule, final ShardingSphereSchema
schema, final SQLStatementContext sqlStatementContext) {
+ public void check(final EncryptRule rule, final ShardingSphereDatabase
database, final ShardingSphereSchema currentSchema, final SQLStatementContext
sqlStatementContext) {
Collection<SelectStatementContext> allSubqueryContexts =
SQLStatementContextExtractor.getAllSubqueryContexts(sqlStatementContext);
Collection<BinaryOperationExpression> joinConditions =
SQLStatementContextExtractor.getJoinConditions((WhereAvailable)
sqlStatementContext, allSubqueryContexts);
ShardingSpherePreconditions.checkState(JoinConditionsEncryptorComparator.isSame(joinConditions,
rule),
() -> new UnsupportedSQLOperationException("Can not use
different encryptor in join condition"));
- check(rule, schema, (WhereAvailable) sqlStatementContext);
+ check(rule, currentSchema, (WhereAvailable) sqlStatementContext);
}
private void check(final EncryptRule rule, final ShardingSphereSchema
schema, final WhereAvailable sqlStatementContext) {
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptInsertSelectProjectionSupportedChecker.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptInsertSelectProjectionSupportedChecker.java
index 3e3208300a0..019bc6b3bb6 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptInsertSelectProjectionSupportedChecker.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptInsertSelectProjectionSupportedChecker.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
import org.apache.shardingsphere.infra.checker.SupportedSQLChecker;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
/**
@@ -36,7 +37,7 @@ public final class
EncryptInsertSelectProjectionSupportedChecker implements Supp
}
@Override
- public void check(final EncryptRule rule, final ShardingSphereSchema
schema, final InsertStatementContext sqlStatementContext) {
- new EncryptSelectProjectionSupportedChecker().check(rule, schema,
sqlStatementContext.getInsertSelectContext().getSelectStatementContext());
+ public void check(final EncryptRule rule, final ShardingSphereDatabase
database, final ShardingSphereSchema currentSchema, final
InsertStatementContext sqlStatementContext) {
+ new EncryptSelectProjectionSupportedChecker().check(rule, database,
currentSchema,
sqlStatementContext.getInsertSelectContext().getSelectStatementContext());
}
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedChecker.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedChecker.java
index 03a2245507a..5cb206098d8 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedChecker.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedChecker.java
@@ -27,6 +27,7 @@ import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
import org.apache.shardingsphere.infra.checker.SupportedSQLChecker;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.combine.CombineSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
@@ -48,7 +49,7 @@ public final class EncryptSelectProjectionSupportedChecker
implements SupportedS
}
@Override
- public void check(final EncryptRule rule, final ShardingSphereSchema
schema, final SelectStatementContext sqlStatementContext) {
+ public void check(final EncryptRule rule, final ShardingSphereDatabase
database, final ShardingSphereSchema currentSchema, final
SelectStatementContext sqlStatementContext) {
checkSelectStatementContext(rule, sqlStatementContext);
for (SelectStatementContext each :
sqlStatementContext.getSubqueryContexts().values()) {
checkSelectStatementContext(rule, each);
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/orderby/EncryptOrderByItemSupportedCheckerTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/orderby/EncryptOrderByItemSupportedCheckerTest.java
index 229c43c0fb3..8fac0725822 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/orderby/EncryptOrderByItemSupportedCheckerTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/orderby/EncryptOrderByItemSupportedCheckerTest.java
@@ -28,6 +28,7 @@ import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.sql.parser.statement.core.enums.OrderDirection;
@@ -95,12 +96,13 @@ class EncryptOrderByItemSupportedCheckerTest {
@Test
void assertCheckFailed() {
assertThrows(UnsupportedEncryptSQLException.class,
- () -> new
EncryptOrderByItemSupportedChecker().check(mockEncryptRule(),
mock(ShardingSphereSchema.class), mockSelectStatementContext("foo_tbl")));
+ () -> new
EncryptOrderByItemSupportedChecker().check(mockEncryptRule(),
mock(ShardingSphereDatabase.class), mock(ShardingSphereSchema.class),
mockSelectStatementContext("foo_tbl")));
}
@Test
void assertCheckSuccess() {
- assertDoesNotThrow(() -> new
EncryptOrderByItemSupportedChecker().check(mockEncryptRule(),
mock(ShardingSphereSchema.class), mockSelectStatementContext("bar_tbl")));
+ assertDoesNotThrow(
+ () -> new
EncryptOrderByItemSupportedChecker().check(mockEncryptRule(),
mock(ShardingSphereDatabase.class), mock(ShardingSphereSchema.class),
mockSelectStatementContext("bar_tbl")));
}
private EncryptRule mockEncryptRule() {
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedCheckerTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedCheckerTest.java
index 1c6c1e87845..0504b9a939d 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedCheckerTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedCheckerTest.java
@@ -62,7 +62,7 @@ class EncryptPredicateColumnSupportedCheckerTest {
@Test
void assertCheckWithDifferentEncryptorsInJoinCondition() {
assertThrows(UnsupportedSQLOperationException.class, () -> new
EncryptPredicateColumnSupportedChecker()
- .check(EncryptGeneratorFixtureBuilder.createEncryptRule(),
null, mockSelectStatementContextWithDifferentEncryptorsInJoinCondition()));
+ .check(EncryptGeneratorFixtureBuilder.createEncryptRule(),
null, null,
mockSelectStatementContextWithDifferentEncryptorsInJoinCondition()));
}
private SQLStatementContext
mockSelectStatementContextWithDifferentEncryptorsInJoinCondition() {
@@ -80,7 +80,7 @@ class EncryptPredicateColumnSupportedCheckerTest {
@Test
void assertCheckWithNotMatchedLikeQueryEncryptor() {
assertThrows(MissingMatchedEncryptQueryAlgorithmException.class, () ->
new EncryptPredicateColumnSupportedChecker()
- .check(EncryptGeneratorFixtureBuilder.createEncryptRule(),
null, mockSelectStatementContextWithLike()));
+ .check(EncryptGeneratorFixtureBuilder.createEncryptRule(),
null, null, mockSelectStatementContextWithLike()));
}
private SQLStatementContext mockSelectStatementContextWithLike() {
@@ -98,7 +98,7 @@ class EncryptPredicateColumnSupportedCheckerTest {
@Test
void assertCheckSuccess() {
- assertDoesNotThrow(() -> new
EncryptPredicateColumnSupportedChecker().check(EncryptGeneratorFixtureBuilder.createEncryptRule(),
null, mockSelectStatementContextWithEqual()));
+ assertDoesNotThrow(() -> new
EncryptPredicateColumnSupportedChecker().check(EncryptGeneratorFixtureBuilder.createEncryptRule(),
null, null, mockSelectStatementContextWithEqual()));
}
private SQLStatementContext mockSelectStatementContextWithEqual() {
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptInsertSelectProjectionSupportedCheckerTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptInsertSelectProjectionSupportedCheckerTest.java
index b83eaad74f3..062f5094936 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptInsertSelectProjectionSupportedCheckerTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptInsertSelectProjectionSupportedCheckerTest.java
@@ -21,6 +21,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import
org.apache.shardingsphere.infra.binder.context.segment.insert.values.InsertSelectContext;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.junit.jupiter.api.Test;
@@ -55,6 +56,7 @@ class EncryptInsertSelectProjectionSupportedCheckerTest {
@Test
void assertCheckSuccess() {
assertDoesNotThrow(
- () -> new
EncryptInsertSelectProjectionSupportedChecker().check(mock(EncryptRule.class),
mock(ShardingSphereSchema.class), mock(InsertStatementContext.class,
RETURNS_DEEP_STUBS)));
+ () -> new
EncryptInsertSelectProjectionSupportedChecker().check(mock(EncryptRule.class),
mock(ShardingSphereDatabase.class), mock(ShardingSphereSchema.class),
+ mock(InsertStatementContext.class,
RETURNS_DEEP_STUBS)));
}
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedCheckerTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedCheckerTest.java
index 10157dd52c5..023781df499 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedCheckerTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/sql/projection/EncryptSelectProjectionSupportedCheckerTest.java
@@ -70,19 +70,19 @@ class EncryptSelectProjectionSupportedCheckerTest {
SelectStatementContext sqlStatementContext =
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
when(sqlStatementContext.containsTableSubquery()).thenReturn(true);
when(sqlStatementContext.getSqlStatement().getProjections().getProjections()).thenReturn(Collections.singleton(new
ShorthandProjectionSegment(0, 0)));
- assertThrows(UnsupportedSQLOperationException.class, () -> new
EncryptSelectProjectionSupportedChecker().check(mock(EncryptRule.class,
RETURNS_DEEP_STUBS), null, sqlStatementContext));
+ assertThrows(UnsupportedSQLOperationException.class, () -> new
EncryptSelectProjectionSupportedChecker().check(mock(EncryptRule.class,
RETURNS_DEEP_STUBS), null, null, sqlStatementContext));
}
@Test
void assertCheckWhenCombineStatementContainsEncryptColumn() {
SelectStatementContext sqlStatementContext =
mockSelectStatementContext();
- assertThrows(UnsupportedSQLOperationException.class, () -> new
EncryptSelectProjectionSupportedChecker().check(mock(EncryptRule.class,
RETURNS_DEEP_STUBS), null, sqlStatementContext));
+ assertThrows(UnsupportedSQLOperationException.class, () -> new
EncryptSelectProjectionSupportedChecker().check(mock(EncryptRule.class,
RETURNS_DEEP_STUBS), null, null, sqlStatementContext));
}
@Test
void assertCheckSuccess() {
SelectStatementContext sqlStatementContext =
mockSelectStatementContext();
- assertDoesNotThrow(() -> new
EncryptSelectProjectionSupportedChecker().check(mockEncryptRule(), null,
sqlStatementContext));
+ assertDoesNotThrow(() -> new
EncryptSelectProjectionSupportedChecker().check(mockEncryptRule(), null, null,
sqlStatementContext));
}
private SelectStatementContext mockSelectStatementContext() {
diff --git
a/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLCheckEngine.java
b/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLCheckEngine.java
index da53593db4e..dd562faae12 100644
---
a/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLCheckEngine.java
+++
b/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLCheckEngine.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.checker;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
@@ -38,23 +39,22 @@ public final class SupportedSQLCheckEngine {
*
* @param rules rules
* @param sqlStatementContext to be checked SQL statement context
- * @param schemas schemas
- * @param databaseName database name
+ * @param database database
*/
@SuppressWarnings({"rawtypes", "unchecked"})
- public void checkSQL(final Collection<ShardingSphereRule> rules, final
SQLStatementContext sqlStatementContext, final Map<String,
ShardingSphereSchema> schemas, final String databaseName) {
- ShardingSphereSchema schema = getSchema(sqlStatementContext, schemas,
databaseName);
+ public void checkSQL(final Collection<ShardingSphereRule> rules, final
SQLStatementContext sqlStatementContext, final ShardingSphereDatabase database)
{
+ ShardingSphereSchema currentSchema =
getCurrentSchema(sqlStatementContext, database.getSchemas(),
database.getName());
for (Entry<ShardingSphereRule, SupportedSQLCheckersBuilder> entry :
OrderedSPILoader.getServices(SupportedSQLCheckersBuilder.class,
rules).entrySet()) {
Collection<SupportedSQLChecker> checkers =
entry.getValue().getSupportedSQLCheckers();
for (SupportedSQLChecker each : checkers) {
if (each.isCheck(sqlStatementContext)) {
- each.check(entry.getKey(), schema, sqlStatementContext);
+ each.check(entry.getKey(), database, currentSchema,
sqlStatementContext);
}
}
}
}
- private ShardingSphereSchema getSchema(final SQLStatementContext
sqlStatementContext, final Map<String, ShardingSphereSchema> schemas, final
String databaseName) {
+ private ShardingSphereSchema getCurrentSchema(final SQLStatementContext
sqlStatementContext, final Map<String, ShardingSphereSchema> schemas, final
String databaseName) {
ShardingSphereSchema defaultSchema = schemas.get(new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
return sqlStatementContext instanceof TableAvailable ?
((TableAvailable)
sqlStatementContext).getTablesContext().getSchemaName().map(schemas::get).orElse(defaultSchema)
: defaultSchema;
}
diff --git
a/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLChecker.java
b/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLChecker.java
index 438d65c2801..c3c0a6cf6e5 100644
---
a/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLChecker.java
+++
b/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLChecker.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.checker;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -41,8 +42,9 @@ public interface SupportedSQLChecker<T extends
SQLStatementContext, R extends Sh
* Check SQL.
*
* @param rule rule
- * @param schema schema
+ * @param database database
+ * @param currentSchema current schema
* @param sqlStatementContext to be checked SQL statement context
*/
- void check(R rule, ShardingSphereSchema schema, T sqlStatementContext);
+ void check(R rule, ShardingSphereDatabase database, ShardingSphereSchema
currentSchema, T sqlStatementContext);
}
diff --git
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java
index 3880067d6f0..46b4d24771a 100644
---
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java
+++
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java
@@ -57,7 +57,7 @@ public final class KernelProcessor {
private void check(final QueryContext queryContext) {
ShardingSphereDatabase database = queryContext.getUsedDatabase();
- new
SupportedSQLCheckEngine().checkSQL(database.getRuleMetaData().getRules(),
queryContext.getSqlStatementContext(), database.getSchemas(),
database.getName());
+ new
SupportedSQLCheckEngine().checkSQL(database.getRuleMetaData().getRules(),
queryContext.getSqlStatementContext(), database);
}
private RouteContext route(final QueryContext queryContext, final
RuleMetaData globalRuleMetaData, final ConfigurationProperties props) {
diff --git
a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactory.java
b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactory.java
index ddac7f3d707..3123ef1e68e 100644
---
a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactory.java
+++
b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactory.java
@@ -39,11 +39,14 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowDat
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowTableStatusStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowTablesStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterFunctionStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterSchemaStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterTablespaceStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateFunctionStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateSchemaStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTablespaceStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropFunctionStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTablespaceStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.TCLStatement;
@@ -97,13 +100,20 @@ public final class TablelessRouteEngineFactory {
return getCursorRouteEngine(sqlStatementContext);
}
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
- boolean functionStatement = sqlStatement instanceof
CreateFunctionStatement || sqlStatement instanceof AlterFunctionStatement ||
sqlStatement instanceof DropFunctionStatement;
- if (functionStatement) {
+ if (isFunctionDDLStatement(sqlStatement) ||
isSchemaDDLStatement(sqlStatement)) {
return new DataSourceBroadcastRouteEngine();
}
return new IgnoreRouteEngine();
}
+ private static boolean isFunctionDDLStatement(final SQLStatement
sqlStatement) {
+ return sqlStatement instanceof CreateFunctionStatement || sqlStatement
instanceof AlterFunctionStatement || sqlStatement instanceof
DropFunctionStatement;
+ }
+
+ private static boolean isSchemaDDLStatement(final SQLStatement
sqlStatement) {
+ return sqlStatement instanceof CreateSchemaStatement || sqlStatement
instanceof AlterSchemaStatement || sqlStatement instanceof DropSchemaStatement;
+ }
+
private static TablelessRouteEngine getCursorRouteEngine(final
SQLStatementContext sqlStatementContext) {
if (sqlStatementContext instanceof CloseStatementContext &&
((CloseStatementContext) sqlStatementContext).getSqlStatement().isCloseAll()) {
return new DataSourceBroadcastRouteEngine();
diff --git
a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactoryTest.java
b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactoryTest.java
index 8bc50eb1390..e6eae87c041 100644
---
a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactoryTest.java
+++
b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/tableless/TablelessRouteEngineFactoryTest.java
@@ -31,6 +31,9 @@ import
org.apache.shardingsphere.infra.route.engine.tableless.type.broadcast.Ins
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterSchemaStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateSchemaStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.TCLStatement;
import
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLCreateResourceGroupStatement;
import
org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLSetResourceGroupStatement;
@@ -149,4 +152,28 @@ class TablelessRouteEngineFactoryTest {
TablelessRouteEngine actual =
TablelessRouteEngineFactory.newInstance(queryContext);
assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class));
}
+
+ @Test
+ void assertNewInstanceForCreateSchemaStatement() {
+ QueryContext queryContext = mock(QueryContext.class,
RETURNS_DEEP_STUBS);
+
when(queryContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(CreateSchemaStatement.class));
+ TablelessRouteEngine actual =
TablelessRouteEngineFactory.newInstance(queryContext);
+ assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class));
+ }
+
+ @Test
+ void assertNewInstanceForAlterSchemaStatement() {
+ QueryContext queryContext = mock(QueryContext.class,
RETURNS_DEEP_STUBS);
+
when(queryContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(AlterSchemaStatement.class));
+ TablelessRouteEngine actual =
TablelessRouteEngineFactory.newInstance(queryContext);
+ assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class));
+ }
+
+ @Test
+ void assertNewInstanceForDropSchemaStatement() {
+ QueryContext queryContext = mock(QueryContext.class,
RETURNS_DEEP_STUBS);
+
when(queryContext.getSqlStatementContext().getSqlStatement()).thenReturn(mock(DropSchemaStatement.class));
+ TablelessRouteEngine actual =
TablelessRouteEngineFactory.newInstance(queryContext);
+ assertThat(actual, instanceOf(DataSourceBroadcastRouteEngine.class));
+ }
}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/SingleRuleConfigurationEmptyChecker.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/config/SingleRuleConfigurationEmptyChecker.java
similarity index 96%
rename from
kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/SingleRuleConfigurationEmptyChecker.java
rename to
kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/config/SingleRuleConfigurationEmptyChecker.java
index 912f58d3e3f..f738a29ea21 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/SingleRuleConfigurationEmptyChecker.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/config/SingleRuleConfigurationEmptyChecker.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.checker;
+package org.apache.shardingsphere.single.checker.config;
import
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker;
import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/SingleSupportedSQLCheckersBuilder.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/SingleSupportedSQLCheckersBuilder.java
new file mode 100644
index 00000000000..fde27a63f1b
--- /dev/null
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/SingleSupportedSQLCheckersBuilder.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.single.checker.sql;
+
+import org.apache.shardingsphere.infra.checker.SupportedSQLChecker;
+import org.apache.shardingsphere.infra.checker.SupportedSQLCheckersBuilder;
+import
org.apache.shardingsphere.single.checker.sql.schema.SingleDropSchemaSupportedChecker;
+import
org.apache.shardingsphere.single.checker.sql.table.SingleDropTableSupportedChecker;
+import org.apache.shardingsphere.single.constant.SingleOrder;
+import org.apache.shardingsphere.single.rule.SingleRule;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * Single SQL supported checker factory.
+ */
+public final class SingleSupportedSQLCheckersBuilder implements
SupportedSQLCheckersBuilder<SingleRule> {
+
+ @Override
+ public Collection<SupportedSQLChecker<?, SingleRule>>
getSupportedSQLCheckers() {
+ return Arrays.asList(
+ new SingleDropSchemaSupportedChecker(),
+ new SingleDropTableSupportedChecker());
+ }
+
+ @Override
+ public int getOrder() {
+ return SingleOrder.ORDER;
+ }
+
+ @Override
+ public Class<SingleRule> getTypeClass() {
+ return SingleRule.class;
+ }
+}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidator.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/schema/SingleDropSchemaSupportedChecker.java
similarity index 74%
rename from
kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidator.java
rename to
kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/schema/SingleDropSchemaSupportedChecker.java
index 291a8db8875..13f5e62bdc0 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidator.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/schema/SingleDropSchemaSupportedChecker.java
@@ -15,26 +15,33 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.route.validator.ddl;
+package org.apache.shardingsphere.single.checker.sql.schema;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.checker.SupportedSQLChecker;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.kernel.metadata.SchemaNotFoundException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.single.exception.DropNotEmptySchemaException;
-import
org.apache.shardingsphere.single.route.validator.SingleMetaDataValidator;
import org.apache.shardingsphere.single.rule.SingleRule;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
/**
- * Single drop schema meta data validator.
+ * Drop schema supported checker for single.
*/
-public final class SingleDropSchemaMetaDataValidator implements
SingleMetaDataValidator {
+@HighFrequencyInvocation
+public final class SingleDropSchemaSupportedChecker implements
SupportedSQLChecker<SQLStatementContext, SingleRule> {
@Override
- public void validate(final SingleRule rule, final SQLStatementContext
sqlStatementContext, final ShardingSphereDatabase database) {
+ public boolean isCheck(final SQLStatementContext sqlStatementContext) {
+ return sqlStatementContext.getSqlStatement() instanceof
DropSchemaStatement;
+ }
+
+ @Override
+ public void check(final SingleRule rule, final ShardingSphereDatabase
database, final ShardingSphereSchema currentSchema, final SQLStatementContext
sqlStatementContext) {
DropSchemaStatement dropSchemaStatement = (DropSchemaStatement)
sqlStatementContext.getSqlStatement();
boolean containsCascade = dropSchemaStatement.isContainsCascade();
for (IdentifierValue each : dropSchemaStatement.getSchemaNames()) {
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropTableValidator.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/table/SingleDropTableSupportedChecker.java
similarity index 62%
rename from
kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropTableValidator.java
rename to
kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/table/SingleDropTableSupportedChecker.java
index 8bf723dce75..1abf65ba2eb 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropTableValidator.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/table/SingleDropTableSupportedChecker.java
@@ -15,22 +15,30 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.route.validator.ddl;
+package org.apache.shardingsphere.single.checker.sql.table;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.checker.SupportedSQLChecker;
import
org.apache.shardingsphere.infra.exception.kernel.syntax.UnsupportedDropCascadeTableException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import
org.apache.shardingsphere.single.route.validator.SingleMetaDataValidator;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.single.rule.SingleRule;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
/**
- * Single drop table validator.
+ * Drop table supported checker for single.
*/
-public final class SingleDropTableValidator implements SingleMetaDataValidator
{
+@HighFrequencyInvocation
+public final class SingleDropTableSupportedChecker implements
SupportedSQLChecker<SQLStatementContext, SingleRule> {
@Override
- public void validate(final SingleRule rule, final SQLStatementContext
sqlStatementContext, final ShardingSphereDatabase database) {
+ public boolean isCheck(final SQLStatementContext sqlStatementContext) {
+ return sqlStatementContext.getSqlStatement() instanceof
DropTableStatement;
+ }
+
+ @Override
+ public void check(final SingleRule rule, final ShardingSphereDatabase
database, final ShardingSphereSchema currentSchema, final SQLStatementContext
sqlStatementContext) {
if (((DropTableStatement)
sqlStatementContext.getSqlStatement()).isContainsCascade()) {
throw new UnsupportedDropCascadeTableException();
}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/SingleSQLRouter.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/SingleSQLRouter.java
index f278ff34854..e7fd34700a0 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/SingleSQLRouter.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/SingleSQLRouter.java
@@ -33,7 +33,6 @@ import
org.apache.shardingsphere.infra.route.type.TableSQLRouter;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.single.constant.SingleOrder;
import org.apache.shardingsphere.single.route.engine.SingleRouteEngineFactory;
-import
org.apache.shardingsphere.single.route.validator.SingleMetaDataValidatorFactory;
import org.apache.shardingsphere.single.rule.SingleRule;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
@@ -54,24 +53,18 @@ public final class SingleSQLRouter implements
EntranceSQLRouter<SingleRule>, Dec
return createSingleDataSourceRouteContext(rule, database,
queryContext);
}
RouteContext result = new RouteContext();
- SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
-
SingleMetaDataValidatorFactory.newInstance(sqlStatementContext.getSqlStatement()).ifPresent(optional
-> optional.validate(rule, sqlStatementContext, database));
- Collection<QualifiedTable> singleTables = getSingleTables(database,
rule, result, sqlStatementContext);
- SingleRouteEngineFactory.newInstance(singleTables,
sqlStatementContext.getSqlStatement(),
queryContext.getHintValueContext()).ifPresent(optional ->
optional.route(result, rule));
+ Collection<QualifiedTable> singleTables = getSingleTables(database,
rule, result, queryContext.getSqlStatementContext());
+ SingleRouteEngineFactory.newInstance(singleTables,
queryContext.getSqlStatementContext().getSqlStatement(),
queryContext.getHintValueContext())
+ .ifPresent(optional -> optional.route(result, rule));
return result;
}
- private Collection<QualifiedTable> getSingleTables(final
ShardingSphereDatabase database, final SingleRule rule, final RouteContext
routeContext, final SQLStatementContext sqlStatementContext) {
- Collection<QualifiedTable> qualifiedTables =
rule.getQualifiedTables(sqlStatementContext, database);
- return routeContext.getRouteUnits().isEmpty() &&
sqlStatementContext.getSqlStatement() instanceof CreateTableStatement ?
qualifiedTables : rule.getSingleTables(qualifiedTables);
- }
-
@Override
public void decorateRouteContext(final RouteContext routeContext, final
QueryContext queryContext, final ShardingSphereDatabase database,
final SingleRule rule, final
Collection<String> tableNames, final ConfigurationProperties props) {
- SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
- Collection<QualifiedTable> singleTables = getSingleTables(database,
rule, routeContext, sqlStatementContext);
- SingleRouteEngineFactory.newInstance(singleTables,
sqlStatementContext.getSqlStatement(),
queryContext.getHintValueContext()).ifPresent(optional ->
optional.route(routeContext, rule));
+ Collection<QualifiedTable> singleTables = getSingleTables(database,
rule, routeContext, queryContext.getSqlStatementContext());
+ SingleRouteEngineFactory.newInstance(singleTables,
queryContext.getSqlStatementContext().getSqlStatement(),
queryContext.getHintValueContext())
+ .ifPresent(optional -> optional.route(routeContext, rule));
}
private RouteContext createSingleDataSourceRouteContext(final SingleRule
rule, final ShardingSphereDatabase database, final QueryContext queryContext) {
@@ -93,6 +86,11 @@ public final class SingleSQLRouter implements
EntranceSQLRouter<SingleRule>, Dec
return result;
}
+ private Collection<QualifiedTable> getSingleTables(final
ShardingSphereDatabase database, final SingleRule rule, final RouteContext
routeContext, final SQLStatementContext sqlStatementContext) {
+ Collection<QualifiedTable> qualifiedTables =
rule.getQualifiedTables(sqlStatementContext, database);
+ return routeContext.getRouteUnits().isEmpty() &&
sqlStatementContext.getSqlStatement() instanceof CreateTableStatement ?
qualifiedTables : rule.getSingleTables(qualifiedTables);
+ }
+
@Override
public int getOrder() {
return SingleOrder.ORDER;
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleDatabaseBroadcastRouteEngine.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleDatabaseBroadcastRouteEngine.java
deleted file mode 100644
index 6df1e847cea..00000000000
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleDatabaseBroadcastRouteEngine.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.single.route.engine;
-
-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.single.rule.SingleRule;
-
-import java.util.Collections;
-
-/**
- * Single databases broadcast route engine.
- */
-public final class SingleDatabaseBroadcastRouteEngine implements
SingleRouteEngine {
-
- @Override
- public void route(final RouteContext routeContext, final SingleRule
singleRule) {
- for (String each : singleRule.getDataSourceNames()) {
- routeContext.getRouteUnits().add(new RouteUnit(new
RouteMapper(each, each), Collections.emptyList()));
- }
- }
-}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineFactory.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineFactory.java
index b230ac6010c..cb8dd5bc3b5 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineFactory.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineFactory.java
@@ -21,10 +21,8 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.hint.HintValueContext;
import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
+import
org.apache.shardingsphere.single.route.engine.standard.SingleStandardRouteEngine;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterSchemaStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateSchemaStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
import java.util.Collection;
import java.util.Optional;
@@ -44,17 +42,6 @@ public final class SingleRouteEngineFactory {
* @return created instance
*/
public static Optional<SingleRouteEngine> newInstance(final
Collection<QualifiedTable> singleTables, final SQLStatement sqlStatement, final
HintValueContext hintValueContext) {
- if (!singleTables.isEmpty()) {
- return Optional.of(new SingleStandardRouteEngine(singleTables,
sqlStatement, hintValueContext));
- }
- // TODO move this logic to common route logic
- if (isSchemaDDLStatement(sqlStatement)) {
- return Optional.of(new SingleDatabaseBroadcastRouteEngine());
- }
- return Optional.empty();
- }
-
- private static boolean isSchemaDDLStatement(final SQLStatement
sqlStatement) {
- return sqlStatement instanceof CreateSchemaStatement || sqlStatement
instanceof AlterSchemaStatement || sqlStatement instanceof DropSchemaStatement;
+ return singleTables.isEmpty() ? Optional.empty() : Optional.of(new
SingleStandardRouteEngine(singleTables, sqlStatement, hintValueContext));
}
}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngine.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/standard/SingleStandardRouteEngine.java
similarity index 98%
rename from
kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngine.java
rename to
kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/standard/SingleStandardRouteEngine.java
index e8026039b81..02ea6cfef44 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngine.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/standard/SingleStandardRouteEngine.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.route.engine;
+package org.apache.shardingsphere.single.route.engine.standard;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.datanode.DataNode;
@@ -29,6 +29,7 @@ import
org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
import org.apache.shardingsphere.single.exception.SingleTableNotFoundException;
+import org.apache.shardingsphere.single.route.engine.SingleRouteEngine;
import org.apache.shardingsphere.single.rule.SingleRule;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidator.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidator.java
deleted file mode 100644
index aa3a3fed348..00000000000
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.single.route.validator;
-
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.single.rule.SingleRule;
-
-/**
- * Single meta data validator.
- */
-public interface SingleMetaDataValidator {
-
- /**
- * Validate single table meta data.
- *
- * @param rule single rule
- * @param sqlStatementContext SQL statement context
- * @param database database
- */
- void validate(SingleRule rule, SQLStatementContext sqlStatementContext,
ShardingSphereDatabase database);
-}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidatorFactory.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidatorFactory.java
deleted file mode 100644
index 9d8c0d336b4..00000000000
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidatorFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.single.route.validator;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import
org.apache.shardingsphere.single.route.validator.ddl.SingleDropSchemaMetaDataValidator;
-import
org.apache.shardingsphere.single.route.validator.ddl.SingleDropTableValidator;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
-
-import java.util.Optional;
-
-/**
- * Single meta data validator factory.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SingleMetaDataValidatorFactory {
-
- /**
- * New instance of single meta data validator.
- *
- * @param sqlStatement SQL statement
- * @return created instance
- */
- public static Optional<SingleMetaDataValidator> newInstance(final
SQLStatement sqlStatement) {
- if (sqlStatement instanceof DropSchemaStatement) {
- return Optional.of(new SingleDropSchemaMetaDataValidator());
- }
- if (sqlStatement instanceof DropTableStatement) {
- return Optional.of(new SingleDropTableValidator());
- }
- return Optional.empty();
- }
-}
diff --git
a/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker
b/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.checker.SupportedSQLCheckersBuilder
similarity index 90%
copy from
kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker
copy to
kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.checker.SupportedSQLCheckersBuilder
index 4a0c35b255e..ab0224ef84c 100644
---
a/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker
+++
b/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.checker.SupportedSQLCheckersBuilder
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.single.checker.SingleRuleConfigurationEmptyChecker
+org.apache.shardingsphere.single.checker.sql.SingleSupportedSQLCheckersBuilder
diff --git
a/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker
b/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker
index 4a0c35b255e..d22cfbeb1cd 100644
---
a/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker
+++
b/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.single.checker.SingleRuleConfigurationEmptyChecker
+org.apache.shardingsphere.single.checker.config.SingleRuleConfigurationEmptyChecker
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/SingleRuleConfigurationEmptyCheckerTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/config/SingleRuleConfigurationEmptyCheckerTest.java
similarity index 97%
rename from
kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/SingleRuleConfigurationEmptyCheckerTest.java
rename to
kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/config/SingleRuleConfigurationEmptyCheckerTest.java
index a1c087b23a3..b37f4dfc6f0 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/SingleRuleConfigurationEmptyCheckerTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/config/SingleRuleConfigurationEmptyCheckerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.checker;
+package org.apache.shardingsphere.single.checker.config;
import
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidatorTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
similarity index 76%
copy from
kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidatorTest.java
copy to
kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
index 94302a0efdc..950215c2da9 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidatorTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.route.validator.ddl;
+package org.apache.shardingsphere.single.checker.sql;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.UnknownSQLStatementContext;
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.exception.kernel.metadata.SchemaNotFoundE
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import
org.apache.shardingsphere.single.checker.sql.schema.SingleDropSchemaSupportedChecker;
import org.apache.shardingsphere.single.exception.DropNotEmptySchemaException;
import org.apache.shardingsphere.single.rule.SingleRule;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
@@ -38,25 +39,27 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-class SingleDropSchemaMetaDataValidatorTest {
+class SingleDropSchemaSupportedCheckerTest {
@Test
- void assertValidateWithoutCascadeSchema() {
+ void assertCheckWithoutCascadeSchema() {
assertThrows(DropNotEmptySchemaException.class,
- () -> new
SingleDropSchemaMetaDataValidator().validate(mock(SingleRule.class,
RETURNS_DEEP_STUBS), createSQLStatementContext("foo_schema", false),
mockDatabase()));
+ () -> new
SingleDropSchemaSupportedChecker().check(mock(SingleRule.class,
RETURNS_DEEP_STUBS), mockDatabase(), mock(ShardingSphereSchema.class),
+ createSQLStatementContext("foo_schema", false)));
}
@Test
- void assertValidateWithNotExistedSchema() {
+ void assertCheckWithNotExistedSchema() {
ShardingSphereDatabase database = mockDatabase();
when(database.getSchema("not_existed_schema")).thenReturn(null);
assertThrows(SchemaNotFoundException.class,
- () -> new
SingleDropSchemaMetaDataValidator().validate(mock(SingleRule.class,
RETURNS_DEEP_STUBS), createSQLStatementContext("not_existed_schema", true),
database));
+ () -> new
SingleDropSchemaSupportedChecker().check(mock(SingleRule.class,
RETURNS_DEEP_STUBS), database, mock(ShardingSphereSchema.class),
+ createSQLStatementContext("not_existed_schema",
true)));
}
@Test
- void assertValidate() {
- new
SingleDropSchemaMetaDataValidator().validate(mock(SingleRule.class,
RETURNS_DEEP_STUBS), createSQLStatementContext("foo_schema", true),
mockDatabase());
+ void assertCheck() {
+ new SingleDropSchemaSupportedChecker().check(mock(SingleRule.class,
RETURNS_DEEP_STUBS), mockDatabase(), mock(ShardingSphereSchema.class),
createSQLStatementContext("foo_schema", true));
}
private ShardingSphereDatabase mockDatabase() {
@@ -67,9 +70,9 @@ class SingleDropSchemaMetaDataValidatorTest {
return result;
}
- private SQLStatementContext createSQLStatementContext(final String
schemaName, final boolean isCascade) {
+ private SQLStatementContext createSQLStatementContext(final String
schemaName, final boolean containsCascade) {
PostgreSQLDropSchemaStatement dropSchemaStatement =
mock(PostgreSQLDropSchemaStatement.class, RETURNS_DEEP_STUBS);
- when(dropSchemaStatement.isContainsCascade()).thenReturn(isCascade);
+
when(dropSchemaStatement.isContainsCascade()).thenReturn(containsCascade);
when(dropSchemaStatement.getSchemaNames()).thenReturn(Collections.singleton(new
IdentifierValue(schemaName)));
return new UnknownSQLStatementContext(dropSchemaStatement);
}
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidatorTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
similarity index 61%
rename from
kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidatorTest.java
rename to
kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
index 94302a0efdc..07814448f7b 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/ddl/SingleDropSchemaMetaDataValidatorTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
@@ -15,20 +15,19 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.route.validator.ddl;
+package org.apache.shardingsphere.single.checker.sql;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.UnknownSQLStatementContext;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
-import
org.apache.shardingsphere.infra.exception.kernel.metadata.SchemaNotFoundException;
+import
org.apache.shardingsphere.infra.exception.kernel.syntax.UnsupportedDropCascadeTableException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
-import org.apache.shardingsphere.single.exception.DropNotEmptySchemaException;
+import
org.apache.shardingsphere.single.checker.sql.table.SingleDropTableSupportedChecker;
import org.apache.shardingsphere.single.rule.SingleRule;
-import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
-import
org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLDropSchemaStatement;
+import
org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLDropTableStatement;
import org.junit.jupiter.api.Test;
import java.util.Collections;
@@ -38,25 +37,18 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-class SingleDropSchemaMetaDataValidatorTest {
+class SingleDropTableSupportedCheckerTest {
@Test
- void assertValidateWithoutCascadeSchema() {
- assertThrows(DropNotEmptySchemaException.class,
- () -> new
SingleDropSchemaMetaDataValidator().validate(mock(SingleRule.class,
RETURNS_DEEP_STUBS), createSQLStatementContext("foo_schema", false),
mockDatabase()));
+ void assertCheckWithCascade() {
+ assertThrows(UnsupportedDropCascadeTableException.class,
+ () -> new
SingleDropTableSupportedChecker().check(mock(SingleRule.class,
RETURNS_DEEP_STUBS), mockDatabase(), mock(ShardingSphereSchema.class),
+ createSQLStatementContext(true)));
}
@Test
- void assertValidateWithNotExistedSchema() {
- ShardingSphereDatabase database = mockDatabase();
- when(database.getSchema("not_existed_schema")).thenReturn(null);
- assertThrows(SchemaNotFoundException.class,
- () -> new
SingleDropSchemaMetaDataValidator().validate(mock(SingleRule.class,
RETURNS_DEEP_STUBS), createSQLStatementContext("not_existed_schema", true),
database));
- }
-
- @Test
- void assertValidate() {
- new
SingleDropSchemaMetaDataValidator().validate(mock(SingleRule.class,
RETURNS_DEEP_STUBS), createSQLStatementContext("foo_schema", true),
mockDatabase());
+ void assertCheckWithoutCascade() {
+ new SingleDropTableSupportedChecker().check(mock(SingleRule.class,
RETURNS_DEEP_STUBS), mockDatabase(), mock(ShardingSphereSchema.class),
createSQLStatementContext(false));
}
private ShardingSphereDatabase mockDatabase() {
@@ -67,10 +59,9 @@ class SingleDropSchemaMetaDataValidatorTest {
return result;
}
- private SQLStatementContext createSQLStatementContext(final String
schemaName, final boolean isCascade) {
- PostgreSQLDropSchemaStatement dropSchemaStatement =
mock(PostgreSQLDropSchemaStatement.class, RETURNS_DEEP_STUBS);
- when(dropSchemaStatement.isContainsCascade()).thenReturn(isCascade);
-
when(dropSchemaStatement.getSchemaNames()).thenReturn(Collections.singleton(new
IdentifierValue(schemaName)));
+ private SQLStatementContext createSQLStatementContext(final boolean
containsCascade) {
+ PostgreSQLDropTableStatement dropSchemaStatement =
mock(PostgreSQLDropTableStatement.class, RETURNS_DEEP_STUBS);
+
when(dropSchemaStatement.isContainsCascade()).thenReturn(containsCascade);
return new UnknownSQLStatementContext(dropSchemaStatement);
}
}
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleDatabaseBroadcastRouteEngineTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleDatabaseBroadcastRouteEngineTest.java
deleted file mode 100644
index 4a1552cdf67..00000000000
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleDatabaseBroadcastRouteEngineTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.single.route.engine;
-
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.database.h2.type.H2DatabaseType;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
-import org.apache.shardingsphere.infra.route.context.RouteUnit;
-import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
-import org.apache.shardingsphere.single.rule.SingleRule;
-import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
-import org.junit.jupiter.api.Test;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-class SingleDatabaseBroadcastRouteEngineTest {
-
- @Test
- void assertRoute() throws SQLException {
- SingleRule singleRule = new SingleRule(new SingleRuleConfiguration(),
DefaultDatabase.LOGIC_NAME, new H2DatabaseType(), createDataSourceMap(),
Collections.emptyList());
- RouteContext routeContext = new RouteContext();
- SingleDatabaseBroadcastRouteEngine engine = new
SingleDatabaseBroadcastRouteEngine();
- engine.route(routeContext, singleRule);
- List<RouteUnit> routeUnits = new
ArrayList<>(routeContext.getRouteUnits());
- assertThat(routeContext.getRouteUnits().size(), is(2));
- assertThat(routeUnits.get(0).getDataSourceMapper().getActualName(),
is("ds_0"));
- assertTrue(routeUnits.get(0).getTableMappers().isEmpty());
- assertThat(routeUnits.get(1).getDataSourceMapper().getActualName(),
is("ds_1"));
- assertTrue(routeUnits.get(1).getTableMappers().isEmpty());
- }
-
- private Map<String, DataSource> createDataSourceMap() throws SQLException {
- Map<String, DataSource> result = new LinkedHashMap<>(2, 1F);
- Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
- when(connection.getMetaData().getURL()).thenReturn("jdbc:h2:mem:db");
- result.put("ds_0", new MockedDataSource(connection));
- result.put("ds_1", new MockedDataSource(connection));
- return result;
- }
-}
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineFactoryTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineFactoryTest.java
index c04b8448c1a..d81bb51ccf9 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineFactoryTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineFactoryTest.java
@@ -20,9 +20,6 @@ package org.apache.shardingsphere.single.route.engine;
import org.apache.shardingsphere.infra.hint.HintValueContext;
import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterSchemaStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateSchemaStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
import org.junit.jupiter.api.Test;
import java.util.Collections;
@@ -38,21 +35,6 @@ class SingleRouteEngineFactoryTest {
assertTrue(SingleRouteEngineFactory.newInstance(Collections.singleton(new
QualifiedTable("demo_ds", "t_order")), mock(SQLStatement.class),
mock(HintValueContext.class)).isPresent());
}
- @Test
- void assertNewInstanceWithEmptySingleTableNameAndCreateSchemaStatement() {
-
assertTrue(SingleRouteEngineFactory.newInstance(Collections.emptyList(),
mock(CreateSchemaStatement.class), mock(HintValueContext.class)).isPresent());
- }
-
- @Test
- void assertNewInstanceWithEmptySingleTableNameAndAlterSchemaStatement() {
-
assertTrue(SingleRouteEngineFactory.newInstance(Collections.emptyList(),
mock(AlterSchemaStatement.class), mock(HintValueContext.class)).isPresent());
- }
-
- @Test
- void assertNewInstanceWithEmptySingleTableNameAndDropSchemaStatement() {
-
assertTrue(SingleRouteEngineFactory.newInstance(Collections.emptyList(),
mock(DropSchemaStatement.class), mock(HintValueContext.class)).isPresent());
- }
-
@Test
void assertNewInstanceWithEmptySingleTableNameAndOtherStatement() {
assertFalse(SingleRouteEngineFactory.newInstance(Collections.emptyList(),
mock(SQLStatement.class), mock(HintValueContext.class)).isPresent());
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngineTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/engine/SingleStandardRouteEngineTest.java
similarity index 98%
rename from
kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngineTest.java
rename to
kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/engine/SingleStandardRouteEngineTest.java
index c7d5669859c..4f52e8efe31 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleStandardRouteEngineTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/engine/SingleStandardRouteEngineTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.route.engine;
+package org.apache.shardingsphere.single.route.engine.engine;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.table.TableExistsException;
@@ -30,6 +30,7 @@ import
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRu
import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
import
org.apache.shardingsphere.infra.rule.attribute.datanode.DataNodeRuleAttribute;
import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
+import
org.apache.shardingsphere.single.route.engine.standard.SingleStandardRouteEngine;
import org.apache.shardingsphere.single.rule.SingleRule;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidatorFactoryTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidatorFactoryTest.java
deleted file mode 100644
index 7d88ed996ff..00000000000
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/validator/SingleMetaDataValidatorFactoryTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.single.route.validator;
-
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-
-class SingleMetaDataValidatorFactoryTest {
-
- @Test
- void assertNewInstanceForDropSchemaStatement() {
-
assertTrue(SingleMetaDataValidatorFactory.newInstance(mock(DropSchemaStatement.class)).isPresent());
- }
-
- @Test
- void assertNewInstanceForNotDropSchemaStatement() {
-
assertFalse(SingleMetaDataValidatorFactory.newInstance(mock(SQLStatement.class)).isPresent());
- }
-}