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 af6c59b0274 Refactor PushDownMetaDataRefreshEngine (#37992)
af6c59b0274 is described below

commit af6c59b0274c1ce262c5bb29216ac52327e424d1
Author: Haoran Meng <[email protected]>
AuthorDate: Mon Feb 9 16:21:14 2026 +0800

    Refactor PushDownMetaDataRefreshEngine (#37992)
---
 .../pushdown/PushDownMetaDataRefreshEngine.java    | 48 ++++++++++++++--------
 .../PushDownMetaDataRefreshEngineTest.java         |  9 ++--
 2 files changed, 37 insertions(+), 20 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngine.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngine.java
index 143f183efd2..76db48f3f14 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngine.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngine.java
@@ -27,9 +27,24 @@ import 
org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.mode.metadata.refresher.util.SchemaRefreshUtils;
 import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.AlterIndexStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.CreateIndexStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index.DropIndexStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.AlterSchemaStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.CreateSchemaStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.schema.DropSchemaStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.AlterTableStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.CreateTableStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.DropTableStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.RenameTableStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.AlterViewStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.CreateViewStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.DropViewStatement;
 
 import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -40,21 +55,12 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 public final class PushDownMetaDataRefreshEngine {
     
-    private final SQLStatementContext sqlStatementContext;
-    
-    @SuppressWarnings("rawtypes")
-    private final PushDownMetaDataRefresher refresher;
-    
-    public PushDownMetaDataRefreshEngine(final SQLStatementContext 
sqlStatementContext) {
-        this.sqlStatementContext = sqlStatementContext;
-        refresher = 
findPushDownMetaDataRefresher(sqlStatementContext).orElse(null);
-    }
+    private static final Collection<Class<?>> SUPPORTED_REFRESH_TYPES = new 
HashSet<>(Arrays.asList(CreateViewStatement.class, AlterViewStatement.class, 
DropViewStatement.class,
+            CreateIndexStatement.class, AlterIndexStatement.class, 
DropIndexStatement.class,
+            CreateSchemaStatement.class, AlterSchemaStatement.class, 
DropSchemaStatement.class,
+            CreateTableStatement.class, AlterTableStatement.class, 
DropTableStatement.class, RenameTableStatement.class));
     
-    @SuppressWarnings("rawtypes")
-    private Optional<PushDownMetaDataRefresher> 
findPushDownMetaDataRefresher(final SQLStatementContext sqlStatementContext) {
-        Optional<PushDownMetaDataRefresher> refresher = 
TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatementContext.getSqlStatement().getClass());
-        return refresher.isPresent() ? refresher : 
TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatementContext.getSqlStatement().getClass().getSuperclass());
-    }
+    private final SQLStatementContext sqlStatementContext;
     
     /**
      * Whether to need refresh meta data.
@@ -62,7 +68,7 @@ public final class PushDownMetaDataRefreshEngine {
      * @return is need refresh meta data or not
      */
     public boolean isNeedRefresh() {
-        return null != refresher;
+        return 
SUPPORTED_REFRESH_TYPES.contains(sqlStatementContext.getSqlStatement().getClass());
     }
     
     /**
@@ -77,11 +83,21 @@ public final class PushDownMetaDataRefreshEngine {
     @SuppressWarnings("unchecked")
     public void refresh(final MetaDataManagerPersistService 
metaDataManagerPersistService,
                         final ShardingSphereDatabase database, final 
ConfigurationProperties props, final Collection<RouteUnit> routeUnits) throws 
SQLException {
+        Optional<PushDownMetaDataRefresher> refresher = 
findPushDownMetaDataRefresher(sqlStatementContext);
+        if (!refresher.isPresent()) {
+            return;
+        }
         Collection<String> logicDataSourceNames = routeUnits.stream().map(each 
-> each.getDataSourceMapper().getLogicName()).collect(Collectors.toList());
         String schemaName = SchemaRefreshUtils.getSchemaName(database, 
sqlStatementContext);
         DatabaseType databaseType = routeUnits.stream().map(each -> 
database.getResourceMetaData().getStorageUnits().get(each.getDataSourceMapper().getActualName()))
                 
.filter(Objects::nonNull).findFirst().map(StorageUnit::getStorageType).orElseGet(()
 -> sqlStatementContext.getSqlStatement().getDatabaseType());
-        refresher.refresh(metaDataManagerPersistService, database,
+        refresher.get().refresh(metaDataManagerPersistService, database,
                 logicDataSourceNames.isEmpty() ? null : 
logicDataSourceNames.iterator().next(), schemaName, databaseType, 
sqlStatementContext.getSqlStatement(), props);
     }
+    
+    @SuppressWarnings("rawtypes")
+    private Optional<PushDownMetaDataRefresher> 
findPushDownMetaDataRefresher(final SQLStatementContext sqlStatementContext) {
+        Optional<PushDownMetaDataRefresher> refresher = 
TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatementContext.getSqlStatement().getClass());
+        return refresher.isPresent() ? refresher : 
TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatementContext.getSqlStatement().getClass().getSuperclass());
+    }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngineTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngineTest.java
index 1cf09943de9..ac50b879d0a 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngineTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngineTest.java
@@ -42,7 +42,6 @@ import java.util.Optional;
 import java.util.Properties;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -78,7 +77,7 @@ class PushDownMetaDataRefreshEngineTest {
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
         PushDownMetaDataRefresher<SQLStatement> refresher = 
mock(PushDownMetaDataRefresher.class);
         when(TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatement.getClass())).thenReturn(Optional.of(refresher));
-        assertTrue(new 
PushDownMetaDataRefreshEngine(sqlStatementContext).isNeedRefresh());
+        assertFalse(new 
PushDownMetaDataRefreshEngine(sqlStatementContext).isNeedRefresh());
     }
     
     @SuppressWarnings("unchecked")
@@ -95,7 +94,8 @@ class PushDownMetaDataRefreshEngineTest {
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
         PushDownMetaDataRefresher<SQLStatement> refresher = 
mock(PushDownMetaDataRefresher.class);
-        new PushDownMetaDataRefreshEngine(sqlStatementContext, 
refresher).refresh(
+        when(TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatement.getClass())).thenReturn(Optional.of(refresher));
+        new PushDownMetaDataRefreshEngine(sqlStatementContext).refresh(
                 metaDataManagerPersistService, database, props, 
Collections.singleton(new RouteUnit(new RouteMapper("logic_ds", "actual_ds"), 
Collections.emptyList())));
         verify(refresher).refresh(metaDataManagerPersistService, database, 
"logic_ds", "foo_schema", storageType, sqlStatement, props);
     }
@@ -108,7 +108,8 @@ class PushDownMetaDataRefreshEngineTest {
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
         ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
         PushDownMetaDataRefresher<SQLStatement> refresher = 
mock(PushDownMetaDataRefresher.class);
-        new PushDownMetaDataRefreshEngine(sqlStatementContext, 
refresher).refresh(metaDataManagerPersistService, database, props, 
Collections.emptyList());
+        when(TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatement.getClass())).thenReturn(Optional.of(refresher));
+        new 
PushDownMetaDataRefreshEngine(sqlStatementContext).refresh(metaDataManagerPersistService,
 database, props, Collections.emptyList());
         verify(refresher).refresh(metaDataManagerPersistService, database, 
null, "foo_schema", databaseType, sqlStatement, props);
     }
 }

Reply via email to