@@ -5062,22 +5062,7 @@ impl<'a> Parser<'a> {
5062
5062
temporary: bool,
5063
5063
) -> Result<Statement, ParserError> {
5064
5064
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()?;
5081
5066
5082
5067
let return_type = if self.parse_keyword(Keyword::RETURNS) {
5083
5068
Some(self.parse_data_type()?)
@@ -5152,22 +5137,7 @@ impl<'a> Parser<'a> {
5152
5137
or_replace: bool,
5153
5138
temporary: bool,
5154
5139
) -> 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()?;
5171
5141
5172
5142
let return_type = if self.parse_keyword(Keyword::RETURNS) {
5173
5143
Some(self.parse_data_type()?)
@@ -5207,6 +5177,27 @@ impl<'a> Parser<'a> {
5207
5177
}))
5208
5178
}
5209
5179
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
+
5210
5201
fn parse_function_arg(&mut self) -> Result<OperateFunctionArg, ParserError> {
5211
5202
let mode = if self.parse_keyword(Keyword::IN) {
5212
5203
Some(ArgMode::In)
0 commit comments