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);
     }

Reply via email to