@@ -5211,15 +5211,26 @@ impl<'a> Parser<'a> {
52115211
52125212 self.expect_keyword_is(Keyword::AS)?;
52135213
5214- let begin_token = self.expect_keyword(Keyword::BEGIN)?;
5215- let statements = self.parse_statement_list(&[Keyword::END])?;
5216- let end_token = self.expect_keyword(Keyword::END)?;
5214+ let function_body = if self.peek_keyword(Keyword::BEGIN) {
5215+ let begin_token = self.expect_keyword(Keyword::BEGIN)?;
5216+ let statements = self.parse_statement_list(&[Keyword::END])?;
5217+ let end_token = self.expect_keyword(Keyword::END)?;
52175218
5218- let function_body = Some(CreateFunctionBody::AsBeginEnd(BeginEndStatements {
5219- begin_token: AttachedToken(begin_token),
5220- statements,
5221- end_token: AttachedToken(end_token),
5222- }));
5219+ Some(CreateFunctionBody::AsBeginEnd(BeginEndStatements {
5220+ begin_token: AttachedToken(begin_token),
5221+ statements,
5222+ end_token: AttachedToken(end_token),
5223+ }))
5224+ } else if self.peek_keyword(Keyword::RETURN) {
5225+ self.expect_keyword(Keyword::RETURN)?;
5226+ let expr = self.parse_expr()?;
5227+ if !matches!(expr, Expr::Subquery(_)) {
5228+ parser_err!("Expected a subquery after RETURN", expr.span().start)?;
5229+ }
5230+ Some(CreateFunctionBody::AsReturn(expr))
5231+ } else {
5232+ parser_err!("Unparsable function body", self.peek_token().span.start)?
5233+ };
52235234
52245235 Ok(Statement::CreateFunction(CreateFunction {
52255236 or_alter,
@@ -9787,8 +9798,12 @@ impl<'a> Parser<'a> {
97879798 Ok(DataType::AnyType)
97889799 }
97899800 Keyword::TABLE => {
9790- let columns = self.parse_returns_table_columns()?;
9791- Ok(DataType::Table(columns))
9801+ if self.peek_keyword(Keyword::AS) {
9802+ Ok(DataType::Table(Vec::<ColumnDef>::new()))
9803+ } else {
9804+ let columns = self.parse_returns_table_columns()?;
9805+ Ok(DataType::Table(columns))
9806+ }
97929807 }
97939808 Keyword::SIGNED => {
97949809 if self.parse_keyword(Keyword::INTEGER) {
0 commit comments