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 aab7eee  Support oracle description connect url on domain host (#15794)
aab7eee is described below

commit aab7eee7e0e9a7e7173617340cb987632361b7d9
Author: cheese8 <[email protected]>
AuthorDate: Sat Mar 5 09:50:56 2022 +0800

    Support oracle description connect url on domain host (#15794)
    
    * Oracle description connect url not support domain host
    
    * add testcases
    
    * Update OracleDataSourceMetaData.java
---
 .../metadata/dialect/OracleDataSourceMetaData.java | 10 ++--
 .../dialect/OracleDataSourceMetaDataTest.java      | 60 +++++++++++++++++++++-
 2 files changed, 62 insertions(+), 8 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/OracleDataSourceMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/OracleDataSourceMetaData.java
index adb214f..b275cf2 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/OracleDataSourceMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/OracleDataSourceMetaData.java
@@ -49,8 +49,7 @@ public final class OracleDataSourceMetaData implements 
DataSourceMetaData {
     
     private final Pattern thinUrlPattern = 
Pattern.compile("jdbc:oracle:(thin|oci|kprb):@(//)?([\\w\\-\\.]+):?([0-9]*)[:/]([\\w\\-]+)",
 Pattern.CASE_INSENSITIVE);
     
-    private final Pattern connectDescriptorUrlPattern = 
Pattern.compile("jdbc:oracle:(thin|oci|kprb):@[(\\w\\s=)]+HOST\\s*=\\s*(\\d+(\\."
-            + 
"((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}).*PORT\\s*=\\s*(\\d+).*SERVICE_NAME\\s*=\\s*(\\w+)\\)");
+    private final Pattern connectDescriptorUrlPattern = 
Pattern.compile("jdbc:oracle:(thin|oci|kprb):@[(\\w\\s=)]+HOST\\s*=\\s*([\\w\\-\\.]+).*PORT\\s*=\\s(\\d+).*SERVICE_NAME\\s*=\\s*(\\w+)\\)");
     
     public OracleDataSourceMetaData(final String url, final String username) {
         List<Matcher> matcherList = Arrays.asList(thinUrlPattern.matcher(url), 
connectDescriptorUrlPattern.matcher(url));
@@ -64,13 +63,12 @@ public final class OracleDataSourceMetaData implements 
DataSourceMetaData {
             hostname = matcher.group(3);
             port = Strings.isNullOrEmpty(matcher.group(4)) ? DEFAULT_PORT : 
Integer.parseInt(matcher.group(4));
             catalog = matcher.group(5);
-            schema = username;
         } else {
             hostname = matcher.group(2);
-            port = Integer.parseInt(matcher.group(7));
-            catalog = matcher.group(8);
-            schema = username;
+            port = Strings.isNullOrEmpty(matcher.group(3)) ? DEFAULT_PORT : 
Integer.parseInt(matcher.group(3));
+            catalog = matcher.group(4);
         }
+        schema = username;
     }
     
     @Override
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/database/metadata/dialect/OracleDataSourceMetaDataTest.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/database/metadata/dialect/OracleDataSourceMetaDataTest.java
index 84b2120..c380dfa 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/database/metadata/dialect/OracleDataSourceMetaDataTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/database/metadata/dialect/OracleDataSourceMetaDataTest.java
@@ -35,7 +35,25 @@ public final class OracleDataSourceMetaDataTest {
     }
     
     @Test
-    public void assertNewConstructorWithDefaultPort() {
+    public void assertNewConstructorWithDomainPort() {
+        OracleDataSourceMetaData actual = new 
OracleDataSourceMetaData("jdbc:oracle:oci:@axxx.frex.cc:9999/ds_0", "test");
+        assertThat(actual.getHostname(), is("axxx.frex.cc"));
+        assertThat(actual.getPort(), is(9999));
+        assertThat(actual.getCatalog(), is("ds_0"));
+        assertThat(actual.getSchema(), is("test"));
+    }
+    
+    @Test
+    public void assertNewConstructorWithHalfenDomainPort() {
+        OracleDataSourceMetaData actual = new 
OracleDataSourceMetaData("jdbc:oracle:oci:@ax-xx.frex.cc:9999/ds_0", "test");
+        assertThat(actual.getHostname(), is("ax-xx.frex.cc"));
+        assertThat(actual.getPort(), is(9999));
+        assertThat(actual.getCatalog(), is("ds_0"));
+        assertThat(actual.getSchema(), is("test"));
+    }
+    
+    @Test
+    public void assertNewConstructorWithIpDefaultPort() {
         OracleDataSourceMetaData actual = new 
OracleDataSourceMetaData("jdbc:oracle:oci:@127.0.0.1/ds_0", "test");
         assertThat(actual.getHostname(), is("127.0.0.1"));
         assertThat(actual.getPort(), is(1521));
@@ -43,7 +61,23 @@ public final class OracleDataSourceMetaDataTest {
     }
     
     @Test
-    public void assertNewConstructorWithConnectDescriptorUrl() {
+    public void assertNewConstructorWithDomainDefaultPort() {
+        OracleDataSourceMetaData actual = new 
OracleDataSourceMetaData("jdbc:oracle:oci:@axxx.frex.cc/ds_0", "test");
+        assertThat(actual.getHostname(), is("axxx.frex.cc"));
+        assertThat(actual.getPort(), is(1521));
+        assertThat(actual.getSchema(), is("test"));
+    }
+    
+    @Test
+    public void assertNewConstructorWithHalfenDomainDefaultPort() {
+        OracleDataSourceMetaData actual = new 
OracleDataSourceMetaData("jdbc:oracle:oci:@ax-xx.frex.cc/ds_0", "test");
+        assertThat(actual.getHostname(), is("ax-xx.frex.cc"));
+        assertThat(actual.getPort(), is(1521));
+        assertThat(actual.getSchema(), is("test"));
+    }
+    
+    @Test
+    public void assertNewConstructorWithConnectDescriptorIpUrl() {
         OracleDataSourceMetaData actual = new 
OracleDataSourceMetaData("jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL 
= TCP)(HOST = 172.16.0.12)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)"
                 + "(HOST = 172.16.0.22)(PORT = 1521))(LOAD_BALANCE = 
yes)(FAILOVER = ON)(CONNECT_DATA =(SERVER = DEDICATED)"
                 + "(SERVICE_NAME = rac)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = 
BASIC)(RETIRES = 20)(DELAY = 15))))", "test");
@@ -53,6 +87,28 @@ public final class OracleDataSourceMetaDataTest {
         assertThat(actual.getSchema(), is("test"));
     }
     
+    @Test
+    public void assertNewConstructorWithConnectDescriptorDomainUrl() {
+        OracleDataSourceMetaData actual = new 
OracleDataSourceMetaData("jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL 
= TCP)(HOST = axxx.frex.cc)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)"
+                + "(HOST = axxx.frex.cc)(PORT = 1521))(LOAD_BALANCE = 
yes)(FAILOVER = ON)(CONNECT_DATA =(SERVER = DEDICATED)"
+                + "(SERVICE_NAME = rac)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = 
BASIC)(RETIRES = 20)(DELAY = 15))))", "test");
+        assertThat(actual.getHostname(), is("axxx.frex.cc"));
+        assertThat(actual.getPort(), is(1521));
+        assertThat(actual.getCatalog(), is("rac"));
+        assertThat(actual.getSchema(), is("test"));
+    }
+    
+    @Test
+    public void assertNewConstructorWithConnectDescriptorHalfenDomainUrl() {
+        OracleDataSourceMetaData actual = new 
OracleDataSourceMetaData("jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL 
= TCP)(HOST = ax-xx.frex.cc)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)"
+                + "(HOST = ax-xx.frex.cc)(PORT = 1521))(LOAD_BALANCE = 
yes)(FAILOVER = ON)(CONNECT_DATA =(SERVER = DEDICATED)"
+                + "(SERVICE_NAME = rac)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = 
BASIC)(RETIRES = 20)(DELAY = 15))))", "test");
+        assertThat(actual.getHostname(), is("ax-xx.frex.cc"));
+        assertThat(actual.getPort(), is(1521));
+        assertThat(actual.getCatalog(), is("rac"));
+        assertThat(actual.getSchema(), is("test"));
+    }
+    
     @Test(expected = UnrecognizedDatabaseURLException.class)
     public void assertNewConstructorFailure() {
         new OracleDataSourceMetaData("jdbc:oracle:xxxxxxxx", "test");

Reply via email to