Skip to content

Commit cef5ad2

Browse files
committed
example is working
1 parent 9e87f5c commit cef5ad2

File tree

8 files changed

+60
-49
lines changed

8 files changed

+60
-49
lines changed

clickhouse-r2dbc/src/main/java/com/clickhouse/r2dbc/ClickHouseStatement.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import reactor.core.publisher.Flux;
1616
import reactor.core.publisher.Mono;
1717

18+
import java.sql.Timestamp;
19+
import java.time.LocalDateTime;
1820
import java.util.List;
1921
import java.util.NoSuchElementException;
2022
import java.util.stream.Stream;
@@ -77,6 +79,9 @@ private Object safeValue(Object o) {
7779
throw new IllegalArgumentException(UNSUPPORTED_DATATYPE_BLOB);
7880
} else if (o instanceof Clob) {
7981
throw new IllegalArgumentException(UNSUPPORTED_DATATYPE_CLOB);
82+
} else if (o instanceof LocalDateTime) {
83+
LocalDateTime dateTime = (LocalDateTime) o;
84+
return (Timestamp.valueOf(dateTime).getTime() / 1000);
8085
} else if (o instanceof Parameter) {
8186
Object value = ((Parameter) o).getValue();
8287
if (value == null)

examples/clickhouse-r2dbc-samples/clickhouse-r2dbc-spring-webflux-sample/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
<artifactId>clickhouse-r2dbc</artifactId>
4040
<version>0.3.3-SNAPSHOT</version>
4141
</dependency>
42+
<dependency>
43+
<groupId>com.fasterxml.jackson.datatype</groupId>
44+
<artifactId>jackson-datatype-jsr310</artifactId>
45+
<version>2.13.3</version>
46+
</dependency>
4247
</dependencies>
4348

4449

examples/clickhouse-r2dbc-samples/clickhouse-r2dbc-spring-webflux-sample/src/main/java/com/clickhouse/r2dbc/spring/webflux/sample/Runny.java

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

examples/clickhouse-r2dbc-samples/clickhouse-r2dbc-spring-webflux-sample/src/main/java/com/clickhouse/r2dbc/spring/webflux/sample/config/R2DBCConfig.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,24 @@
1111
@Configuration
1212
public class R2DBCConfig {
1313

14-
@Value("${clickhouse.hosdot:localhost}")
14+
@Value("${clickhouse.host:localhost}")
1515
private String host;
1616

17-
@Value("${clickhouse.port:9100}")
17+
@Value("${clickhouse.port:8123}")
1818
private String port;
1919

2020
@Value("${clickhouse.database:clickdb}")
2121
private String database;
2222

23+
@Value("${clickhouse.user:default}")
24+
private String user;
25+
26+
@Value("${clickhouse.password:''}")
27+
private String password;
28+
2329
@Bean
2430
public ConnectionFactory connectionFactory() {
25-
return get(format("r2dbc:clickhouse:grpc://@%s:%d/%s", host, Integer.parseInt(port), database));
31+
return get(format("r2dbc:clickhouse:http://%s:%s@%s:%d/%s", user, password,
32+
host, Integer.parseInt(port), database));
2633
}
2734
}

examples/clickhouse-r2dbc-samples/clickhouse-r2dbc-spring-webflux-sample/src/main/java/com/clickhouse/r2dbc/spring/webflux/sample/controller/ClickController.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@
1010
import org.springframework.web.bind.annotation.GetMapping;
1111
import org.springframework.web.bind.annotation.PathVariable;
1212
import org.springframework.web.bind.annotation.PostMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
1314
import org.springframework.web.bind.annotation.RequestMapping;
1415
import org.springframework.web.bind.annotation.ResponseStatus;
1516
import org.springframework.web.bind.annotation.RestController;
17+
import reactor.core.publisher.Flux;
18+
import reactor.core.publisher.Mono;
1619

1720
import java.time.LocalDateTime;
1821
import java.util.List;
1922
import java.util.stream.Collectors;
23+
import java.util.stream.IntStream;
24+
import java.util.stream.Stream;
2025

2126
@RestController
2227
@RequestMapping("/clicks")
@@ -26,14 +31,16 @@ public class ClickController {
2631
ClickRepository clickRepository;
2732

2833
@GetMapping("/{domain}")
29-
public Publisher<ResponseEntity<List<ClickStats>>> getEmployeeById(@PathVariable("domain") String domain) {
30-
return clickRepository.getStatsByDomain(domain).collect(Collectors.toList()).map(list -> ResponseEntity.ok(list));
34+
public Publisher<List<ClickStats>> getEmployeeById(@PathVariable("domain") String domain) {
35+
return Flux.from(clickRepository.getStatsByDomain(domain).collect(Collectors.toList()));
3136
}
3237

3338
@PostMapping
3439
@ResponseStatus(HttpStatus.CREATED)
35-
public Publisher<ResponseEntity> add(Click click){
36-
return clickRepository.add(new ClickStats(click.getDomain(), click.getPath(), LocalDateTime.now(), 1)).map(v -> ResponseEntity.ok().build());
40+
public Mono<Void> add(@RequestBody Click click){
41+
return Mono.from(clickRepository.add(click));
42+
43+
3744
}
3845

3946
}

examples/clickhouse-r2dbc-samples/clickhouse-r2dbc-spring-webflux-sample/src/main/java/com/clickhouse/r2dbc/spring/webflux/sample/model/ClickStats.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package com.clickhouse.r2dbc.spring.webflux.sample.model;
22

33

4-
import java.time.LocalDateTime;
4+
import com.fasterxml.jackson.annotation.JsonFormat;
5+
6+
import java.time.LocalDate;
57

68
public class ClickStats {
79
private String domain;
810
private String path;
9-
private LocalDateTime cdate;
11+
@JsonFormat(pattern = "yyyy-MM-dd")
12+
private LocalDate cdate;
1013
private long count;
1114

12-
public ClickStats(String domain, String path, LocalDateTime date, long count) {
15+
public ClickStats(String domain, String path, LocalDate date, long count) {
1316
this.domain = domain;
1417
this.path = path;
1518
this.cdate = date;
@@ -40,11 +43,11 @@ public void setCount(long count) {
4043
this.count = count;
4144
}
4245

43-
public LocalDateTime getCdate() {
46+
public LocalDate getCdate() {
4447
return cdate;
4548
}
4649

47-
public void setCdate(LocalDateTime cdate) {
50+
public void setCdate(LocalDate cdate) {
4851
this.cdate = cdate;
4952
}
5053
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package com.clickhouse.r2dbc.spring.webflux.sample.repository;
22

3+
import com.clickhouse.r2dbc.spring.webflux.sample.model.Click;
34
import com.clickhouse.r2dbc.spring.webflux.sample.model.ClickStats;
5+
import io.r2dbc.spi.Connection;
46
import io.r2dbc.spi.ConnectionFactory;
7+
import io.r2dbc.spi.Result;
8+
import org.reactivestreams.Publisher;
59
import org.springframework.beans.factory.annotation.Autowired;
610
import org.springframework.stereotype.Repository;
711
import reactor.core.publisher.Flux;
812
import reactor.core.publisher.Mono;
913

14+
import java.time.LocalDate;
1015
import java.time.LocalDateTime;
1116

1217

@@ -19,19 +24,24 @@ public class ClickRepository {
1924

2025
public Flux<ClickStats> getStatsByDomain(String domain){
2126
return Mono.from(connectionFactory.create())
22-
.flatMapMany(conn -> conn.createStatement("select domain, path, count(1) from clickdb.clicks where domain = :domain group by domain, path")
27+
.flatMapMany(conn -> conn.createStatement("select domain, path, toDate(cdate) as d, count(1) as count from clickdb.clicks where domain = :domain group by domain, path, d")
2328
.bind("domain", domain)
2429
.execute())
2530
.flatMap(result -> result.map((row, rowMetadata) -> new ClickStats(row
26-
.get("domain", String.class), row.get("path", String.class), row.get("cdate", LocalDateTime.class), row.get("count", Long.class))));
31+
.get("domain", String.class), row.get("path", String.class), row.get("d", LocalDate.class), row.get("count", Long.class))));
2732
}
2833

29-
public Mono<Void> add(ClickStats click){
30-
return Mono.from(connectionFactory.create()).map(conn -> conn.createStatement("insert into clickdb.clicks values (:domain, :path, :cdate)")
31-
.bind("domain", click.getDomain())
32-
.bind("path", click.getPath())
33-
.bind("cdate", click.getCdate()).execute())
34-
.then();
34+
public Mono<Void> add(Click click){
35+
return Mono.from(connectionFactory.create())
36+
.flatMapMany(conn -> execute(click, conn)).then();
37+
}
38+
39+
private Publisher<? extends Result> execute(Click click, Connection conn) {
40+
return conn.createStatement("insert into clickdb.clicks values (:domain, :path, :cdate, :count)")
41+
.bind("domain", click.getDomain())
42+
.bind("path", click.getPath())
43+
.bind("cdate", LocalDateTime.now())
44+
.bind("count", 1).execute();
3545
}
3646

3747
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
clickhouse:
22
host: localhost
3-
port: 9100
3+
port: 8123
44
database: clickdb
5+
user: default
6+
password: ""
57
debug: true

0 commit comments

Comments
 (0)