Skip to content

Commit 32ccda5

Browse files
authored
Merge pull request #1581 from ClickHouse/insert-methods-signatures
WIP Design
2 parents c42cb19 + b7b632b commit 32ccda5

File tree

9 files changed

+179
-15
lines changed

9 files changed

+179
-15
lines changed

clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseException.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.clickhouse.client;
22

3+
import java.io.IOException;
34
import java.net.ConnectException;
45
import java.net.SocketTimeoutException;
56
import java.net.UnknownHostException;

client-v2/pom.xml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,12 @@
6969
<scope>provided</scope>
7070
</dependency>
7171

72-
<!-- START: Temporary test dependencies -->
7372
<dependency>
7473
<groupId>${project.parent.groupId}</groupId>
7574
<artifactId>clickhouse-client</artifactId>
7675
<version>${revision}</version>
77-
<type>test-jar</type>
78-
<scope>test</scope>
76+
<scope>compile</scope>
7977
</dependency>
80-
<!-- END: Temporary test dependencies -->
8178

8279
<dependency>
8380
<groupId>org.slf4j</groupId>

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

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
package com.clickhouse.client.api;
22

3-
import com.clickhouse.client.ClickHouseClient;
4-
import com.clickhouse.client.ClickHouseNode;
5-
import com.clickhouse.client.ClickHouseParameterizedQuery;
6-
import com.clickhouse.client.ClickHouseProtocol;
7-
import com.clickhouse.client.ClickHouseRequest;
3+
import com.clickhouse.client.*;
4+
import com.clickhouse.data.ClickHouseColumn;
5+
6+
import java.io.InputStream;
7+
import java.net.SocketException;
8+
import java.util.*;
89
import com.clickhouse.client.api.metadata.TableSchema;
910
import com.clickhouse.client.api.internal.TableSchemaParser;
1011
import com.clickhouse.client.api.query.QueryResponse;
1112
import com.clickhouse.client.api.query.QuerySettings;
1213
import com.clickhouse.data.ClickHouseFormat;
1314

14-
import java.util.ArrayList;
15-
import java.util.HashMap;
16-
import java.util.HashSet;
17-
import java.util.List;
18-
import java.util.Map;
19-
import java.util.Set;
2015
import java.util.concurrent.CompletableFuture;
2116
import java.util.concurrent.Future;
2217

@@ -102,6 +97,36 @@ public boolean ping(int timeout) {
10297
return clientPing.ping(getServerNode(), timeout);
10398
}
10499

100+
/**
101+
* Register the POJO
102+
*/
103+
public void register(Class<?> clazz, TableSchema schema) {
104+
//This is just a placeholder
105+
//Create a new POJOSerializer with static .serialize(object, columns) methods
106+
}
107+
108+
/**
109+
* Insert data into ClickHouse using a POJO
110+
*/
111+
public Future<InsertResponse> insert(String tableName,
112+
List<Object> data,
113+
InsertSettings settings,
114+
List<ClickHouseColumn> columns) throws ClickHouseException, SocketException {
115+
//Lookup the Serializer for the POJO
116+
//Call the static .serialize method on the POJOSerializer for each object in the list
117+
return null;//This is just a placeholder
118+
}
119+
120+
/**
121+
* Insert data into ClickHouse using a binary stream
122+
*/
123+
public Future<InsertResponse> insert(String tableName,
124+
InputStream data,
125+
InsertSettings settings) throws ClickHouseException, SocketException {
126+
return null;//This is just a placeholder
127+
}
128+
129+
105130
/**
106131
* Sends data query to the server and returns a reference to a result descriptor.
107132
* Control is returned when server accepted the query and started processing it.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.clickhouse.client.api;
2+
3+
public class InsertResponse {
4+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.clickhouse.client.api;
2+
3+
import com.clickhouse.client.config.ClickHouseClientOption;
4+
import com.clickhouse.data.ClickHouseFormat;
5+
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
public class InsertSettings {
10+
Map<String, Object> rawSettings;
11+
12+
public InsertSettings() {
13+
rawSettings = new HashMap<>();
14+
}
15+
16+
public InsertSettings(Map<String, Object> settings) {
17+
rawSettings = new HashMap<>();
18+
rawSettings.putAll(settings);
19+
}
20+
21+
public Object getSetting(String option) {
22+
return rawSettings.get(option);
23+
}
24+
25+
public void setSetting(String option, Object value) {
26+
rawSettings.put(option, value);
27+
}
28+
29+
30+
public InsertSettings setFormat(ClickHouseFormat format) {
31+
rawSettings.put(ClickHouseClientOption.FORMAT.getKey(), format);
32+
return this;
33+
}
34+
35+
public InsertSettings setDeduplicationToken(String deduplicationToken) {
36+
rawSettings.put("insert_deduplication_token", deduplicationToken);
37+
return this;
38+
}
39+
40+
public InsertSettings setQueryId(String queryId) {
41+
rawSettings.put("query_id", queryId);
42+
return this;
43+
}
44+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.clickhouse.client.api;
2+
3+
import com.clickhouse.data.ClickHouseColumn;
4+
5+
import java.io.InputStream;
6+
import java.util.List;
7+
8+
public interface POJOSerializer {
9+
InputStream serialize(Object obj, List<ClickHouseColumn> columns);
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.clickhouse.client.api;
2+
3+
public class TableSchema {
4+
5+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.clickhouse.client;
2+
3+
import com.clickhouse.client.api.InsertResponse;
4+
import com.clickhouse.client.api.InsertSettings;
5+
import com.clickhouse.client.api.Client;
6+
import com.clickhouse.client.generators.InsertDataGenerator;
7+
import com.clickhouse.data.ClickHouseColumn;
8+
import com.clickhouse.data.ClickHouseFormat;
9+
import org.testng.annotations.BeforeMethod;
10+
import org.testng.annotations.Test;
11+
12+
import java.io.InputStream;
13+
import java.net.SocketException;
14+
import java.util.*;
15+
import java.util.concurrent.ExecutionException;
16+
import java.util.concurrent.Future;
17+
18+
import static org.testng.Assert.assertNotEquals;
19+
20+
public class InsertTests {
21+
private Client client;
22+
23+
@BeforeMethod(groups = { "unit" }, enabled = false)
24+
public void setUp() {
25+
client = new Client.Builder()
26+
.addEndpoint("http://localhost:8123")
27+
.addUsername("default")
28+
.addPassword("")
29+
.build();
30+
}
31+
32+
@Test(groups = { "unit" }, enabled = false)
33+
public void insertSimplePOJOs() throws ClickHouseException, SocketException, ExecutionException, InterruptedException {
34+
InsertSettings settings = new InsertSettings()
35+
.setDeduplicationToken("1234567890")
36+
.setQueryId(String.valueOf(UUID.randomUUID()));
37+
38+
String table = "simple_pojo_table";
39+
List<Object> simplePOJOs = InsertDataGenerator.generateSimplePOJOs();
40+
List<ClickHouseColumn> columns = new ArrayList<>();
41+
Future<InsertResponse> response = client.insert(table, simplePOJOs, settings, columns);
42+
assertNotEquals(response.get(), null);
43+
}
44+
45+
@Test(groups = { "unit" }, enabled = false)
46+
public void insertSimpleRowBinary() throws ClickHouseException, SocketException, ExecutionException, InterruptedException {
47+
InsertSettings settings = new InsertSettings()
48+
.setFormat(ClickHouseFormat.RowBinary)
49+
.setDeduplicationToken("1234567890")
50+
.setQueryId(String.valueOf(UUID.randomUUID()));
51+
52+
String table = "row_binary_table";
53+
InputStream dataStream = InsertDataGenerator.generateSimpleRowBinaryData();
54+
Future<InsertResponse> response = client.insert(table, dataStream, settings);
55+
assertNotEquals(response.get(), null);
56+
}
57+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.clickhouse.client.generators;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class InsertDataGenerator {
9+
public static InputStream generateSimpleRowBinaryData() {
10+
return new InputStream() {//Placeholder
11+
@Override
12+
public int read() throws IOException {
13+
return 0;
14+
}
15+
};
16+
}
17+
18+
public static List<Object> generateSimplePOJOs() {
19+
return new ArrayList<>();//Placeholder
20+
}
21+
}

0 commit comments

Comments
 (0)