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 59354d7691a Refactor TableRefreshUtils (#34486)
59354d7691a is described below

commit 59354d7691a5ec3fa8fca1fb1dbc3ab01fdf577c
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sat Jan 25 17:47:34 2025 +0800

    Refactor TableRefreshUtils (#34486)
    
    * Refactor TableRefreshUtils
    
    * Refactor TableRefreshUtils
---
 mode/core/pom.xml                                  |  5 ++
 .../CreateTablePushDownMetaDataRefresher.java      |  2 +-
 .../table/DropTablePushDownMetaDataRefresher.java  |  2 +-
 .../refresher/metadata/util/TableRefreshUtils.java | 54 +++++++---------------
 4 files changed, 23 insertions(+), 40 deletions(-)

diff --git a/mode/core/pom.xml b/mode/core/pom.xml
index 1e31f07776b..0ce406b2c53 100644
--- a/mode/core/pom.xml
+++ b/mode/core/pom.xml
@@ -37,6 +37,11 @@
             <artifactId>shardingsphere-mode-node</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-single-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java
index f88518cbe43..9ca75672420 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java
@@ -58,7 +58,7 @@ public final class CreateTablePushDownMetaDataRefresher 
implements PushDownMetaD
         Optional<ShardingSphereTable> actualTableMetaData = 
Optional.ofNullable(schemas.get(schemaName)).map(optional -> 
optional.getTable(tableName));
         Preconditions.checkState(actualTableMetaData.isPresent(), "Load actual 
table metadata '%s' failed.", tableName);
         metaDataManagerPersistService.createTable(database.getName(), 
schemaName, actualTableMetaData.get(), logicDataSourceNames.isEmpty() ? null : 
logicDataSourceNames.iterator().next());
-        if (isSingleTable && 
TableRefreshUtils.isRuleRefreshRequired(ruleMetaData, schemaName, tableName)) {
+        if (isSingleTable && TableRefreshUtils.isNeedRefresh(ruleMetaData, 
schemaName, tableName)) {
             
metaDataManagerPersistService.alterSingleRuleConfiguration(database.getName(), 
ruleMetaData);
         }
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java
index 87f419a8c35..d473e2f5104 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java
@@ -39,7 +39,7 @@ public final class DropTablePushDownMetaDataRefresher 
implements PushDownMetaDat
     public void refresh(final MetaDataManagerPersistService 
metaDataManagerPersistService, final ShardingSphereDatabase database, final 
Collection<String> logicDataSourceNames,
                         final String schemaName, final DatabaseType 
databaseType, final DropTableStatement sqlStatement, final 
ConfigurationProperties props) throws SQLException {
         Collection<String> tableNames = 
sqlStatement.getTables().stream().map(each -> 
each.getTableName().getIdentifier().getValue()).collect(Collectors.toList());
-        boolean isRuleRefreshRequired = 
TableRefreshUtils.isRuleRefreshRequired(database.getRuleMetaData(), schemaName, 
sqlStatement.getTables());
+        boolean isRuleRefreshRequired = 
TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), schemaName, 
sqlStatement.getTables());
         metaDataManagerPersistService.dropTables(database.getName(), 
schemaName, tableNames);
         for (SimpleTableSegment each : sqlStatement.getTables()) {
             if (isRuleRefreshRequired && 
TableRefreshUtils.isSingleTable(each.getTableName().getIdentifier().getValue(), 
database)) {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java
index 105c6ab56a2..5b64c1c9412 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java
@@ -20,23 +20,20 @@ package 
org.apache.shardingsphere.mode.metadata.refresher.metadata.util;
 import com.google.common.base.Joiner;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
 import 
org.apache.shardingsphere.infra.rule.attribute.table.TableMapperRuleAttribute;
-import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
 import org.apache.shardingsphere.single.constant.SingleTableConstants;
+import org.apache.shardingsphere.single.rule.SingleRule;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Collection;
-import java.util.LinkedList;
 import java.util.Optional;
 
 /**
@@ -70,55 +67,36 @@ public final class TableRefreshUtils {
     }
     
     /**
-     * Judge whether the rule need to be refreshed.
+     * Judge whether to need refresh.
      *
      * @param ruleMetaData rule meta data
      * @param schemaName schema name
      * @param tableSegments table segments
-     * @return whether the rule need to be refreshed
+     * @return need to refresh or not
      */
-    public static boolean isRuleRefreshRequired(final RuleMetaData 
ruleMetaData, final String schemaName, final Collection<SimpleTableSegment> 
tableSegments) {
-        for (SimpleTableSegment each : tableSegments) {
-            if (isRuleRefreshRequired(ruleMetaData, schemaName, 
each.getTableName().getIdentifier().getValue())) {
-                return true;
-            }
-        }
-        return false;
+    public static boolean isNeedRefresh(final RuleMetaData ruleMetaData, final 
String schemaName, final Collection<SimpleTableSegment> tableSegments) {
+        return tableSegments.stream().anyMatch(each -> 
isNeedRefresh(ruleMetaData, schemaName, 
each.getTableName().getIdentifier().getValue()));
     }
     
     /**
-     * Judge whether the rule need to be refreshed.
+     * Judge whether to need refresh.
      *
      * @param ruleMetaData rule meta data
      * @param schemaName schema name
      * @param tableName table name
-     * @return whether the rule need to be refreshed
+     * @return need to refresh or not
      */
-    public static boolean isRuleRefreshRequired(final RuleMetaData 
ruleMetaData, final String schemaName, final String tableName) {
-        Collection<ShardingSphereRule> rules = new LinkedList<>();
-        for (ShardingSphereRule each : ruleMetaData.getRules()) {
-            
each.getAttributes().findAttribute(MutableDataNodeRuleAttribute.class).ifPresent(optional
 -> rules.add(each));
-        }
-        if (rules.isEmpty()) {
-            return false;
-        }
-        ShardingSphereRule rule = rules.iterator().next();
-        RuleConfiguration ruleConfig = rule.getConfiguration();
-        if (!(ruleConfig instanceof SingleRuleConfiguration)) {
-            return false;
-        }
-        Collection<String> tablesConfig = ((SingleRuleConfiguration) 
ruleConfig).getTables();
-        if (tablesConfig.contains(SingleTableConstants.ALL_TABLES) || 
tablesConfig.contains(SingleTableConstants.ALL_SCHEMA_TABLES)) {
-            return false;
-        }
-        Optional<DataNode> dataNode = 
rule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(schemaName,
 tableName);
-        if (!dataNode.isPresent()) {
+    public static boolean isNeedRefresh(final RuleMetaData ruleMetaData, final 
String schemaName, final String tableName) {
+        SingleRule singleRule = ruleMetaData.getSingleRule(SingleRule.class);
+        Collection<String> singleTableNames = 
singleRule.getConfiguration().getTables();
+        if (singleTableNames.contains(SingleTableConstants.ALL_TABLES) || 
singleTableNames.contains(SingleTableConstants.ALL_SCHEMA_TABLES)) {
             return false;
         }
-        DataNode actualNode = dataNode.get();
-        return 
!tablesConfig.contains(joinDataNodeSegments(actualNode.getDataSourceName(), 
SingleTableConstants.ASTERISK))
-                && 
!tablesConfig.contains(joinDataNodeSegments(actualNode.getDataSourceName(), 
SingleTableConstants.ASTERISK, SingleTableConstants.ASTERISK))
-                && 
!tablesConfig.contains(joinDataNodeSegments(actualNode.getDataSourceName(), 
actualNode.getSchemaName(), SingleTableConstants.ASTERISK));
+        Optional<DataNode> dataNode = 
singleRule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(schemaName,
 tableName);
+        return dataNode.isPresent()
+                && 
!singleTableNames.contains(joinDataNodeSegments(dataNode.get().getDataSourceName(),
 SingleTableConstants.ASTERISK))
+                && 
!singleTableNames.contains(joinDataNodeSegments(dataNode.get().getDataSourceName(),
 SingleTableConstants.ALL_TABLES, SingleTableConstants.ASTERISK))
+                && 
!singleTableNames.contains(joinDataNodeSegments(dataNode.get().getDataSourceName(),
 dataNode.get().getSchemaName(), SingleTableConstants.ASTERISK));
     }
     
     private static String joinDataNodeSegments(final String... segments) {

Reply via email to