enhance DataSourceConnectionUrlUtil and add test case (#7858)
* enhance getUrl support Oracle, SQLServer, MariaDB
* add test case for Oracle, SQLServer, MariaDB
* modify code style
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/main/java/org/apache/shardingsphere/rdl/parser/binder/util/DataSourceConnectionUrlUtil.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/main/java/org/apache/shardingsphere/rdl/parser/binder/util/DataSourceConnectionUrlUtil.java
index d13f6db..fa2a576 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/main/java/org/apache/shardingsphere/rdl/parser/binder/util/DataSourceConnectionUrlUtil.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/main/java/org/apache/shardingsphere/rdl/parser/binder/util/DataSourceConnectionUrlUtil.java
@@ -20,8 +20,12 @@
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
+
+import org.apache.shardingsphere.infra.database.type.dialect.MariaDBDatabaseType;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.OracleDatabaseType;
import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.SQLServerDatabaseType;
import org.apache.shardingsphere.rdl.parser.statement.rdl.DataSourceConnectionSegment;
/**
@@ -43,6 +47,12 @@
return getUrl(connectionSegment, new MySQLDatabaseType().getJdbcUrlPrefixes().iterator().next());
case "PostgreSQL":
return getUrl(connectionSegment, new PostgreSQLDatabaseType().getJdbcUrlPrefixes().iterator().next());
+ case "MariaDB":
+ return getUrl(connectionSegment, new MariaDBDatabaseType().getJdbcUrlPrefixes().iterator().next());
+ case "Oracle":
+ return getUrl(connectionSegment, new OracleDatabaseType().getJdbcUrlPrefixes().iterator().next());
+ case "SQLServer":
+ return getUrl(connectionSegment, new SQLServerDatabaseType().getJdbcUrlPrefixes().iterator().next());
default:
throw new UnsupportedOperationException(String.format("ShardingSphere can not get url from %s.", databaseType.getName()));
}
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/test/java/org/apache/shardingsphere/rdl/parser/binder/util/DataSourceConnectionUrlUtilTest.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/test/java/org/apache/shardingsphere/rdl/parser/binder/util/DataSourceConnectionUrlUtilTest.java
index ed718e1..33bb938 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/test/java/org/apache/shardingsphere/rdl/parser/binder/util/DataSourceConnectionUrlUtilTest.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/test/java/org/apache/shardingsphere/rdl/parser/binder/util/DataSourceConnectionUrlUtilTest.java
@@ -17,8 +17,11 @@
package org.apache.shardingsphere.rdl.parser.binder.util;
+import org.apache.shardingsphere.infra.database.type.dialect.MariaDBDatabaseType;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.OracleDatabaseType;
import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.SQLServerDatabaseType;
import org.apache.shardingsphere.rdl.parser.statement.rdl.DataSourceConnectionSegment;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -55,4 +58,43 @@
String expected = String.format("jdbc:postgresql://127.0.0.1:3306/test");
assertThat(actual, is(expected));
}
+
+ @Test
+ public void assertMariaDBGetUrl() {
+ DataSourceConnectionSegment segment = new DataSourceConnectionSegment();
+ segment.setHostName("127.0.0.1");
+ segment.setDb("test");
+ segment.setUser("root");
+ segment.setPort("3306");
+ MariaDBDatabaseType databaseType = new MariaDBDatabaseType();
+ String actual = DataSourceConnectionUrlUtil.getUrl(segment, databaseType);
+ String expected = String.format("jdbc:mariadb://127.0.0.1:3306/test");
+ assertThat(actual, is(expected));
+ }
+
+ @Test
+ public void assertOracleGetUrl() {
+ DataSourceConnectionSegment segment = new DataSourceConnectionSegment();
+ segment.setHostName("127.0.0.1");
+ segment.setDb("test");
+ segment.setUser("root");
+ segment.setPort("3306");
+ OracleDatabaseType databaseType = new OracleDatabaseType();
+ String actual = DataSourceConnectionUrlUtil.getUrl(segment, databaseType);
+ String expected = String.format("jdbc:oracle://127.0.0.1:3306/test");
+ assertThat(actual, is(expected));
+ }
+
+ @Test
+ public void assertSQLServerGetUrl() {
+ DataSourceConnectionSegment segment = new DataSourceConnectionSegment();
+ segment.setHostName("127.0.0.1");
+ segment.setDb("test");
+ segment.setUser("root");
+ segment.setPort("3306");
+ SQLServerDatabaseType databaseType = new SQLServerDatabaseType();
+ String actual = DataSourceConnectionUrlUtil.getUrl(segment, databaseType);
+ String expected = String.format("jdbc:microsoft:sqlserver://127.0.0.1:3306/test");
+ assertThat(actual, is(expected));
+ }
}