Skip to content

Commit 9954416

Browse files
committed
Extract common implementation for function name & parameters
1 parent e582607 commit 9954416

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
@@ -5069,22 +5069,7 @@ impl<'a> Parser<'a> {
50695069
temporary: bool,
50705070
) -> Result<Statement, ParserError> {
50715071
let if_not_exists = self.parse_keywords(&[Keyword::IF, Keyword::NOT, Keyword::EXISTS]);
5072-
let name = self.parse_object_name(false)?;
5073-
5074-
let parse_function_param =
5075-
|parser: &mut Parser| -> Result<OperateFunctionArg, ParserError> {
5076-
let name = parser.parse_identifier()?;
5077-
let data_type = parser.parse_data_type()?;
5078-
Ok(OperateFunctionArg {
5079-
mode: None,
5080-
name: Some(name),
5081-
data_type,
5082-
default_expr: None,
5083-
})
5084-
};
5085-
self.expect_token(&Token::LParen)?;
5086-
let args = self.parse_comma_separated0(parse_function_param, Token::RParen)?;
5087-
self.expect_token(&Token::RParen)?;
5072+
let (name, args) = self.parse_create_function_name_and_params()?;
50885073

50895074
let return_type = if self.parse_keyword(Keyword::RETURNS) {
50905075
Some(self.parse_data_type()?)
@@ -5159,22 +5144,7 @@ impl<'a> Parser<'a> {
51595144
or_replace: bool,
51605145
temporary: bool,
51615146
) -> Result<Statement, ParserError> {
5162-
let name = self.parse_object_name(false)?;
5163-
5164-
let parse_function_param =
5165-
|parser: &mut Parser| -> Result<OperateFunctionArg, ParserError> {
5166-
let name = parser.parse_identifier()?;
5167-
let data_type = parser.parse_data_type()?;
5168-
Ok(OperateFunctionArg {
5169-
mode: None,
5170-
name: Some(name),
5171-
data_type,
5172-
default_expr: None,
5173-
})
5174-
};
5175-
self.expect_token(&Token::LParen)?;
5176-
let args = self.parse_comma_separated0(parse_function_param, Token::RParen)?;
5177-
self.expect_token(&Token::RParen)?;
5147+
let (name, args) = self.parse_create_function_name_and_params()?;
51785148

51795149
let return_type = if self.parse_keyword(Keyword::RETURNS) {
51805150
Some(self.parse_data_type()?)
@@ -5214,6 +5184,27 @@ impl<'a> Parser<'a> {
52145184
}))
52155185
}
52165186

5187+
fn parse_create_function_name_and_params(
5188+
&mut self,
5189+
) -> Result<(ObjectName, Vec<OperateFunctionArg>), ParserError> {
5190+
let name = self.parse_object_name(false)?;
5191+
let parse_function_param =
5192+
|parser: &mut Parser| -> Result<OperateFunctionArg, ParserError> {
5193+
let name = parser.parse_identifier()?;
5194+
let data_type = parser.parse_data_type()?;
5195+
Ok(OperateFunctionArg {
5196+
mode: None,
5197+
name: Some(name),
5198+
data_type,
5199+
default_expr: None,
5200+
})
5201+
};
5202+
self.expect_token(&Token::LParen)?;
5203+
let args = self.parse_comma_separated0(parse_function_param, Token::RParen)?;
5204+
self.expect_token(&Token::RParen)?;
5205+
Ok((name, args))
5206+
}
5207+
52175208
fn parse_function_arg(&mut self) -> Result<OperateFunctionArg, ParserError> {
52185209
let mode = if self.parse_keyword(Keyword::IN) {
52195210
Some(ArgMode::In)

0 commit comments

Comments
 (0)