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

jackietien pushed a commit to branch ty/mysql-connector
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/ty/mysql-connector by this 
push:
     new b7dc14dd490 finish ck
b7dc14dd490 is described below

commit b7dc14dd490289add5fa2a92f09082a8e5339a99
Author: JackieTien97 <[email protected]>
AuthorDate: Fri Jun 27 18:55:24 2025 +0800

    finish ck
---
 .../iotdb/confignode/conf/ConfigNodeConfig.java    |  2 +-
 library-udf/pom.xml                                |  7 ++
 .../connector/BaseJDBCConnectorTableFunction.java  | 22 +++--
 .../ClickhouseConnectorTableFunction.java          | 94 +++++++++++++++++++++-
 .../PostgreSqlConnectorTableFunction.java          |  2 +-
 5 files changed, 118 insertions(+), 9 deletions(-)

diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
index dbc4df3ca73..175d73c1208 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
@@ -210,7 +210,7 @@ public class ConfigNodeConfig {
   /** RatisConsensus protocol, Max size for a single log append request from 
leader. */
   private long dataRegionRatisConsensusLogAppenderBufferSize = 16 * 1024 * 
1024L;
 
-  private long configNodeRatisConsensusLogAppenderBufferSize = 32 * 1024 * 
1024L;
+  private long configNodeRatisConsensusLogAppenderBufferSize = 64 * 1024 * 
1024L;
   private long schemaRegionRatisConsensusLogAppenderBufferSize = 16 * 1024 * 
1024L;
 
   /**
diff --git a/library-udf/pom.xml b/library-udf/pom.xml
index 3944b3af6ab..2b0fb21f64f 100644
--- a/library-udf/pom.xml
+++ b/library-udf/pom.xml
@@ -49,6 +49,13 @@
             <artifactId>postgresql</artifactId>
             <version>42.7.7</version>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/com.clickhouse/clickhouse-jdbc 
-->
+        <dependency>
+            <groupId>com.clickhouse</groupId>
+            <artifactId>clickhouse-jdbc</artifactId>
+            <version>0.8.2</version>
+            <classifier>shaded-all</classifier>
+        </dependency>
         <dependency>
             <groupId>org.apache.iotdb</groupId>
             <artifactId>udf-api</artifactId>
diff --git 
a/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/BaseJDBCConnectorTableFunction.java
 
b/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/BaseJDBCConnectorTableFunction.java
index 481ed6f96f2..cb3fbd7b690 100644
--- 
a/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/BaseJDBCConnectorTableFunction.java
+++ 
b/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/BaseJDBCConnectorTableFunction.java
@@ -161,6 +161,21 @@ abstract class BaseJDBCConnectorTableFunction implements 
TableFunction {
     String password = (String) ((ScalarArgument) 
arguments.get(PASSWORD)).getValue();
 
     DescribedSchema.Builder schemaBuilder = DescribedSchema.builder();
+    int[] types = buildResultHeaders(schemaBuilder, sql, url, userName, 
password);
+    BaseJDBCConnectorTableFunctionHandle handle =
+        new BaseJDBCConnectorTableFunctionHandle(sql, url, userName, password, 
types);
+    return TableFunctionAnalysis.builder()
+        .properColumnSchema(schemaBuilder.build())
+        .handle(handle)
+        .build();
+  }
+
+  int[] buildResultHeaders(
+      DescribedSchema.Builder schemaBuilder,
+      String sql,
+      String url,
+      String userName,
+      String password) {
     int[] types;
     try (Connection connection = JDBCConnectionPool.getConnection(url, 
userName, password);
         PreparedStatement statement = connection.prepareStatement(sql)) {
@@ -171,15 +186,10 @@ abstract class BaseJDBCConnectorTableFunction implements 
TableFunction {
         schemaBuilder.addField(metaData.getColumnName(i), 
translateJDBCTypeToUDFType(type));
         types[i - 1] = type;
       }
+      return types;
     } catch (SQLException e) {
       throw new UDFException(String.format("Get ResultSetMetaData failed. %s", 
e.getMessage()), e);
     }
-    BaseJDBCConnectorTableFunctionHandle handle =
-        new BaseJDBCConnectorTableFunctionHandle(sql, url, userName, password, 
types);
-    return TableFunctionAnalysis.builder()
-        .properColumnSchema(schemaBuilder.build())
-        .handle(handle)
-        .build();
   }
 
   @Override
diff --git 
a/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/ClickhouseConnectorTableFunction.java
 
b/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/ClickhouseConnectorTableFunction.java
index 9d743ee8c5f..b280746f174 100644
--- 
a/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/ClickhouseConnectorTableFunction.java
+++ 
b/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/ClickhouseConnectorTableFunction.java
@@ -19,4 +19,96 @@
 
 package org.apache.iotdb.library.relational.tablefunction.connector;
 
-public class ClickhouseConnectorTableFunction {}
+import org.apache.iotdb.udf.api.exception.UDFException;
+import org.apache.iotdb.udf.api.relational.table.argument.DescribedSchema;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import static 
org.apache.iotdb.library.relational.tablefunction.connector.JDBCConnectionPool.translateJDBCTypeToUDFType;
+
+public class ClickhouseConnectorTableFunction extends 
BaseJDBCConnectorTableFunction {
+
+  private static final Logger LOGGER =
+      LoggerFactory.getLogger(ClickhouseConnectorTableFunction.class);
+
+  static {
+    try {
+      Class.forName("com.clickhouse.jdbc.ClickHouseDriver").newInstance();
+    } catch (Exception e) {
+      LOGGER.warn("Failed to initialize clickhouse JDBC driver", e);
+    }
+  }
+
+  private static final String DEFAULT_URL = "jdbc:ch://localhost:8123";
+  private static final String DEFAULT_USERNAME = "default";
+  private static final String DEFAULT_PASSWORD = "";
+  private static final String CLICKHOUSE = "CLICKHOUSE";
+
+  @Override
+  String getDefaultUrl() {
+    return DEFAULT_URL;
+  }
+
+  @Override
+  String getDefaultUser() {
+    return DEFAULT_USERNAME;
+  }
+
+  @Override
+  String getDefaultPassword() {
+    return DEFAULT_PASSWORD;
+  }
+
+  @Override
+  int[] buildResultHeaders(
+      DescribedSchema.Builder schemaBuilder,
+      String sql,
+      String url,
+      String userName,
+      String password) {
+    if (!sql.contains("LIMIT")) {
+      sql += " LIMIT 1";
+    }
+    int[] types;
+    try (Connection connection = JDBCConnectionPool.getConnection(url, 
userName, password);
+        Statement statement = connection.createStatement();
+        ResultSet resultSet = statement.executeQuery(sql)) {
+      ResultSetMetaData metaData = resultSet.getMetaData();
+      types = new int[metaData.getColumnCount()];
+      for (int i = 1, size = metaData.getColumnCount(); i <= size; i++) {
+        int type = metaData.getColumnType(i);
+        schemaBuilder.addField(metaData.getColumnName(i), 
translateJDBCTypeToUDFType(type));
+        types[i - 1] = type;
+      }
+      return types;
+    } catch (SQLException e) {
+      throw new UDFException(String.format("Get ResultSetMetaData failed. %s", 
e.getMessage()), e);
+    }
+  }
+
+  @Override
+  BaseJDBCConnectorTableFunction.JDBCProcessor getProcessor(
+      BaseJDBCConnectorTableFunction.BaseJDBCConnectorTableFunctionHandle 
tableFunctionHandle) {
+    return new ClickhouseProcessor(tableFunctionHandle);
+  }
+
+  private static class ClickhouseProcessor extends 
BaseJDBCConnectorTableFunction.JDBCProcessor {
+
+    ClickhouseProcessor(
+        BaseJDBCConnectorTableFunction.BaseJDBCConnectorTableFunctionHandle 
handle) {
+      super(handle);
+    }
+
+    @Override
+    String getDBName() {
+      return CLICKHOUSE;
+    }
+  }
+}
diff --git 
a/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/PostgreSqlConnectorTableFunction.java
 
b/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/PostgreSqlConnectorTableFunction.java
index d0d6c7311c3..7e7887e4491 100644
--- 
a/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/PostgreSqlConnectorTableFunction.java
+++ 
b/library-udf/src/main/java/org/apache/iotdb/library/relational/tablefunction/connector/PostgreSqlConnectorTableFunction.java
@@ -31,7 +31,7 @@ public class PostgreSqlConnectorTableFunction extends 
BaseJDBCConnectorTableFunc
     try {
       Class.forName("org.postgresql.Driver").newInstance();
     } catch (Exception e) {
-      LOGGER.warn("Failed to initialize mysql JDBC driver", e);
+      LOGGER.warn("Failed to initialize PostgreSQL JDBC driver", e);
     }
   }
 

Reply via email to