@@ -2263,3 +2263,118 @@ fn parse_mssql_merge_with_output() {
22632263 OUTPUT $action, deleted.ProductID INTO dsi.temp_products";
22642264 ms_and_generic ( ) . verified_stmt ( stmt) ;
22652265}
2266+
2267+ #[ test]
2268+ fn parse_create_trigger ( ) {
2269+ let create_trigger = r#"
2270+ CREATE TRIGGER reminder1
2271+ ON Sales.Customer
2272+ AFTER INSERT, UPDATE
2273+ AS RAISERROR ('Notify Customer Relations', 16, 10);
2274+ "# ;
2275+ let create_stmt = ms ( ) . one_statement_parses_to ( create_trigger, "" ) ;
2276+ assert_eq ! (
2277+ create_stmt,
2278+ Statement :: CreateTrigger {
2279+ or_replace: false ,
2280+ is_constraint: false ,
2281+ name: ObjectName :: from( vec![ Ident :: new( "reminder1" ) ] ) ,
2282+ period: TriggerPeriod :: After ,
2283+ events: vec![
2284+ TriggerEvent :: Insert ,
2285+ TriggerEvent :: Update ( vec![ ] ) ,
2286+ ] ,
2287+ table_name: ObjectName :: from( vec![ Ident :: new( "Sales" ) , Ident :: new( "Customer" ) ] ) ,
2288+ referenced_table_name: None ,
2289+ referencing: vec![ ] ,
2290+ trigger_object: TriggerObject :: Statement ,
2291+ include_each: false ,
2292+ condition: None ,
2293+ exec_body: None ,
2294+ statements: vec![ Statement :: RaisError {
2295+ message: Box :: new( Expr :: Value (
2296+ ( Value :: SingleQuotedString ( "Notify Customer Relations" . to_string( ) ) ) . with_empty_span( )
2297+ ) ) ,
2298+ severity: Box :: new( Expr :: Value (
2299+ ( Value :: Number ( "16" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2300+ ) ) ,
2301+ state: Box :: new( Expr :: Value (
2302+ ( Value :: Number ( "10" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2303+ ) ) ,
2304+ arguments: vec![ ] ,
2305+ options: vec![ ] ,
2306+ } ] ,
2307+ characteristics: None ,
2308+ }
2309+ ) ;
2310+
2311+ let multi_statement_trigger = r#"
2312+ CREATE TRIGGER some_trigger ON some_table FOR INSERT
2313+ AS
2314+ BEGIN
2315+ RAISERROR('Trigger fired', 10, 1);
2316+ END
2317+ "# ;
2318+ let create_stmt = ms ( ) . one_statement_parses_to ( multi_statement_trigger, "" ) ;
2319+ assert_eq ! (
2320+ create_stmt,
2321+ Statement :: CreateTrigger {
2322+ or_replace: false ,
2323+ is_constraint: false ,
2324+ name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
2325+ period: TriggerPeriod :: For ,
2326+ events: vec![ TriggerEvent :: Insert ] ,
2327+ table_name: ObjectName :: from( vec![ Ident :: new( "some_table" ) ] ) ,
2328+ referenced_table_name: None ,
2329+ referencing: vec![ ] ,
2330+ trigger_object: TriggerObject :: Statement ,
2331+ include_each: false ,
2332+ condition: None ,
2333+ exec_body: None ,
2334+ statements: vec![ Statement :: RaisError {
2335+ message: Box :: new( Expr :: Value (
2336+ ( Value :: SingleQuotedString ( "Trigger fired" . to_string( ) ) ) . with_empty_span( )
2337+ ) ) ,
2338+ severity: Box :: new( Expr :: Value (
2339+ ( Value :: Number ( "10" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2340+ ) ) ,
2341+ state: Box :: new( Expr :: Value (
2342+ ( Value :: Number ( "1" . parse( ) . unwrap( ) , false ) ) . with_empty_span( )
2343+ ) ) ,
2344+ arguments: vec![ ] ,
2345+ options: vec![ ] ,
2346+ } ] ,
2347+ characteristics: None ,
2348+ }
2349+ ) ;
2350+
2351+ let create_trigger_with_return = r#"
2352+ CREATE TRIGGER some_trigger ON some_table FOR INSERT
2353+ AS
2354+ BEGIN
2355+ RETURN;
2356+ END
2357+ "# ;
2358+ let create_stmt = ms ( ) . one_statement_parses_to ( create_trigger_with_return, "" ) ;
2359+ assert_eq ! (
2360+ create_stmt,
2361+ Statement :: CreateTrigger {
2362+ or_replace: false ,
2363+ is_constraint: false ,
2364+ name: ObjectName :: from( vec![ Ident :: new( "some_trigger" ) ] ) ,
2365+ period: TriggerPeriod :: For ,
2366+ events: vec![ TriggerEvent :: Insert ] ,
2367+ table_name: ObjectName :: from( vec![ Ident :: new( "some_table" ) ] ) ,
2368+ referenced_table_name: None ,
2369+ referencing: vec![ ] ,
2370+ trigger_object: TriggerObject :: Statement ,
2371+ include_each: false ,
2372+ condition: None ,
2373+ exec_body: None ,
2374+ statements: vec![ Statement :: Return ( ReturnStatement {
2375+ value: None ,
2376+ } ) ] ,
2377+ characteristics: None ,
2378+ }
2379+ ) ;
2380+ }
0 commit comments