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()));
}
/**