@@ -2354,6 +2354,7 @@ fn parse_create_trigger() {
23542354 assert_eq ! (
23552355 create_stmt,
23562356 Statement :: CreateTrigger {
2357+ or_alter: false ,
23572358 or_replace: false ,
23582359 is_constraint: false ,
23592360 name: ObjectName :: from( vec![ Ident :: new( "reminder1" ) ] ) ,
@@ -2397,6 +2398,82 @@ fn parse_create_trigger() {
23972398 assert_eq ! (
23982399 create_stmt,
23992400 Statement :: CreateTrigger {
2401+ or_alter: false ,
2402+ or_replace: false ,
2403+ is_constraint: false ,
2404+ name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
2405+ period: TriggerPeriod :: For ,
2406+ events: vec![ TriggerEvent :: Insert ] ,
2407+ table_name: ObjectName :: from( vec![ Ident :: new( "some_table" ) ] ) ,
2408+ referenced_table_name: None ,
2409+ referencing: vec![ ] ,
2410+ trigger_object: TriggerObject :: Statement ,
2411+ include_each: false ,
2412+ condition: None ,
2413+ exec_body: None ,
2414+ statements: vec![ Statement :: RaisError {
2415+ message: Box :: new( Expr :: Value (
2416+ ( Value :: SingleQuotedString ( "Trigger fired" . to_string( ) ) ) . with_empty_span( )
2417+ ) ) ,
2418+ severity: Box :: new( Expr :: Value (
2419+ ( Value :: Number ( "10" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2420+ ) ) ,
2421+ state: Box :: new( Expr :: Value (
2422+ ( Value :: Number ( "1" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2423+ ) ) ,
2424+ arguments: vec![ ] ,
2425+ options: vec![ ] ,
2426+ } ] ,
2427+ characteristics: None ,
2428+ }
2429+ ) ;
2430+
2431+ let create_trigger_with_return = r#"
2432+ CREATE TRIGGER some_trigger ON some_table FOR INSERT
2433+ AS
2434+ BEGIN
2435+ RETURN;
2436+ END
2437+ "# ;
2438+ let create_stmt = ms ( ) . one_statement_parses_to ( create_trigger_with_return, "" ) ;
2439+ assert_eq ! (
2440+ create_stmt,
2441+ Statement :: CreateTrigger {
2442+ or_alter: false ,
2443+ or_replace: false ,
2444+ is_constraint: false ,
2445+ name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
2446+ period: TriggerPeriod :: For ,
2447+ events: vec![ TriggerEvent :: Insert ] ,
2448+ table_name: ObjectName :: from( vec![ Ident :: new( "some_table" ) ] ) ,
2449+ referenced_table_name: None ,
2450+ referencing: vec![ ] ,
2451+ trigger_object: TriggerObject :: Statement ,
2452+ include_each: false ,
2453+ condition: None ,
2454+ exec_body: None ,
2455+ statements: vec![ Statement :: Return ( ReturnStatement {
2456+ value: None ,
2457+ } ) ] ,
2458+ characteristics: None ,
2459+ }
2460+ ) ;
2461+ }
2462+
2463+ #[ test]
2464+ fn parse_mssql_create_trigger ( ) {
2465+ let create_or_alter_trigger = r#"
2466+ CREATE OR ALTER TRIGGER some_trigger ON some_table FOR INSERT
2467+ AS
2468+ BEGIN
2469+ RAISERROR('Trigger fired', 10, 1)
2470+ END
2471+ "# ;
2472+ let create_stmt = ms ( ) . one_statement_parses_to ( create_or_alter_trigger, "" ) ;
2473+ assert_eq ! (
2474+ create_stmt,
2475+ Statement :: CreateTrigger {
2476+ or_alter: true ,
24002477 or_replace: false ,
24012478 is_constraint: false ,
24022479 name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
@@ -2437,6 +2514,7 @@ fn parse_create_trigger() {
24372514 assert_eq ! (
24382515 create_stmt,
24392516 Statement :: CreateTrigger {
2517+ or_alter: false ,
24402518 or_replace: false ,
24412519 is_constraint: false ,
24422520 name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
@@ -2472,6 +2550,7 @@ fn parse_create_trigger() {
24722550 assert_eq ! (
24732551 create_stmt,
24742552 Statement :: CreateTrigger {
2553+ or_alter: false ,
24752554 or_replace: false ,
24762555 is_constraint: false ,
24772556 name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
0 commit comments