@@ -377,6 +377,46 @@ fn parse_create_function() {
377
377
) ;
378
378
}
379
379
380
+ #[ test]
381
+ fn parse_create_function_parameter_default_values ( ) {
382
+ let single_default_sql =
383
+ "CREATE FUNCTION test_func(@param1 INT = 42) RETURNS INT AS BEGIN RETURN @param1; END" ;
384
+ assert_eq ! (
385
+ ms( ) . verified_stmt( single_default_sql) ,
386
+ Statement :: CreateFunction ( CreateFunction {
387
+ or_alter: false ,
388
+ or_replace: false ,
389
+ temporary: false ,
390
+ if_not_exists: false ,
391
+ name: ObjectName :: from( vec![ Ident :: new( "test_func" ) ] ) ,
392
+ args: Some ( vec![ OperateFunctionArg {
393
+ mode: None ,
394
+ name: Some ( Ident :: new( "@param1" ) ) ,
395
+ data_type: DataType :: Int ( None ) ,
396
+ default_expr: Some ( Expr :: Value ( ( number( "42" ) ) . with_empty_span( ) ) ) ,
397
+ } , ] ) ,
398
+ return_type: Some ( DataType :: Int ( None ) ) ,
399
+ function_body: Some ( CreateFunctionBody :: AsBeginEnd ( BeginEndStatements {
400
+ begin_token: AttachedToken :: empty( ) ,
401
+ statements: vec![ Statement :: Return ( ReturnStatement {
402
+ value: Some ( ReturnStatementValue :: Expr ( Expr :: Identifier ( Ident :: new(
403
+ "@param1"
404
+ ) ) ) ) ,
405
+ } ) ] ,
406
+ end_token: AttachedToken :: empty( ) ,
407
+ } ) ) ,
408
+ behavior: None ,
409
+ called_on_null: None ,
410
+ parallel: None ,
411
+ using: None ,
412
+ language: None ,
413
+ determinism_specifier: None ,
414
+ options: None ,
415
+ remote_connection: None ,
416
+ } ) ,
417
+ ) ;
418
+ }
419
+
380
420
#[ test]
381
421
fn parse_mssql_apply_join ( ) {
382
422
let _ = ms_and_generic ( ) . verified_only_select (
0 commit comments