Skip to content

Commit 2699681

Browse files
committed
Extract common implementation for function name & parameters
1 parent 102c4ab commit 2699681

File tree

1 file changed

+23
-32
lines changed

1 file changed

+23
-32
lines changed

src/parser/mod.rs

+23-32
Original file line numberDiff line numberDiff line change
@@ -5062,22 +5062,7 @@ impl<'a> Parser<'a> {
50625062
temporary: bool,
50635063
) -> Result<Statement, ParserError> {
50645064
let if_not_exists = self.parse_keywords(&[Keyword::IF, Keyword::NOT, Keyword::EXISTS]);
5065-
let name = self.parse_object_name(false)?;
5066-
5067-
let parse_function_param =
5068-
|parser: &mut Parser| -> Result<OperateFunctionArg, ParserError> {
5069-
let name = parser.parse_identifier()?;
5070-
let data_type = parser.parse_data_type()?;
5071-
Ok(OperateFunctionArg {
5072-
mode: None,
5073-
name: Some(name),
5074-
data_type,
5075-
default_expr: None,
5076-
})
5077-
};
5078-
self.expect_token(&Token::LParen)?;
5079-
let args = self.parse_comma_separated0(parse_function_param, Token::RParen)?;
5080-
self.expect_token(&Token::RParen)?;
5065+
let (name, args) = self.parse_create_function_name_and_params()?;
50815066

50825067
let return_type = if self.parse_keyword(Keyword::RETURNS) {
50835068
Some(self.parse_data_type()?)
@@ -5152,22 +5137,7 @@ impl<'a> Parser<'a> {
51525137
or_replace: bool,
51535138
temporary: bool,
51545139
) -> Result<Statement, ParserError> {
5155-
let name = self.parse_object_name(false)?;
5156-
5157-
let parse_function_param =
5158-
|parser: &mut Parser| -> Result<OperateFunctionArg, ParserError> {
5159-
let name = parser.parse_identifier()?;
5160-
let data_type = parser.parse_data_type()?;
5161-
Ok(OperateFunctionArg {
5162-
mode: None,
5163-
name: Some(name),
5164-
data_type,
5165-
default_expr: None,
5166-
})
5167-
};
5168-
self.expect_token(&Token::LParen)?;
5169-
let args = self.parse_comma_separated0(parse_function_param, Token::RParen)?;
5170-
self.expect_token(&Token::RParen)?;
5140+
let (name, args) = self.parse_create_function_name_and_params()?;
51715141

51725142
let return_type = if self.parse_keyword(Keyword::RETURNS) {
51735143
Some(self.parse_data_type()?)
@@ -5207,6 +5177,27 @@ impl<'a> Parser<'a> {
52075177
}))
52085178
}
52095179

5180+
fn parse_create_function_name_and_params(
5181+
&mut self,
5182+
) -> Result<(ObjectName, Vec<OperateFunctionArg>), ParserError> {
5183+
let name = self.parse_object_name(false)?;
5184+
let parse_function_param =
5185+
|parser: &mut Parser| -> Result<OperateFunctionArg, ParserError> {
5186+
let name = parser.parse_identifier()?;
5187+
let data_type = parser.parse_data_type()?;
5188+
Ok(OperateFunctionArg {
5189+
mode: None,
5190+
name: Some(name),
5191+
data_type,
5192+
default_expr: None,
5193+
})
5194+
};
5195+
self.expect_token(&Token::LParen)?;
5196+
let args = self.parse_comma_separated0(parse_function_param, Token::RParen)?;
5197+
self.expect_token(&Token::RParen)?;
5198+
Ok((name, args))
5199+
}
5200+
52105201
fn parse_function_arg(&mut self) -> Result<OperateFunctionArg, ParserError> {
52115202
let mode = if self.parse_keyword(Keyword::IN) {
52125203
Some(ArgMode::In)

0 commit comments

Comments
 (0)