@@ -2432,6 +2432,7 @@ fn parse_create_trigger() {
24322432 assert_eq ! (
24332433 create_stmt,
24342434 Statement :: CreateTrigger {
2435+ or_alter: false ,
24352436 or_replace: false ,
24362437 is_constraint: false ,
24372438 name: ObjectName :: from( vec![ Ident :: new( "reminder1" ) ] ) ,
@@ -2473,6 +2474,7 @@ fn parse_create_trigger() {
24732474 assert_eq ! (
24742475 create_stmt,
24752476 Statement :: CreateTrigger {
2477+ or_alter: false ,
24762478 or_replace: false ,
24772479 is_constraint: false ,
24782480 name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
@@ -2513,6 +2515,80 @@ fn parse_create_trigger() {
25132515 assert_eq ! (
25142516 create_stmt,
25152517 Statement :: CreateTrigger {
2518+ or_alter: false ,
2519+ or_replace: false ,
2520+ is_constraint: false ,
2521+ name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
2522+ period: TriggerPeriod :: For ,
2523+ events: vec![ TriggerEvent :: Insert ] ,
2524+ table_name: ObjectName :: from( vec![ Ident :: new( "some_table" ) ] ) ,
2525+ referenced_table_name: None ,
2526+ referencing: vec![ ] ,
2527+ trigger_object: TriggerObject :: Statement ,
2528+ include_each: false ,
2529+ condition: None ,
2530+ exec_body: None ,
2531+ statements: Some ( vec![ Statement :: Return ( ReturnStatement { value: None } ) ] ) ,
2532+ characteristics: None ,
2533+ }
2534+ ) ;
2535+ }
2536+
2537+ #[ test]
2538+ fn parse_mssql_create_trigger ( ) {
2539+ let create_or_alter_trigger = r#"
2540+ CREATE OR ALTER TRIGGER some_trigger ON some_table FOR INSERT
2541+ AS
2542+ BEGIN
2543+ RAISERROR('Trigger fired', 10, 1);
2544+ END
2545+ "# ;
2546+ let create_stmt = ms ( ) . one_statement_parses_to ( create_or_alter_trigger, "" ) ;
2547+ assert_eq ! (
2548+ create_stmt,
2549+ Statement :: CreateTrigger {
2550+ or_alter: true ,
2551+ or_replace: false ,
2552+ is_constraint: false ,
2553+ name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
2554+ period: TriggerPeriod :: For ,
2555+ events: vec![ TriggerEvent :: Insert ] ,
2556+ table_name: ObjectName :: from( vec![ Ident :: new( "some_table" ) ] ) ,
2557+ referenced_table_name: None ,
2558+ referencing: vec![ ] ,
2559+ trigger_object: TriggerObject :: Statement ,
2560+ include_each: false ,
2561+ condition: None ,
2562+ exec_body: None ,
2563+ statements: Some ( vec![ Statement :: RaisError {
2564+ message: Box :: new( Expr :: Value (
2565+ ( Value :: SingleQuotedString ( "Trigger fired" . to_string( ) ) ) . with_empty_span( )
2566+ ) ) ,
2567+ severity: Box :: new( Expr :: Value (
2568+ ( Value :: Number ( "10" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2569+ ) ) ,
2570+ state: Box :: new( Expr :: Value (
2571+ ( Value :: Number ( "1" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2572+ ) ) ,
2573+ arguments: vec![ ] ,
2574+ options: vec![ ] ,
2575+ } ] ) ,
2576+ characteristics: None ,
2577+ }
2578+ ) ;
2579+
2580+ let create_trigger_with_return = r#"
2581+ CREATE TRIGGER some_trigger ON some_table FOR INSERT
2582+ AS
2583+ BEGIN
2584+ RETURN;
2585+ END
2586+ "# ;
2587+ let create_stmt = ms ( ) . one_statement_parses_to ( create_trigger_with_return, "" ) ;
2588+ assert_eq ! (
2589+ create_stmt,
2590+ Statement :: CreateTrigger {
2591+ or_alter: false ,
25162592 or_replace: false ,
25172593 is_constraint: false ,
25182594 name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
@@ -2546,6 +2622,7 @@ fn parse_create_trigger() {
25462622 assert_eq ! (
25472623 create_stmt,
25482624 Statement :: CreateTrigger {
2625+ or_alter: false ,
25492626 or_replace: false ,
25502627 is_constraint: false ,
25512628 name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
0 commit comments