@@ -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,25 @@ impl<'a> Parser<'a> {
52145184 }))
52155185 }
52165186
5187+ fn parse_create_function_name_and_params(&mut self) -> Result<(ObjectName, Vec<OperateFunctionArg>), ParserError> {
5188+ let name = self.parse_object_name(false)?;
5189+ let parse_function_param =
5190+ |parser: &mut Parser| -> Result<OperateFunctionArg, ParserError> {
5191+ let name = parser.parse_identifier()?;
5192+ let data_type = parser.parse_data_type()?;
5193+ Ok(OperateFunctionArg {
5194+ mode: None,
5195+ name: Some(name),
5196+ data_type,
5197+ default_expr: None,
5198+ })
5199+ };
5200+ self.expect_token(&Token::LParen)?;
5201+ let args = self.parse_comma_separated0(parse_function_param, Token::RParen)?;
5202+ self.expect_token(&Token::RParen)?;
5203+ Ok((name, args))
5204+ }
5205+
52175206 fn parse_function_arg(&mut self) -> Result<OperateFunctionArg, ParserError> {
52185207 let mode = if self.parse_keyword(Keyword::IN) {
52195208 Some(ArgMode::In)
0 commit comments