@@ -16505,7 +16505,8 @@ fn parse_create_procedure_with_parameter_modes() {
1650516505 span: fake_span,
1650616506 },
1650716507 data_type: DataType::Integer(None),
16508- mode: Some(ArgMode::In)
16508+ mode: Some(ArgMode::In),
16509+ default: None,
1650916510 },
1651016511 ProcedureParam {
1651116512 name: Ident {
@@ -16514,7 +16515,8 @@ fn parse_create_procedure_with_parameter_modes() {
1651416515 span: fake_span,
1651516516 },
1651616517 data_type: DataType::Text,
16517- mode: Some(ArgMode::Out)
16518+ mode: Some(ArgMode::Out),
16519+ default: None,
1651816520 },
1651916521 ProcedureParam {
1652016522 name: Ident {
@@ -16523,7 +16525,8 @@ fn parse_create_procedure_with_parameter_modes() {
1652316525 span: fake_span,
1652416526 },
1652516527 data_type: DataType::Timestamp(None, TimezoneInfo::None),
16526- mode: Some(ArgMode::InOut)
16528+ mode: Some(ArgMode::InOut),
16529+ default: None,
1652716530 },
1652816531 ProcedureParam {
1652916532 name: Ident {
@@ -16532,13 +16535,60 @@ fn parse_create_procedure_with_parameter_modes() {
1653216535 span: fake_span,
1653316536 },
1653416537 data_type: DataType::Bool,
16535- mode: None
16538+ mode: None,
16539+ default: None,
1653616540 },
1653716541 ])
1653816542 );
1653916543 }
1654016544 _ => unreachable!(),
1654116545 }
16546+
16547+ // parameters with default values
16548+ let sql = r#"CREATE PROCEDURE test_proc (IN a INTEGER = 1, OUT b TEXT = '2', INOUT c TIMESTAMP = NULL, d BOOL = 0) AS BEGIN SELECT 1; END"#;
16549+ match verified_stmt(sql) {
16550+ Statement::CreateProcedure {
16551+ or_alter,
16552+ name,
16553+ params,
16554+ ..
16555+ } => {
16556+ assert_eq!(or_alter, false);
16557+ assert_eq!(name.to_string(), "test_proc");
16558+ assert_eq!(
16559+ params,
16560+ Some(vec![
16561+ ProcedureParam {
16562+ name: Ident::new("a"),
16563+ data_type: DataType::Integer(None),
16564+ mode: Some(ArgMode::In),
16565+ default: Some(Expr::Value((number("1")).with_empty_span())),
16566+ },
16567+ ProcedureParam {
16568+ name: Ident::new("b"),
16569+ data_type: DataType::Text,
16570+ mode: Some(ArgMode::Out),
16571+ default: Some(Expr::Value(
16572+ Value::SingleQuotedString("2".into()).with_empty_span()
16573+ )),
16574+ },
16575+ ProcedureParam {
16576+ name: Ident::new("c"),
16577+ data_type: DataType::Timestamp(None, TimezoneInfo::None),
16578+ mode: Some(ArgMode::InOut),
16579+ default: Some(Expr::Value(Value::Null.with_empty_span())),
16580+ },
16581+ ProcedureParam {
16582+ name: Ident::new("d"),
16583+ data_type: DataType::Bool,
16584+ mode: None,
16585+ default: Some(Expr::Value((number("0")).with_empty_span())),
16586+ }
16587+ ]),
16588+ );
16589+ }
16590+ _ => unreachable!(),
16591+ }
1654216592}
1654316593
1654416594#[test]
0 commit comments