This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 8eeee8454a2 [opt](jdbc catalog) opt oceanbase jdbc client (#34936)
8eeee8454a2 is described below
commit 8eeee8454a2c731e86cdb9b533e7b17accca3933
Author: zy-kkk <[email protected]>
AuthorDate: Fri May 17 23:18:32 2024 +0800
[opt](jdbc catalog) opt oceanbase jdbc client (#34936)
---
be/src/vec/exec/vjdbc_connector.cpp | 3 ++-
.../doris/datasource/jdbc/client/JdbcClient.java | 3 ++-
.../datasource/jdbc/client/JdbcMySQLClient.java | 6 +++++
.../jdbc/client/JdbcOceanBaseClient.java | 28 ++++++++++++----------
.../datasource/jdbc/client/JdbcOracleClient.java | 5 ++++
5 files changed, 30 insertions(+), 15 deletions(-)
diff --git a/be/src/vec/exec/vjdbc_connector.cpp
b/be/src/vec/exec/vjdbc_connector.cpp
index 9344faad01d..a8e1c770873 100644
--- a/be/src/vec/exec/vjdbc_connector.cpp
+++ b/be/src/vec/exec/vjdbc_connector.cpp
@@ -326,7 +326,8 @@ Status JdbcConnector::_check_type(SlotDescriptor*
slot_desc, const std::string&
break;
}
case TYPE_DOUBLE: {
- if (type_str != "java.lang.Double" && type_str !=
"java.math.BigDecimal") {
+ if (type_str != "java.lang.Double" && type_str !=
"java.math.BigDecimal" &&
+ type_str != "java.lang.String") {
return Status::InternalError(error_msg);
}
break;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
index fe685625016..30a02cdf6e3 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
@@ -78,7 +78,8 @@ public abstract class JdbcClient {
case JdbcResource.MYSQL:
return new JdbcMySQLClient(jdbcClientConfig);
case JdbcResource.OCEANBASE:
- return new JdbcOceanBaseClient(jdbcClientConfig);
+ JdbcOceanBaseClient jdbcOceanBaseClient = new
JdbcOceanBaseClient(jdbcClientConfig);
+ return jdbcOceanBaseClient.createClient(jdbcClientConfig);
case JdbcResource.POSTGRESQL:
return new JdbcPostgreSQLClient(jdbcClientConfig);
case JdbcResource.ORACLE:
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java
index b115559a6b7..1b06f001103 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java
@@ -64,6 +64,12 @@ public class JdbcMySQLClient extends JdbcClient {
}
}
+ protected JdbcMySQLClient(JdbcClientConfig jdbcClientConfig, String
dbType) {
+ super(jdbcClientConfig);
+ convertDateToNull = isConvertDatetimeToNull(jdbcClientConfig);
+ this.dbType = dbType;
+ }
+
@Override
protected String getDatabaseQuery() {
return "SHOW DATABASES";
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOceanBaseClient.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOceanBaseClient.java
index 18cebd7bb96..144a781b179 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOceanBaseClient.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOceanBaseClient.java
@@ -26,15 +26,20 @@ import java.sql.SQLException;
import java.sql.Statement;
public class JdbcOceanBaseClient extends JdbcClient {
- private JdbcClient currentClient;
public JdbcOceanBaseClient(JdbcClientConfig jdbcClientConfig) {
super(jdbcClientConfig);
+ }
+
+ @Override
+ protected String getDatabaseQuery() {
+ throw new UnsupportedOperationException("JdbcOceanBaseClient does not
support getDatabaseQuery");
+ }
+ public JdbcClient createClient(JdbcClientConfig jdbcClientConfig) throws
JdbcClientException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
-
try {
conn = super.getConnection();
stmt = conn.createStatement();
@@ -42,33 +47,30 @@ public class JdbcOceanBaseClient extends JdbcClient {
if (rs.next()) {
String compatibilityMode = rs.getString(2);
if ("MYSQL".equalsIgnoreCase(compatibilityMode)) {
- currentClient = new JdbcMySQLClient(jdbcClientConfig);
+ return new JdbcMySQLClient(jdbcClientConfig,
JdbcResource.OCEANBASE);
} else if ("ORACLE".equalsIgnoreCase(compatibilityMode)) {
- currentClient = new JdbcOracleClient(jdbcClientConfig);
setOracleMode();
+ return new JdbcOracleClient(jdbcClientConfig,
JdbcResource.OCEANBASE_ORACLE);
} else {
throw new JdbcClientException("Unsupported OceanBase
compatibility mode: " + compatibilityMode);
}
+ } else {
+ throw new JdbcClientException("Failed to determine OceanBase
compatibility mode");
}
- } catch (SQLException | JdbcClientException e) {
- closeClient();
+ } catch (SQLException e) {
throw new JdbcClientException("Failed to initialize
JdbcOceanBaseClient", e.getMessage());
} finally {
close(rs, stmt, conn);
}
}
- @Override
- protected String getDatabaseQuery() {
- return currentClient.getDatabaseQuery();
- }
-
@Override
protected Type jdbcTypeToDoris(JdbcFieldSchema fieldSchema) {
- return currentClient.jdbcTypeToDoris(fieldSchema);
+ throw new UnsupportedOperationException("JdbcOceanBaseClient does not
support jdbcTypeToDoris");
}
- public void setOracleMode() {
+ private void setOracleMode() {
this.dbType = JdbcResource.OCEANBASE_ORACLE;
}
}
+
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOracleClient.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOracleClient.java
index 37fd1b6c72c..c0debeee601 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOracleClient.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcOracleClient.java
@@ -35,6 +35,11 @@ public class JdbcOracleClient extends JdbcClient {
super(jdbcClientConfig);
}
+ protected JdbcOracleClient(JdbcClientConfig jdbcClientConfig, String
dbType) {
+ super(jdbcClientConfig);
+ this.dbType = dbType;
+ }
+
@Override
protected String getDatabaseQuery() {
return "SELECT DISTINCT OWNER FROM all_tables";
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]