move test helper run_query to common module

This commit is contained in:
Avinash Sajjanshetty
2025-09-08 18:54:43 +05:30
parent 11030056c7
commit 1536f65f07
5 changed files with 70 additions and 69 deletions

View File

@@ -175,10 +175,10 @@ fn test_sequential_write() -> anyhow::Result<()> {
println!("progress {progress:.1}%");
}
let insert_query = format!("INSERT INTO test VALUES ({i})");
run_query(&tmp_db, &conn, &insert_query)?;
common::run_query(&tmp_db, &conn, &insert_query)?;
let mut current_read_index = 0;
run_query_on_row(&tmp_db, &conn, list_query, |row: &Row| {
common::run_query_on_row(&tmp_db, &conn, list_query, |row: &Row| {
let first_value = row.get::<&Value>(0).expect("missing id");
let id = match first_value {
turso_core::Value::Integer(i) => *i as i32,
@@ -204,14 +204,14 @@ fn test_regression_multi_row_insert() -> anyhow::Result<()> {
let insert_query = "INSERT INTO test VALUES (-2), (-3), (-1)";
let list_query = "SELECT * FROM test";
run_query(&tmp_db, &conn, insert_query)?;
common::run_query(&tmp_db, &conn, insert_query)?;
common::do_flush(&conn, &tmp_db)?;
let mut current_read_index = 1;
let expected_ids = vec![-3, -2, -1];
let mut actual_ids = Vec::new();
run_query_on_row(&tmp_db, &conn, list_query, |row: &Row| {
common::run_query_on_row(&tmp_db, &conn, list_query, |row: &Row| {
let first_value = row.get::<&Value>(0).expect("missing id");
let id = match first_value {
Value::Float(f) => *f as i32,
@@ -290,13 +290,13 @@ fn test_wal_checkpoint() -> anyhow::Result<()> {
conn.checkpoint(CheckpointMode::Passive {
upper_bound_inclusive: None,
})?;
run_query(&tmp_db, &conn, &insert_query)?;
common::run_query(&tmp_db, &conn, &insert_query)?;
}
do_flush(&conn, &tmp_db)?;
let list_query = "SELECT * FROM test LIMIT 1";
let mut current_index = 0;
run_query_on_row(&tmp_db, &conn, list_query, |row: &Row| {
common::run_query_on_row(&tmp_db, &conn, list_query, |row: &Row| {
let id = row.get::<i64>(0).unwrap();
assert_eq!(current_index, id as usize);
current_index += 1;
@@ -315,7 +315,7 @@ fn test_wal_restart() -> anyhow::Result<()> {
fn insert(i: usize, conn: &Arc<Connection>, tmp_db: &TempDatabase) -> anyhow::Result<()> {
debug!("inserting {i}");
let insert_query = format!("INSERT INTO test VALUES ({i})");
run_query(tmp_db, conn, &insert_query)?;
common::run_query(tmp_db, conn, &insert_query)?;
debug!("inserted {i}");
tmp_db.io.step()?;
Ok(())
@@ -325,7 +325,7 @@ fn test_wal_restart() -> anyhow::Result<()> {
debug!("counting");
let list_query = "SELECT count(x) FROM test";
let mut count = None;
run_query_on_row(tmp_db, conn, list_query, |row: &Row| {
common::run_query_on_row(tmp_db, conn, list_query, |row: &Row| {
assert!(count.is_none());
count = Some(row.get::<i64>(0).unwrap() as usize);
debug!("counted {count:?}");
@@ -378,15 +378,15 @@ fn test_write_delete_with_index() -> anyhow::Result<()> {
for i in 0..max_iterations {
println!("inserting {i} ");
let insert_query = format!("INSERT INTO test VALUES ({i})");
run_query(&tmp_db, &conn, &insert_query)?;
common::run_query(&tmp_db, &conn, &insert_query)?;
}
for i in 0..max_iterations {
println!("deleting {i} ");
let delete_query = format!("delete from test where x={i}");
run_query(&tmp_db, &conn, &delete_query)?;
common::run_query(&tmp_db, &conn, &delete_query)?;
println!("listing after deleting {i} ");
let mut current_read_index = i + 1;
run_query_on_row(&tmp_db, &conn, list_query, |row: &Row| {
common::run_query_on_row(&tmp_db, &conn, list_query, |row: &Row| {
let first_value = row.get::<&Value>(0).expect("missing id");
let id = match first_value {
turso_core::Value::Integer(i) => *i as i32,
@@ -398,7 +398,7 @@ fn test_write_delete_with_index() -> anyhow::Result<()> {
})?;
for i in i + 1..max_iterations {
// now test with seek
run_query_on_row(
common::run_query_on_row(
&tmp_db,
&conn,
&format!("select * from test where x = {i}"),
@@ -428,20 +428,20 @@ fn test_update_with_index() -> anyhow::Result<()> {
TempDatabase::new_with_rusqlite("CREATE TABLE test (x REAL PRIMARY KEY, y TEXT);", true);
let conn = tmp_db.connect_limbo();
run_query(&tmp_db, &conn, "INSERT INTO test VALUES (1.0, 'foo')")?;
run_query(&tmp_db, &conn, "INSERT INTO test VALUES (2.0, 'bar')")?;
common::run_query(&tmp_db, &conn, "INSERT INTO test VALUES (1.0, 'foo')")?;
common::run_query(&tmp_db, &conn, "INSERT INTO test VALUES (2.0, 'bar')")?;
run_query_on_row(&tmp_db, &conn, "SELECT * from test WHERE x=10.0", |row| {
common::run_query_on_row(&tmp_db, &conn, "SELECT * from test WHERE x=10.0", |row| {
assert_eq!(row.get::<f64>(0).unwrap(), 1.0);
})?;
run_query(&tmp_db, &conn, "UPDATE test SET x=10.0 WHERE x=1.0")?;
run_query_on_row(&tmp_db, &conn, "SELECT * from test WHERE x=10.0", |row| {
common::run_query(&tmp_db, &conn, "UPDATE test SET x=10.0 WHERE x=1.0")?;
common::run_query_on_row(&tmp_db, &conn, "SELECT * from test WHERE x=10.0", |row| {
assert_eq!(row.get::<f64>(0).unwrap(), 10.0);
})?;
let mut count_1 = 0;
let mut count_10 = 0;
run_query_on_row(&tmp_db, &conn, "SELECT * from test", |row| {
common::run_query_on_row(&tmp_db, &conn, "SELECT * from test", |row| {
let v = row.get::<f64>(0).unwrap();
if v == 1.0 {
count_1 += 1;
@@ -464,10 +464,10 @@ fn test_delete_with_index() -> anyhow::Result<()> {
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x UNIQUE)", true);
let conn = tmp_db.connect_limbo();
run_query(&tmp_db, &conn, "INSERT INTO t VALUES (1), (2)")?;
run_query(&tmp_db, &conn, "DELETE FROM t WHERE x >= 1")?;
common::run_query(&tmp_db, &conn, "INSERT INTO t VALUES (1), (2)")?;
common::run_query(&tmp_db, &conn, "DELETE FROM t WHERE x >= 1")?;
run_query_on_row(&tmp_db, &conn, "SELECT * FROM t", |_| {
common::run_query_on_row(&tmp_db, &conn, "SELECT * FROM t", |_| {
panic!("Delete should've deleted every row!");
})?;
@@ -516,7 +516,7 @@ fn test_multiple_statements() -> anyhow::Result<()> {
conn.execute("INSERT INTO t values(1); insert into t values(2);")?;
run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t;", |row| {
common::run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t;", |row| {
let count = row.get::<i64>(0).unwrap();
assert_eq!(count, 2);
})
@@ -526,7 +526,7 @@ fn test_multiple_statements() -> anyhow::Result<()> {
}
fn check_integrity_is_ok(tmp_db: TempDatabase, conn: Arc<Connection>) -> Result<(), anyhow::Error> {
run_query_on_row(&tmp_db, &conn, "pragma integrity_check", |row: &Row| {
common::run_query_on_row(&tmp_db, &conn, "pragma integrity_check", |row: &Row| {
let res = row.get::<String>(0).unwrap();
assert!(res.contains("ok"));
})?;
@@ -639,7 +639,7 @@ fn test_write_concurrent_connections() -> anyhow::Result<()> {
}
let conn = tmp_db.connect_limbo();
run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t", |row: &Row| {
common::run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t", |row: &Row| {
let count = row.get::<i64>(0).unwrap();
assert_eq!(
count,
@@ -665,12 +665,12 @@ fn test_wal_bad_frame() -> anyhow::Result<()> {
conn.execute("INSERT INTO t2(x) VALUES (1)")?;
conn.execute("INSERT INTO t3(x) VALUES (1)")?;
conn.execute("COMMIT")?;
run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t2", |row| {
common::run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t2", |row| {
let x = row.get::<i64>(0).unwrap();
assert_eq!(x, 1);
})
.unwrap();
run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t3", |row| {
common::run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t3", |row| {
let x = row.get::<i64>(0).unwrap();
assert_eq!(x, 1);
})
@@ -715,7 +715,7 @@ fn test_wal_bad_frame() -> anyhow::Result<()> {
db,
};
let conn = tmp_db.connect_limbo();
run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t2", |row| {
common::run_query_on_row(&tmp_db, &conn, "SELECT count(1) from t2", |row| {
let x = row.get::<i64>(0).unwrap();
assert_eq!(x, 0);
})
@@ -789,42 +789,3 @@ fn test_insert_with_column_names() -> anyhow::Result<()> {
Ok(())
}
pub fn run_query(tmp_db: &TempDatabase, conn: &Arc<Connection>, query: &str) -> anyhow::Result<()> {
run_query_core(tmp_db, conn, query, None::<fn(&Row)>)
}
pub fn run_query_on_row(
tmp_db: &TempDatabase,
conn: &Arc<Connection>,
query: &str,
on_row: impl FnMut(&Row),
) -> anyhow::Result<()> {
run_query_core(tmp_db, conn, query, Some(on_row))
}
pub fn run_query_core(
_tmp_db: &TempDatabase,
conn: &Arc<Connection>,
query: &str,
mut on_row: Option<impl FnMut(&Row)>,
) -> anyhow::Result<()> {
if let Some(ref mut rows) = conn.query(query)? {
loop {
match rows.step()? {
StepResult::IO => {
rows.run_once()?;
}
StepResult::Done => break,
StepResult::Row => {
if let Some(on_row) = on_row.as_mut() {
let row = rows.row().unwrap();
on_row(row)
}
}
r => panic!("unexpected step result: {r:?}"),
}
}
};
Ok(())
}