mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-08-04 18:18:03 +00:00
Return number of rows changed from Connection.execute
This commit is contained in:
parent
1aad782271
commit
ece34baddf
3 changed files with 87 additions and 1 deletions
|
@ -287,7 +287,9 @@ impl Statement {
|
|||
return Ok(2);
|
||||
}
|
||||
Ok(turso_core::StepResult::Done) => {
|
||||
return Ok(0);
|
||||
let changes = stmt.n_change();
|
||||
assert!(changes >= 0);
|
||||
return Ok(changes as u64);
|
||||
}
|
||||
Ok(turso_core::StepResult::IO) => {
|
||||
let _ = stmt.run_once();
|
||||
|
|
|
@ -55,3 +55,83 @@ async fn test_rows_next() {
|
|||
);
|
||||
assert!(res.next().await.unwrap().is_none());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_rows_returned() {
|
||||
let db = Builder::new_local(":memory:").build().await.unwrap();
|
||||
let conn = db.connect().unwrap();
|
||||
|
||||
//--- CRUD Operations ---//
|
||||
conn.execute("CREATE TABLE t(id INTEGER PRIMARY KEY, val TEXT)", ())
|
||||
.await
|
||||
.unwrap();
|
||||
let changed = conn
|
||||
.execute("INSERT INTO t VALUES (1,'hello')", ())
|
||||
.await
|
||||
.unwrap();
|
||||
let changed1 = conn
|
||||
.execute("INSERT INTO t VALUES (2,'hi')", ())
|
||||
.await
|
||||
.unwrap();
|
||||
let changed2 = conn
|
||||
.execute("UPDATE t SET val='hi' WHERE id=1", ())
|
||||
.await
|
||||
.unwrap();
|
||||
let changed3 = conn
|
||||
.execute("DELETE FROM t WHERE val='hi'", ())
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(changed, 1);
|
||||
assert_eq!(changed1, 1);
|
||||
assert_eq!(changed2, 1);
|
||||
assert_eq!(changed3, 2);
|
||||
|
||||
//--- A more complicated example of insert with a select join subquery ---//
|
||||
conn.execute(
|
||||
"CREATE TABLE authors ( id INTEGER PRIMARY KEY, name TEXT NOT NULL);
|
||||
",
|
||||
(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
conn.execute(
|
||||
"CREATE TABLE books ( id INTEGER PRIMARY KEY, author_id INTEGER NOT NULL REFERENCES authors(id), title TEXT NOT NULL); "
|
||||
,()
|
||||
).await.unwrap();
|
||||
|
||||
conn.execute(
|
||||
"CREATE TABLE prize_winners ( book_id INTEGER PRIMARY KEY, author_name TEXT NOT NULL);",
|
||||
(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
conn.execute(
|
||||
"INSERT INTO authors (id, name) VALUES (1, 'Alice'), (2, 'Bob');",
|
||||
(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
conn.execute(
|
||||
"INSERT INTO books (id, author_id, title) VALUES (1, 1, 'Rust in Action'), (2, 1, 'Async Adventures'), (3, 1, 'Fearless Concurrency'), (4, 1, 'Unsafe Tales'), (5, 1, 'Zero-Cost Futures'), (6, 2, 'Learning SQL');",
|
||||
()
|
||||
).await.unwrap();
|
||||
|
||||
let rows_changed = conn
|
||||
.execute(
|
||||
"
|
||||
INSERT INTO prize_winners (book_id, author_name)
|
||||
SELECT b.id, a.name
|
||||
FROM books b
|
||||
JOIN authors a ON a.id = b.author_id
|
||||
WHERE a.id = 1; -- Alice’s five books
|
||||
",
|
||||
(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(rows_changed, 5);
|
||||
}
|
||||
|
|
|
@ -861,6 +861,10 @@ impl Statement {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn n_change(&self) -> i64 {
|
||||
return self.program.n_change.get();
|
||||
}
|
||||
|
||||
pub fn set_mv_tx_id(&mut self, mv_tx_id: Option<u64>) {
|
||||
self.state.mv_tx_id = mv_tx_id;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue