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
+7 -6
View File
@@ -382,6 +382,7 @@ pub struct Analyzer<'a> {
order: BTreeMap<&'a Query<'a>, Vec<u16>>,
}
#[derive(Clone)]
pub struct Schedule<'a> {
pub scopes: BTreeMap<&'a Query<'a>, Scope<'a>>,
pub order: BTreeMap<&'a Query<'a>, Vec<u16>>,
@@ -420,14 +421,14 @@ impl<'a> Analyzer<'a> {
mut self,
modules: &'a [Module<'a>],
query: &'a Query<'a>,
) -> Result<Vec<u16>> {
) -> Result<Schedule<'a>> {
self.add_rules(modules)?;
self.analyze_query(None, None, query, Scope::default())?;
Ok(self
.order
.get(query)
.expect("could not schedule user query")
.clone())
Ok(Schedule {
scopes: self.locals,
order: self.order,
})
}
fn add_rules(&mut self, modules: &'a [Module<'a>]) -> Result<()> {