You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2021/06/10 06:18:07 UTC
[shardingsphere] branch master updated: fix index validate and show
logic (#10747)
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 <st...@gmail.com>
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");
+ }
}