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 <[email protected]>
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));