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