Scheduling of statements in user queries (#31)

Nested queries (comprehensions) are handled correctly.

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
Anand Krishnamoorthi
2023-10-31 10:52:51 -07:00
committed by GitHub
parent 7a3d5e7e02
commit 519cce5b33
4 changed files with 85 additions and 64 deletions

View File

@@ -78,10 +78,10 @@ fn rego_eval(
let mut interpreter = regorus::Interpreter::new(modules_ref)?;
// Prepare for evalution.
interpreter.prepare_for_eval(Some(&schedule), &Some(data.clone()))?;
interpreter.prepare_for_eval(Some(schedule.clone()), &Some(data.clone()))?;
// Evaluate all the modules.
interpreter.eval(&Some(data), &input, false, Some(&schedule))?;
interpreter.eval(&Some(data), &input, false, Some(schedule))?;
// Fetch query string. If none specified, use "data".
let query = match &query {
@@ -104,9 +104,9 @@ fn rego_eval(
};
let mut parser = regorus::Parser::new(&query_source)?;
let query_node = parser.parse_query(query_span, "")?;
let stmt_order = regorus::Analyzer::new().analyze_query_snippet(&modules, &query_node)?;
let query_schedule = regorus::Analyzer::new().analyze_query_snippet(&modules, &query_node)?;
let results = interpreter.eval_user_query(&query_node, &stmt_order, enable_tracing)?;
let results = interpreter.eval_user_query(&query_node, &query_schedule, enable_tracing)?;
println!("eval results:\n{}", serde_json::to_string_pretty(&results)?);
Ok(())