Skip to content

Commit 3b2a8a2

Browse files
committed
Drafted queryID generation
1 parent f9f588d commit 3b2a8a2

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

client-v2/src/main/java/com/clickhouse/client/api/Client.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,20 +139,21 @@ public class Client implements AutoCloseable {
139139
private String dbUser;
140140
private String serverVersion;
141141
private Object metricsRegistry;
142-
private int retries;
142+
private final int retries;
143143
private LZ4Factory lz4Factory = null;
144+
private final Supplier<String> queryIdGenerator;
144145

145146
private Client(Set<String> endpoints, Map<String,String> configuration,
146-
ExecutorService sharedOperationExecutor, ColumnToMethodMatchingStrategy columnToMethodMatchingStrategy) {
147-
this(endpoints, configuration, sharedOperationExecutor, columnToMethodMatchingStrategy, null);
147+
ExecutorService sharedOperationExecutor, ColumnToMethodMatchingStrategy columnToMethodMatchingStrategy, Object metricRegistry, Supplier<String> queryIdGenerator) {
148+
this(endpoints, configuration, sharedOperationExecutor, columnToMethodMatchingStrategy, null, metricRegistry, queryIdGenerator);
148149
}
149150

150151
private Client(Set<String> endpoints, Map<String,String> configuration,
151-
ExecutorService sharedOperationExecutor, ColumnToMethodMatchingStrategy columnToMethodMatchingStrategy, Object metricsRegistry) {
152-
// Simple initialization
152+
ExecutorService sharedOperationExecutor, ColumnToMethodMatchingStrategy columnToMethodMatchingStrategy, Object metricsRegistry, Object metricRegistry, Supplier<String> queryIdGenerator) {
153153
this.configuration = ClientConfigProperties.parseConfigMap(configuration);
154154
this.readOnlyConfig = Collections.unmodifiableMap(configuration);
155155
this.metricsRegistry = metricsRegistry;
156+
this.queryIdGenerator = queryIdGenerator;
156157

157158
// Serialization
158159
this.pojoSerDe = new POJOSerDe(columnToMethodMatchingStrategy);
@@ -267,6 +268,8 @@ public static class Builder {
267268
private ExecutorService sharedOperationExecutor = null;
268269
private ColumnToMethodMatchingStrategy columnToMethodMatchingStrategy;
269270
private Object metricRegistry = null;
271+
private Supplier<String> queryIdGenerator;
272+
270273
public Builder() {
271274
this.endpoints = new HashSet<>();
272275
this.configuration = new HashMap<>();
@@ -1048,6 +1051,16 @@ public Builder sslSocketSNI(String sni) {
10481051
return this;
10491052
}
10501053

1054+
/**
1055+
* Sets query id generator. Will be used when operation settings (InsertSettings, QuerySettings) do not have query id set.
1056+
* @param supplier
1057+
* @return
1058+
*/
1059+
public Builder queryIdGenerator(Supplier<String> supplier) {
1060+
this.queryIdGenerator = supplier;
1061+
return this;
1062+
}
1063+
10511064
public Client build() {
10521065
// check if endpoint are empty. so can not initiate client
10531066
if (this.endpoints.isEmpty()) {
@@ -1106,7 +1119,7 @@ public Client build() {
11061119
}
11071120

11081121
return new Client(this.endpoints, this.configuration, this.sharedOperationExecutor,
1109-
this.columnToMethodMatchingStrategy, this.metricRegistry);
1122+
this.columnToMethodMatchingStrategy, this.metricRegistry, this.queryIdGenerator);
11101123
}
11111124
}
11121125

@@ -1245,6 +1258,9 @@ public CompletableFuture<InsertResponse> insert(String tableName, List<?> data,
12451258
final int maxRetries = retry == null ? 0 : retry;
12461259

12471260
requestSettings.setOption(ClientConfigProperties.INPUT_OUTPUT_FORMAT.getKey(), format);
1261+
if (requestSettings.getQueryId() == null && queryIdGenerator != null) {
1262+
requestSettings.setQueryId(queryIdGenerator.get());
1263+
}
12481264
Supplier<InsertResponse> supplier = () -> {
12491265
long startTime = System.nanoTime();
12501266
// Selecting some node
@@ -1462,6 +1478,9 @@ public CompletableFuture<InsertResponse> insert(String tableName,
14621478
}
14631479
sqlStmt.append(" FORMAT ").append(format.name());
14641480
requestSettings.serverSetting(ClickHouseHttpProto.QPARAM_QUERY_STMT, sqlStmt.toString());
1481+
if (requestSettings.getQueryId() == null && queryIdGenerator != null) {
1482+
requestSettings.setQueryId(queryIdGenerator.get());
1483+
}
14651484
responseSupplier = () -> {
14661485
long startTime = System.nanoTime();
14671486
// Selecting some node
@@ -1587,6 +1606,9 @@ public CompletableFuture<QueryResponse> query(String sqlQuery, Map<String, Objec
15871606
if (queryParams != null) {
15881607
requestSettings.setOption(HttpAPIClientHelper.KEY_STATEMENT_PARAMS, queryParams);
15891608
}
1609+
if (requestSettings.getQueryId() == null && queryIdGenerator != null) {
1610+
requestSettings.setQueryId(queryIdGenerator.get());
1611+
}
15901612
responseSupplier = () -> {
15911613
long startTime = System.nanoTime();
15921614
// Selecting some node

client-v2/src/main/java/com/clickhouse/client/api/query/Records.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,14 @@ public long getResultRows() {
125125
return response.getMetrics().getMetric(ServerMetrics.RESULT_ROWS).getLong();
126126
}
127127

128+
/**
129+
* Returns response query id
130+
* @return query id of the request
131+
*/
132+
public String getQueryId() {
133+
return response.getQueryId();
134+
}
135+
128136
@Override
129137
public void close() throws Exception {
130138
response.close();

0 commit comments

Comments
 (0)