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

Function parse_def_source

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

Source from the content-addressed store, hash-verified

1435 }
1436
1437 fn parse_def_source(ctx: CtxRef, input: ParseStream) -> syn::Result<Def> {
1438 let reduce = input.parse::<def::DefSource>()?;
1439
1440 let name = {
1441 input.parse::<def::name>()?;
1442 input.parse::<syn::Token![=]>()?;
1443 input.parse::<syn::Ident>()?.to_string()
1444 };
1445
1446 let keys = if input.eat(kw::keys) {
1447 input.parse::<syn::Token![=]>()?;
1448 let inner;
1449 syn::bracketed!(inner in input);
1450 inner.parse_comma_sep(|input| {
1451 let inner;
1452 syn::bracketed!(inner in input);
1453 inner.parse_comma_sep(scalar::parse_column_index)
1454 })?
1455 } else {
1456 vec![]
1457 };
1458
1459 let parse_inputs = ParseChildren::new(input, reduce.span().start());
1460 let (cols, column_types) = {
1461 let source_columns = parse_inputs.parse_many(ctx, parse_def_source_column)?;
1462 let mut column_names = vec![];
1463 let mut column_types = vec![];
1464 for (column_name, column_type) in source_columns {
1465 column_names.push(column_name);
1466 column_types.push(column_type);
1467 }
1468 (column_names, column_types)
1469 };
1470
1471 let typ = SqlRelationType { column_types, keys };
1472
1473 Ok(Def::Source { name, cols, typ })
1474 }
1475
1476 fn parse_def_source_column(
1477 _ctx: CtxRef,

Callers 1

parse_defFunction · 0.85

Calls 7

eatMethod · 0.80
parse_comma_sepMethod · 0.80
spanMethod · 0.80
parse_manyMethod · 0.80
to_stringMethod · 0.45
startMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected