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]
