@@ -2276,6 +2276,7 @@ fn parse_create_trigger() {
22762276 assert_eq ! (
22772277 create_stmt,
22782278 Statement :: CreateTrigger {
2279+ or_alter: false ,
22792280 or_replace: false ,
22802281 is_constraint: false ,
22812282 name: ObjectName :: from( vec![ Ident :: new( "reminder1" ) ] ) ,
@@ -2319,6 +2320,7 @@ fn parse_create_trigger() {
23192320 assert_eq ! (
23202321 create_stmt,
23212322 Statement :: CreateTrigger {
2323+ or_alter: false ,
23222324 or_replace: false ,
23232325 is_constraint: false ,
23242326 name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
@@ -2359,6 +2361,82 @@ fn parse_create_trigger() {
23592361 assert_eq ! (
23602362 create_stmt,
23612363 Statement :: CreateTrigger {
2364+ or_alter: false ,
2365+ or_replace: false ,
2366+ is_constraint: false ,
2367+ name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
2368+ period: TriggerPeriod :: For ,
2369+ events: vec![ TriggerEvent :: Insert ] ,
2370+ table_name: ObjectName :: from( vec![ Ident :: new( "some_table" ) ] ) ,
2371+ referenced_table_name: None ,
2372+ referencing: vec![ ] ,
2373+ trigger_object: TriggerObject :: Statement ,
2374+ include_each: false ,
2375+ condition: None ,
2376+ exec_body: None ,
2377+ statements: vec![ Statement :: Return ( ReturnStatement {
2378+ value: None ,
2379+ } ) ] ,
2380+ characteristics: None ,
2381+ }
2382+ ) ;
2383+ }
2384+
2385+ #[ test]
2386+ fn parse_mssql_create_trigger ( ) {
2387+ let create_or_alter_trigger = r#"
2388+ CREATE OR ALTER TRIGGER some_trigger ON some_table FOR INSERT
2389+ AS
2390+ BEGIN
2391+ RAISERROR('Trigger fired', 10, 1)
2392+ END
2393+ "# ;
2394+ let create_stmt = ms ( ) . one_statement_parses_to ( create_or_alter_trigger, "" ) ;
2395+ assert_eq ! (
2396+ create_stmt,
2397+ Statement :: CreateTrigger {
2398+ or_alter: true ,
2399+ or_replace: false ,
2400+ is_constraint: false ,
2401+ name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
2402+ period: TriggerPeriod :: For ,
2403+ events: vec![ TriggerEvent :: Insert ] ,
2404+ table_name: ObjectName :: from( vec![ Ident :: new( "some_table" ) ] ) ,
2405+ referenced_table_name: None ,
2406+ referencing: vec![ ] ,
2407+ trigger_object: TriggerObject :: Statement ,
2408+ include_each: false ,
2409+ condition: None ,
2410+ exec_body: None ,
2411+ statements: vec![ Statement :: RaisError {
2412+ message: Box :: new( Expr :: Value (
2413+ ( Value :: SingleQuotedString ( "Trigger fired" . to_string( ) ) ) . with_empty_span( )
2414+ ) ) ,
2415+ severity: Box :: new( Expr :: Value (
2416+ ( Value :: Number ( "10" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2417+ ) ) ,
2418+ state: Box :: new( Expr :: Value (
2419+ ( Value :: Number ( "1" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2420+ ) ) ,
2421+ arguments: vec![ ] ,
2422+ options: vec![ ] ,
2423+ } ] ,
2424+ characteristics: None ,
2425+ }
2426+ ) ;
2427+
2428+ let create_trigger_with_return = r#"
2429+ CREATE TRIGGER some_trigger ON some_table FOR INSERT
2430+ AS
2431+ BEGIN
2432+ RETURN;
2433+ END
2434+ "# ;
2435+ let create_stmt = ms ( ) . one_statement_parses_to ( create_trigger_with_return, "" ) ;
2436+ assert_eq ! (
2437+ create_stmt,
2438+ Statement :: CreateTrigger {
2439+ or_alter: false ,
23622440 or_replace: false ,
23632441 is_constraint: false ,
23642442 name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
0 commit comments