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 ace5843f530 Revert "Refactor TableRefreshUtils (#34486)" (#34487)
ace5843f530 is described below

commit ace5843f530084fd42ec1c814f7fb84485821a8a
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jan 25 17:51:19 2025 +0800

    Revert "Refactor TableRefreshUtils (#34486)" (#34487)
    
    This reverts commit 59354d7691a5ec3fa8fca1fb1dbc3ab01fdf577c.
---
 mode/core/pom.xml                                  |  5 --
 .../CreateTablePushDownMetaDataRefresher.java      |  2 +-
 .../table/DropTablePushDownMetaDataRefresher.java  |  2 +-
 .../refresher/metadata/util/TableRefreshUtils.java | 54 +++++++++++++++-------
 4 files changed, 40 insertions(+), 23 deletions(-)

diff --git a/mode/core/pom.xml b/mode/core/pom.xml
index 0ce406b2c53..1e31f07776b 100644
--- a/mode/core/pom.xml
+++ b/mode/core/pom.xml
@@ -37,11 +37,6 @@
             <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 9ca75672420..f88518cbe43 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.isNeedRefresh(ruleMetaData, 
schemaName, tableName)) {
+        if (isSingleTable && 
TableRefreshUtils.isRuleRefreshRequired(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 d473e2f5104..87f419a8c35 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.isNeedRefresh(database.getRuleMetaData(), schemaName, 
sqlStatement.getTables());
+        boolean isRuleRefreshRequired = 
TableRefreshUtils.isRuleRefreshRequired(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 5b64c1c9412..105c6ab56a2 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,20 +20,23 @@ 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;
 
 /**
@@ -67,36 +70,55 @@ public final class TableRefreshUtils {
     }
     
     /**
-     * Judge whether to need refresh.
+     * Judge whether the rule need to be refreshed.
      *
      * @param ruleMetaData rule meta data
      * @param schemaName schema name
      * @param tableSegments table segments
-     * @return need to refresh or not
+     * @return whether the rule need to be refreshed
      */
-    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()));
+    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;
     }
     
     /**
-     * Judge whether to need refresh.
+     * Judge whether the rule need to be refreshed.
      *
      * @param ruleMetaData rule meta data
      * @param schemaName schema name
      * @param tableName table name
-     * @return need to refresh or not
+     * @return whether the rule need to be refreshed
      */
-    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)) {
+    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()) {
             return false;
         }
-        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));
+        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));
     }
     
     private static String joinDataNodeSegments(final String... segments) {

Reply via email to