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 39991bc9b48 Spilt ConnectionProperties.isInSameDatabaseInstance as SPI 
(#36397)
39991bc9b48 is described below

commit 39991bc9b48cdf0a8b186cae68e6dfed29946d8c
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Aug 24 00:02:20 2025 +0800

    Spilt ConnectionProperties.isInSameDatabaseInstance as SPI (#36397)
---
 .../judger/DatabaseInstanceJudgeEngine.java        | 45 ++++++++++++++++
 .../jdbcurl/judger/DatabaseInstanceJudger.java     | 40 ++++++++++++++
 .../DialectDatabaseInstanceJudger.java}            | 62 +++++-----------------
 .../core/jdbcurl/parser/ConnectionProperties.java  |  8 ---
 .../parser/StandardConnectionProperties.java       |  5 --
 .../DatabaseInstanceJudgerTest.java}               | 20 ++++---
 .../h2/jdbcurl/H2ConnectionProperties.java         | 33 ------------
 ...operties.java => H2DatabaseInstanceJudger.java} | 51 +++++-------------
 ...re.jdbcurl.judger.DialectDatabaseInstanceJudger | 18 +++++++
 .../h2/jdbcurl/H2ConnectionPropertiesTest.java     | 24 ---------
 ...Test.java => H2DatabaseInstanceJudgerTest.java} | 34 +++---------
 .../database/resource/ResourceMetaData.java        |  6 ++-
 12 files changed, 151 insertions(+), 195 deletions(-)

diff --git 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgeEngine.java
 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgeEngine.java
new file mode 100644
index 00000000000..6030716088d
--- /dev/null
+++ 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgeEngine.java
@@ -0,0 +1,45 @@
+/*
+ * 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.database.connector.core.jdbcurl.judger;
+
+import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties;
+import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+
+/**
+ * Database instance judger.
+ */
+@RequiredArgsConstructor
+public final class DatabaseInstanceJudgeEngine {
+    
+    private final DatabaseType databaseType;
+    
+    /**
+     * Judge whether two of JDBC URLs are in the same database instance.
+     *
+     * @param connectionProps1 connection properties 1
+     * @param connectionProps2 connection properties 2
+     * @return JDBC URLs are in the same database instance or not
+     */
+    public boolean isInSameDatabaseInstance(final ConnectionProperties 
connectionProps1, final ConnectionProperties connectionProps2) {
+        return 
DatabaseTypedSPILoader.findService(DialectDatabaseInstanceJudger.class, 
databaseType)
+                .map(optional -> 
optional.isInSameDatabaseInstance(connectionProps1, connectionProps2))
+                .orElseGet(() -> 
DatabaseInstanceJudger.isInSameDatabaseInstance(connectionProps1, 
connectionProps2));
+    }
+}
diff --git 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudger.java
 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudger.java
new file mode 100644
index 00000000000..244446e5886
--- /dev/null
+++ 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudger.java
@@ -0,0 +1,40 @@
+/*
+ * 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.database.connector.core.jdbcurl.judger;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties;
+
+/**
+ * Database instance judger.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DatabaseInstanceJudger {
+    
+    /**
+     * Judge whether two of JDBC URLs are in the same database instance.
+     *
+     * @param connectionProps1 connection properties 1
+     * @param connectionProps2 connection properties 2
+     * @return JDBC URLs are in the same database instance or not
+     */
+    public static boolean isInSameDatabaseInstance(final ConnectionProperties 
connectionProps1, final ConnectionProperties connectionProps2) {
+        return 
connectionProps1.getHostname().equals(connectionProps2.getHostname()) && 
connectionProps1.getPort() == connectionProps2.getPort();
+    }
+}
diff --git 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java
 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DialectDatabaseInstanceJudger.java
similarity index 50%
copy from 
database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java
copy to 
database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DialectDatabaseInstanceJudger.java
index 0c8378a7422..e6dac2701e9 100644
--- 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java
+++ 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DialectDatabaseInstanceJudger.java
@@ -15,62 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.database.connector.core.jdbcurl.parser;
+package org.apache.shardingsphere.database.connector.core.jdbcurl.judger;
 
-import java.util.Properties;
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties;
+import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPI;
+import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 
 /**
- * Connection properties.
+ * Dialect database instance judger.
  */
-public interface ConnectionProperties {
+@SingletonSPI
+public interface DialectDatabaseInstanceJudger extends DatabaseTypedSPI {
     
     /**
-     * Get host name.
+     * Judge whether two of JDBC URLs are in the same database instance.
      *
-     * @return host name
+     * @param connectionProps1 connection properties 1
+     * @param connectionProps2 connection properties 2
+     * @return JDBC URLs are in the same database instance or not
      */
-    String getHostname();
-    
-    /**
-     * Get port.
-     *
-     * @return port
-     */
-    int getPort();
-    
-    /**
-     * Get catalog.
-     *
-     * @return catalog
-     */
-    String getCatalog();
-    
-    /**
-     * Get schema.
-     *
-     * @return schema
-     */
-    String getSchema();
-    
-    /**
-     * Get query properties.
-     *
-     * @return query properties
-     */
-    Properties getQueryProperties();
-    
-    /**
-     * Get default query properties.
-     *
-     * @return default query properties
-     */
-    Properties getDefaultQueryProperties();
-    
-    /**
-     * Judge whether two of connections are in the same database instance.
-     *
-     * @param connectionProps connection properties
-     * @return connections are in the same database instance or not
-     */
-    boolean isInSameDatabaseInstance(ConnectionProperties connectionProps);
+    boolean isInSameDatabaseInstance(ConnectionProperties connectionProps1, 
ConnectionProperties connectionProps2);
 }
diff --git 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java
 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java
index 0c8378a7422..0b71ab1965d 100644
--- 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java
+++ 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java
@@ -65,12 +65,4 @@ public interface ConnectionProperties {
      * @return default query properties
      */
     Properties getDefaultQueryProperties();
-    
-    /**
-     * Judge whether two of connections are in the same database instance.
-     *
-     * @param connectionProps connection properties
-     * @return connections are in the same database instance or not
-     */
-    boolean isInSameDatabaseInstance(ConnectionProperties connectionProps);
 }
diff --git 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/StandardConnectionProperties.java
 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/StandardConnectionProperties.java
index af79a03a28c..94d92d08952 100644
--- 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/StandardConnectionProperties.java
+++ 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/StandardConnectionProperties.java
@@ -44,9 +44,4 @@ public final class StandardConnectionProperties implements 
ConnectionProperties
     public StandardConnectionProperties(final String hostname, final int port, 
final String catalog, final String schema) {
         this(hostname, port, catalog, schema, new Properties(), new 
Properties());
     }
-    
-    @Override
-    public boolean isInSameDatabaseInstance(final ConnectionProperties 
connectionProps) {
-        return hostname.equals(connectionProps.getHostname()) && port == 
connectionProps.getPort();
-    }
 }
diff --git 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/StandardConnectionPropertiesTest.java
 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgerTest.java
similarity index 51%
rename from 
database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/StandardConnectionPropertiesTest.java
rename to 
database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgerTest.java
index 29061ddbe70..808958dd6d8 100644
--- 
a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/StandardConnectionPropertiesTest.java
+++ 
b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgerTest.java
@@ -15,30 +15,34 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.database.connector.core.jdbcurl.parser;
+package org.apache.shardingsphere.database.connector.core.jdbcurl.judger;
 
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.StandardConnectionProperties;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-class StandardConnectionPropertiesTest {
+class DatabaseInstanceJudgerTest {
     
     @Test
     void assertIsInSameDatabaseInstance() {
-        assertTrue(new StandardConnectionProperties("127.0.0.1", 9999, "foo", 
"foo")
-                .isInSameDatabaseInstance(new 
StandardConnectionProperties("127.0.0.1", 9999, "bar", "bar")));
+        StandardConnectionProperties connectionProps1 = new 
StandardConnectionProperties("127.0.0.1", 9999, "foo", "foo");
+        StandardConnectionProperties connectionProps2 = new 
StandardConnectionProperties("127.0.0.1", 9999, "bar", "bar");
+        
assertTrue(DatabaseInstanceJudger.isInSameDatabaseInstance(connectionProps1, 
connectionProps2));
     }
     
     @Test
     void assertIsNotInSameDatabaseInstanceWithDifferentHostname() {
-        assertFalse(new StandardConnectionProperties("127.0.0.1", 9999, "foo", 
"foo")
-                .isInSameDatabaseInstance(new 
StandardConnectionProperties("127.0.0.2", 9999, "foo", "foo")));
+        StandardConnectionProperties connectionProps1 = new 
StandardConnectionProperties("127.0.0.1", 9999, "foo", "foo");
+        StandardConnectionProperties connectionProps2 = new 
StandardConnectionProperties("127.0.0.2", 9999, "foo", "foo");
+        
assertFalse(DatabaseInstanceJudger.isInSameDatabaseInstance(connectionProps1, 
connectionProps2));
     }
     
     @Test
     void assertIsNotInSameDatabaseInstanceWithDifferentPort() {
-        assertFalse(new StandardConnectionProperties("127.0.0.1", 9999, "foo", 
"foo")
-                .isInSameDatabaseInstance(new 
StandardConnectionProperties("127.0.0.1", 8888, "foo", "foo")));
+        StandardConnectionProperties connectionProps1 = new 
StandardConnectionProperties("127.0.0.1", 9999, "foo", "foo");
+        StandardConnectionProperties connectionProps2 = new 
StandardConnectionProperties("127.0.0.1", 8888, "foo", "foo");
+        
assertFalse(DatabaseInstanceJudger.isInSameDatabaseInstance(connectionProps1, 
connectionProps2));
     }
 }
diff --git 
a/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionProperties.java
 
b/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionProperties.java
index 171e2839c7a..d9c01aaf402 100644
--- 
a/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionProperties.java
+++ 
b/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionProperties.java
@@ -17,11 +17,9 @@
 
 package org.apache.shardingsphere.database.connector.h2.jdbcurl;
 
-import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties;
-import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.StandardConnectionProperties;
 
 import java.util.Properties;
 
@@ -32,19 +30,12 @@ import java.util.Properties;
 @Getter
 public final class H2ConnectionProperties implements ConnectionProperties {
     
-    private static final String MODEL_MEM = "mem";
-    
-    private static final String MODEL_PWD = "~";
-    
-    private static final String MODEL_FILE = "file:";
-    
     private final String hostname;
     
     private final int port;
     
     private final String catalog;
     
-    @Getter(AccessLevel.NONE)
     private final String model;
     
     @Override
@@ -61,28 +52,4 @@ public final class H2ConnectionProperties implements 
ConnectionProperties {
     public Properties getDefaultQueryProperties() {
         return new Properties();
     }
-    
-    @Override
-    public boolean isInSameDatabaseInstance(final ConnectionProperties 
connectionProps) {
-        if (!(connectionProps instanceof H2ConnectionProperties)) {
-            return false;
-        }
-        if (!isSameModel(model, ((H2ConnectionProperties) 
connectionProps).model)) {
-            return false;
-        }
-        return new StandardConnectionProperties(hostname, port, catalog, 
null).isInSameDatabaseInstance(connectionProps);
-    }
-    
-    private boolean isSameModel(final String model1, final String model2) {
-        if (MODEL_MEM.equalsIgnoreCase(model1)) {
-            return model1.equalsIgnoreCase(model2) || 
MODEL_PWD.equalsIgnoreCase(model2) || MODEL_FILE.equalsIgnoreCase(model2);
-        }
-        if (MODEL_PWD.equalsIgnoreCase(model1)) {
-            return model1.equalsIgnoreCase(model2) || 
MODEL_MEM.equalsIgnoreCase(model2) || MODEL_FILE.equalsIgnoreCase(model2);
-        }
-        if (MODEL_FILE.equalsIgnoreCase(model1)) {
-            return model1.equalsIgnoreCase(model2) || 
MODEL_MEM.equalsIgnoreCase(model2) || MODEL_PWD.equalsIgnoreCase(model2);
-        }
-        return model1.equalsIgnoreCase(model2);
-    }
 }
diff --git 
a/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionProperties.java
 
b/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2DatabaseInstanceJudger.java
similarity index 66%
copy from 
database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionProperties.java
copy to 
database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2DatabaseInstanceJudger.java
index 171e2839c7a..5fa050c96e4 100644
--- 
a/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionProperties.java
+++ 
b/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2DatabaseInstanceJudger.java
@@ -17,20 +17,14 @@
 
 package org.apache.shardingsphere.database.connector.h2.jdbcurl;
 
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.judger.DatabaseInstanceJudger;
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.judger.DialectDatabaseInstanceJudger;
 import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties;
-import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.StandardConnectionProperties;
-
-import java.util.Properties;
 
 /**
- * Connection properties for H2.
+ * Database instance judger for H2.
  */
-@RequiredArgsConstructor
-@Getter
-public final class H2ConnectionProperties implements ConnectionProperties {
+public final class H2DatabaseInstanceJudger implements 
DialectDatabaseInstanceJudger {
     
     private static final String MODEL_MEM = "mem";
     
@@ -38,39 +32,15 @@ public final class H2ConnectionProperties implements 
ConnectionProperties {
     
     private static final String MODEL_FILE = "file:";
     
-    private final String hostname;
-    
-    private final int port;
-    
-    private final String catalog;
-    
-    @Getter(AccessLevel.NONE)
-    private final String model;
-    
     @Override
-    public String getSchema() {
-        return null;
-    }
-    
-    @Override
-    public Properties getQueryProperties() {
-        return new Properties();
-    }
-    
-    @Override
-    public Properties getDefaultQueryProperties() {
-        return new Properties();
-    }
-    
-    @Override
-    public boolean isInSameDatabaseInstance(final ConnectionProperties 
connectionProps) {
-        if (!(connectionProps instanceof H2ConnectionProperties)) {
+    public boolean isInSameDatabaseInstance(final ConnectionProperties 
connectionProps1, final ConnectionProperties connectionProps2) {
+        if (!(connectionProps2 instanceof H2ConnectionProperties)) {
             return false;
         }
-        if (!isSameModel(model, ((H2ConnectionProperties) 
connectionProps).model)) {
+        if (!isSameModel(((H2ConnectionProperties) 
connectionProps1).getModel(), ((H2ConnectionProperties) 
connectionProps2).getModel())) {
             return false;
         }
-        return new StandardConnectionProperties(hostname, port, catalog, 
null).isInSameDatabaseInstance(connectionProps);
+        return 
DatabaseInstanceJudger.isInSameDatabaseInstance(connectionProps1, 
connectionProps2);
     }
     
     private boolean isSameModel(final String model1, final String model2) {
@@ -85,4 +55,9 @@ public final class H2ConnectionProperties implements 
ConnectionProperties {
         }
         return model1.equalsIgnoreCase(model2);
     }
+    
+    @Override
+    public String getDatabaseType() {
+        return "H2";
+    }
 }
diff --git 
a/database/connector/dialect/h2/src/main/resources/META-INF/services/org.apache.shardingsphere.database.connector.core.jdbcurl.judger.DialectDatabaseInstanceJudger
 
b/database/connector/dialect/h2/src/main/resources/META-INF/services/org.apache.shardingsphere.database.connector.core.jdbcurl.judger.DialectDatabaseInstanceJudger
new file mode 100644
index 00000000000..a1acc78075c
--- /dev/null
+++ 
b/database/connector/dialect/h2/src/main/resources/META-INF/services/org.apache.shardingsphere.database.connector.core.jdbcurl.judger.DialectDatabaseInstanceJudger
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.database.connector.h2.jdbcurl.H2DatabaseInstanceJudger
diff --git 
a/database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesTest.java
 
b/database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesTest.java
index 981fa4a2c60..e67ed72aab6 100644
--- 
a/database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesTest.java
+++ 
b/database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesTest.java
@@ -50,14 +50,6 @@ class H2ConnectionPropertiesTest {
         assertTrue(actual.getQueryProperties().isEmpty());
     }
     
-    @ParameterizedTest(name = "{0}")
-    @ArgumentsSource(IsInSameDatabaseInstanceTestCaseArgumentsProvider.class)
-    void assertIsInSameDatabaseInstance(final String name, final String url1, 
final String url2, final boolean isSame) {
-        ConnectionProperties actual1 = parser.parse(url1, null, null);
-        ConnectionProperties actual2 = parser.parse(url2, null, null);
-        assertThat(actual1.isInSameDatabaseInstance(actual2), is(isSame));
-    }
-    
     private static class NewConstructorTestCaseArgumentsProvider implements 
ArgumentsProvider {
         
         @Override
@@ -70,20 +62,4 @@ class H2ConnectionPropertiesTest {
                     Arguments.of("file", 
"jdbc:h2:file:/data/foo_ds;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false", "", -1, 
"foo_ds", null));
         }
     }
-    
-    private static class IsInSameDatabaseInstanceTestCaseArgumentsProvider 
implements ArgumentsProvider {
-        
-        @Override
-        public Stream<? extends Arguments> provideArguments(final 
ParameterDeclarations parameters, final ExtensionContext context) {
-            return Stream.of(
-                    Arguments.of("mem", 
"jdbc:h2:mem:ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL", 
"jdbc:h2:mem:ds_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL", true),
-                    Arguments.of("symbol", 
"jdbc:h2:~:ds-0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL", 
"jdbc:h2:~:ds-1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL", true),
-                    Arguments.of("memAndSymbol", 
"jdbc:h2:mem:ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL", 
"jdbc:h2:~:ds-1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL", true),
-                    Arguments.of("tcp", 
"jdbc:h2:tcp://localhost:8082/~/test1/test2;DB_CLOSE_DELAY=-1", 
"jdbc:h2:tcp://localhost:8082/~/test3/test4;DB_CLOSE_DELAY=-1", true),
-                    Arguments.of("tcpNotSame", 
"jdbc:h2:tcp://localhost:8082/~/test1/test2;DB_CLOSE_DELAY=-1", 
"jdbc:h2:tcp://192.168.64.76:8082/~/test3/test4;DB_CLOSE_DELAY=-1", false),
-                    Arguments.of("ssl", "jdbc:h2:ssl:127.0.0.1/home/test-one", 
"jdbc:h2:ssl:127.0.0.1/home/test-two", true),
-                    Arguments.of("sslNotSame", 
"jdbc:h2:ssl:127.0.0.1/home/test-one", "jdbc:h2:ssl:127.0.0.2/home/test-two", 
false),
-                    Arguments.of("file", 
"jdbc:h2:file:/data/ds-0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false", 
"jdbc:h2:file:/data/ds-1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false", true));
-        }
-    }
 }
diff --git 
a/database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesTest.java
 
b/database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2DatabaseInstanceJudgerTest.java
similarity index 65%
copy from 
database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesTest.java
copy to 
database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2DatabaseInstanceJudgerTest.java
index 981fa4a2c60..54bbfbd59bc 100644
--- 
a/database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesTest.java
+++ 
b/database/connector/dialect/h2/src/test/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2DatabaseInstanceJudgerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.database.connector.h2.jdbcurl;
 
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.judger.DialectDatabaseInstanceJudger;
 import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties;
 import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionPropertiesParser;
 import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
@@ -33,42 +34,19 @@ import java.util.stream.Stream;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
-class H2ConnectionPropertiesTest {
+class H2DatabaseInstanceJudgerTest {
     
-    private final ConnectionPropertiesParser parser = 
DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, 
TypedSPILoader.getService(DatabaseType.class, "H2"));
+    private final DialectDatabaseInstanceJudger judger = 
DatabaseTypedSPILoader.getService(DialectDatabaseInstanceJudger.class, 
TypedSPILoader.getService(DatabaseType.class, "H2"));
     
-    @ParameterizedTest(name = "{0}")
-    @ArgumentsSource(NewConstructorTestCaseArgumentsProvider.class)
-    void assertNewConstructor(final String name, final String url, final 
String hostname, final int port, final String catalog, final String schema) {
-        ConnectionProperties actual = parser.parse(url, null, null);
-        assertThat(actual.getHostname(), is(hostname));
-        assertThat(actual.getPort(), is(port));
-        assertThat(actual.getCatalog(), is(catalog));
-        assertThat(actual.getSchema(), is(schema));
-        assertTrue(actual.getQueryProperties().isEmpty());
-    }
+    private final ConnectionPropertiesParser parser = new 
H2ConnectionPropertiesParser();
     
     @ParameterizedTest(name = "{0}")
-    @ArgumentsSource(IsInSameDatabaseInstanceTestCaseArgumentsProvider.class)
+    
@ArgumentsSource(H2DatabaseInstanceJudgerTest.IsInSameDatabaseInstanceTestCaseArgumentsProvider.class)
     void assertIsInSameDatabaseInstance(final String name, final String url1, 
final String url2, final boolean isSame) {
         ConnectionProperties actual1 = parser.parse(url1, null, null);
         ConnectionProperties actual2 = parser.parse(url2, null, null);
-        assertThat(actual1.isInSameDatabaseInstance(actual2), is(isSame));
-    }
-    
-    private static class NewConstructorTestCaseArgumentsProvider implements 
ArgumentsProvider {
-        
-        @Override
-        public Stream<? extends Arguments> provideArguments(final 
ParameterDeclarations parameters, final ExtensionContext context) {
-            return Stream.of(
-                    Arguments.of("mem", 
"jdbc:h2:mem:foo_ds;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL", "", 
-1, "foo_ds", null),
-                    Arguments.of("symbol", 
"jdbc:h2:~:foo-ds;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL", "", 
-1, "foo-ds", null),
-                    Arguments.of("tcp", 
"jdbc:h2:tcp://localhost:8082/~/home/foo_ds;DB_CLOSE_DELAY=-1", "localhost", 
8082, "foo_ds", null),
-                    Arguments.of("ssl", "jdbc:h2:ssl:127.0.0.1/home/foo_ds", 
"127.0.0.1", -1, "foo_ds", null),
-                    Arguments.of("file", 
"jdbc:h2:file:/data/foo_ds;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false", "", -1, 
"foo_ds", null));
-        }
+        assertThat(judger.isInSameDatabaseInstance(actual1, actual2), 
is(isSame));
     }
     
     private static class IsInSameDatabaseInstanceTestCaseArgumentsProvider 
implements ArgumentsProvider {
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
index 1630fd9517d..cd861085f14 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
@@ -19,6 +19,8 @@ package 
org.apache.shardingsphere.infra.metadata.database.resource;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.judger.DatabaseInstanceJudgeEngine;
+import 
org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourcePoolPropertiesCreator;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
@@ -71,7 +73,9 @@ public final class ResourceMetaData {
     }
     
     private boolean isExisted(final String dataSourceName, final 
Collection<String> existedDataSourceNames) {
-        return existedDataSourceNames.stream().anyMatch(each -> 
storageUnits.get(dataSourceName).getConnectionProperties().isInSameDatabaseInstance(storageUnits.get(each).getConnectionProperties()));
+        DatabaseInstanceJudgeEngine judgeEngine = new 
DatabaseInstanceJudgeEngine(storageUnits.get(dataSourceName).getStorageType());
+        ConnectionProperties connectionProps = 
storageUnits.get(dataSourceName).getConnectionProperties();
+        return existedDataSourceNames.stream().anyMatch(each -> 
judgeEngine.isInSameDatabaseInstance(connectionProps, 
storageUnits.get(each).getConnectionProperties()));
     }
     
     /**

Reply via email to