@@ -5207,15 +5207,26 @@ impl<'a> Parser<'a> {
52075207
52085208 self.expect_keyword_is(Keyword::AS)?;
52095209
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)?;
52135214
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+ };
52195230
52205231 Ok(Statement::CreateFunction(CreateFunction {
52215232 or_alter,
@@ -9766,8 +9777,12 @@ impl<'a> Parser<'a> {
97669777 Ok(DataType::AnyType)
97679778 }
97689779 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+ }
97719786 }
97729787 Keyword::SIGNED => {
97739788 if self.parse_keyword(Keyword::INTEGER) {
0 commit comments