diff --git a/Cargo.lock b/Cargo.lock index d26da84a6..986baa6fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1735,6 +1735,8 @@ dependencies = [ "notify", "rand 0.8.5", "rand_chacha 0.3.1", + "regex", + "regex-syntax", "serde", "serde_json", "tempfile", diff --git a/simulator/generation/plan.rs b/simulator/generation/plan.rs index 4717d7309..9db4676e1 100644 --- a/simulator/generation/plan.rs +++ b/simulator/generation/plan.rs @@ -14,7 +14,10 @@ use crate::{ use crate::generation::{frequency, Arbitrary, ArbitraryFrom}; -use super::property::{remaining, Property}; +use super::{ + property::{remaining, Property}, + table, +}; pub(crate) type ResultSet = Result>>; @@ -303,7 +306,15 @@ impl Interactions { .unwrap(); table.rows.extend(values); } - Query::Delete(_) => todo!(), + Query::Delete(delete) => { + let table = env + .tables + .iter_mut() + .find(|t| t.name == delete.table) + .unwrap(); + let t2 = &table.clone(); + table.rows.retain_mut(|r| delete.predicate.test(r, t2)); + } Query::Select(_) => {} }, Interaction::Assertion(_) => {} diff --git a/simulator/generation/query.rs b/simulator/generation/query.rs index efafa6c05..7624367a5 100644 --- a/simulator/generation/query.rs +++ b/simulator/generation/query.rs @@ -113,7 +113,7 @@ impl ArbitraryFrom<(&SimulatorEnv, &Remaining)> for Query { Box::new(|rng| Self::Insert(Insert::arbitrary_from(rng, env))), ), ( - 0.0, + remaining.write, Box::new(|rng| Self::Delete(Delete::arbitrary_from(rng, env))), ), ], diff --git a/simulator/model/query.rs b/simulator/model/query.rs index 474a54f1e..9d3b3d404 100644 --- a/simulator/model/query.rs +++ b/simulator/model/query.rs @@ -288,7 +288,7 @@ pub(crate) struct Delete { impl Delete { pub(crate) fn shadow(&self, _env: &mut SimulatorEnv) -> Vec> { - todo!() + vec![] } }