(ctx: CtxRef, input: ParseStream)
| 121 | } |
| 122 | |
| 123 | fn parse_constant(ctx: CtxRef, input: ParseStream) -> Result { |
| 124 | let constant = input.parse::<kw::Constant>()?; |
| 125 | |
| 126 | let parse_typ = |input: ParseStream| -> syn::Result<ReprRelationType> { |
| 127 | let analyses = analyses::parse_analyses(input)?; |
| 128 | let Some(column_types) = analyses.types else { |
| 129 | let msg = "Missing expected `types` analyses for Constant line"; |
| 130 | Err(Error::new(input.span(), msg))? |
| 131 | }; |
| 132 | let keys = analyses.keys.unwrap_or_default(); |
| 133 | Ok(ReprRelationType::new(column_types).with_keys(keys)) |
| 134 | }; |
| 135 | if input.eat3(syn::Token![<], kw::empty, syn::Token![>]) { |
| 136 | let typ = parse_typ(input)?; |
| 137 | Ok(MirRelationExpr::Constant { |
| 138 | rows: Ok(vec![]), |
| 139 | typ, |
| 140 | }) |
| 141 | } else { |
| 142 | let typ = parse_typ(input)?; |
| 143 | let parse_children = ParseChildren::new(input, constant.span().start()); |
| 144 | let rows = Ok(parse_children.parse_many(ctx, parse_constant_entry)?); |
| 145 | Ok(MirRelationExpr::Constant { rows, typ }) |
| 146 | } |
| 147 | } |
| 148 | |
| 149 | fn parse_constant_entry(_ctx: CtxRef, input: ParseStream) -> syn::Result<(Row, Diff)> { |
| 150 | input.parse::<syn::Token![-]>()?; |
no test coverage detected