mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-23 17:05:36 +01:00
move test helper run_query to common module
This commit is contained in:
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user