@@ -5210,33 +5210,40 @@ impl<'a> Parser<'a> {
52105210
52115211 let return_table = self.maybe_parse(|p| {
52125212 let return_table_name = p.parse_identifier()?;
5213- let table_column_defs = if p.peek_keyword(Keyword::TABLE) {
5214- match p.parse_data_type()? {
5215- DataType::Table(t) => t,
5216- _ => parser_err!(
5217- "Expected table data type after TABLE keyword",
5218- p.peek_token().span.start
5219- )?,
5220- }
5221- } else {
5213+
5214+ if !p.peek_keyword(Keyword::TABLE) {
52225215 parser_err!(
52235216 "Expected TABLE keyword after return type",
52245217 p.peek_token().span.start
52255218 )?
5226- };
5219+ }
52275220
5228- if table_column_defs.is_none()
5229- || table_column_defs.clone().is_some_and(|tcd| tcd.is_empty())
5230- {
5231- parser_err!(
5232- "Expected table column definitions after TABLE keyword",
5221+ let table_column_defs = match p.parse_data_type()? {
5222+ DataType::Table(maybe_table_column_defs) => match maybe_table_column_defs {
5223+ Some(table_column_defs) => {
5224+ if table_column_defs.is_empty() {
5225+ parser_err!(
5226+ "Expected table column definitions after TABLE keyword",
5227+ p.peek_token().span.start
5228+ )?
5229+ }
5230+
5231+ table_column_defs
5232+ }
5233+ None => parser_err!(
5234+ "Expected table column definitions after TABLE keyword",
5235+ p.peek_token().span.start
5236+ )?,
5237+ },
5238+ _ => parser_err!(
5239+ "Expected table data type after TABLE keyword",
52335240 p.peek_token().span.start
5234- )?
5235- }
5241+ )?,
5242+ };
52365243
52375244 Ok(DataType::NamedTable(
52385245 ObjectName(vec![ObjectNamePart::Identifier(return_table_name)]),
5239- table_column_defs.clone().unwrap() ,
5246+ table_column_defs,
52405247 ))
52415248 })?;
52425249
0 commit comments