@@ -2263,3 +2263,118 @@ fn parse_mssql_merge_with_output() {
2263
2263
OUTPUT $action, deleted.ProductID INTO dsi.temp_products";
2264
2264
ms_and_generic ( ) . verified_stmt ( stmt) ;
2265
2265
}
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