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 1faabc36502 Add DatabaseRuleItem (#34666)
1faabc36502 is described below

commit 1faabc36502cac0ebf955cbd937574d4c8b199f5
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Thu Feb 13 21:57:54 2025 +0800

    Add DatabaseRuleItem (#34666)
---
 .../database/DatabaseRulePersistService.java       |  8 ++--
 .../config/database/item/DatabaseRuleItem.java     | 44 ++++++++++++++++++++++
 .../metadata/DatabaseRuleMetaDataNodePath.java     | 13 ++++---
 .../metadata/DatabaseRuleMetaDataNodePathTest.java | 10 +++--
 4 files changed, 62 insertions(+), 13 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
index 7860b9abe7f..8d485fae0b8 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfigurati
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import 
org.apache.shardingsphere.mode.metadata.persist.config.RepositoryTuplePersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService;
+import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
 import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseRuleMetaDataNodePath;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.apache.shardingsphere.mode.node.tuple.RepositoryTuple;
@@ -90,9 +91,10 @@ public final class DatabaseRulePersistService {
     private Collection<MetaDataVersion> persistDataNodes(final String 
databaseName, final String ruleType, final Collection<RepositoryTuple> 
repositoryTuples) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
-            VersionNodePathGenerator versionNodePathGenerator = 
DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName, 
ruleType, each.getKey());
+            DatabaseRuleItem databaseRuleItem = new 
DatabaseRuleItem(each.getKey());
+            VersionNodePathGenerator versionNodePathGenerator = 
DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName, 
ruleType, databaseRuleItem);
             int nextVersion = 
metaDataVersionPersistService.persist(versionNodePathGenerator, 
each.getValue());
-            result.add(new 
MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName, 
ruleType, each.getKey()), Math.max(MetaDataVersion.INIT_VERSION, nextVersion - 
1)));
+            result.add(new 
MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName, 
ruleType, databaseRuleItem), Math.max(MetaDataVersion.INIT_VERSION, nextVersion 
- 1)));
         }
         return result;
     }
@@ -130,7 +132,7 @@ public final class DatabaseRulePersistService {
     private Collection<MetaDataVersion> delete(final String databaseName, 
final String ruleType, final Collection<RepositoryTuple> repositoryTuples) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
-            String toBeDeletedKey = 
DatabaseRuleMetaDataNodePath.getRulePath(databaseName, ruleType, each.getKey());
+            String toBeDeletedKey = 
DatabaseRuleMetaDataNodePath.getRulePath(databaseName, ruleType, new 
DatabaseRuleItem(each.getKey()));
             repository.delete(toBeDeletedKey);
             result.add(new MetaDataVersion(toBeDeletedKey));
         }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/database/item/DatabaseRuleItem.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/database/item/DatabaseRuleItem.java
new file mode 100644
index 00000000000..2bb6843a294
--- /dev/null
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/database/item/DatabaseRuleItem.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.node.path.config.database.item;
+
+/**
+ * Database rule item.
+ */
+public final class DatabaseRuleItem {
+    
+    private final String itemType;
+    
+    private final String itemName;
+    
+    public DatabaseRuleItem(final String value) {
+        String[] values = value.split("/");
+        if (1 == values.length) {
+            itemType = values[0];
+            itemName = null;
+        } else {
+            itemType = values[0];
+            itemName = values[1];
+        }
+    }
+    
+    @Override
+    public String toString() {
+        return null == itemName ? itemType : String.join("/", itemType, 
itemName);
+    }
+}
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java
index c2d1edb3662..7278acef661 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePath.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.node.path.metadata;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
@@ -57,11 +58,11 @@ public final class DatabaseRuleMetaDataNodePath {
      *
      * @param databaseName database name
      * @param ruleType rule type
-     * @param ruleItemName rule item name
+     * @param databaseRuleItem database rule item
      * @return database rule path
      */
-    public static String getRulePath(final String databaseName, final String 
ruleType, final String ruleItemName) {
-        return String.join("/", getRulePath(databaseName, ruleType), 
ruleItemName);
+    public static String getRulePath(final String databaseName, final String 
ruleType, final DatabaseRuleItem databaseRuleItem) {
+        return String.join("/", getRulePath(databaseName, ruleType), 
databaseRuleItem.toString());
     }
     
     /**
@@ -69,10 +70,10 @@ public final class DatabaseRuleMetaDataNodePath {
      *
      * @param databaseName database name
      * @param ruleType rule type
-     * @param ruleItemName rule item name
+     * @param databaseRuleItem database rule item
      * @return database rule version node path generator
      */
-    public static VersionNodePathGenerator getVersionNodePathGenerator(final 
String databaseName, final String ruleType, final String ruleItemName) {
-        return new VersionNodePathGenerator(getRulePath(databaseName, 
ruleType, ruleItemName));
+    public static VersionNodePathGenerator getVersionNodePathGenerator(final 
String databaseName, final String ruleType, final DatabaseRuleItem 
databaseRuleItem) {
+        return new VersionNodePathGenerator(getRulePath(databaseName, 
ruleType, databaseRuleItem));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java
index 43f1c59b3c9..5d6a3a7b8fb 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseRuleMetaDataNodePathTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata;
 
+import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -36,14 +37,15 @@ class DatabaseRuleMetaDataNodePathTest {
     
     @Test
     void assertGetRulePathWithKey() {
-        assertThat(DatabaseRuleMetaDataNodePath.getRulePath("foo_db", 
"foo_rule", "foo_rule_item"), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
+        assertThat(DatabaseRuleMetaDataNodePath.getRulePath("foo_db", 
"foo_rule", new DatabaseRuleItem("foo_rule_item")), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
     }
     
     @Test
     void assertGetVersionNodePathGenerator() {
-        
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db", 
"foo_rule", "foo_rule_item").getActiveVersionPath(),
+        DatabaseRuleItem databaseRuleItem = new 
DatabaseRuleItem("foo_rule_item");
+        
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db", 
"foo_rule", databaseRuleItem).getActiveVersionPath(),
                 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/active_version"));
-        
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db", 
"foo_rule", "foo_rule_item").getVersionsPath(), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions"));
-        
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db", 
"foo_rule", "foo_rule_item").getVersionPath(0), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions/0"));
+        
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db", 
"foo_rule", databaseRuleItem).getVersionsPath(), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions"));
+        
assertThat(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator("foo_db", 
"foo_rule", databaseRuleItem).getVersionPath(0), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions/0"));
     }
 }

Reply via email to