MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / parse_constant

Function parse_constant

src/expr-parser/src/parser.rs:123–147  ·  view source on GitHub ↗
(ctx: CtxRef, input: ParseStream)

Source from the content-addressed store, hash-verified

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![-]>()?;

Callers 1

parse_exprFunction · 0.85

Calls 6

parse_analysesFunction · 0.85
spanMethod · 0.80
with_keysMethod · 0.80
eat3Method · 0.80
parse_manyMethod · 0.80
startMethod · 0.45

Tested by

no test coverage detected