@@ -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