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