Skip to content

Commit eacf00d

Browse files
authored
Add support for parameter default values in SQL Server (#1866)
1 parent 9159d08 commit eacf00d

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

src/parser/mod.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5289,11 +5289,17 @@ impl<'a> Parser<'a> {
52895289
|parser: &mut Parser| -> Result<OperateFunctionArg, ParserError> {
52905290
let name = parser.parse_identifier()?;
52915291
let data_type = parser.parse_data_type()?;
5292+
let default_expr = if parser.consume_token(&Token::Eq) {
5293+
Some(parser.parse_expr()?)
5294+
} else {
5295+
None
5296+
};
5297+
52925298
Ok(OperateFunctionArg {
52935299
mode: None,
52945300
name: Some(name),
52955301
data_type,
5296-
default_expr: None,
5302+
default_expr,
52975303
})
52985304
};
52995305
self.expect_token(&Token::LParen)?;

tests/sqlparser_mssql.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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]
381421
fn parse_mssql_apply_join() {
382422
let _ = ms_and_generic().verified_only_select(

0 commit comments

Comments
 (0)