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

terrymanu 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 fc7af7762dc Handle child deletions after database removal (#40326)
fc7af7762dc is described below

commit fc7af7762dc4e241fdbb17a08b203f7bb73a0e34
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Oct 22 11:27:06 2026 +0800

    Handle child deletions after database removal (#40326)
---
 .../manager/database/DatabaseMetaDataManager.java  |  4 ++--
 .../database/DatabaseMetaDataManagerTest.java      | 22 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/database/DatabaseMetaDataManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/database/DatabaseMetaDataManager.java
index 96ce015953b..1d07a152fda 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/database/DatabaseMetaDataManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/database/DatabaseMetaDataManager.java
@@ -95,7 +95,7 @@ public final class DatabaseMetaDataManager {
     public synchronized void dropSchema(final String databaseName, final 
String schemaName) {
         ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
-        if (!database.containsSchema(schemaName)) {
+        if (null == database || !database.containsSchema(schemaName)) {
             return;
         }
         ShardingSphereSchema schema = database.getSchema(schemaName);
@@ -184,7 +184,7 @@ public final class DatabaseMetaDataManager {
     
     private void dropTableOrView(final String databaseName, final String 
schemaName, final String toBeDroppedTableOrViewName, final boolean isTable) {
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
-        if (!database.containsSchema(schemaName)) {
+        if (null == database || !database.containsSchema(schemaName)) {
             return;
         }
         if (isTable) {
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/database/DatabaseMetaDataManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/database/DatabaseMetaDataManagerTest.java
index 23b9826c23c..44920301512 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/database/DatabaseMetaDataManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/database/DatabaseMetaDataManagerTest.java
@@ -56,6 +56,7 @@ import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(AutoMockExtension.class)
@@ -128,6 +129,13 @@ class DatabaseMetaDataManagerTest {
         verify(metaDataContexts.getMetaData().getDatabase("foo_db"), 
never()).addSchema(any(ShardingSphereSchema.class));
     }
     
+    @Test
+    void assertDropSchemaWithNotExistedDatabase() {
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db")).thenReturn(null);
+        assertDoesNotThrow(() -> databaseMetaDataManager.dropSchema("foo_db", 
"foo_schema"));
+        verifyNoInteractions(globalRule);
+    }
+    
     @Test
     void assertDropNotExistedSchema() {
         databaseMetaDataManager.dropSchema("foo_db", "bar_schema");
@@ -226,6 +234,13 @@ class DatabaseMetaDataManagerTest {
         assertThat(view.getViewDefinition(), is("SELECT 
`foo_view`.`foo_view`.`id` AS `id` FROM `foo_view`.`foo_view`"));
     }
     
+    @Test
+    void assertDropTableWithNotExistedDatabase() {
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db")).thenReturn(null);
+        assertDoesNotThrow(() -> databaseMetaDataManager.dropTable("foo_db", 
"foo_schema", "foo_tbl"));
+        verifyNoInteractions(globalRule);
+    }
+    
     @Test
     void assertDropTable() {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema()));
@@ -234,6 +249,13 @@ class DatabaseMetaDataManagerTest {
         
verify(metaDataContexts.getMetaData().getDatabase("foo_db")).removeDataNode("foo_schema",
 "foo_tbl");
     }
     
+    @Test
+    void assertDropViewWithNotExistedDatabase() {
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db")).thenReturn(null);
+        assertDoesNotThrow(() -> databaseMetaDataManager.dropView("foo_db", 
"foo_schema", "foo_view"));
+        verifyNoInteractions(globalRule);
+    }
+    
     @Test
     void assertDropView() {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema()));

Reply via email to