comphead commented on code in PR #10186:
URL: https://github.com/apache/datafusion/pull/10186#discussion_r1576898138


##########
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:
   I was thinking about this in the first place. 
   
   - We can fix the formatter so it will skip the error name for some format 
options, that doesn't work with `to_string()` which has default formatter.
   
   - we can tweak `impl Display` with cargo feature and return name as blank if 
the feature enabled and that looks little bit overcompicated.
   
   - we can refer to env variable and depending on the value define the error 
name but this might be expensive. 
   
   - we can probably introduce a DF config param? 
   
   
   



-- 
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]

Reply via email to