@@ -2816,6 +2816,41 @@ impl fmt::Display for RaiseStatementValue {
28162816 }
28172817}
28182818
2819+ /// A MSSQL `THROW` statement.
2820+ ///
2821+ /// ```sql
2822+ /// THROW [ error_number, message, state ]
2823+ /// ```
2824+ ///
2825+ /// [MSSQL](https://learn.microsoft.com/en-us/sql/t-sql/language-elements/throw-transact-sql)
2826+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
2827+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
2828+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
2829+ pub struct ThrowStatement {
2830+ /// Error number expression.
2831+ pub error_number : Option < Box < Expr > > ,
2832+ /// Error message expression.
2833+ pub message : Option < Box < Expr > > ,
2834+ /// State expression.
2835+ pub state : Option < Box < Expr > > ,
2836+ }
2837+
2838+ impl fmt:: Display for ThrowStatement {
2839+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2840+ let ThrowStatement {
2841+ error_number,
2842+ message,
2843+ state,
2844+ } = self ;
2845+
2846+ write ! ( f, "THROW" ) ?;
2847+ if let ( Some ( error_number) , Some ( message) , Some ( state) ) = ( error_number, message, state) {
2848+ write ! ( f, " {error_number}, {message}, {state}" ) ?;
2849+ }
2850+ Ok ( ( ) )
2851+ }
2852+ }
2853+
28192854/// Represents an expression assignment within a variable `DECLARE` statement.
28202855///
28212856/// Examples:
@@ -4676,19 +4711,8 @@ pub enum Statement {
46764711 /// Additional `WITH` options for RAISERROR.
46774712 options : Vec < RaisErrorOption > ,
46784713 } ,
4679- /// Throw (MSSQL)
4680- /// ```sql
4681- /// THROW [ error_number, message, state ]
4682- /// ```
4683- /// See <https://learn.microsoft.com/en-us/sql/t-sql/language-elements/throw-transact-sql>
4684- Throw {
4685- /// Error number expression.
4686- error_number : Option < Box < Expr > > ,
4687- /// Error message expression.
4688- message : Option < Box < Expr > > ,
4689- /// State expression.
4690- state : Option < Box < Expr > > ,
4691- } ,
4714+ /// A MSSQL `THROW` statement.
4715+ Throw ( ThrowStatement ) ,
46924716 /// ```sql
46934717 /// PRINT msg_str | @local_variable | string_expr
46944718 /// ```
@@ -6133,19 +6157,7 @@ impl fmt::Display for Statement {
61336157 }
61346158 Ok ( ( ) )
61356159 }
6136- Statement :: Throw {
6137- error_number,
6138- message,
6139- state,
6140- } => {
6141- write ! ( f, "THROW" ) ?;
6142- if let ( Some ( error_number) , Some ( message) , Some ( state) ) =
6143- ( error_number, message, state)
6144- {
6145- write ! ( f, " {error_number}, {message}, {state}" ) ?;
6146- }
6147- Ok ( ( ) )
6148- }
6160+ Statement :: Throw ( s) => write ! ( f, "{s}" ) ,
61496161 Statement :: Print ( s) => write ! ( f, "{s}" ) ,
61506162 Statement :: Return ( r) => write ! ( f, "{r}" ) ,
61516163 Statement :: List ( command) => write ! ( f, "LIST {command}" ) ,
@@ -11676,6 +11688,12 @@ impl From<RaiseStatement> for Statement {
1167611688 }
1167711689}
1167811690
11691+ impl From < ThrowStatement > for Statement {
11692+ fn from ( t : ThrowStatement ) -> Self {
11693+ Self :: Throw ( t)
11694+ }
11695+ }
11696+
1167911697impl From < Function > for Statement {
1168011698 fn from ( f : Function ) -> Self {
1168111699 Self :: Call ( f)
0 commit comments