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

menghaoran 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 2bad204  fix index validate and show logic (#10747)
2bad204 is described below

commit 2bad204df786c1537540cba09d7b914bde05ee5f
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Jun 10 14:17:18 2021 +0800

    fix index validate and show logic (#10747)
    
    * fix index validate and show logic
    
    * fix checkstyle
---
 .../merge/dal/show/LogicTablesMergedResult.java    | 17 ++++++++------
 .../dal/show/ShowCreateTableMergedResult.java      | 12 +++++++---
 .../merge/dal/show/ShowIndexMergedResult.java      |  4 ++--
 .../sharding/rewrite/token/pojo/IndexToken.java    |  9 ++++----
 .../impl/ShardingDropIndexStatementValidator.java  | 17 ++++++++++----
 .../loader/dialect/H2TableMetaDataLoader.java      |  4 ++--
 .../loader/dialect/MySQLTableMetaDataLoader.java   |  4 ++--
 .../loader/dialect/OracleTableMetaDataLoader.java  |  4 ++--
 .../dialect/PostgreSQLTableMetaDataLoader.java     |  4 ++--
 .../dialect/SQLServerTableMetaDataLoader.java      |  4 ++--
 .../IndexMetaDataUtil.java}                        | 22 +++++++++++++-----
 .../IndexMetaDataUtilTest.java}                    | 26 ++++++++++++++++++----
 12 files changed, 87 insertions(+), 40 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/LogicTablesMergedResult.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/LogicTablesMergedResult.java
index fc2315d..ee98148 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/LogicTablesMergedResult.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/LogicTablesMergedResult.java
@@ -17,14 +17,15 @@
 
 package org.apache.shardingsphere.sharding.merge.dal.show;
 
-import org.apache.shardingsphere.infra.merge.result.MergedResult;
-import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import org.apache.shardingsphere.sharding.rule.TableRule;
-import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
+import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.memory.MemoryMergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.memory.MemoryQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
+import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
+import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.sharding.rule.TableRule;
 
 import java.sql.SQLException;
 import java.util.HashSet;
@@ -55,11 +56,13 @@ public class LogicTablesMergedResult extends 
MemoryMergedResult<ShardingRule> {
                 Optional<TableRule> tableRule = 
shardingRule.findTableRuleByActualTable(actualTableName);
                 if (!tableRule.isPresent()) {
                     if (shardingRule.getTableRules().isEmpty() || 
tableNames.add(actualTableName)) {
+                        setCellValue(memoryResultSetRow, actualTableName, 
actualTableName, schema.get(actualTableName));
                         result.add(memoryResultSetRow);
                     }
                 } else if (tableNames.add(tableRule.get().getLogicTable())) {
-                    memoryResultSetRow.setCell(1, 
tableRule.get().getLogicTable());
-                    setCellValue(memoryResultSetRow, 
tableRule.get().getLogicTable(), actualTableName);
+                    String logicTableName = tableRule.get().getLogicTable();
+                    memoryResultSetRow.setCell(1, logicTableName);
+                    setCellValue(memoryResultSetRow, logicTableName, 
actualTableName, schema.get(logicTableName));
                     result.add(memoryResultSetRow);
                 }
             }
@@ -67,6 +70,6 @@ public class LogicTablesMergedResult extends 
MemoryMergedResult<ShardingRule> {
         return result;
     }
     
-    protected void setCellValue(final MemoryQueryResultRow memoryResultSetRow, 
final String logicTableName, final String actualTableName) {
+    protected void setCellValue(final MemoryQueryResultRow memoryResultSetRow, 
final String logicTableName, final String actualTableName, final TableMetaData 
tableMetaData) {
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResult.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResult.java
index 847802d..324b710 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResult.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResult.java
@@ -17,11 +17,13 @@
 
 package org.apache.shardingsphere.sharding.merge.dal.show;
 
-import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.memory.MemoryQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
+import 
org.apache.shardingsphere.infra.metadata.schema.builder.util.IndexMetaDataUtil;
+import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
+import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
 import java.sql.SQLException;
 import java.util.List;
@@ -37,7 +39,11 @@ public final class ShowCreateTableMergedResult extends 
LogicTablesMergedResult {
     }
     
     @Override
-    protected void setCellValue(final MemoryQueryResultRow memoryResultSetRow, 
final String logicTableName, final String actualTableName) {
+    protected void setCellValue(final MemoryQueryResultRow memoryResultSetRow, 
final String logicTableName, final String actualTableName, final TableMetaData 
tableMetaData) {
         memoryResultSetRow.setCell(2, 
memoryResultSetRow.getCell(2).toString().replaceFirst(actualTableName, 
logicTableName));
+        for (String each : tableMetaData.getIndexes().keySet()) {
+            String actualIndexName = 
IndexMetaDataUtil.getActualIndexName(each, actualTableName);
+            memoryResultSetRow.setCell(2, 
memoryResultSetRow.getCell(2).toString().replace(actualIndexName, each));
+        }
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowIndexMergedResult.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowIndexMergedResult.java
index 2926990..09da310 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowIndexMergedResult.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowIndexMergedResult.java
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.infra.merge.result.MergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.memory.MemoryMergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.memory.MemoryQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
-import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
+import 
org.apache.shardingsphere.infra.metadata.schema.builder.util.IndexMetaDataUtil;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sharding.rule.TableRule;
 
@@ -53,7 +53,7 @@ public class ShowIndexMergedResult extends 
MemoryMergedResult<ShardingRule> {
                 String actualIndexName = 
memoryResultSetRow.getCell(3).toString();
                 Optional<TableRule> tableRule = 
shardingRule.findTableRuleByActualTable(actualTableName);
                 tableRule.ifPresent(rule -> memoryResultSetRow.setCell(1, 
rule.getLogicTable()));
-                memoryResultSetRow.setCell(3, 
TableMetaDataLoaderUtil.getLogicIndexName(actualIndexName, actualTableName));
+                memoryResultSetRow.setCell(3, 
IndexMetaDataUtil.getLogicIndexName(actualIndexName, actualTableName));
                 result.add(memoryResultSetRow);
             }
         }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
index 16bd328..6d9c0d3 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rewrite.token.pojo;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
+import 
org.apache.shardingsphere.infra.metadata.schema.builder.util.IndexMetaDataUtil;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.RouteUnitAware;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.Substitutable;
@@ -65,12 +66,10 @@ public final class IndexToken extends SQLToken implements 
Substitutable, RouteUn
     }
     
     private String getIndexValue(final RouteUnit routeUnit) {
-        StringBuilder result = new StringBuilder(identifier.getValue());
         Map<String, String> logicAndActualTables = 
getLogicAndActualTables(routeUnit);
-        Optional<String> actualTableName = 
findLogicTableNameFromMetaData(identifier.getValue()).map(tableName 
-            -> Optional.of(logicAndActualTables.get(tableName))).orElseGet(() 
-> logicAndActualTables.values().stream().findFirst());
-        actualTableName.ifPresent(tableName -> 
result.append("_").append(tableName));
-        return result.toString();
+        String actualTableName = 
findLogicTableNameFromMetaData(identifier.getValue()).map(logicAndActualTables::get)
+                
.orElse(logicAndActualTables.values().stream().findFirst().orElse(null));
+        return IndexMetaDataUtil.getActualIndexName(identifier.getValue(), 
actualTableName);
     }
     
     private Optional<String> findLogicTableNameFromMetaData(final String 
logicIndexName) {
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
index c5de414..8137235 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
@@ -54,11 +54,20 @@ public final class ShardingDropIndexStatementValidator 
extends ShardingDDLStatem
     public void postValidate(final ShardingRule shardingRule, final 
SQLStatementContext<DropIndexStatement> sqlStatementContext, 
                              final RouteContext routeContext, final 
ShardingSphereSchema schema) {
         Collection<String> indexNames = 
sqlStatementContext.getSqlStatement().getIndexes().stream().map(each -> 
each.getIdentifier().getValue()).collect(Collectors.toList());
-        for (String each : indexNames) {
-            Optional<String> logicTableName = 
schema.getAllTableNames().stream().filter(tableName -> 
schema.get(tableName).getIndexes().containsKey(each)).findFirst();
-            if (logicTableName.isPresent() && 
isRouteUnitDataNodeDifferentSize(shardingRule, routeContext, 
logicTableName.get())) {
-                throw new ShardingSphereException("DROP INDEX ... statement 
can not route correctly for indexes %s.", indexNames);
+        Optional<String> logicTableName = 
DropIndexStatementHandler.getSimpleTableSegment(sqlStatementContext.getSqlStatement()).map(table
 -> table.getTableName().getIdentifier().getValue());
+        if (logicTableName.isPresent()) {
+            validateDropIndexRouteUnit(shardingRule, routeContext, indexNames, 
logicTableName.get());
+        } else {
+            for (String each : indexNames) {
+                logicTableName = 
schema.getAllTableNames().stream().filter(tableName -> 
schema.get(tableName).getIndexes().containsKey(each)).findFirst();
+                logicTableName.ifPresent(tableName -> 
validateDropIndexRouteUnit(shardingRule, routeContext, indexNames, tableName));
             }
         }
     }
+    
+    private void validateDropIndexRouteUnit(final ShardingRule shardingRule, 
final RouteContext routeContext, final Collection<String> indexNames, final 
String logicTableName) {
+        if (isRouteUnitDataNodeDifferentSize(shardingRule, routeContext, 
logicTableName)) {
+            throw new ShardingSphereException("DROP INDEX ... statement can 
not route correctly for indexes %s.", indexNames);
+        }
+    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/H2TableMetaDataLoader.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/H2TableMetaDataLoader.java
index a3c7774..00d341e 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/H2TableMetaDataLoader.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/H2TableMetaDataLoader.java
@@ -18,8 +18,8 @@
 package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
 
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
-import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
+import 
org.apache.shardingsphere.infra.metadata.schema.builder.util.IndexMetaDataUtil;
 import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
@@ -126,7 +126,7 @@ public final class H2TableMetaDataLoader implements 
DialectTableMetaDataLoader {
                     if (!result.containsKey(tableName)) {
                         result.put(tableName, new LinkedList<>());
                     }
-                    result.get(tableName).add(new 
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
+                    result.get(tableName).add(new 
IndexMetaData(IndexMetaDataUtil.getLogicIndexName(indexName, tableName)));
                 }
             }
         }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
index 10a28c9..1024c61 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
 
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
-import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
+import 
org.apache.shardingsphere.infra.metadata.schema.builder.util.IndexMetaDataUtil;
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -113,7 +113,7 @@ public final class MySQLTableMetaDataLoader implements 
DialectTableMetaDataLoade
                     if (!result.containsKey(tableName)) {
                         result.put(tableName, new LinkedList<>());
                     }
-                    result.get(tableName).add(new 
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
+                    result.get(tableName).add(new 
IndexMetaData(IndexMetaDataUtil.getLogicIndexName(indexName, tableName)));
                 }
             }
         }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
index 4526d25..270671a 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
 
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
-import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
+import 
org.apache.shardingsphere.infra.metadata.schema.builder.util.IndexMetaDataUtil;
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -121,7 +121,7 @@ public final class OracleTableMetaDataLoader implements 
DialectTableMetaDataLoad
                     if (!result.containsKey(tableName)) {
                         result.put(tableName, new LinkedList<>());
                     }
-                    result.get(tableName).add(new 
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
+                    result.get(tableName).add(new 
IndexMetaData(IndexMetaDataUtil.getLogicIndexName(indexName, tableName)));
                 }
             }
         }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/PostgreSQLTableMetaDataLoader.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/PostgreSQLTableMetaDataLoader.java
index 9db2063..e3d78c6 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/PostgreSQLTableMetaDataLoader.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/PostgreSQLTableMetaDataLoader.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
 
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
-import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
+import 
org.apache.shardingsphere.infra.metadata.schema.builder.util.IndexMetaDataUtil;
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -131,7 +131,7 @@ public final class PostgreSQLTableMetaDataLoader implements 
DialectTableMetaData
                     String tableName = resultSet.getString("tablename");
                     Collection<IndexMetaData> indexes = 
result.computeIfAbsent(tableName, k -> new LinkedList<>());
                     String indexName = resultSet.getString("indexname");
-                    indexes.add(new 
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
+                    indexes.add(new 
IndexMetaData(IndexMetaDataUtil.getLogicIndexName(indexName, tableName)));
                 }
             }
         }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/SQLServerTableMetaDataLoader.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/SQLServerTableMetaDataLoader.java
index 522d3ea..8627628 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/SQLServerTableMetaDataLoader.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/SQLServerTableMetaDataLoader.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect;
 
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.DataTypeLoader;
-import 
org.apache.shardingsphere.infra.metadata.schema.builder.loader.util.TableMetaDataLoaderUtil;
+import 
org.apache.shardingsphere.infra.metadata.schema.builder.util.IndexMetaDataUtil;
 import 
org.apache.shardingsphere.infra.metadata.schema.builder.spi.DialectTableMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.schema.model.IndexMetaData;
@@ -118,7 +118,7 @@ public final class SQLServerTableMetaDataLoader implements 
DialectTableMetaDataL
                     if (!result.containsKey(tableName)) {
                         result.put(tableName, new LinkedList<>());
                     }
-                    result.get(tableName).add(new 
IndexMetaData(TableMetaDataLoaderUtil.getLogicIndexName(indexName, tableName)));
+                    result.get(tableName).add(new 
IndexMetaData(IndexMetaDataUtil.getLogicIndexName(indexName, tableName)));
                 }
             }
         }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtil.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/IndexMetaDataUtil.java
similarity index 68%
rename from 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtil.java
rename to 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/IndexMetaDataUtil.java
index b32f3a5..af20919 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtil.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/IndexMetaDataUtil.java
@@ -15,26 +15,38 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.metadata.schema.builder.loader.util;
+package org.apache.shardingsphere.infra.metadata.schema.builder.util;
 
+import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Table meta data loader utility class.
+ * Index meta data utility class.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class TableMetaDataLoaderUtil {
+public class IndexMetaDataUtil {
     
     /**
      * Get logic index name.
      * 
      * @param actualIndexName actual index name
      * @param actualTableName actual table name
-     * @return logic index
+     * @return logic index name
      */
     public static String getLogicIndexName(final String actualIndexName, final 
String actualTableName) {
         String indexNameSuffix = "_" + actualTableName;
-        return actualIndexName.endsWith(indexNameSuffix) ? 
actualIndexName.replace(indexNameSuffix, "") : actualIndexName;
+        return actualIndexName.endsWith(indexNameSuffix) ? 
actualIndexName.substring(0, actualIndexName.lastIndexOf(indexNameSuffix)) : 
actualIndexName;
+    }
+    
+    /**
+     * Get actual index name.
+     *
+     * @param logicIndexName logic index name
+     * @param actualTableName actual table name
+     * @return actual index name
+     */
+    public static String getActualIndexName(final String logicIndexName, final 
String actualTableName) {
+        return Strings.isNullOrEmpty(actualTableName) ? logicIndexName : 
logicIndexName + "_" + actualTableName;
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtilTest.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/IndexMetaDataUtilTest.java
similarity index 54%
rename from 
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtilTest.java
rename to 
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/IndexMetaDataUtilTest.java
index 67ce6c4f..13e48a1 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/util/TableMetaDataLoaderUtilTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/IndexMetaDataUtilTest.java
@@ -15,22 +15,40 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.metadata.schema.builder.loader.util;
+package org.apache.shardingsphere.infra.metadata.schema.builder.util;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-public class TableMetaDataLoaderUtilTest {
+public class IndexMetaDataUtilTest {
     
     @Test
     public void assertGetLogicIndexNameWithIndexNameSuffix() {
-        String logicIndexName = 
TableMetaDataLoaderUtil.getLogicIndexName("order_index_t_order", "t_order");
+        String logicIndexName = 
IndexMetaDataUtil.getLogicIndexName("order_index_t_order", "t_order");
         Assert.assertEquals(logicIndexName, "order_index");
     }
     
     @Test
+    public void assertGetLogicIndexNameWithMultiIndexNameSuffix() {
+        String logicIndexName = 
IndexMetaDataUtil.getLogicIndexName("order_t_order_index_t_order", "t_order");
+        Assert.assertEquals(logicIndexName, "order_t_order_index");
+    }
+    
+    @Test
     public void assertGetLogicIndexNameWithoutIndexNameSuffix() {
-        String logicIndexName = 
TableMetaDataLoaderUtil.getLogicIndexName("order_index", "t_order");
+        String logicIndexName = 
IndexMetaDataUtil.getLogicIndexName("order_index", "t_order");
         Assert.assertEquals(logicIndexName, "order_index");
     }
+    
+    @Test
+    public void assertGetActualIndexNameWithActualTableName() {
+        String actualIndexName = 
IndexMetaDataUtil.getActualIndexName("order_index", "t_order");
+        Assert.assertEquals(actualIndexName, "order_index_t_order");
+    }
+    
+    @Test
+    public void assertGetActualIndexNameWithoutActualTableName() {
+        String actualIndexName = 
IndexMetaDataUtil.getActualIndexName("order_index", null);
+        Assert.assertEquals(actualIndexName, "order_index");
+    }
 }

Reply via email to