use super::{Engine, StatisticsRefresh};
fn analyzed_rows(engine: &Engine) -> Option<u64> {
engine
.column_stats_in_execution("growing", StatisticsRefresh::Maintained)
.unwrap()
.get("v")
.map(|stats| stats.row_count)
}
#[test]
fn memory_statistics_wait_for_the_change_threshold_before_reanalyzing() {
let engine = Engine::new();
engine
.sql(
"CREATE TABLE growing (id INTEGER PRIMARY KEY, v INTEGER)",
&[],
)
.unwrap();
engine
.sql(
"INSERT INTO growing SELECT g, g FROM generate_series(1, 1000) AS g",
&[],
)
.unwrap();
assert_eq!(analyzed_rows(&engine), Some(1000));
engine
.sql(
"INSERT INTO growing SELECT g, g FROM generate_series(1001, 1100) AS g",
&[],
)
.unwrap();
assert_eq!(analyzed_rows(&engine), Some(1000));
engine
.sql("UPDATE growing SET v = -v WHERE id BETWEEN 1 AND 100", &[])
.unwrap();
assert_eq!(analyzed_rows(&engine), Some(1100));
engine.sql("BEGIN", &[]).unwrap();
engine
.sql("DELETE FROM growing WHERE id <= 600", &[])
.unwrap();
engine.sql("ROLLBACK", &[]).unwrap();
assert_eq!(analyzed_rows(&engine), Some(1100));
engine.sql("DELETE FROM growing WHERE id = 1", &[]).unwrap();
assert_eq!(analyzed_rows(&engine), Some(1100));
assert_eq!(engine.column_stats("growing").unwrap()["v"].row_count, 1099);
assert_eq!(analyzed_rows(&engine), Some(1099));
}