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]

Reply via email to