You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/11/05 12:43:00 UTC
[shardingsphere] branch master updated: support all h2 jdbc urls
(#13470)
This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 f207432 support all h2 jdbc urls (#13470)
f207432 is described below
commit f207432196d644abf468dea8923f90688d2a4247
Author: lichengxin813 <93...@users.noreply.github.com>
AuthorDate: Fri Nov 5 20:42:17 2021 +0800
support all h2 jdbc urls (#13470)
* support all h2 jdbc urls
* resubmit
* code style
---
.../metadata/dialect/H2DataSourceMetaData.java | 17 ++++++++++---
.../metadata/dialect/H2DataSourceMetaDataTest.java | 29 +++++++++++++++++++---
2 files changed, 38 insertions(+), 8 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
index 042b908..68bd907 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
@@ -40,16 +40,25 @@ public final class H2DataSourceMetaData implements MemorizedDataSourceMetaData {
private final String schema;
- private final Pattern pattern = Pattern.compile("jdbc:h2:(mem|~)[:/]([\\w\\-]+);?\\S*", Pattern.CASE_INSENSITIVE);
+ private final Pattern pattern = Pattern.compile("jdbc:h2:((mem|~)[:/](?<catalog>[\\w\\-]+)|"
+ + "(ssl:|tcp:)(//)?(?<hostName>[\\w\\-.]+)(:(?<port>[0-9]{1,4})/)?[/~\\w\\-.]+/(?<name>[\\-\\w]*)|"
+ + "file:[/~\\w\\-]+/(?<fileName>[\\-\\w]*));?\\S*", Pattern.CASE_INSENSITIVE);
public H2DataSourceMetaData(final String url) {
Matcher matcher = pattern.matcher(url);
if (!matcher.find()) {
throw new UnrecognizedDatabaseURLException(url, pattern.pattern());
}
- hostName = "";
- port = DEFAULT_PORT;
- catalog = matcher.group(2);
+ String portFromMatcher = matcher.group("port");
+ String catalogFromMatcher = matcher.group("catalog");
+ String nameFromMatcher = matcher.group("name");
+ String fileNameFromMatcher = matcher.group("fileName");
+ String hostNameFromMatcher = matcher.group("hostName");
+ boolean setPort = null != portFromMatcher && !portFromMatcher.isEmpty();
+ String name = null == nameFromMatcher ? fileNameFromMatcher : nameFromMatcher;
+ hostName = null == hostNameFromMatcher ? "" : hostNameFromMatcher;
+ port = setPort ? Integer.parseInt(portFromMatcher) : DEFAULT_PORT;
+ catalog = null == catalogFromMatcher ? name : catalogFromMatcher;
schema = null;
}
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaDataTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaDataTest.java
index 285d8ee..30dad9c 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaDataTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaDataTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.database.metadata.dialect;
-import org.apache.shardingsphere.infra.database.metadata.UnrecognizedDatabaseURLException;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
@@ -43,8 +42,30 @@ public final class H2DataSourceMetaDataTest {
assertNull(actual.getSchema());
}
- @Test(expected = UnrecognizedDatabaseURLException.class)
- public void assertNewConstructorFailure() {
- new H2DataSourceMetaData("jdbc:h2:file:/data/sample");
+ @Test
+ public void assertNewConstructorWithTcp() {
+ H2DataSourceMetaData actual = new H2DataSourceMetaData("jdbc:h2:tcp://localhost:8082/~/test1/test2;DB_CLOSE_DELAY=-1");
+ assertThat(actual.getHostName(), is("localhost"));
+ assertThat(actual.getPort(), is(8082));
+ assertThat(actual.getCatalog(), is("test2"));
+ assertNull(actual.getSchema());
+ }
+
+ @Test
+ public void assertNewConstructorWithSsl() {
+ H2DataSourceMetaData actual = new H2DataSourceMetaData("jdbc:h2:ssl:180.76.76.76/home/test");
+ assertThat(actual.getHostName(), is("180.76.76.76"));
+ assertThat(actual.getPort(), is(-1));
+ assertThat(actual.getCatalog(), is("test"));
+ assertNull(actual.getSchema());
+ }
+
+ @Test
+ public void assertNewConstructorWithFile() {
+ H2DataSourceMetaData actual = new H2DataSourceMetaData("jdbc:h2:file:/data/sample;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false");
+ assertThat(actual.getHostName(), is(""));
+ assertThat(actual.getPort(), is(-1));
+ assertThat(actual.getCatalog(), is("sample"));
+ assertNull(actual.getSchema());
}
}