stress_mixed/
stress_mixed.rs1use std::time::Instant;
2
3use cartel_sqlite::{Connection, params};
4
5fn main() -> cartel_sqlite::Result<()> {
6 let iterations: usize = std::env::args()
7 .nth(1)
8 .and_then(|v| v.parse().ok())
9 .unwrap_or(10_000);
10
11 let conn = Connection::open_in_memory()?;
12 conn.execute_batch("CREATE TABLE kv (id INTEGER PRIMARY KEY, v INTEGER NOT NULL)")?;
13
14 let started = Instant::now();
15 for i in 0..iterations {
16 let value = (i as i64) % 1024;
17 conn.execute("INSERT INTO kv (v) VALUES (?1)", params![value])?;
18
19 if i % 8 == 0 {
20 let count: i64 =
21 conn.query_row("SELECT COUNT(*) FROM kv WHERE v >= 0", [], |row| row.get(0))?;
22 assert!(count > 0, "expected positive row count");
23 }
24 }
25
26 let tx = conn.unchecked_transaction()?;
27 tx.execute("UPDATE kv SET v = v + 1 WHERE (id % 2) = 0", [])?;
28 tx.commit()?;
29
30 let elapsed = started.elapsed();
31 let throughput = iterations as f64 / elapsed.as_secs_f64();
32 println!(
33 "sqlite mixed stress: iterations={iterations} elapsed_ms={} throughput_ops_s={throughput:.0}",
34 elapsed.as_millis()
35 );
36 Ok(())
37}