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");