This is an automated email from the ASF dual-hosted git repository.

sunnianjun 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 3bb351cfa8a Build rule item delete event by named rule item root path 
(#32721)
3bb351cfa8a is described below

commit 3bb351cfa8a2916d7563fb267455f072f18b3ac1
Author: Haoran Meng <menghaora...@gmail.com>
AuthorDate: Thu Aug 29 15:07:49 2024 +0800

    Build rule item delete event by named rule item root path (#32721)
---
 .../mode/path/rule/item/NamedRuleItemNodePath.java         | 14 ++++++++++++++
 .../mode/path/rule/item/NamedRuleItemNodePathTest.java     |  7 +++++++
 .../mode/event/builder/RuleConfigurationEventBuilder.java  |  7 ++++++-
 .../event/builder/RuleConfigurationEventBuilderTest.java   |  2 +-
 4 files changed, 28 insertions(+), 2 deletions(-)

diff --git 
a/mode/api/src/main/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePath.java
 
b/mode/api/src/main/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePath.java
index 0bf6896f925..593ffdf9002 100644
--- 
a/mode/api/src/main/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePath.java
+++ 
b/mode/api/src/main/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePath.java
@@ -38,10 +38,13 @@ public final class NamedRuleItemNodePath {
     
     private final Pattern activeVersionPathPattern;
     
+    private final Pattern itemPathPattern;
+    
     public NamedRuleItemNodePath(final RuleRootNodePath rootNodePath, final 
String type) {
         this.type = type;
         namePathPattern = Pattern.compile(rootNodePath.getNodePrefix() + type 
+ NAME);
         activeVersionPathPattern = 
Pattern.compile(rootNodePath.getNodePrefix() + type + ACTIVE_VERSION);
+        itemPathPattern = Pattern.compile(rootNodePath.getNodePrefix() + type 
+ "/([\\w\\-]+)$");
     }
     
     /**
@@ -75,4 +78,15 @@ public final class NamedRuleItemNodePath {
         Matcher matcher = activeVersionPathPattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(1)) : 
Optional.empty();
     }
+    
+    /**
+     * Get rule item name by item path.
+     *
+     * @param path path
+     * @return got rule item name
+     */
+    public Optional<String> getNameByItemPath(final String path) {
+        Matcher matcher = itemPathPattern.matcher(path);
+        return matcher.find() ? Optional.of(matcher.group(1)) : 
Optional.empty();
+    }
 }
diff --git 
a/mode/api/src/test/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePathTest.java
 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePathTest.java
index 2d900a9db71..2987b9507d2 100644
--- 
a/mode/api/src/test/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePathTest.java
+++ 
b/mode/api/src/test/java/org/apache/shardingsphere/mode/path/rule/item/NamedRuleItemNodePathTest.java
@@ -60,4 +60,11 @@ class NamedRuleItemNodePathTest {
         Optional<String> actual = converter.getNameByActiveVersion("/invalid");
         assertFalse(actual.isPresent());
     }
+    
+    @Test
+    public void assertGetNameByItemPath() {
+        Optional<String> actual = 
converter.getNameByItemPath("/metadata/foo_db/rules/foo/tables/foo_table");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get(), is("foo_table"));
+    }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilder.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilder.java
index a32b78fa797..fa071d22c41 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilder.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilder.java
@@ -62,7 +62,12 @@ public final class RuleConfigurationEventBuilder {
             return Optional.empty();
         }
         for (Entry<String, NamedRuleItemNodePath> entry : 
ruleNodePath.getNamedItems().entrySet()) {
-            Optional<String> itemName = 
entry.getValue().getNameByActiveVersion(event.getKey());
+            Optional<String> itemName;
+            if (Type.ADDED == event.getType() || Type.UPDATED == 
event.getType()) {
+                itemName = 
entry.getValue().getNameByActiveVersion(event.getKey());
+            } else {
+                itemName = entry.getValue().getNameByItemPath(event.getKey());
+            }
             if (itemName.isPresent()) {
                 return Optional.of(create(databaseName, itemName.get(), event, 
ruleNodePath.getRoot().getRuleType() + "." + entry.getKey()));
             }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java
index 25a425b7e16..01284e6a0ee 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/builder/RuleConfigurationEventBuilderTest.java
@@ -117,7 +117,7 @@ class RuleConfigurationEventBuilderTest {
                     Arguments.of("PathNotFound", 
"/metadata/fixture/rules/fixture/versions/0", "foo", Type.ADDED, false, null),
                     Arguments.of("AddEventWithNamedRuleItemNodePath", 
"/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", Type.ADDED, 
true, AlterNamedRuleItemEvent.class),
                     Arguments.of("UpdateEventWithNamedRuleItemNodePath", 
"/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", 
Type.UPDATED, true, AlterNamedRuleItemEvent.class),
-                    Arguments.of("DeleteEventWithNamedRuleItemNodePath", 
"/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", 
Type.DELETED, true, DropNamedRuleItemEvent.class),
+                    Arguments.of("DeleteEventWithNamedRuleItemNodePath", 
"/metadata/fixture/rules/fixture/named/xxx", "foo", Type.DELETED, true, 
DropNamedRuleItemEvent.class),
                     Arguments.of("AddEventWithUniqueRuleItemNodePath", 
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.ADDED, 
true, AlterUniqueRuleItemEvent.class),
                     Arguments.of("UpdateEventWithUniqueRuleItemNodePath", 
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.UPDATED, 
true, AlterUniqueRuleItemEvent.class),
                     Arguments.of("DeleteEventWithUniqueRuleItemNodePath", 
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.DELETED, 
true, DropUniqueRuleItemEvent.class));

Reply via email to