@@ -377,6 +377,46 @@ fn parse_create_function() {
377377 ) ;
378378}
379379
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+
380420#[ test]
381421fn parse_mssql_apply_join ( ) {
382422 let _ = ms_and_generic ( ) . verified_only_select (
0 commit comments