From f0ff85a43cb677b43c4c826e84a992f44b480bbb Mon Sep 17 00:00:00 2001 From: pedrocarlo Date: Tue, 22 Jul 2025 00:38:52 -0300 Subject: [PATCH] add test --- core/lib.rs | 3 +- .../query_processing/test_transactions.rs | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/core/lib.rs b/core/lib.rs index bcc4f8a92..caa9aeb3d 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -1706,9 +1706,8 @@ impl Statement { let mut res = self .program .step(&mut self.state, self.mv_store.clone(), self.pager.clone()); - for i in 0..MAX_SCHEMA_RETRY { + for _ in 0..MAX_SCHEMA_RETRY { // Only reprepare if we still need to update schema - dbg!(i); if !matches!(res, Err(LimboError::SchemaUpdated)) { break; } diff --git a/tests/integration/query_processing/test_transactions.rs b/tests/integration/query_processing/test_transactions.rs index d621edf45..bd1b3c1fc 100644 --- a/tests/integration/query_processing/test_transactions.rs +++ b/tests/integration/query_processing/test_transactions.rs @@ -24,3 +24,42 @@ fn test_txn_error_doesnt_rollback_txn() -> Result<()> { Ok(()) } + +#[test] +fn test_schema_reprepare() { + let tmp_db = TempDatabase::new_empty(false); + let conn1 = tmp_db.connect_limbo(); + conn1.execute("CREATE TABLE t(x, y, z)").unwrap(); + conn1 + .execute("INSERT INTO t VALUES (1, 2, 3), (10, 20, 30)") + .unwrap(); + let conn2 = tmp_db.connect_limbo(); + let mut stmt = conn2.prepare("SELECT y, z FROM t").unwrap(); + let mut stmt2 = conn2.prepare("SELECT x, z FROM t").unwrap(); + conn1.execute("ALTER TABLE t DROP COLUMN x").unwrap(); + assert_eq!( + stmt2.step().unwrap_err().to_string(), + "Parse error: no such column: x" + ); + + let mut rows = Vec::new(); + loop { + match stmt.step().unwrap() { + turso_core::StepResult::Done => { + break; + } + turso_core::StepResult::Row => { + let row = stmt.row().unwrap(); + rows.push((row.get::(0).unwrap(), row.get::(1).unwrap())); + } + turso_core::StepResult::IO => { + stmt.run_once().unwrap(); + } + step => panic!("unexpected step result {step:?}"), + } + } + let row = rows[0]; + assert_eq!(row, (2, 3)); + let row = rows[1]; + assert_eq!(row, (20, 30)); +}