From c0ad96991b4d2672d790197cacf26b32fb445ce4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=BA=86=E5=8D=8E?= <1719411461@qq.com>
Date: Thu, 14 Oct 2021 09:20:50 +0800
Subject: [PATCH] =?UTF-8?q?add:=20Clickhouse=20=E6=B7=BB=E5=8A=A0native?=
=?UTF-8?q?=E9=A9=B1=E5=8A=A8=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 27 +++++++-
.../alibaba/druid/pool/DruidDataSource.java | 8 +++
.../BalancedClickhouseDriverNative.java | 61 +++++++++++++++++++
3 files changed, 95 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/com/alibaba/druid/support/clickhouse/BalancedClickhouseDriverNative.java
diff --git a/pom.xml b/pom.xml
index efc86f9602..0c52c6711d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -643,5 +643,30 @@
4.2.0
test
-
+
+ com.github.housepower
+ clickhouse-native-jdbc-shaded
+ 2.5.6
+ provided
+
+
+
+
+
+
+ nutz
+ https://jfrog.nutz.cn/artifactory/libs-release
+
+
+ nutz-snapshots
+ https://jfrog.nutz.cn/artifactory/snapshots
+
+ true
+ always
+
+
+ false
+
+
+
diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
index 1866646b73..6594e343ed 100644
--- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
+++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
@@ -39,6 +39,7 @@ import com.alibaba.druid.stat.JdbcDataSourceStat;
import com.alibaba.druid.stat.JdbcSqlStat;
import com.alibaba.druid.stat.JdbcSqlStatValue;
import com.alibaba.druid.support.clickhouse.BalancedClickhouseDriver;
+import com.alibaba.druid.support.clickhouse.BalancedClickhouseDriverNative;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.alibaba.druid.util.*;
@@ -1191,6 +1192,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
info.put("password", password);
info.putAll(connectProperties);
driver = new BalancedClickhouseDriver(jdbcUrl, info);
+ }
+ else if ("com.alibaba.druid.support.clickhouse.BalancedClickhouseDriverNative".equals(driverClass)) {
+ Properties info = new Properties();
+ info.put("user", username);
+ info.put("password", password);
+ info.putAll(connectProperties);
+ driver = new BalancedClickhouseDriverNative(jdbcUrl, info);
} else {
if (jdbcUrl == null && (driverClass == null || driverClass.length() == 0)) {
throw new SQLException("url not set");
diff --git a/src/main/java/com/alibaba/druid/support/clickhouse/BalancedClickhouseDriverNative.java b/src/main/java/com/alibaba/druid/support/clickhouse/BalancedClickhouseDriverNative.java
new file mode 100644
index 0000000000..d97bc471bb
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/support/clickhouse/BalancedClickhouseDriverNative.java
@@ -0,0 +1,61 @@
+package com.alibaba.druid.support.clickhouse;
+
+
+
+import com.github.housepower.jdbc.BalancedClickhouseDataSource;
+
+import java.sql.Connection;
+import java.sql.DriverPropertyInfo;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.util.Properties;
+import java.util.logging.Logger;
+
+public class BalancedClickhouseDriverNative implements java.sql.Driver {
+ private final String url;
+ private BalancedClickhouseDataSource dataSource;
+
+ public BalancedClickhouseDriverNative(final String url, Properties properties) {
+ this.url = url;
+ this.dataSource = new BalancedClickhouseDataSource(url, properties);
+ }
+
+ @Override
+ public Connection connect(String url, Properties info) throws SQLException {
+ if (!acceptsURL(url)) {
+ throw new SQLException("TODO");
+ }
+
+ return dataSource.getConnection();
+ }
+
+ @Override
+ public boolean acceptsURL(String url) throws SQLException {
+ return this.url.equals(url);
+ }
+
+ @Override
+ public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {
+ return new DriverPropertyInfo[0];
+ }
+
+ @Override
+ public int getMajorVersion() {
+ return 0;
+ }
+
+ @Override
+ public int getMinorVersion() {
+ return 0;
+ }
+
+ @Override
+ public boolean jdbcCompliant() {
+ return false;
+ }
+
+ @Override
+ public Logger getParentLogger() throws SQLFeatureNotSupportedException {
+ return null;
+ }
+}