1use {serde::Serialize, std::fmt::Debug, thiserror::Error as ThisError};
2
3pub use crate::{
4 data::{IntervalError, KeyError, SchemaParseError, StringExtError, TableError, ValueError},
5 executor::{
6 AlterError, DeleteError, EvaluateError, ExecuteError, FetchError, InsertError, QueryError,
7 UpdateError, ValidateError,
8 },
9 planner::PlannerError,
10 query_builder::QueryBuilderError,
11 row_conversion::RowConversionError,
12 store::{AlterTableError, IndexError},
13 translate::TranslateError,
14};
15
16#[derive(ThisError, Serialize, Debug, PartialEq)]
17pub enum Error {
18 #[error("storage: {0}")]
19 StorageMsg(String),
20
21 #[error("parser: {0}")]
22 Parser(String),
23
24 #[error("translate: {0}")]
25 Translate(#[from] TranslateError),
26
27 #[error("query-builder: {0}")]
28 QueryBuilder(#[from] QueryBuilderError),
29
30 #[error("alter-table: {0}")]
31 AlterTable(#[from] AlterTableError),
32 #[error("index: {0}")]
33 Index(#[from] IndexError),
34 #[error("execute: {0}")]
35 Execute(#[from] ExecuteError),
36 #[error("alter: {0}")]
37 Alter(Box<AlterError>),
38 #[error("fetch: {0}")]
39 Fetch(#[from] FetchError),
40 #[error("query: {0}")]
41 Query(#[from] QueryError),
42 #[error("evaluate: {0}")]
43 Evaluate(#[from] EvaluateError),
44 #[error("insert: {0}")]
45 Insert(#[from] InsertError),
46 #[error("delete: {0}")]
47 Delete(#[from] DeleteError),
48 #[error("update: {0}")]
49 Update(#[from] UpdateError),
50 #[error("table: {0}")]
51 Table(#[from] TableError),
52 #[error("validate: {0}")]
53 Validate(#[from] ValidateError),
54 #[error("key: {0}")]
55 Key(#[from] KeyError),
56 #[error("value: {0}")]
57 Value(Box<ValueError>),
58 #[error("interval: {0}")]
59 Interval(#[from] IntervalError),
60 #[error("string-ext: {0}")]
61 StringExt(#[from] StringExtError),
62 #[error("planner: {0}")]
63 Planner(#[from] PlannerError),
64 #[error("schema-parse: {0}")]
65 Schema(#[from] SchemaParseError),
66
67 #[error("row-conversion: {0}")]
68 RowConversion(#[from] RowConversionError),
69}
70
71pub type Result<T, E = Error> = std::result::Result<T, E>;
72
73impl From<AlterError> for Error {
74 fn from(e: AlterError) -> Error {
75 Error::Alter(Box::new(e))
76 }
77}
78
79impl From<ValueError> for Error {
80 fn from(e: ValueError) -> Error {
81 Error::Value(Box::new(e))
82 }
83}
84
85#[cfg(test)]
86mod tests {
87 use super::*;
88
89 #[test]
90 fn executor_error_prefixes() {
91 let actual = Error::from(QueryError::ValuesLengthMismatch).to_string();
92 let expected = "query: VALUES lists must all be the same length";
93 assert_eq!(actual, expected);
94
95 let actual = Error::from(DeleteError::ValueNotFound("id".to_owned())).to_string();
96 let expected = "delete: Value not found on column: id";
97 assert_eq!(actual, expected);
98
99 let actual = Error::from(UpdateError::ColumnNotFound("id".to_owned())).to_string();
100 let expected = "update: column not found id";
101 assert_eq!(actual, expected);
102 }
103}