feat: stack trace style debug print for error (#2489)

* impl macro stack_trace_debug

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* manually mark external error

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* ignore warnings

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* fix clippy warnings

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* use debug print

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* simplify the error and warn macro

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* fix ut

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* add docs

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* replace snafu backtrace with location

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

---------

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>
This commit is contained in:
Ruihang Xia
2023-09-26 11:23:21 +00:00
committed by GitHub
parent 7fc9604735
commit 515ce825bd
94 changed files with 1209 additions and 504 deletions
+1
View File
@@ -9,6 +9,7 @@ api = { workspace = true }
common-base = { workspace = true }
common-catalog = { workspace = true }
common-error = { workspace = true }
common-macro = { workspace = true }
common-query = { workspace = true }
common-time = { workspace = true }
datafusion-sql.workspace = true
+10 -3
View File
@@ -16,6 +16,7 @@ use std::any::Any;
use common_error::ext::ErrorExt;
use common_error::status_code::StatusCode;
use common_macro::stack_trace_debug;
use common_time::timestamp::TimeUnit;
use common_time::Timestamp;
use datatypes::prelude::{ConcreteDataType, Value};
@@ -29,8 +30,9 @@ pub type Result<T> = std::result::Result<T, Error>;
/// SQL parser errors.
// Now the error in parser does not contains backtrace to avoid generating backtrace
// every time the parser parses an invalid SQL.
#[derive(Debug, Snafu)]
#[derive(Snafu)]
#[snafu(visibility(pub))]
#[stack_trace_debug]
pub enum Error {
#[snafu(display("SQL statement is not supported: {}, keyword: {}", sql, keyword))]
Unsupported { sql: String, keyword: String },
@@ -45,7 +47,8 @@ pub enum Error {
sql: String,
expected: String,
actual: String,
source: ParserError,
#[snafu(source)]
error: ParserError,
},
#[snafu(display(
@@ -57,7 +60,11 @@ pub enum Error {
// Syntax error from sql parser.
#[snafu(display("Syntax error, sql: {}", sql))]
Syntax { sql: String, source: ParserError },
Syntax {
sql: String,
#[snafu(source)]
error: ParserError,
},
#[snafu(display("Missing time index constraint"))]
MissingTimeIndex {},
+1 -1
View File
@@ -602,7 +602,7 @@ mod tests {
assert!(v.is_err());
assert!(
format!("{v:?}").contains(
"column_name: \"a\", expect: Float64(Float64Type), actual: Boolean(BooleanType)"
"Column a expect type: Float64(Float64Type), actual: Boolean(BooleanType))"
),
"v is {v:?}",
);