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()));