Skip to content

Commit 899c276

Browse files
authored
feat: Support YashanDB compatibility via Oracle processing logic (#6643)
1 parent 937a255 commit 899c276

3 files changed

Lines changed: 20 additions & 1 deletion

File tree

core/src/main/java/com/alibaba/druid/pool/DruidDataSource.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1151,7 +1151,14 @@ protected void initCheck() throws SQLException {
11511151
if (dbType == DbType.oracle) {
11521152
isOracle = true;
11531153

1154-
if (driver.getMajorVersion() < 10) {
1154+
// Some Oracle-compatible databases may use non-Oracle JDBC drivers (e.g. YashanDB),
1155+
// whose version numbers are not aligned with Oracle's. In that case, skip the Oracle
1156+
// JDBC major version check but still treat the datasource as Oracle style.
1157+
final String driverClassName = this.driverClass;
1158+
final boolean oracleCompatibleNonOracleDriver =
1159+
driverClassName != null && driverClassName.startsWith("com.yashandb.jdbc.");
1160+
1161+
if (!oracleCompatibleNonOracleDriver && driver.getMajorVersion() < 10) {
11551162
throw new SQLException("not support oracle driver " + driver.getMajorVersion() + "."
11561163
+ driver.getMinorVersion());
11571164
}

core/src/main/java/com/alibaba/druid/util/JdbcUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,8 @@ public static String getDriverClassName(String rawUrl) throws SQLException {
490490
return "ca.edbc.jdbc.EdbcDriver";
491491
} else if (rawUrl.startsWith("jdbc:mimer:multi1:")) {
492492
return "com.mimer.jdbc.Driver";
493+
} else if (rawUrl.startsWith("jdbc:yasdb:")) {
494+
return "com.yashandb.jdbc.Driver";
493495
} else if (rawUrl.startsWith("jdbc:dm:")) {
494496
return JdbcConstants.DM_DRIVER;
495497
} else if (rawUrl.startsWith("jdbc:kingbase:")) {
@@ -575,6 +577,8 @@ public static DbType getDbTypeRaw(String rawUrl, String driverClassName) {
575577
return DbType.tidb;
576578
} else if (rawUrl.startsWith("jdbc:oracle:") || rawUrl.startsWith("jdbc:log4jdbc:oracle:")) {
577579
return DbType.oracle;
580+
} else if (rawUrl.startsWith("jdbc:yasdb:")) {
581+
return DbType.oracle;
578582
} else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) {
579583
return DbType.ali_oracle;
580584
} else if (rawUrl.startsWith("jdbc:oceanbase:oracle:")) {

core/src/test/java/com/alibaba/druid/bvt/utils/JdbcUtils_driver.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ public void test_oceanbase() {
3636
assertEquals(JdbcConstants.OCEANBASE_ORACLE, DbType.of(JdbcUtils.getDbType("jdbc:oceanbase:oracle://127.1:3306/test?a=b", null)));
3737
}
3838

39+
@Test
40+
public void test_yashandb() throws Exception {
41+
String url = "jdbc:yasdb://127.0.0.1:1688/REGRESS?productName=Oracle";
42+
assertEquals("com.yashandb.jdbc.Driver", JdbcUtils.getDriverClassName(url));
43+
assertEquals(DbType.oracle, JdbcUtils.getDbTypeRaw(url, null));
44+
assertEquals(DbType.oracle, DbType.of(JdbcUtils.getDbType(url, null)));
45+
}
46+
3947
@Test
4048
public void test_log4jdbc_mysql() {
4149
String jdbcUrl = "jdbc:log4jdbc:mysql://localhost:8066/test";

0 commit comments

Comments
 (0)