This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 05196eac3c1402076a0dff4e3c8553a6080612fd
Author: zy-kkk <[email protected]>
AuthorDate: Thu May 16 10:31:21 2024 +0800

    [refactor](jdbc catalog) split oceanbase jdbc executor (#34869)
---
 be/src/vec/exec/vjdbc_connector.cpp                    |  3 ++-
 .../org/apache/doris/jdbc/JdbcExecutorFactory.java     |  2 ++
 .../doris/datasource/jdbc/client/JdbcClient.java       |  3 ++-
 .../doris/datasource/jdbc/client/JdbcMySQLClient.java  |  6 ++++++
 .../datasource/jdbc/client/JdbcOceanBaseClient.java    | 18 ++++++++++--------
 .../doris/datasource/jdbc/client/JdbcOracleClient.java |  5 +++++
 6 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/be/src/vec/exec/vjdbc_connector.cpp 
b/be/src/vec/exec/vjdbc_connector.cpp
index 1abc735aa61..a2cdf9e315d 100644
--- a/be/src/vec/exec/vjdbc_connector.cpp
+++ b/be/src/vec/exec/vjdbc_connector.cpp
@@ -495,7 +495,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/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java
 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java
index 59403083a88..2f75a59864f 100644
--- 
a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java
+++ 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutorFactory.java
@@ -23,8 +23,10 @@ public class JdbcExecutorFactory {
     public static String getExecutorClass(TOdbcTableType type) {
         switch (type) {
             case MYSQL:
+            case OCEANBASE:
                 return "org/apache/doris/jdbc/MySQLJdbcExecutor";
             case ORACLE:
+            case OCEANBASE_ORACLE:
                 return "org/apache/doris/jdbc/OracleJdbcExecutor";
             case POSTGRESQL:
                 return "org/apache/doris/jdbc/PostgreSQLJdbcExecutor";
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 12b028caa93..cd64efcd80f 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
@@ -75,7 +75,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 eee254482d2..d48746ae3a6 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
@@ -65,6 +65,12 @@ public class JdbcMySQLClient extends JdbcClient {
         }
     }
 
+    protected JdbcMySQLClient(JdbcClientConfig jdbcClientConfig, String 
dbType) {
+        super(jdbcClientConfig);
+        convertDateToNull = isConvertDatetimeToNull(jdbcClientConfig);
+        this.dbType = dbType;
+    }
+
     @Override
     public List<String> getDatabaseNameList() {
         Connection conn = getConnection();
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 b8c5b61aea4..0d3970c774b 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
@@ -27,15 +27,15 @@ import java.sql.SQLException;
 import java.sql.Statement;
 
 public class JdbcOceanBaseClient extends JdbcClient {
-    private JdbcClient currentClient;
 
     public JdbcOceanBaseClient(JdbcClientConfig jdbcClientConfig) {
         super(jdbcClientConfig);
+    }
 
+    public JdbcClient createClient(JdbcClientConfig jdbcClientConfig) throws 
JdbcClientException {
         Connection conn = null;
         Statement stmt = null;
         ResultSet rs = null;
-
         try {
             conn = super.getConnection();
             stmt = conn.createStatement();
@@ -43,16 +43,17 @@ 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);
@@ -61,10 +62,11 @@ public class JdbcOceanBaseClient extends JdbcClient {
 
     @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 0efa94d9bff..d37b36cbf3d 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
@@ -38,6 +38,11 @@ public class JdbcOracleClient extends JdbcClient {
         super(jdbcClientConfig);
     }
 
+    protected JdbcOracleClient(JdbcClientConfig jdbcClientConfig, String 
dbType) {
+        super(jdbcClientConfig);
+        this.dbType = dbType;
+    }
+
     @Override
     public String getTestQuery() {
         return "SELECT 1 FROM dual";


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to