@@ -5206,33 +5206,40 @@ impl<'a> Parser<'a> {
52065206
52075207 let return_table = self.maybe_parse(|p| {
52085208 let return_table_name = p.parse_identifier()?;
5209- let table_column_defs = if p.peek_keyword(Keyword::TABLE) {
5210- match p.parse_data_type()? {
5211- DataType::Table(t) => t,
5212- _ => parser_err!(
5213- "Expected table data type after TABLE keyword",
5214- p.peek_token().span.start
5215- )?,
5216- }
5217- } else {
5209+
5210+ if !p.peek_keyword(Keyword::TABLE) {
52185211 parser_err!(
52195212 "Expected TABLE keyword after return type",
52205213 p.peek_token().span.start
52215214 )?
5222- };
5215+ }
52235216
5224- if table_column_defs.is_none()
5225- || table_column_defs.clone().is_some_and(|tcd| tcd.is_empty())
5226- {
5227- parser_err!(
5228- "Expected table column definitions after TABLE keyword",
5217+ let table_column_defs = match p.parse_data_type()? {
5218+ DataType::Table(maybe_table_column_defs) => match maybe_table_column_defs {
5219+ Some(table_column_defs) => {
5220+ if table_column_defs.is_empty() {
5221+ parser_err!(
5222+ "Expected table column definitions after TABLE keyword",
5223+ p.peek_token().span.start
5224+ )?
5225+ }
5226+
5227+ table_column_defs
5228+ }
5229+ None => parser_err!(
5230+ "Expected table column definitions after TABLE keyword",
5231+ p.peek_token().span.start
5232+ )?,
5233+ },
5234+ _ => parser_err!(
5235+ "Expected table data type after TABLE keyword",
52295236 p.peek_token().span.start
5230- )?
5231- }
5237+ )?,
5238+ };
52325239
52335240 Ok(DataType::NamedTable(
52345241 ObjectName(vec![ObjectNamePart::Identifier(return_table_name)]),
5235- table_column_defs.clone().unwrap() ,
5242+ table_column_defs,
52365243 ))
52375244 })?;
52385245
0 commit comments