MCPcopy Create free account
hub / github.com/cosdata/cosdata / query

Function query

org/src/cosql.rs:363–422  ·  view source on GitHub ↗
(input: &str)

Source from the content-addressed store, hash-verified

361use either::Either;
362
363fn query(input: &str) -> IResult<&str, Query> {
364 println!("Attempting to parse query");
365 println!("Input: {:?}", input);
366
367 // Define a parser for either patterns or conditions
368 let pattern_or_condition = alt((
369 map(entity_pattern, |p| (p, None)),
370 map(relationship_pattern, |p| (p, None)),
371 map(condition, |c| (Pattern::Condition(c), None)),
372 ));
373
374 // Parse a list of patterns and/or conditions
375 let (input, patterns_and_conditions) =
376 separated_list0(ws(char(',')), pattern_or_condition)(input)?;
377
378 // Separate patterns and conditions from the combined list
379 let mut patterns = Vec::new();
380 let mut conditions = Vec::new();
381
382 for (pattern, condition) in patterns_and_conditions {
383 if let Some(cond) = condition {
384 conditions.push(cond);
385 } else {
386 patterns.push(pattern);
387 }
388 }
389 println!("Parsed patterns: {:?}", patterns);
390 println!("Remaining input: {:?}", input);
391
392 // Parse "get" keyword
393 let get_result = ws(tag("get"))(input);
394 println!("Parsing 'get': {:?}", get_result);
395 let (input, _) = get_result?;
396 println!("Matched 'get' keyword");
397 println!("Remaining input: {:?}", input);
398
399 // Parse get variables
400 let get_variables_result = separated_list1(ws(char(',')), variable)(input);
401 println!("Parsing get variables: {:?}", get_variables_result);
402 let (input, get_variables) = get_variables_result?;
403 println!("Parsed get variables: {:?}", get_variables);
404 println!("Remaining input: {:?}", input);
405
406 // Parse semicolon
407 let semicolon_result = ws(char(';'))(input);
408 println!("Parsing semicolon: {:?}", semicolon_result);
409 let (input, _) = semicolon_result?;
410 println!("Matched semicolon");
411 println!("Remaining input: {:?}", input);
412
413 // Construct Query struct
414 let query = Query {
415 patterns,
416 conditions,
417 get_variables: get_variables.into_iter().map(|s| s.to_string()).collect(),
418 };
419 println!("Constructed Query: {:?}", query);
420

Callers

nothing calls this directly

Calls 3

ConditionEnum · 0.85
wsFunction · 0.70
pushMethod · 0.45

Tested by

no test coverage detected