andygrove commented on code in PR #10186:
URL: https://github.com/apache/datafusion/pull/10186#discussion_r1580194460
##########
datafusion/common/src/error.rs:
##########
@@ -450,6 +396,99 @@ impl DataFusionError {
#[cfg(not(feature = "backtrace"))]
"".to_owned()
}
+
+ fn get_error_name(&self) -> &'static str {
+ match self {
+ DataFusionError::ArrowError(_, _) => "Arrow error: ",
+ #[cfg(feature = "parquet")]
+ DataFusionError::ParquetError(_) => "Parquet error: ",
+ #[cfg(feature = "avro")]
+ DataFusionError::AvroError(_) => "Avro error: ",
+ #[cfg(feature = "object_store")]
+ DataFusionError::ObjectStore(_) => "Object Store error: ",
+ DataFusionError::IoError(_) => "IO error: ",
+ DataFusionError::SQL(_, _) => "SQL error: ",
+ DataFusionError::NotImplemented(_) => "This feature is not
implemented: ",
+ DataFusionError::Internal(_) => "Internal error: ",
+ DataFusionError::Plan(_) => "Error during planning: ",
+ DataFusionError::Configuration(_) => "Invalid or Unsupported
Configuration: ",
+ DataFusionError::SchemaError(_, _) => "Schema error: ",
+ DataFusionError::Execution(_) => "Execution error: ",
+ DataFusionError::ResourcesExhausted(_) => "Resources exhausted: ",
+ DataFusionError::External(_) => "External error: ",
+ DataFusionError::Context(_, _) => "",
+ DataFusionError::Substrait(_) => "Substrait error: ",
+ }
+ }
+
+ fn format_err(&self, f: &mut Formatter) -> std::fmt::Result {
+ let error_name = self.get_error_name();
+ match *self {
+ DataFusionError::ArrowError(ref desc, ref backtrace) => {
+ let backtrace = backtrace.clone().unwrap_or("".to_owned());
+ write!(f, "{error_name}{desc}{backtrace}")
+ }
+ #[cfg(feature = "parquet")]
+ DataFusionError::ParquetError(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ #[cfg(feature = "avro")]
+ DataFusionError::AvroError(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ DataFusionError::IoError(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ DataFusionError::SQL(ref desc, ref backtrace) => {
+ let backtrace: String =
backtrace.clone().unwrap_or("".to_owned());
+ write!(f, "{error_name}{desc:?}{backtrace}")
+ }
+ DataFusionError::Configuration(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ DataFusionError::NotImplemented(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ DataFusionError::Internal(ref desc) => {
+ write!(f, "{error_name}{desc}.\nThis was likely caused by a
bug in DataFusion's \
+ code and we would welcome that you file an bug report in
our issue tracker")
+ }
+ DataFusionError::Plan(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ DataFusionError::SchemaError(ref desc, ref backtrace) => {
+ let backtrace: &str =
+ &backtrace.as_ref().clone().unwrap_or("".to_owned());
+ write!(f, "{error_name}{desc}{backtrace}")
+ }
+ DataFusionError::Execution(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ DataFusionError::ResourcesExhausted(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ DataFusionError::External(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ #[cfg(feature = "object_store")]
+ DataFusionError::ObjectStore(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ DataFusionError::Context(ref desc, ref err) => {
+ write!(f, "{error_name}{desc}\ncaused by\n{}", *err)
+ }
+ DataFusionError::Substrait(ref desc) => {
+ write!(f, "{error_name}{desc}")
+ }
+ }
+ }
+
+ /// Strips error description out of the error message
+ /// Error has a format `{error_name}{`error`}
+ /// The method strips the `error_name` from level and outputs 'error``
+ pub fn strip_error_name(self) -> String {
+ self.to_string().replace(self.get_error_name(), "")
Review Comment:
This seems like the simplest solution.
Our use case (Comet) is that we are using
[thiserror](https://crates.io/crates/thiserror) and we are delegating to
DataFusionError for the error string and it currently uses the `Display` trait.
@comphead I don't know enough about thiserror yet to know if/how we could
call the new method proposed here. Do you know?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]