This is an automated email from the ASF dual-hosted git repository.
zhangyonglun 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 9a45789 Use TableDataSourceNamesMapper to refactor
ShardingDDLStatementValidator (#8011)
9a45789 is described below
commit 9a4578922b48cd6f94220d2d76334fd1d6637e87
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Nov 2 22:18:05 2020 +0800
Use TableDataSourceNamesMapper to refactor ShardingDDLStatementValidator
(#8011)
---
.../ddl/ShardingDDLStatementValidator.java | 8 +++-----
...ardingCreateFunctionStatementValidatorTest.java | 22 +++++++++-------------
...rdingCreateProcedureStatementValidatorTest.java | 22 +++++++++-------------
3 files changed, 21 insertions(+), 31 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingDDLStatementValidator.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingDDLStatementValidator.java
index 8067253..f84f60f 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingDDLStatementValidator.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingDDLStatementValidator.java
@@ -26,7 +26,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Sim
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
import java.util.Collection;
-import java.util.Map;
/**
* Sharding ddl statement validator.
@@ -57,10 +56,9 @@ public abstract class ShardingDDLStatementValidator<T
extends DDLStatement> impl
protected void validateTableExist(final ShardingSphereMetaData metaData,
final Collection<SimpleTableSegment> tables) {
for (SimpleTableSegment each : tables) {
String tableName = each.getTableName().getIdentifier().getValue();
- for (Map.Entry<String, Collection<String>> entry :
metaData.getSchemaMetaData().getUnconfiguredSchemaMetaDataMap().entrySet()) {
- if (!entry.getValue().contains(tableName)) {
- throw new NoSuchTableException(entry.getKey(), tableName);
- }
+ if
(!metaData.getTableAddressingMetaData().getTableDataSourceNamesMapper().containsKey(tableName))
{
+ String dataSourceName =
metaData.getTableAddressingMetaData().getTableDataSourceNamesMapper().get(tableName).iterator().next();
+ throw new NoSuchTableException(dataSourceName, tableName);
}
}
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingCreateFunctionStatementValidatorTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingCreateFunctionStatementValidatorTest.java
index fe705ce..152b03a 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingCreateFunctionStatementValidatorTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingCreateFunctionStatementValidatorTest.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContex
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import org.apache.shardingsphere.infra.metadata.model.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.model.addressing.TableAddressingMetaData;
import
org.apache.shardingsphere.infra.metadata.model.logic.LogicSchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.model.physical.model.schema.PhysicalSchemaMetaData;
import
org.apache.shardingsphere.sharding.route.engine.exception.NoSuchTableException;
@@ -38,11 +39,9 @@ import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQ
import org.junit.Test;
import org.mockito.Mock;
-import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -57,12 +56,12 @@ public final class
ShardingCreateFunctionStatementValidatorTest {
selectStatement.setFrom(new SimpleTableSegment(0, 0, new
IdentifierValue("t_order_item")));
MySQLCreateTableStatement createTableStatement = new
MySQLCreateTableStatement();
createTableStatement.setTable(new SimpleTableSegment(0, 0, new
IdentifierValue("t_order")));
- ValidStatementSegment createTableValidStatementSegment = new
ValidStatementSegment(0, 0);
- createTableValidStatementSegment.setSqlStatement(createTableStatement);
+ ValidStatementSegment validStatementSegment = new
ValidStatementSegment(0, 0);
+ validStatementSegment.setSqlStatement(createTableStatement);
ValidStatementSegment selectValidStatementSegment = new
ValidStatementSegment(0, 0);
selectValidStatementSegment.setSqlStatement(selectStatement);
RoutineBodySegment routineBody = new RoutineBodySegment(0, 0);
- routineBody.getValidStatements().add(createTableValidStatementSegment);
+ routineBody.getValidStatements().add(validStatementSegment);
routineBody.getValidStatements().add(selectValidStatementSegment);
MySQLCreateFunctionStatement sqlStatement = new
MySQLCreateFunctionStatement();
sqlStatement.setRoutineBody(routineBody);
@@ -72,9 +71,9 @@ public final class
ShardingCreateFunctionStatementValidatorTest {
when(metaData.getSchemaMetaData()).thenReturn(logicSchemaMetaData);
when(logicSchemaMetaData.getConfiguredSchemaMetaData()).thenReturn(schemaMetaData);
when(schemaMetaData.getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
- Map<String, Collection<String>> unconfiguredSchemaMetaDataMap = new
HashMap<>(1, 1);
- unconfiguredSchemaMetaDataMap.put("ds_0",
Collections.singleton("t_order_item"));
-
when(logicSchemaMetaData.getUnconfiguredSchemaMetaDataMap()).thenReturn(unconfiguredSchemaMetaDataMap);
+ TableAddressingMetaData tableAddressingMetaData = new
TableAddressingMetaData();
+
tableAddressingMetaData.getTableDataSourceNamesMapper().put("t_order_item",
Collections.singletonList("ds_0"));
+
when(metaData.getTableAddressingMetaData()).thenReturn(tableAddressingMetaData);
when(logicSchemaMetaData.getAllTableNames()).thenReturn(Collections.emptyList());
SQLStatementContext<CreateFunctionStatement> sqlStatementContext = new
CommonSQLStatementContext<>(sqlStatement);
new
ShardingCreateFunctionStatementValidator().preValidate(shardingRule,
sqlStatementContext, Collections.emptyList(), metaData);
@@ -110,15 +109,12 @@ public final class
ShardingCreateFunctionStatementValidatorTest {
routineBody.getValidStatements().add(validStatementSegment);
MySQLCreateFunctionStatement sqlStatement = new
MySQLCreateFunctionStatement();
sqlStatement.setRoutineBody(routineBody);
- ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
LogicSchemaMetaData logicSchemaMetaData =
mock(LogicSchemaMetaData.class);
PhysicalSchemaMetaData schemaMetaData =
mock(PhysicalSchemaMetaData.class);
when(metaData.getSchemaMetaData()).thenReturn(logicSchemaMetaData);
when(logicSchemaMetaData.getConfiguredSchemaMetaData()).thenReturn(schemaMetaData);
when(schemaMetaData.getAllTableNames()).thenReturn(Collections.emptyList());
- Map<String, Collection<String>> unconfiguredSchemaMetaDataMap = new
HashMap<>(1, 1);
- unconfiguredSchemaMetaDataMap.put("ds_0", Collections.emptyList());
-
when(logicSchemaMetaData.getUnconfiguredSchemaMetaDataMap()).thenReturn(unconfiguredSchemaMetaDataMap);
SQLStatementContext<CreateFunctionStatement> sqlStatementContext = new
CommonSQLStatementContext<>(sqlStatement);
new
ShardingCreateFunctionStatementValidator().preValidate(shardingRule,
sqlStatementContext, Collections.emptyList(), metaData);
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingCreateProcedureStatementValidatorTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingCreateProcedureStatementValidatorTest.java
index ec5dddb..edc0da8 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingCreateProcedureStatementValidatorTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/ShardingCreateProcedureStatementValidatorTest.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContex
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import org.apache.shardingsphere.infra.metadata.model.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.model.addressing.TableAddressingMetaData;
import
org.apache.shardingsphere.infra.metadata.model.logic.LogicSchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.model.physical.model.schema.PhysicalSchemaMetaData;
import
org.apache.shardingsphere.sharding.route.engine.exception.NoSuchTableException;
@@ -38,11 +39,9 @@ import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQ
import org.junit.Test;
import org.mockito.Mock;
-import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -57,12 +56,12 @@ public final class
ShardingCreateProcedureStatementValidatorTest {
selectStatement.setFrom(new SimpleTableSegment(0, 0, new
IdentifierValue("t_order_item")));
MySQLCreateTableStatement createTableStatement = new
MySQLCreateTableStatement();
createTableStatement.setTable(new SimpleTableSegment(0, 0, new
IdentifierValue("t_order")));
- ValidStatementSegment createTableValidStatementSegment = new
ValidStatementSegment(0, 0);
- createTableValidStatementSegment.setSqlStatement(createTableStatement);
+ ValidStatementSegment validStatementSegment = new
ValidStatementSegment(0, 0);
+ validStatementSegment.setSqlStatement(createTableStatement);
ValidStatementSegment selectValidStatementSegment = new
ValidStatementSegment(0, 0);
selectValidStatementSegment.setSqlStatement(selectStatement);
RoutineBodySegment routineBody = new RoutineBodySegment(0, 0);
- routineBody.getValidStatements().add(createTableValidStatementSegment);
+ routineBody.getValidStatements().add(validStatementSegment);
routineBody.getValidStatements().add(selectValidStatementSegment);
MySQLCreateProcedureStatement sqlStatement = new
MySQLCreateProcedureStatement();
sqlStatement.setRoutineBody(routineBody);
@@ -72,9 +71,9 @@ public final class
ShardingCreateProcedureStatementValidatorTest {
when(metaData.getSchemaMetaData()).thenReturn(logicSchemaMetaData);
when(logicSchemaMetaData.getConfiguredSchemaMetaData()).thenReturn(schemaMetaData);
when(schemaMetaData.getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
- Map<String, Collection<String>> unconfiguredSchemaMetaDataMap = new
HashMap<>(1, 1);
- unconfiguredSchemaMetaDataMap.put("ds_0",
Collections.singleton("t_order_item"));
-
when(logicSchemaMetaData.getUnconfiguredSchemaMetaDataMap()).thenReturn(unconfiguredSchemaMetaDataMap);
+ TableAddressingMetaData tableAddressingMetaData = new
TableAddressingMetaData();
+
tableAddressingMetaData.getTableDataSourceNamesMapper().put("t_order_item",
Collections.singletonList("ds_0"));
+
when(metaData.getTableAddressingMetaData()).thenReturn(tableAddressingMetaData);
when(logicSchemaMetaData.getAllTableNames()).thenReturn(Collections.emptyList());
SQLStatementContext<CreateProcedureStatement> sqlStatementContext =
new CommonSQLStatementContext<>(sqlStatement);
new
ShardingCreateProcedureStatementValidator().preValidate(shardingRule,
sqlStatementContext, Collections.emptyList(), metaData);
@@ -110,15 +109,12 @@ public final class
ShardingCreateProcedureStatementValidatorTest {
routineBody.getValidStatements().add(validStatementSegment);
MySQLCreateProcedureStatement sqlStatement = new
MySQLCreateProcedureStatement();
sqlStatement.setRoutineBody(routineBody);
- ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
LogicSchemaMetaData logicSchemaMetaData =
mock(LogicSchemaMetaData.class);
PhysicalSchemaMetaData schemaMetaData =
mock(PhysicalSchemaMetaData.class);
when(metaData.getSchemaMetaData()).thenReturn(logicSchemaMetaData);
when(logicSchemaMetaData.getConfiguredSchemaMetaData()).thenReturn(schemaMetaData);
when(schemaMetaData.getAllTableNames()).thenReturn(Collections.emptyList());
- Map<String, Collection<String>> unconfiguredSchemaMetaDataMap = new
HashMap<>(1, 1);
- unconfiguredSchemaMetaDataMap.put("ds_0", Collections.emptyList());
-
when(logicSchemaMetaData.getUnconfiguredSchemaMetaDataMap()).thenReturn(unconfiguredSchemaMetaDataMap);
SQLStatementContext<CreateProcedureStatement> sqlStatementContext =
new CommonSQLStatementContext<>(sqlStatement);
new
ShardingCreateProcedureStatementValidator().preValidate(shardingRule,
sqlStatementContext, Collections.emptyList(), metaData);
}