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);
}
}