@@ -759,23 +759,33 @@ macro_rules! make_error {
759759 /// Macro wraps `$ERR` to add backtrace feature
760760 #[ macro_export]
761761 macro_rules! $NAME_DF_ERR {
762- ( $d( $d args: expr) , * ) => {
763- $crate:: DataFusionError :: $ERR(
762+ ( $d( $d args: expr) , * $d ( ; diagnostic=$d DIAG : expr ) ? ) => { {
763+ let err = $crate:: DataFusionError :: $ERR(
764764 :: std:: format!(
765765 "{}{}" ,
766766 :: std:: format!( $d( $d args) , * ) ,
767767 $crate:: DataFusionError :: get_back_trace( ) ,
768768 ) . into( )
769- )
769+ ) ;
770+ $d (
771+ let err = err. with_diagnostic( $d DIAG ) ;
772+ ) ?
773+ err
770774 }
771775 }
776+ }
772777
773778 /// Macro wraps Err(`$ERR`) to add backtrace feature
774779 #[ macro_export]
775780 macro_rules! $NAME_ERR {
776- ( $d( $d args: expr) , * ) => {
777- Err ( $crate:: [ <_ $NAME_DF_ERR>] !( $d( $d args) , * ) )
778- }
781+ ( $d( $d args: expr) , * $d( ; diagnostic = $d DIAG : expr) ?) => { {
782+ let err = $crate:: [ <_ $NAME_DF_ERR>] !( $d( $d args) , * ) ;
783+ $d (
784+ let err = err. with_diagnostic( $d DIAG ) ;
785+ ) ?
786+ Err ( err)
787+
788+ } }
779789 }
780790
781791
@@ -816,54 +826,80 @@ make_error!(resources_err, resources_datafusion_err, ResourcesExhausted);
816826// Exposes a macro to create `DataFusionError::SQL` with optional backtrace
817827#[ macro_export]
818828macro_rules! sql_datafusion_err {
819- ( $ERR: expr) => {
820- DataFusionError :: SQL ( $ERR, Some ( DataFusionError :: get_back_trace( ) ) )
821- } ;
829+ ( $ERR: expr $( ; diagnostic = $DIAG: expr) ?) => { {
830+ let err = DataFusionError :: SQL ( $ERR, Some ( DataFusionError :: get_back_trace( ) ) ) ;
831+ $(
832+ let err = err. with_diagnostic( $DIAG) ;
833+ ) ?
834+ err
835+ } } ;
822836}
823837
824838// Exposes a macro to create `Err(DataFusionError::SQL)` with optional backtrace
825839#[ macro_export]
826840macro_rules! sql_err {
827- ( $ERR: expr) => {
828- Err ( datafusion_common:: sql_datafusion_err!( $ERR) )
829- } ;
841+ ( $ERR: expr $( ; diagnostic = $DIAG: expr) ?) => { {
842+ let err = datafusion_common:: sql_datafusion_err!( $ERR) ;
843+ $(
844+ let err = err. with_diagnostic( $DIAG) ;
845+ ) ?
846+ Err ( err)
847+ } } ;
830848}
831849
832850// Exposes a macro to create `DataFusionError::ArrowError` with optional backtrace
833851#[ macro_export]
834852macro_rules! arrow_datafusion_err {
835- ( $ERR: expr) => {
836- DataFusionError :: ArrowError ( $ERR, Some ( DataFusionError :: get_back_trace( ) ) )
837- } ;
853+ ( $ERR: expr $( ; diagnostic = $DIAG: expr) ?) => { {
854+ let err = DataFusionError :: ArrowError ( $ERR, Some ( DataFusionError :: get_back_trace( ) ) ) ;
855+ $(
856+ let err = err. with_diagnostic( $DIAG) ;
857+ ) ?
858+ err
859+ } } ;
838860}
839861
840862// Exposes a macro to create `Err(DataFusionError::ArrowError)` with optional backtrace
841863#[ macro_export]
842864macro_rules! arrow_err {
843- ( $ERR: expr) => {
844- Err ( datafusion_common:: arrow_datafusion_err!( $ERR) )
845- } ;
865+ ( $ERR: expr $( ; diagnostic = $DIAG: expr) ?) => {
866+ {
867+ let err = datafusion_common:: arrow_datafusion_err!( $ERR) ;
868+ $(
869+ let err = err. with_diagnostic( $DIAG) ;
870+ ) ?
871+ Err ( err)
872+ } } ;
846873}
847874
848875// Exposes a macro to create `DataFusionError::SchemaError` with optional backtrace
849876#[ macro_export]
850877macro_rules! schema_datafusion_err {
851- ( $ERR: expr) => {
852- $crate:: error:: DataFusionError :: SchemaError (
878+ ( $ERR: expr $ ( ; diagnostic = $DIAG : expr ) ? ) => { {
879+ let err = $crate:: error:: DataFusionError :: SchemaError (
853880 $ERR,
854881 Box :: new( Some ( $crate:: error:: DataFusionError :: get_back_trace( ) ) ) ,
855- )
856- } ;
882+ ) ;
883+ $(
884+ let err = err. with_diagnostic( $DIAG) ;
885+ ) ?
886+ err
887+ } } ;
857888}
858889
859890// Exposes a macro to create `Err(DataFusionError::SchemaError)` with optional backtrace
860891#[ macro_export]
861892macro_rules! schema_err {
862- ( $ERR: expr) => {
863- Err ( $crate:: error:: DataFusionError :: SchemaError (
893+ ( $ERR: expr $ ( ; diagnostic = $DIAG : expr ) ? ) => { {
894+ let err = $crate:: error:: DataFusionError :: SchemaError (
864895 $ERR,
865896 Box :: new( Some ( $crate:: error:: DataFusionError :: get_back_trace( ) ) ) ,
866- ) )
897+ ) ;
898+ $(
899+ let err = err. with_diagnostic( $DIAG) ;
900+ ) ?
901+ Err ( err)
902+ }
867903 } ;
868904}
869905
0 commit comments