@@ -5207,15 +5207,26 @@ impl<'a> Parser<'a> {
5207
5207
5208
5208
self.expect_keyword_is(Keyword::AS)?;
5209
5209
5210
- let begin_token = self.expect_keyword(Keyword::BEGIN)?;
5211
- let statements = self.parse_statement_list(&[Keyword::END])?;
5212
- let end_token = self.expect_keyword(Keyword::END)?;
5210
+ let function_body = if self.peek_keyword(Keyword::BEGIN) {
5211
+ let begin_token = self.expect_keyword(Keyword::BEGIN)?;
5212
+ let statements = self.parse_statement_list(&[Keyword::END])?;
5213
+ let end_token = self.expect_keyword(Keyword::END)?;
5213
5214
5214
- let function_body = Some(CreateFunctionBody::AsBeginEnd(BeginEndStatements {
5215
- begin_token: AttachedToken(begin_token),
5216
- statements,
5217
- end_token: AttachedToken(end_token),
5218
- }));
5215
+ Some(CreateFunctionBody::AsBeginEnd(BeginEndStatements {
5216
+ begin_token: AttachedToken(begin_token),
5217
+ statements,
5218
+ end_token: AttachedToken(end_token),
5219
+ }))
5220
+ } else if self.peek_keyword(Keyword::RETURN) {
5221
+ self.expect_keyword(Keyword::RETURN)?;
5222
+ let expr = self.parse_expr()?;
5223
+ if !matches!(expr, Expr::Subquery(_)) {
5224
+ parser_err!("Expected a subquery after RETURN", expr.span().start)?;
5225
+ }
5226
+ Some(CreateFunctionBody::AsReturn(expr))
5227
+ } else {
5228
+ parser_err!("Unparsable function body", self.peek_token().span.start)?
5229
+ };
5219
5230
5220
5231
Ok(Statement::CreateFunction(CreateFunction {
5221
5232
or_alter,
@@ -9766,8 +9777,12 @@ impl<'a> Parser<'a> {
9766
9777
Ok(DataType::AnyType)
9767
9778
}
9768
9779
Keyword::TABLE => {
9769
- let columns = self.parse_returns_table_columns()?;
9770
- Ok(DataType::Table(columns))
9780
+ if self.peek_keyword(Keyword::AS) {
9781
+ Ok(DataType::Table(Vec::<ColumnDef>::new()))
9782
+ } else {
9783
+ let columns = self.parse_returns_table_columns()?;
9784
+ Ok(DataType::Table(columns))
9785
+ }
9771
9786
}
9772
9787
Keyword::SIGNED => {
9773
9788
if self.parse_keyword(Keyword::INTEGER) {
0 commit comments