Skip to content

Commit 111a200

Browse files
committed
Merge remote-tracking branch 'bentsi/main' into jdbc_framework_detection
2 parents ec9f249 + 9ef5ca2 commit 111a200

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

clickhouse-http-client/src/main/java/com/clickhouse/client/http/ClickHouseHttpConnection.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,8 @@
99
import java.net.URLEncoder;
1010
import java.nio.charset.Charset;
1111
import java.nio.charset.StandardCharsets;
12-
import java.util.Collections;
13-
import java.util.HashSet;
14-
import java.util.LinkedHashMap;
15-
import java.util.List;
16-
import java.util.Locale;
17-
import java.util.Map;
18-
import java.util.Optional;
12+
import java.util.*;
1913
import java.util.Map.Entry;
20-
import java.util.Set;
2114

2215
import com.clickhouse.client.ClickHouseClient;
2316
import com.clickhouse.client.ClickHouseConfig;

clickhouse-jdbc/src/main/java/com/clickhouse/jdbc/ClickHouseDriver.java

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,7 @@
66
import java.sql.DriverPropertyInfo;
77
import java.sql.SQLException;
88
import java.sql.SQLFeatureNotSupportedException;
9-
import java.util.ArrayList;
10-
import java.util.Collections;
11-
import java.util.HashMap;
12-
import java.util.LinkedHashMap;
13-
import java.util.List;
14-
import java.util.Map;
15-
import java.util.Properties;
16-
import java.util.ServiceLoader;
9+
import java.util.*;
1710
import java.util.Map.Entry;
1811

1912
import com.clickhouse.client.ClickHouseClient;
@@ -49,6 +42,32 @@ public class ClickHouseDriver implements Driver {
4942

5043
static final java.util.logging.Logger parentLogger = java.util.logging.Logger.getLogger("com.clickhouse.jdbc");
5144

45+
public static String frameworksDetected = null;
46+
47+
public static class FrameworksDetection {
48+
private static final List<String> FRAMEWORKS_TO_DETECT = List.of("apache.spark");
49+
static volatile String frameworksDetected = null;
50+
51+
private FrameworksDetection() {
52+
}
53+
public static String getFrameworksDetected() {
54+
if (frameworksDetected == null) {
55+
Set<String> inferredFrameworks = new LinkedHashSet<>();
56+
for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
57+
for (String framework : FRAMEWORKS_TO_DETECT) {
58+
if (ste.toString().contains(framework)) {
59+
inferredFrameworks.add(String.format("(%s)", framework));
60+
}
61+
}
62+
}
63+
64+
frameworksDetected = String.join("; ", inferredFrameworks);
65+
}
66+
return frameworksDetected;
67+
}
68+
69+
}
70+
5271
static {
5372
String str = ClickHouseDriver.class.getPackage().getImplementationVersion();
5473
if (str != null && !str.isEmpty()) {
@@ -115,7 +134,6 @@ public static Map<ClickHouseOption, Serializable> toClientOptions(Properties pro
115134
options.put(o, ClickHouseOption.fromString(e.getValue().toString(), o.getValueType()));
116135
}
117136
}
118-
119137
return options;
120138
}
121139

@@ -128,7 +146,7 @@ private DriverPropertyInfo create(ClickHouseOption option, Properties props) {
128146

129147
Class<?> clazz = option.getValueType();
130148
if (Boolean.class == clazz || boolean.class == clazz) {
131-
propInfo.choices = new String[] { "true", "false" };
149+
propInfo.choices = new String[]{"true", "false"};
132150
} else if (clazz.isEnum()) {
133151
Object[] values = clazz.getEnumConstants();
134152
String[] names = new String[values.length];

clickhouse-jdbc/src/main/java/com/clickhouse/jdbc/internal/ClickHouseConnectionImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,11 @@ public ClickHouseConnectionImpl(String url, Properties properties) throws SQLExc
291291
public ClickHouseConnectionImpl(ConnectionInfo connInfo) throws SQLException {
292292
Properties props = connInfo.getProperties();
293293
jvmTimeZone = TimeZone.getDefault();
294-
294+
if (props.get("disable_frameworks_detection") == null || !props.get("disable_frameworks_detection").toString().equalsIgnoreCase("true")) {
295+
ClickHouseDriver.frameworksDetected = ClickHouseDriver.FrameworksDetection.getFrameworksDetected();
296+
if (ClickHouseDriver.frameworksDetected != null)
297+
props.setProperty(ClickHouseClientOption.PRODUCT_NAME.getKey(), props.getProperty(ClickHouseClientOption.PRODUCT_NAME.getKey()) + ClickHouseDriver.frameworksDetected);
298+
}
295299
ClickHouseClientBuilder clientBuilder = ClickHouseClient.builder()
296300
.options(ClickHouseDriver.toClientOptions(props))
297301
.defaultCredentials(connInfo.getDefaultCredentials());

0 commit comments

Comments
 (0)