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

chengzhang 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 2cdc107f74a Refactor ShardingSphereDatabase.schemas' key as 
ShardingSphereMetaDataIdentifier (#33862)
2cdc107f74a is described below

commit 2cdc107f74a52f0f29dc7730473a3774e15e62d4
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Dec 1 17:20:25 2024 +0800

    Refactor ShardingSphereDatabase.schemas' key as 
ShardingSphereMetaDataIdentifier (#33862)
    
    * Remove useless getter of ShardingSphereDatabase.schemas
    
    * Refactor ShardingSphereDatabase.schemas' key as 
ShardingSphereMetaDataIdentifier
    
    * Refactor ShardingSphereDatabase.schemas' key as 
ShardingSphereMetaDataIdentifier
---
 .../metadata/database/ShardingSphereDatabase.java  | 25 ++++++++++++++++------
 .../factory/InternalMetaDataFactoryTest.java       | 12 +++++++----
 2 files changed, 26 insertions(+), 11 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index d3f962eea88..204042b884d 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.infra.metadata.database;
 
-import com.cedarsoftware.util.CaseInsensitiveMap;
+import lombok.AccessLevel;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
 import 
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
@@ -34,6 +34,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import 
org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereMetaDataIdentifier;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
 import 
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
@@ -62,7 +63,8 @@ public final class ShardingSphereDatabase {
     
     private final RuleMetaData ruleMetaData;
     
-    private final Map<String, ShardingSphereSchema> schemas;
+    @Getter(AccessLevel.NONE)
+    private final Map<ShardingSphereMetaDataIdentifier, ShardingSphereSchema> 
schemas;
     
     public ShardingSphereDatabase(final String name, final DatabaseType 
protocolType, final ResourceMetaData resourceMetaData,
                                   final RuleMetaData ruleMetaData, final 
Map<String, ShardingSphereSchema> schemas) {
@@ -70,7 +72,16 @@ public final class ShardingSphereDatabase {
         this.protocolType = protocolType;
         this.resourceMetaData = resourceMetaData;
         this.ruleMetaData = ruleMetaData;
-        this.schemas = new CaseInsensitiveMap<>(schemas, new 
ConcurrentHashMap<>(schemas.size(), 1F));
+        this.schemas = new 
ConcurrentHashMap<>(schemas.entrySet().stream().collect(Collectors.toMap(entry 
-> new ShardingSphereMetaDataIdentifier(entry.getKey()), Entry::getValue)));
+    }
+    
+    public ShardingSphereDatabase(final String name, final DatabaseType 
protocolType, final ResourceMetaData resourceMetaData,
+                                  final RuleMetaData ruleMetaData, final 
Collection<ShardingSphereSchema> schemas) {
+        this.name = name;
+        this.protocolType = protocolType;
+        this.resourceMetaData = resourceMetaData;
+        this.ruleMetaData = ruleMetaData;
+        this.schemas = new 
ConcurrentHashMap<>(schemas.stream().collect(Collectors.toMap(each -> new 
ShardingSphereMetaDataIdentifier(each.getName()), each -> each)));
     }
     
     /**
@@ -154,7 +165,7 @@ public final class ShardingSphereDatabase {
      * @return contains schema from database or not
      */
     public boolean containsSchema(final String schemaName) {
-        return schemas.containsKey(schemaName);
+        return schemas.containsKey(new 
ShardingSphereMetaDataIdentifier(schemaName));
     }
     
     /**
@@ -164,7 +175,7 @@ public final class ShardingSphereDatabase {
      * @return schema
      */
     public ShardingSphereSchema getSchema(final String schemaName) {
-        return schemas.get(schemaName);
+        return schemas.get(new ShardingSphereMetaDataIdentifier(schemaName));
     }
     
     /**
@@ -174,7 +185,7 @@ public final class ShardingSphereDatabase {
      * @param schema schema
      */
     public void addSchema(final String schemaName, final ShardingSphereSchema 
schema) {
-        schemas.put(schemaName, schema);
+        schemas.put(new ShardingSphereMetaDataIdentifier(schemaName), schema);
     }
     
     /**
@@ -183,7 +194,7 @@ public final class ShardingSphereDatabase {
      * @param schemaName schema name
      */
     public void dropSchema(final String schemaName) {
-        schemas.remove(schemaName);
+        schemas.remove(new ShardingSphereMetaDataIdentifier(schemaName));
     }
     
     /**
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
index c087bf9d6f3..51a59eb30df 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
@@ -43,8 +43,10 @@ class InternalMetaDataFactoryTest {
     
     @Test
     void assertCreateWithDatabaseName() {
-        ShardingSphereDatabase database = 
InternalMetaDataFactory.create("foo_db",
-                mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS), 
mock(DatabaseConfiguration.class), new ConfigurationProperties(new 
Properties()), mock(ComputeNodeInstanceContext.class));
+        MetaDataPersistService persistService = 
mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
+        
when(persistService.getDatabaseMetaDataFacade().getSchema().load("foo_db")).thenReturn(Collections.emptyMap());
+        ShardingSphereDatabase database = InternalMetaDataFactory.create(
+                "foo_db", persistService, mock(DatabaseConfiguration.class), 
new ConfigurationProperties(new Properties()), 
mock(ComputeNodeInstanceContext.class));
         assertThat(database.getName(), is("foo_db"));
         assertThat(database.getProtocolType(), 
is(TypedSPILoader.getService(DatabaseType.class, "MySQL")));
         assertTrue(database.getRuleMetaData().getRules().isEmpty());
@@ -64,12 +66,14 @@ class InternalMetaDataFactoryTest {
     
     @Test
     void assertCreateWithDatabasesWithStorageUnits() {
+        MetaDataPersistService persistService = 
mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
+        
when(persistService.getDatabaseMetaDataFacade().getSchema().load("foo_db")).thenReturn(Collections.emptyMap());
         DatabaseConfiguration databaseConfig = 
mock(DatabaseConfiguration.class);
         StorageUnit storageUnit = mock(StorageUnit.class);
         when(storageUnit.getDataSource()).thenReturn(new MockedDataSource());
         
when(databaseConfig.getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnit));
-        Map<String, ShardingSphereDatabase> databases = 
InternalMetaDataFactory.create(mock(MetaDataPersistService.class, 
RETURNS_DEEP_STUBS),
-                Collections.singletonMap("foo_db", databaseConfig), new 
ConfigurationProperties(new Properties()), 
mock(ComputeNodeInstanceContext.class));
+        Map<String, ShardingSphereDatabase> databases = 
InternalMetaDataFactory.create(
+                persistService, Collections.singletonMap("foo_db", 
databaseConfig), new ConfigurationProperties(new Properties()), 
mock(ComputeNodeInstanceContext.class));
         assertThat(databases.size(), is(1));
         assertThat(databases.get("foo_db").getName(), is("foo_db"));
         assertThat(databases.get("foo_db").getProtocolType(), 
is(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")));

Reply via email to