11#![ cfg( feature = "inserter" ) ]
22
3+ use std:: string:: ToString ;
4+
35use serde:: Serialize ;
46
57use clickhouse:: { inserter:: Quantities , Client , Row } ;
@@ -9,6 +11,14 @@ struct MyRow {
911 data : String ,
1012}
1113
14+ impl MyRow {
15+ fn new ( data : impl ToString ) -> Self {
16+ Self {
17+ data : data. to_string ( ) ,
18+ }
19+ }
20+ }
21+
1222async fn create_table ( client : & Client ) {
1323 client
1424 . query ( "CREATE TABLE test(data String) ENGINE = MergeTree ORDER BY data" )
@@ -17,6 +27,35 @@ async fn create_table(client: &Client) {
1727 . unwrap ( ) ;
1828}
1929
30+ #[ tokio:: test]
31+ async fn force_commit ( ) {
32+ let client = prepare_database ! ( ) ;
33+ create_table ( & client) . await ;
34+
35+ let mut inserter = client. inserter ( "test" ) . unwrap ( ) ;
36+ let rows = 100 ;
37+
38+ for i in 1 ..=rows {
39+ inserter. write ( & MyRow :: new ( i) ) . unwrap ( ) ;
40+ assert_eq ! ( inserter. commit( ) . await . unwrap( ) , Quantities :: ZERO ) ;
41+
42+ if i % 10 == 0 {
43+ assert_eq ! ( inserter. force_commit( ) . await . unwrap( ) . rows, 10 ) ;
44+ }
45+ }
46+
47+ assert_eq ! ( inserter. end( ) . await . unwrap( ) , Quantities :: ZERO ) ;
48+
49+ let ( count, sum) = client
50+ . query ( "SELECT count(), sum(toUInt64(data)) FROM test" )
51+ . fetch_one :: < ( u64 , u64 ) > ( )
52+ . await
53+ . unwrap ( ) ;
54+
55+ assert_eq ! ( count, rows) ;
56+ assert_eq ! ( sum, ( 1 ..=rows) . sum:: <u64 >( ) ) ;
57+ }
58+
2059#[ tokio:: test]
2160async fn limited_by_rows ( ) {
2261 let client = prepare_database ! ( ) ;
@@ -26,13 +65,9 @@ async fn limited_by_rows() {
2665 let rows = 100 ;
2766
2867 for i in ( 2 ..=rows) . step_by ( 2 ) {
29- let row = MyRow {
30- data : ( i - 1 ) . to_string ( ) ,
31- } ;
68+ let row = MyRow :: new ( i - 1 ) ;
3269 inserter. write ( & row) . unwrap ( ) ;
33- let row = MyRow {
34- data : i. to_string ( ) ,
35- } ;
70+ let row = MyRow :: new ( i) ;
3671 inserter. write ( & row) . unwrap ( ) ;
3772
3873 let inserted = inserter. commit ( ) . await . unwrap ( ) ;
@@ -71,9 +106,7 @@ async fn limited_by_bytes() {
71106 let mut inserter = client. inserter ( "test" ) . unwrap ( ) . with_max_bytes ( 100 ) ;
72107 let rows = 100 ;
73108
74- let row = MyRow {
75- data : "x" . repeat ( 9 ) , // +1 for length
76- } ;
109+ let row = MyRow :: new ( "x" . repeat ( 9 ) ) ;
77110
78111 for i in 1 ..=rows {
79112 inserter. write ( & row) . unwrap ( ) ;
@@ -118,9 +151,7 @@ async fn limited_by_time() {
118151 let rows = 100 ;
119152
120153 for i in 1 ..=rows {
121- let row = MyRow {
122- data : i. to_string ( ) ,
123- } ;
154+ let row = MyRow :: new ( i) ;
124155 inserter. write ( & row) . unwrap ( ) ;
125156
126157 tokio:: time:: sleep ( period / 10 ) . await ;
0 commit comments