@@ -16600,7 +16600,8 @@ fn parse_create_procedure_with_parameter_modes() {
1660016600 span: fake_span,
1660116601 },
1660216602 data_type: DataType::Integer(None),
16603- mode: Some(ArgMode::In)
16603+ mode: Some(ArgMode::In),
16604+ default: None,
1660416605 },
1660516606 ProcedureParam {
1660616607 name: Ident {
@@ -16609,7 +16610,8 @@ fn parse_create_procedure_with_parameter_modes() {
1660916610 span: fake_span,
1661016611 },
1661116612 data_type: DataType::Text,
16612- mode: Some(ArgMode::Out)
16613+ mode: Some(ArgMode::Out),
16614+ default: None,
1661316615 },
1661416616 ProcedureParam {
1661516617 name: Ident {
@@ -16618,7 +16620,8 @@ fn parse_create_procedure_with_parameter_modes() {
1661816620 span: fake_span,
1661916621 },
1662016622 data_type: DataType::Timestamp(None, TimezoneInfo::None),
16621- mode: Some(ArgMode::InOut)
16623+ mode: Some(ArgMode::InOut),
16624+ default: None,
1662216625 },
1662316626 ProcedureParam {
1662416627 name: Ident {
@@ -16627,7 +16630,8 @@ fn parse_create_procedure_with_parameter_modes() {
1662716630 span: fake_span,
1662816631 },
1662916632 data_type: DataType::Bool,
16630- mode: None
16633+ mode: None,
16634+ default: None,
1663116635 },
1663216636 ])
1663316637 );
@@ -16636,6 +16640,40 @@ fn parse_create_procedure_with_parameter_modes() {
1663616640 }
1663716641}
1663816642
16643+ #[test]
16644+ fn create_procedure_with_parameter_default_value() {
16645+ let sql = r#"CREATE PROCEDURE test_proc (a INT = 42) AS BEGIN SELECT 1; END"#;
16646+ match verified_stmt(sql) {
16647+ Statement::CreateProcedure {
16648+ or_alter,
16649+ name,
16650+ params,
16651+ ..
16652+ } => {
16653+ assert_eq!(or_alter, false);
16654+ assert_eq!(name.to_string(), "test_proc");
16655+ let fake_span = Span {
16656+ start: Location { line: 0, column: 0 },
16657+ end: Location { line: 0, column: 0 },
16658+ };
16659+ assert_eq!(
16660+ params,
16661+ Some(vec![ProcedureParam {
16662+ name: Ident {
16663+ value: "a".into(),
16664+ quote_style: None,
16665+ span: fake_span,
16666+ },
16667+ data_type: DataType::Int(None),
16668+ mode: None,
16669+ default: Some(Expr::Value((number("42")).with_empty_span())),
16670+ },])
16671+ );
16672+ }
16673+ _ => unreachable!(),
16674+ }
16675+ }
16676+
1663916677#[test]
1664016678fn parse_not_null() {
1664116679 let _ = all_dialects().expr_parses_to("x NOT NULL", "x IS NOT NULL");
0 commit comments