From d643bb20921857c608f18a1faa45fc4799b50cd7 Mon Sep 17 00:00:00 2001 From: Jussi Saurio Date: Mon, 15 Sep 2025 11:30:56 +0300 Subject: [PATCH] add test that demonstrates issue 3083 can be closed --- .../query_processing/test_transactions.rs | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tests/integration/query_processing/test_transactions.rs b/tests/integration/query_processing/test_transactions.rs index f30044934..e0a8f15b5 100644 --- a/tests/integration/query_processing/test_transactions.rs +++ b/tests/integration/query_processing/test_transactions.rs @@ -355,6 +355,47 @@ fn test_mvcc_concurrent_insert_basic() { ); } +#[test] +fn test_mvcc_update_same_row_twice() { + let tmp_db = TempDatabase::new_with_opts( + "test_mvcc_update_same_row_twice.db", + turso_core::DatabaseOpts::new().with_mvcc(true), + ); + let conn1 = tmp_db.connect_limbo(); + + conn1.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)") + .unwrap(); + + conn1.execute("INSERT INTO test (id, value) VALUES (1, 'first')") + .unwrap(); + + conn1.execute("UPDATE test SET value = 'second' WHERE id = 1") + .unwrap(); + + let stmt = conn1 + .query("SELECT value FROM test WHERE id = 1") + .unwrap() + .unwrap(); + let row = helper_read_single_row(stmt); + let Value::Text(value) = &row[0] else { + panic!("expected text value"); + }; + assert_eq!(value.as_str(), "second"); + + conn1.execute("UPDATE test SET value = 'third' WHERE id = 1") + .unwrap(); + + let stmt = conn1 + .query("SELECT value FROM test WHERE id = 1") + .unwrap() + .unwrap(); + let row = helper_read_single_row(stmt); + let Value::Text(value) = &row[0] else { + panic!("expected text value"); + }; + assert_eq!(value.as_str(), "third"); +} + fn helper_read_all_rows(mut stmt: turso_core::Statement) -> Vec> { let mut ret = Vec::new(); loop {