This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 b4273ade6aa Use ShardingSphereMetaDataIdentifier on
ShardingSphereTable's indexes and constraints (#33804)
b4273ade6aa is described below
commit b4273ade6aafe78d0905bbf4e3345fb7fe7cc24f
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Nov 25 22:13:34 2024 +0800
Use ShardingSphereMetaDataIdentifier on ShardingSphereTable's indexes and
constraints (#33804)
* Refactor ShardingSphereTable
* Use ShardingSphereMetaDataIdentifier on ShardingSphereTable's indexes and
constraints
* Use ShardingSphereMetaDataIdentifier on ShardingSphereTable's indexes and
---
.../ShardingCreateIndexStatementValidator.java | 5 +-
.../schema/model/ShardingSphereSchema.java | 2 +-
.../database/schema/model/ShardingSphereTable.java | 67 +++++++++-------------
.../schema/model/ShardingSphereTableTest.java | 18 +++---
4 files changed, 38 insertions(+), 54 deletions(-)
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateIndexStatementValidator.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateIndexStatementValidator.java
index ce60d5ed7e5..f99a9fa10c4 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateIndexStatementValidator.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateIndexStatementValidator.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateIndexStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.hint.HintValueContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -52,9 +53,7 @@ public final class ShardingCreateIndexStatementValidator
extends ShardingDDLStat
validateTableExist(schema,
Collections.singleton(createIndexStatement.getTable()));
String tableName =
createIndexStatement.getTable().getTableName().getIdentifier().getValue();
String indexName =
createIndexStatementContext.getIndexes().stream().map(each ->
each.getIndexName().getIdentifier().getValue()).findFirst().orElse(null);
- if (schema.containsIndex(tableName, indexName)) {
- throw new DuplicateIndexException(indexName);
- }
+
ShardingSpherePreconditions.checkState(!schema.containsIndex(tableName,
indexName), () -> new DuplicateIndexException(indexName));
}
@Override
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
index b37664a3129..fc8c93f9d2e 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
@@ -155,7 +155,7 @@ public final class ShardingSphereSchema {
*
* @param tableName table name
* @param indexName index name
- * @return whether contains index name or not
+ * @return contains index name or not
*/
public boolean containsIndex(final String tableName, final String
indexName) {
return containsTable(tableName) &&
getTable(tableName).containsIndex(indexName);
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTable.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTable.java
index aca141e097c..a4bcba112de 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTable.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTable.java
@@ -28,8 +28,10 @@ import
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereMetaDat
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* ShardingSphere table.
@@ -52,9 +54,9 @@ public final class ShardingSphereTable {
private final Map<String, Integer> visibleColumnAndIndexMap = new
CaseInsensitiveMap<>();
- private final Map<String, ShardingSphereIndex> indexes;
+ private final Map<ShardingSphereMetaDataIdentifier, ShardingSphereIndex>
indexes;
- private final Map<String, ShardingSphereConstraint> constraints;
+ private final Map<ShardingSphereMetaDataIdentifier,
ShardingSphereConstraint> constraints;
private final TableType type;
@@ -77,7 +79,7 @@ public final class ShardingSphereTable {
}
private Map<ShardingSphereMetaDataIdentifier, ShardingSphereColumn>
createColumns(final Collection<ShardingSphereColumn> columns) {
- Map<ShardingSphereMetaDataIdentifier, ShardingSphereColumn> result =
new CaseInsensitiveMap<>(columns.size(), 1F);
+ Map<ShardingSphereMetaDataIdentifier, ShardingSphereColumn> result =
new LinkedHashMap<>(columns.size(), 1F);
int index = 0;
for (ShardingSphereColumn each : columns) {
result.put(new ShardingSphereMetaDataIdentifier(each.getName()),
each);
@@ -93,20 +95,13 @@ public final class ShardingSphereTable {
return result;
}
- private Map<String, ShardingSphereIndex> createIndexes(final
Collection<ShardingSphereIndex> indexes) {
- Map<String, ShardingSphereIndex> result = new
CaseInsensitiveMap<>(indexes.size(), 1F);
- for (ShardingSphereIndex each : indexes) {
- result.put(each.getName(), each);
- }
- return result;
+ private Map<ShardingSphereMetaDataIdentifier, ShardingSphereIndex>
createIndexes(final Collection<ShardingSphereIndex> indexes) {
+ return indexes.stream().collect(Collectors.toMap(each -> new
ShardingSphereMetaDataIdentifier(each.getName()), each -> each, (a, b) -> b, ()
-> new LinkedHashMap<>(indexes.size(), 1F)));
}
- private Map<String, ShardingSphereConstraint> createConstraints(final
Collection<ShardingSphereConstraint> constraints) {
- Map<String, ShardingSphereConstraint> result = new
CaseInsensitiveMap<>(constraints.size(), 1F);
- for (ShardingSphereConstraint each : constraints) {
- result.put(each.getName(), each);
- }
- return result;
+ private Map<ShardingSphereMetaDataIdentifier, ShardingSphereConstraint>
createConstraints(final Collection<ShardingSphereConstraint> constraints) {
+ return constraints.stream()
+ .collect(Collectors.toMap(each -> new
ShardingSphereMetaDataIdentifier(each.getName()), each -> each, (a, b) -> b, ()
-> new LinkedHashMap<>(constraints.size(), 1F)));
}
/**
@@ -139,50 +134,40 @@ public final class ShardingSphereTable {
}
/**
- * Put index.
- *
- * @param index index
- */
- public void putIndex(final ShardingSphereIndex index) {
- indexes.put(index.getName(), index);
- }
-
- /**
- * Remove index.
+ * Judge whether contains index.
*
* @param indexName index name
+ * @return contains index or not
*/
- public void removeIndex(final String indexName) {
- indexes.remove(indexName);
+ public boolean containsIndex(final String indexName) {
+ return null != indexName && indexes.containsKey(new
ShardingSphereMetaDataIdentifier(indexName));
}
/**
- * Judge whether contains index.
+ * Get all indexes.
*
- * @param indexName index name
- * @return contains index or not
+ * @return indexes
*/
- public boolean containsIndex(final String indexName) {
- return null != indexName && indexes.containsKey(indexName);
+ public Collection<ShardingSphereIndex> getAllIndexes() {
+ return indexes.values();
}
/**
- * Get index.
+ * Put index.
*
- * @param indexName index name
- * @return index
+ * @param index index
*/
- public ShardingSphereIndex getIndex(final String indexName) {
- return indexes.get(indexName);
+ public void putIndex(final ShardingSphereIndex index) {
+ indexes.put(new ShardingSphereMetaDataIdentifier(index.getName()),
index);
}
/**
- * Get all indexes.
+ * Remove index.
*
- * @return indexes
+ * @param indexName index name
*/
- public Collection<ShardingSphereIndex> getAllIndexes() {
- return indexes.values();
+ public void removeIndex(final String indexName) {
+ indexes.remove(new ShardingSphereMetaDataIdentifier(indexName));
}
/**
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTableTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTableTest.java
index da91208ccd8..093eff87432 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTableTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTableTest.java
@@ -64,9 +64,9 @@ class ShardingSphereTableTest {
ShardingSphereIndex index1 = new ShardingSphereIndex("foo_idx_1");
ShardingSphereIndex index2 = new ShardingSphereIndex("foo_idx_2");
ShardingSphereTable shardingSphereTable = new
ShardingSphereTable("foo_tbl", Collections.emptyList(), Arrays.asList(index1,
index2), Collections.emptyList());
- assertThat(shardingSphereTable.getIndex("foo_idx_1"), is(index1));
- assertThat(shardingSphereTable.getIndex("foo_idx_2"), is(index2));
- assertNull(shardingSphereTable.getIndex("invalid"));
+ assertTrue(shardingSphereTable.containsIndex("foo_idx_1"));
+ assertTrue(shardingSphereTable.containsIndex("foo_idx_2"));
+ assertFalse(shardingSphereTable.containsIndex("invalid"));
assertThat(shardingSphereTable.getAllIndexes(), hasSize(2));
}
@@ -74,9 +74,9 @@ class ShardingSphereTableTest {
void assertGetIndex() {
ShardingSphereIndex index = new ShardingSphereIndex("foo_idx");
ShardingSphereTable shardingSphereTable = new
ShardingSphereTable("foo_tbl", Collections.emptyList(),
Collections.singleton(index), Collections.emptyList());
- assertThat(shardingSphereTable.getIndex("foo_idx"), is(index));
- assertThat(shardingSphereTable.getIndex("FOO_IDX"), is(index));
- assertNull(shardingSphereTable.getIndex("invalid"));
+ assertTrue(shardingSphereTable.containsIndex("foo_idx"));
+ assertTrue(shardingSphereTable.containsIndex("FOO_IDX"));
+ assertFalse(shardingSphereTable.containsIndex("invalid"));
}
@Test
@@ -85,9 +85,9 @@ class ShardingSphereTableTest {
ShardingSphereIndex index2 = new ShardingSphereIndex("foo_idx_2");
ShardingSphereTable shardingSphereTable = new
ShardingSphereTable("foo_tbl", Collections.emptyList(), Arrays.asList(index1,
index2), Collections.emptyList());
shardingSphereTable.removeIndex("foo_idx_1");
- assertNull(shardingSphereTable.getIndex("foo_idx_1"));
+ assertFalse(shardingSphereTable.containsIndex("foo_idx_1"));
shardingSphereTable.removeIndex("invalid");
- assertThat(shardingSphereTable.getIndex("foo_idx_2"), is(index2));
+ assertTrue(shardingSphereTable.containsIndex("foo_idx_2"));
assertThat(shardingSphereTable.getAllIndexes(), hasSize(1));
}
@@ -115,7 +115,7 @@ class ShardingSphereTableTest {
ShardingSphereConstraint constraint = new
ShardingSphereConstraint("foo_tbl_foreign_key", "foo_tbl");
ShardingSphereTable table = new ShardingSphereTable("foo_tbl",
Collections.emptyList(), Collections.emptyList(),
Collections.singletonList(constraint));
assertThat(table.getAllConstraints(), hasItems(constraint));
- assertThat(table.getAllConstraints(), hasSize(1));
+ assertThat(table.getAllConstraints().size(), is(1));
}
@Test