@@ -5069,22 +5069,7 @@ impl<'a> Parser<'a> {
5069
5069
temporary: bool,
5070
5070
) -> Result<Statement, ParserError> {
5071
5071
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()?;
5088
5073
5089
5074
let return_type = if self.parse_keyword(Keyword::RETURNS) {
5090
5075
Some(self.parse_data_type()?)
@@ -5159,22 +5144,7 @@ impl<'a> Parser<'a> {
5159
5144
or_replace: bool,
5160
5145
temporary: bool,
5161
5146
) -> 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()?;
5178
5148
5179
5149
let return_type = if self.parse_keyword(Keyword::RETURNS) {
5180
5150
Some(self.parse_data_type()?)
@@ -5214,6 +5184,27 @@ impl<'a> Parser<'a> {
5214
5184
}))
5215
5185
}
5216
5186
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
+
5217
5208
fn parse_function_arg(&mut self) -> Result<OperateFunctionArg, ParserError> {
5218
5209
let mode = if self.parse_keyword(Keyword::IN) {
5219
5210
Some(ArgMode::In)
0 commit comments