Skip to content

Commit 0994a7a

Browse files
author
Paultagoras
committed
WIP
1 parent fdb8205 commit 0994a7a

File tree

5 files changed

+56
-7
lines changed

5 files changed

+56
-7
lines changed

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
import com.clickhouse.client.api.internal.ValidationUtils;
66
import com.clickhouse.data.ClickHouseColumn;
77

8+
import java.beans.Introspector;
9+
import java.io.BufferedInputStream;
810
import java.io.InputStream;
11+
import java.lang.reflect.Field;
12+
import java.lang.reflect.Method;
913
import java.net.SocketException;
1014
import java.time.Duration;
1115
import java.time.temporal.ChronoUnit;
@@ -15,13 +19,15 @@
1519
import com.clickhouse.client.api.query.QueryResponse;
1620
import com.clickhouse.client.api.query.QuerySettings;
1721
import com.clickhouse.data.ClickHouseFormat;
22+
import com.clickhouse.data.format.BinaryStreamUtils;
1823
import org.slf4j.Logger;
1924
import org.slf4j.LoggerFactory;
2025
import org.slf4j.MDC;
2126
import org.slf4j.helpers.BasicMDCAdapter;
2227

2328
import java.util.concurrent.CompletableFuture;
2429
import java.util.concurrent.Future;
30+
import java.util.stream.Collectors;
2531

2632
import static java.time.temporal.ChronoUnit.SECONDS;
2733

@@ -30,6 +36,7 @@ public class Client {
3036
private Set<String> endpoints;
3137
private Map<String, String> configuration;
3238
private List<ClickHouseNode> serverNodes = new ArrayList<>();
39+
private Map<Class<?>, POJOSerializer> serializers = new HashMap<>();
3340
private static final Logger LOG = LoggerFactory.getLogger(Client.class);
3441

3542
private Client(Set<String> endpoints, Map<String,String> configuration) {
@@ -161,6 +168,32 @@ public boolean ping(int timeout) {
161168
public void register(Class<?> clazz, TableSchema schema) {
162169
//This is just a placeholder
163170
//Create a new POJOSerializer with static .serialize(object, columns) methods
171+
172+
serializers.put(clazz, (obj, stream, columns) -> {
173+
List<Method> getters = Arrays.stream(clazz.getMethods())
174+
.filter(n -> {
175+
String methodName = n.getName();
176+
if (methodName.startsWith("get")) {
177+
String fieldName = methodName.substring(3);
178+
return schema.containsColumn(fieldName);
179+
}
180+
return false;
181+
})//We only care about fields that are in the schema
182+
.toList();
183+
184+
for (Method method : getters) {
185+
LOG.info("Method: {}", method.getName());
186+
System.out.println(method.getName());
187+
try {
188+
Object value = method.invoke(obj);
189+
System.out.println(value);
190+
//Serialize the value to the stream
191+
BinaryStreamUtils.writeString(stream, value.toString());//This is just a placeholder
192+
} catch (Exception e) {
193+
LOG.error("Error invoking method: {}", method.getName());
194+
}
195+
}
196+
});
164197
}
165198

166199
/**

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import com.clickhouse.data.ClickHouseColumn;
44

5-
import java.io.InputStream;
5+
import java.io.OutputStream;
66
import java.util.List;
77

88
public interface POJOSerializer {
9-
InputStream serialize(Object obj, List<ClickHouseColumn> columns);
9+
void serialize(Object obj, OutputStream outputStream, List<ClickHouseColumn> columns);
1010
}

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

Lines changed: 0 additions & 5 deletions
This file was deleted.

client-v2/src/main/java/com/clickhouse/client/api/metadata/TableSchema.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,15 @@ public void addColumn(String name, String type) {
5252
columns.add(ClickHouseColumn.of(name, type));
5353
metadata.computeIfAbsent(name, k -> new HashMap<>()).put("type", type);
5454
}
55+
56+
public boolean containsColumn(String name) {
57+
for (ClickHouseColumn column : columns) {
58+
if (column.getColumnName().equalsIgnoreCase(name)) {
59+
return true;
60+
}
61+
}
62+
63+
return false;
64+
}
5565
}
5666

client-v2/src/test/java/com/clickhouse/client/InsertTests.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.clickhouse.client.api.InsertResponse;
44
import com.clickhouse.client.api.InsertSettings;
55
import com.clickhouse.client.api.Client;
6+
import com.clickhouse.client.api.metadata.TableSchema;
67
import com.clickhouse.client.generators.InsertDataGenerator;
78
import com.clickhouse.data.ClickHouseColumn;
89
import com.clickhouse.data.ClickHouseFormat;
@@ -29,6 +30,16 @@ public void setUp() {
2930
.build();
3031
}
3132

33+
@Test(groups = { "unit" }, enabled = true)
34+
public void registerSimplePOJOs() throws ClickHouseException, SocketException, ExecutionException, InterruptedException {
35+
System.out.println("registerSimplePOJOs");
36+
InsertSettings settings = new InsertSettings()
37+
.setDeduplicationToken("1234567890")
38+
.setQueryId(String.valueOf(UUID.randomUUID()));
39+
40+
client.register(Object.class, new TableSchema());
41+
}
42+
3243
@Test(groups = { "unit" }, enabled = false)
3344
public void insertSimplePOJOs() throws ClickHouseException, SocketException, ExecutionException, InterruptedException {
3445
InsertSettings settings = new InsertSettings()

0 commit comments

Comments
 (0)