@@ -5208,15 +5208,26 @@ impl<'a> Parser<'a> {
52085208
52095209 self.expect_keyword_is(Keyword::AS)?;
52105210
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)?;
5211+ let function_body = if self.peek_keyword(Keyword::BEGIN) {
5212+ let begin_token = self.expect_keyword(Keyword::BEGIN)?;
5213+ let statements = self.parse_statement_list(&[Keyword::END])?;
5214+ let end_token = self.expect_keyword(Keyword::END)?;
52145215
5215- let function_body = Some(CreateFunctionBody::AsBeginEnd(BeginEndStatements {
5216- begin_token: AttachedToken(begin_token),
5217- statements,
5218- end_token: AttachedToken(end_token),
5219- }));
5216+ Some(CreateFunctionBody::AsBeginEnd(BeginEndStatements {
5217+ begin_token: AttachedToken(begin_token),
5218+ statements,
5219+ end_token: AttachedToken(end_token),
5220+ }))
5221+ } else if self.peek_keyword(Keyword::RETURN) {
5222+ self.expect_keyword(Keyword::RETURN)?;
5223+ let expr = self.parse_expr()?;
5224+ if !matches!(expr, Expr::Subquery(_)) {
5225+ parser_err!("Expected a subquery after RETURN", expr.span().start)?;
5226+ }
5227+ Some(CreateFunctionBody::AsReturn(expr))
5228+ } else {
5229+ parser_err!("Unparsable function body", self.peek_token().span.start)?
5230+ };
52205231
52215232 Ok(Statement::CreateFunction(CreateFunction {
52225233 or_alter,
@@ -9784,8 +9795,12 @@ impl<'a> Parser<'a> {
97849795 Ok(DataType::AnyType)
97859796 }
97869797 Keyword::TABLE => {
9787- let columns = self.parse_returns_table_columns()?;
9788- Ok(DataType::Table(columns))
9798+ if self.peek_keyword(Keyword::AS) {
9799+ Ok(DataType::Table(Vec::<ColumnDef>::new()))
9800+ } else {
9801+ let columns = self.parse_returns_table_columns()?;
9802+ Ok(DataType::Table(columns))
9803+ }
97899804 }
97909805 Keyword::SIGNED => {
97919806 if self.parse_keyword(Keyword::INTEGER) {
0 commit comments