You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/01/10 14:38:39 UTC
[doris] branch master updated: [fix](JdbcResource) fix that JdbcResource does not support the jdbcurl of Oracle and SQLServer (#15757)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 79b24cdb1f [fix](JdbcResource) fix that JdbcResource does not support the jdbcurl of Oracle and SQLServer (#15757)
79b24cdb1f is described below
commit 79b24cdb1f6197bd2102c613af5ab1f8f5782f1b
Author: Tiewei Fang <43...@users.noreply.github.com>
AuthorDate: Tue Jan 10 22:38:30 2023 +0800
[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.
---
.../org/apache/doris/catalog/JdbcResource.java | 30 ++++++++++++----------
.../doris/datasource/JdbcExternalCatalog.java | 2 +-
.../org/apache/doris/external/jdbc/JdbcClient.java | 17 +++++++++++-
.../org/apache/doris/planner/JdbcScanNode.java | 6 -----
4 files changed, 34 insertions(+), 21 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
index 9eb06f5d29..8a4e45968b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/JdbcResource.java
@@ -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);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/JdbcExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/JdbcExternalCatalog.java
index 66c919f8ed..10cfa0e6a0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/JdbcExternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/JdbcExternalCatalog.java
@@ -77,7 +77,7 @@ public class JdbcExternalCatalog extends ExternalCatalog {
}
public String getDatabaseTypeName() {
- return JdbcResource.parseDbType(getJdbcUrl());
+ return jdbcClient.getDbType();
}
public String getJdbcUser() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java
index cb3ef5db9d..11ece6f620 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java
@@ -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);
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
index c15a12371c..8f3c89ebd5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
@@ -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;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org