Skip to content

Commit 12892c7

Browse files
committed
updated errors
1 parent 0e81eba commit 12892c7

File tree

4 files changed

+45
-88
lines changed

4 files changed

+45
-88
lines changed

interfaces/src/clickhouse/client.rs

+12-41
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::marker::PhantomData;
33
use clickhouse::{query::Query, *};
44
use eyre::Result;
55

6-
use super::{dbms::ClickhouseDBMS, errors::ClickhouseError, types::ClickhouseQuery};
6+
use super::{dbms::ClickhouseDBMS, types::ClickhouseQuery};
77
use crate::{errors::DatabaseError, params::BindParameters, Database, DatabaseTable};
88

99
#[derive(Clone)]
@@ -39,50 +39,33 @@ where
3939
async fn insert_one<T: DatabaseTable>(&self, value: &T::DataType) -> Result<(), DatabaseError> {
4040
let mut insert = self
4141
.client
42-
.insert(Self::DBMS::from_database_table_str(T::NAME).full_name())
43-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
42+
.insert(Self::DBMS::from_database_table_str(T::NAME).full_name())?;
4443

45-
insert
46-
.write(value)
47-
.await
48-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
44+
insert.write(value).await?;
4945

50-
insert
51-
.end()
52-
.await
53-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
46+
insert.end().await?;
5447

5548
Ok(())
5649
}
5750

5851
async fn insert_many<T: DatabaseTable>(&self, values: &[T::DataType]) -> Result<(), DatabaseError> {
5952
let mut insert = self
6053
.client
61-
.insert(Self::DBMS::from_database_table_str(T::NAME).full_name())
62-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
54+
.insert(Self::DBMS::from_database_table_str(T::NAME).full_name())?;
6355

6456
for value in values {
65-
insert
66-
.write(value)
67-
.await
68-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
57+
insert.write(value).await?;
6958
}
7059

71-
insert
72-
.end()
73-
.await
74-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
60+
insert.end().await?;
7561

7662
Ok(())
7763
}
7864

7965
async fn query_one<Q: ClickhouseQuery, P: BindParameters>(&self, query: impl AsRef<str> + Send, params: &P) -> Result<Q, DatabaseError> {
8066
let query = params.bind_query(self.client.query(query.as_ref()));
8167

82-
let res = query
83-
.fetch_one::<Q>()
84-
.await
85-
.map_err(|e| DatabaseError::from(ClickhouseError::QueryError(e.to_string())))?;
68+
let res = query.fetch_one::<Q>().await?;
8669

8770
Ok(res)
8871
}
@@ -94,40 +77,28 @@ where
9477
) -> Result<Option<Q>, DatabaseError> {
9578
let query = params.bind_query(self.client.query(query.as_ref()));
9679

97-
let res = query
98-
.fetch_optional::<Q>()
99-
.await
100-
.map_err(|e| DatabaseError::from(ClickhouseError::QueryError(e.to_string())))?;
80+
let res = query.fetch_optional::<Q>().await?;
10181

10282
Ok(res)
10383
}
10484

10585
async fn query_many<Q: ClickhouseQuery, P: BindParameters>(&self, query: impl AsRef<str> + Send, params: &P) -> Result<Vec<Q>, DatabaseError> {
10686
let query = params.bind_query(self.client.query(query.as_ref()));
10787

108-
let res = query
109-
.fetch_all::<Q>()
110-
.await
111-
.map_err(|e| DatabaseError::from(ClickhouseError::QueryError(e.to_string())))?;
88+
let res = query.fetch_all::<Q>().await?;
11289

11390
Ok(res)
11491
}
11592

11693
async fn query_raw<Q: ClickhouseQuery, P: BindParameters>(&self, query: impl AsRef<str> + Send, params: &P) -> Result<Vec<u8>, DatabaseError> {
11794
let query = params.bind_query(self.client.query(query.as_ref()));
118-
query
119-
.fetch_raw::<Q>()
120-
.await
121-
.map_err(|e| DatabaseError::from(ClickhouseError::QueryError(e.to_string())))
95+
Ok(query.fetch_raw::<Q>().await?)
12296
}
12397

12498
async fn execute_remote<P: BindParameters>(&self, query: impl AsRef<str> + Send, params: &P) -> Result<(), DatabaseError> {
12599
let query = params.bind_query(self.client.query(query.as_ref()));
126100

127-
query
128-
.execute()
129-
.await
130-
.map_err(|e| DatabaseError::from(ClickhouseError::QueryError(e.to_string())))?;
101+
query.execute().await?;
131102

132103
Ok(())
133104
}

interfaces/src/clickhouse/errors.rs

+7-15
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,11 @@ use std::fmt::Debug;
22

33
use thiserror::Error;
44

5-
use crate::errors::DatabaseError;
6-
7-
#[derive(Error, Debug, Clone)]
5+
#[derive(Error, Debug)]
86
pub enum ClickhouseError {
9-
#[error("database connection error: {0}")]
10-
ConnectionError(String),
11-
#[error("error building the query: {0}")]
12-
QueryBuildingError(String),
13-
#[error("error inserting into the database: {0}")]
14-
InsertError(String),
15-
#[error("error querying from the database: {0}")]
16-
QueryError(String),
17-
#[error("error reading sql file: {0}")]
7+
#[error("clickhouse error: {0}")]
8+
ClickhouseNative(clickhouse::error::Error),
9+
#[error("error reading clickhouse sql file: {0}")]
1810
SqlFileReadError(String)
1911
}
2012

@@ -24,8 +16,8 @@ impl From<std::io::Error> for ClickhouseError {
2416
}
2517
}
2618

27-
impl From<ClickhouseError> for DatabaseError {
28-
fn from(value: ClickhouseError) -> DatabaseError {
29-
DatabaseError { error: value.to_string() }
19+
impl From<clickhouse::error::Error> for ClickhouseError {
20+
fn from(value: clickhouse::error::Error) -> ClickhouseError {
21+
ClickhouseError::ClickhouseNative(value)
3022
}
3123
}

interfaces/src/clickhouse/test_utils/client.rs

+9-29
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use rand::Rng;
66

77
use super::ClickhouseTestDBMS;
88
use crate::{
9-
clickhouse::{client::ClickhouseClient, errors::ClickhouseError, types::ClickhouseQuery},
9+
clickhouse::{client::ClickhouseClient, types::ClickhouseQuery},
1010
errors::DatabaseError,
1111
params::BindParameters,
1212
test_utils::TestDatabase,
@@ -77,44 +77,24 @@ where
7777

7878
async fn insert_one<T: DatabaseTable>(&self, value: &T::DataType) -> Result<(), DatabaseError> {
7979
let table = format!("test_{}", Self::DBMS::from_database_table_str(T::NAME).full_name());
80-
let mut insert = self
81-
.client
82-
.client
83-
.insert(table)
84-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
85-
86-
insert
87-
.write(value)
88-
.await
89-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
90-
91-
insert
92-
.end()
93-
.await
94-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
80+
let mut insert = self.client.client.insert(table)?;
81+
82+
insert.write(value).await?;
83+
84+
insert.end().await?;
9585

9686
Ok(())
9787
}
9888

9989
async fn insert_many<T: DatabaseTable>(&self, values: &[T::DataType]) -> Result<(), DatabaseError> {
10090
let table = format!("test_{}", Self::DBMS::from_database_table_str(T::NAME).full_name());
101-
let mut insert = self
102-
.client
103-
.client
104-
.insert(table)
105-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
91+
let mut insert = self.client.client.insert(table)?;
10692

10793
for value in values {
108-
insert
109-
.write(value)
110-
.await
111-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
94+
insert.write(value).await?;
11295
}
11396

114-
insert
115-
.end()
116-
.await
117-
.map_err(|e| DatabaseError::from(ClickhouseError::InsertError(e.to_string())))?;
97+
insert.end().await?;
11898

11999
Ok(())
120100
}

interfaces/src/errors.rs

+17-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,28 @@
11
use std::fmt::{Debug, Display};
22

3+
use crate::clickhouse::errors::ClickhouseError;
4+
35
#[derive(Debug)]
4-
pub struct DatabaseError {
5-
pub error: String
6+
pub enum DatabaseError {
7+
ClickhouseError(ClickhouseError)
68
}
79

810
impl Display for DatabaseError {
911
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10-
writeln!(f, "{}", self.error)
12+
writeln!(f, "{:?}", self)
1113
}
1214
}
1315

1416
impl std::error::Error for DatabaseError {}
17+
18+
impl From<clickhouse::error::Error> for DatabaseError {
19+
fn from(value: clickhouse::error::Error) -> Self {
20+
Self::ClickhouseError(value.into())
21+
}
22+
}
23+
24+
impl From<ClickhouseError> for DatabaseError {
25+
fn from(value: ClickhouseError) -> Self {
26+
Self::ClickhouseError(value)
27+
}
28+
}

0 commit comments

Comments
 (0)