[fix](JdbcResource) fix that JdbcResource does not support the jdbcurl of Oracle and SQLServer (#15757)

Actually, `JdbcResource` should support `Oracle` jdbcurl and `SQLServer` jdbcurl for jdbc external table.
This commit is contained in:
Tiewei Fang
2023-01-10 22:38:30 +08:00
committed by GitHub
parent 90a92f0643
commit 79b24cdb1f
4 changed files with 34 additions and 21 deletions

View File

@ -24,7 +24,6 @@ import org.apache.doris.common.DdlException;
import org.apache.doris.common.FeConstants;
import org.apache.doris.common.proc.BaseProcResult;
import org.apache.doris.common.util.Util;
import org.apache.doris.external.jdbc.JdbcClientException;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
@ -61,10 +60,16 @@ import java.util.Map;
public class JdbcResource extends Resource {
private static final Logger LOG = LogManager.getLogger(JdbcResource.class);
public static final String JDBC_MYSQL = "jdbc:mysql";
public static final String JDBC_MARIADB = "jdbc:mariadb";
public static final String JDBC_POSTGRESQL = "jdbc:postgresql";
public static final String JDBC_ORACLE = "jdbc:oracle";
public static final String JDBC_SQLSERVER = "jdbc:sqlserver";
public static final String MYSQL = "MYSQL";
public static final String POSTGRESQL = "POSTGRESQL";
// private static final String ORACLE = "ORACLE";
// private static final String SQLSERVER = "SQLSERVER";
public static final String ORACLE = "ORACLE";
private static final String SQLSERVER = "SQLSERVER";
public static final String JDBC_PROPERTIES_PREFIX = "jdbc.";
public static final String JDBC_URL = "jdbc_url";
@ -220,21 +225,20 @@ public class JdbcResource extends Resource {
}
}
public static String parseDbType(String url) {
if (url.startsWith("jdbc:mysql") || url.startsWith("jdbc:mariadb")) {
public static String parseDbType(String url) throws DdlException {
if (url.startsWith(JDBC_MYSQL) || url.startsWith(JDBC_MARIADB)) {
return MYSQL;
} else if (url.startsWith("jdbc:postgresql")) {
} else if (url.startsWith(JDBC_POSTGRESQL)) {
return POSTGRESQL;
} else if (url.startsWith(JDBC_ORACLE)) {
return ORACLE;
} else if (url.startsWith(JDBC_SQLSERVER)) {
return SQLSERVER;
}
// else if (url.startsWith("jdbc:oracle")) {
// return ORACLE;
// }
// else if (url.startsWith("jdbc:sqlserver")) {
// return SQLSERVER;
throw new JdbcClientException("Unsupported jdbc database type, please check jdbcUrl: " + url);
throw new DdlException("Unsupported jdbc database type, please check jdbcUrl: " + url);
}
public static String handleJdbcUrl(String jdbcUrl) {
public static String handleJdbcUrl(String jdbcUrl) throws DdlException {
// delete all space in jdbcUrl
String newJdbcUrl = jdbcUrl.replaceAll(" ", "");
String dbType = parseDbType(newJdbcUrl);

View File

@ -77,7 +77,7 @@ public class JdbcExternalCatalog extends ExternalCatalog {
}
public String getDatabaseTypeName() {
return JdbcResource.parseDbType(getJdbcUrl());
return jdbcClient.getDbType();
}
public String getJdbcUser() {

View File

@ -45,6 +45,7 @@ import java.util.List;
@Getter
public class JdbcClient {
private static final Logger LOG = LogManager.getLogger(JdbcClient.class);
private static final int HTTP_TIMEOUT_MS = 10000;
private String dbType;
@ -63,9 +64,9 @@ public class JdbcClient {
this.jdbcUser = user;
this.jdbcPasswd = password;
this.jdbcUrl = jdbcUrl;
this.dbType = parseDbType(jdbcUrl);
this.driverUrl = driverUrl;
this.driverClass = driverClass;
this.dbType = JdbcResource.parseDbType(jdbcUrl);
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
try {
@ -496,4 +497,18 @@ public class JdbcClient {
}
return dorisTableSchema;
}
private String parseDbType(String url) {
if (url.startsWith(JdbcResource.JDBC_MYSQL) || url.startsWith(JdbcResource.JDBC_MARIADB)) {
return JdbcResource.MYSQL;
} else if (url.startsWith(JdbcResource.JDBC_POSTGRESQL)) {
return JdbcResource.POSTGRESQL;
} else if (url.startsWith(JdbcResource.JDBC_ORACLE)) {
return JdbcResource.ORACLE;
}
// else if (url.startsWith("jdbc:sqlserver")) {
// return SQLSERVER;
// }
throw new JdbcClientException("Unsupported jdbc database type, please check jdbcUrl: " + url);
}
}

View File

@ -54,12 +54,6 @@ public class JdbcScanNode extends ScanNode {
private String tableName;
private TOdbcTableType jdbcType;
public JdbcScanNode(PlanNodeId id, TupleDescriptor desc, JdbcTable tbl) {
super(id, desc, "SCAN JDBC", StatisticalType.JDBC_SCAN_NODE);
jdbcType = tbl.getJdbcTableType();
tableName = OdbcTable.databaseProperName(jdbcType, tbl.getJdbcTable());
}
public JdbcScanNode(PlanNodeId id, TupleDescriptor desc, boolean isJdbcExternalTable) {
super(id, desc, "JdbcScanNode", StatisticalType.JDBC_SCAN_NODE);
JdbcTable tbl = null;