mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-21 00:54:19 +01:00
Add cacheflush to Rust binding
This commit is contained in:
@@ -205,6 +205,17 @@ impl Connection {
|
||||
})?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Flush dirty pages to disk.
|
||||
/// This will write the dirty pages to the WAL.
|
||||
pub fn cacheflush(&self) -> Result<()> {
|
||||
let conn = self
|
||||
.inner
|
||||
.lock()
|
||||
.map_err(|e| Error::MutexError(e.to_string()))?;
|
||||
conn.cacheflush()?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Debug for Connection {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use tokio::fs;
|
||||
use turso::{Builder, Value};
|
||||
|
||||
#[tokio::test]
|
||||
@@ -55,3 +56,62 @@ async fn test_rows_next() {
|
||||
);
|
||||
assert!(res.next().await.unwrap().is_none());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_cacheflush() {
|
||||
let builder = Builder::new_local("test.db");
|
||||
let db = builder.build().await.unwrap();
|
||||
|
||||
let conn = db.connect().unwrap();
|
||||
|
||||
conn.execute("CREATE TABLE IF NOT EXISTS asdf (x INTEGER)", ())
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// Tests if cache flush breaks transaction isolation
|
||||
conn.execute("BEGIN", ()).await.unwrap();
|
||||
conn.execute("INSERT INTO asdf (x) VALUES (1)", ())
|
||||
.await
|
||||
.unwrap();
|
||||
conn.cacheflush().unwrap();
|
||||
conn.execute("ROLLBACK", ()).await.unwrap();
|
||||
|
||||
conn.execute("INSERT INTO asdf (x) VALUES (2)", ())
|
||||
.await
|
||||
.unwrap();
|
||||
conn.execute("INSERT INTO asdf (x) VALUES (3)", ())
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let mut res = conn.query("SELECT * FROM asdf", ()).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
res.next().await.unwrap().unwrap().get_value(0).unwrap(),
|
||||
2.into()
|
||||
);
|
||||
assert_eq!(
|
||||
res.next().await.unwrap().unwrap().get_value(0).unwrap(),
|
||||
3.into()
|
||||
);
|
||||
|
||||
// Tests if cache flush doesn't break a committed transaction
|
||||
conn.execute("BEGIN", ()).await.unwrap();
|
||||
conn.execute("INSERT INTO asdf (x) VALUES (1)", ())
|
||||
.await
|
||||
.unwrap();
|
||||
conn.cacheflush().unwrap();
|
||||
conn.execute("COMMIT", ()).await.unwrap();
|
||||
|
||||
let mut res = conn
|
||||
.query("SELECT * FROM asdf WHERE x = 1", ())
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
res.next().await.unwrap().unwrap().get_value(0).unwrap(),
|
||||
1.into()
|
||||
);
|
||||
|
||||
fs::remove_file("test.db").await.unwrap();
|
||||
fs::remove_file("test.db-wal").await.unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user