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 228ebb3ab03 Refactor StatisticsDataNodePath (#34757)
228ebb3ab03 is described below

commit 228ebb3ab03c4b930539134fd29929769e02f3a2
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Feb 23 14:43:45 2025 +0800

    Refactor StatisticsDataNodePath (#34757)
---
 .../path/statistics/StatisticsDataNodePath.java    | 41 ++++++++++
 .../path/statistics/StatisticsNodePathParser.java  | 94 ----------------------
 .../statistics/StatisticsDataNodePathTest.java     | 36 +++++++++
 .../statistics/StatisticsNodePathParserTest.java   | 73 -----------------
 .../global/type/StatisticsChangedHandler.java      | 16 ++--
 5 files changed, 85 insertions(+), 175 deletions(-)

diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePath.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePath.java
index d585a7f65c1..1adb65ce6be 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePath.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePath.java
@@ -21,6 +21,8 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.mode.node.path.NodePath;
 import org.apache.shardingsphere.mode.node.path.NodePathEntity;
+import org.apache.shardingsphere.mode.node.path.NodePathPattern;
+import org.apache.shardingsphere.mode.node.path.NodePathSearchCriteria;
 
 /**
  * Statistics data node path.
@@ -37,4 +39,43 @@ public final class StatisticsDataNodePath implements 
NodePath {
     private final String tableName;
     
     private final String uniqueKey;
+    
+    /**
+     * Create database search criteria.
+     *
+     * @param containsChildPath contains child path
+     * @return created search criteria
+     */
+    public static NodePathSearchCriteria createDatabaseSearchCriteria(final 
boolean containsChildPath) {
+        return new NodePathSearchCriteria(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, null, null, null), true, 
containsChildPath, 1);
+    }
+    
+    /**
+     * Create schema search criteria.
+     *
+     * @param containsChildPath contains child path
+     * @return created search criteria
+     */
+    public static NodePathSearchCriteria createSchemaSearchCriteria(final 
boolean containsChildPath) {
+        return new NodePathSearchCriteria(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null, null), true, containsChildPath, 2);
+    }
+    
+    /**
+     * Create table search criteria.
+     *
+     * @param containsChildPath contains child path
+     * @return created search criteria
+     */
+    public static NodePathSearchCriteria createTableSearchCriteria(final 
boolean containsChildPath) {
+        return new NodePathSearchCriteria(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, null), false, containsChildPath, 3);
+    }
+    
+    /**
+     * Create row unique key search criteria.
+     *
+     * @return created search criteria
+     */
+    public static NodePathSearchCriteria createRowUniqueKeySearchCriteria() {
+        return new NodePathSearchCriteria(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false, false, 4);
+    }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
deleted file mode 100644
index ec96fa77221..00000000000
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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.statistics;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
-import org.apache.shardingsphere.mode.node.path.NodePathPattern;
-
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Statistics node path parser.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class StatisticsNodePathParser {
-    
-    private static final String UNIQUE_KEY_PATTERN = "(\\w+)";
-    
-    /**
-     * Find database name.
-     *
-     * @param path path
-     * @param containsChildPath whether contains child path
-     * @return found database name
-     */
-    public static Optional<String> findDatabaseName(final String path, final 
boolean containsChildPath) {
-        String endPattern = containsChildPath ? "?" : "$";
-        Pattern pattern = Pattern.compile(NodePathGenerator.toPath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, null, null, null), true) + 
endPattern, Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(1)) : 
Optional.empty();
-    }
-    
-    /**
-     * Find schema name.
-     *
-     * @param path path
-     * @param containsChildPath whether contains child path
-     * @return found schema name
-     */
-    public static Optional<String> findSchemaName(final String path, final 
boolean containsChildPath) {
-        String endPattern = containsChildPath ? "?" : "$";
-        Pattern pattern = Pattern.compile(
-                NodePathGenerator.toPath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
null, null), true) + endPattern, Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
-    }
-    
-    /**
-     * Find table name.
-     *
-     * @param path path
-     * @param containsChildPath whether contains child path
-     * @return found table name
-     */
-    public static Optional<String> findTableName(final String path, final 
boolean containsChildPath) {
-        String endPattern = containsChildPath ? "?" : "$";
-        Pattern pattern = Pattern.compile(
-                NodePathGenerator.toPath(new 
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, null), false) + endPattern,
-                Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(3)) : 
Optional.empty();
-    }
-    
-    /**
-     * Find row unique key.
-     *
-     * @param path path
-     * @return found row unique key
-     */
-    public static Optional<String> findRowUniqueKey(final String path) {
-        Pattern pattern = Pattern.compile(NodePathGenerator.toPath(
-                new StatisticsDataNodePath(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, UNIQUE_KEY_PATTERN), 
false) + "$", Pattern.CASE_INSENSITIVE);
-        Matcher matcher = pattern.matcher(path);
-        return matcher.find() ? Optional.of(matcher.group(4)) : 
Optional.empty();
-    }
-}
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
index 30a45c2377f..af968933211 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
@@ -18,8 +18,11 @@
 package org.apache.shardingsphere.mode.node.path.statistics;
 
 import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
 import org.junit.jupiter.api.Test;
 
+import java.util.Optional;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -37,4 +40,37 @@ class StatisticsDataNodePathTest {
         assertThat(NodePathGenerator.toPath(new 
StatisticsDataNodePath("foo_db", "foo_schema", "foo_tbl", "foo_key"), false),
                 
is("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl/foo_key"));
     }
+    
+    @Test
+    void assertCreateDatabaseSearchCriteria() {
+        assertThat(NodePathSearcher.find("/statistics/databases/foo_db", 
StatisticsDataNodePath.createDatabaseSearchCriteria(false)), 
is(Optional.of("foo_db")));
+        assertThat(NodePathSearcher.find("/statistics/databases", 
StatisticsDataNodePath.createDatabaseSearchCriteria(false)), 
is(Optional.empty()));
+        assertThat(NodePathSearcher.find("/statistics/databases/foo_db", 
StatisticsDataNodePath.createDatabaseSearchCriteria(true)), 
is(Optional.of("foo_db")));
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/db_schema",
 StatisticsDataNodePath.createDatabaseSearchCriteria(true)), 
is(Optional.of("foo_db")));
+        assertThat(NodePathSearcher.find("/statistics/databases", 
StatisticsDataNodePath.createDatabaseSearchCriteria(true)), 
is(Optional.empty()));
+    }
+    
+    @Test
+    void assertCreateSchemaSearchCriteria() {
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema",
 StatisticsDataNodePath.createSchemaSearchCriteria(false)), 
is(Optional.of("foo_schema")));
+        assertThat(NodePathSearcher.find("/statistics/databases/foo_db", 
StatisticsDataNodePath.createSchemaSearchCriteria(false)), 
is(Optional.empty()));
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema",
 StatisticsDataNodePath.createSchemaSearchCriteria(true)), 
is(Optional.of("foo_schema")));
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl",
 StatisticsDataNodePath.createSchemaSearchCriteria(true)), 
is(Optional.of("foo_schema")));
+        assertThat(NodePathSearcher.find("/statistics/databases/foo_db", 
StatisticsDataNodePath.createSchemaSearchCriteria(true)), is(Optional.empty()));
+    }
+    
+    @Test
+    void assertCreateTableSearchCriteria() {
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
 StatisticsDataNodePath.createTableSearchCriteria(false)), 
is(Optional.of("tbl_name")));
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema",
 StatisticsDataNodePath.createTableSearchCriteria(false)), 
is(Optional.empty()));
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
 StatisticsDataNodePath.createTableSearchCriteria(true)), 
is(Optional.of("tbl_name")));
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name/key",
 StatisticsDataNodePath.createTableSearchCriteria(true)), 
is(Optional.of("tbl_name")));
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables",
 StatisticsDataNodePath.createTableSearchCriteria(true)), is(Optional.empty()));
+    }
+    
+    @Test
+    void assertCreateRowUniqueKeySearchCriteria() {
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name/key",
 StatisticsDataNodePath.createRowUniqueKeySearchCriteria()), 
is(Optional.of("key")));
+        
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
 StatisticsDataNodePath.createRowUniqueKeySearchCriteria()), 
is(Optional.empty()));
+    }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParserTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParserTest.java
deleted file mode 100644
index 91755b8cebb..00000000000
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParserTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * 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.statistics;
-
-import org.junit.jupiter.api.Test;
-
-import java.util.Optional;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-class StatisticsNodePathParserTest {
-    
-    @Test
-    void assertFindDatabaseNameWithNotContainsChildPath() {
-        
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases/foo_db",
 false), is(Optional.of("foo_db")));
-        
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases", 
false), is(Optional.empty()));
-    }
-    
-    @Test
-    void assertFindDatabaseNameWithContainsChildPath() {
-        
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases/foo_db",
 true), is(Optional.of("foo_db")));
-        
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases/foo_db/schemas/db_schema",
 true), is(Optional.of("foo_db")));
-        
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases", 
true), is(Optional.empty()));
-    }
-    
-    @Test
-    void assertFindSchemaNameWithNotContainsChildPath() {
-        
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db/schemas/foo_schema",
 false), is(Optional.of("foo_schema")));
-        
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db",
 false), is(Optional.empty()));
-    }
-    
-    @Test
-    void assertFindSchemaNameWithContainsChildPath() {
-        
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db/schemas/foo_schema",
 true), is(Optional.of("foo_schema")));
-        
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl",
 true), is(Optional.of("foo_schema")));
-        
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db",
 true), is(Optional.empty()));
-    }
-    
-    @Test
-    void assertFindTableNameWithNotContainsChildPath() {
-        
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
 false), is(Optional.of("tbl_name")));
-        
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema",
 false), is(Optional.empty()));
-    }
-    
-    @Test
-    void assertFindTableNameWithContainsChildPath() {
-        
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
 true), is(Optional.of("tbl_name")));
-        
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name/key",
 true), is(Optional.of("tbl_name")));
-        
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema/tables",
 true), is(Optional.empty()));
-    }
-    
-    @Test
-    void assertFindRowUniqueKey() {
-        
assertThat(StatisticsNodePathParser.findRowUniqueKey("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name/key"),
 is(Optional.of("key")));
-        
assertThat(StatisticsNodePathParser.findRowUniqueKey("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name"),
 is(Optional.empty()));
-    }
-}
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
index 1966e8b5306..42eb975752a 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
@@ -26,7 +26,7 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.global.GlobalDataChangedEventHandler;
 import 
org.apache.shardingsphere.mode.metadata.manager.statistics.StatisticsManager;
 import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
-import 
org.apache.shardingsphere.mode.node.path.statistics.StatisticsNodePathParser;
+import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
 import 
org.apache.shardingsphere.mode.node.path.statistics.StatisticsDataNodePath;
 
 import java.util.Arrays;
@@ -51,34 +51,34 @@ public final class StatisticsChangedHandler implements 
GlobalDataChangedEventHan
     @Override
     public void handle(final ContextManager contextManager, final 
DataChangedEvent event) {
         StatisticsManager databaseManager = 
contextManager.getMetaDataContextManager().getStatisticsManager();
-        Optional<String> databaseName = 
StatisticsNodePathParser.findDatabaseName(event.getKey(), false);
+        Optional<String> databaseName = NodePathSearcher.find(event.getKey(), 
StatisticsDataNodePath.createDatabaseSearchCriteria(false));
         if (databaseName.isPresent()) {
             handleDatabaseChanged(databaseManager, event.getType(), 
databaseName.get());
             return;
         }
-        databaseName = 
StatisticsNodePathParser.findDatabaseName(event.getKey(), true);
+        databaseName = NodePathSearcher.find(event.getKey(), 
StatisticsDataNodePath.createDatabaseSearchCriteria(true));
         if (!databaseName.isPresent()) {
             return;
         }
-        Optional<String> schemaName = 
StatisticsNodePathParser.findSchemaName(event.getKey(), false);
+        Optional<String> schemaName = NodePathSearcher.find(event.getKey(), 
StatisticsDataNodePath.createSchemaSearchCriteria(false));
         if (schemaName.isPresent()) {
             handleSchemaChanged(databaseManager, event.getType(), 
databaseName.get(), schemaName.get());
             return;
         }
-        schemaName = StatisticsNodePathParser.findSchemaName(event.getKey(), 
true);
+        schemaName = NodePathSearcher.find(event.getKey(), 
StatisticsDataNodePath.createSchemaSearchCriteria(true));
         if (!schemaName.isPresent()) {
             return;
         }
-        Optional<String> tableName = 
StatisticsNodePathParser.findTableName(event.getKey(), false);
+        Optional<String> tableName = NodePathSearcher.find(event.getKey(), 
StatisticsDataNodePath.createTableSearchCriteria(false));
         if (tableName.isPresent()) {
             handleTableChanged(databaseManager, event.getType(), 
databaseName.get(), schemaName.get(), tableName.get());
             return;
         }
-        tableName = StatisticsNodePathParser.findTableName(event.getKey(), 
true);
+        tableName = NodePathSearcher.find(event.getKey(), 
StatisticsDataNodePath.createTableSearchCriteria(true));
         if (!tableName.isPresent()) {
             return;
         }
-        Optional<String> uniqueKey = 
StatisticsNodePathParser.findRowUniqueKey(event.getKey());
+        Optional<String> uniqueKey = NodePathSearcher.find(event.getKey(), 
StatisticsDataNodePath.createRowUniqueKeySearchCriteria());
         if (uniqueKey.isPresent()) {
             handleRowDataChanged(databaseManager, event.getType(), 
event.getValue(), databaseName.get(), schemaName.get(), tableName.get(), 
uniqueKey.get());
         }

Reply via email to