diff --git a/bindings/python/src/lib.rs b/bindings/python/src/lib.rs index f9c5c481f..83adf54c3 100644 --- a/bindings/python/src/lib.rs +++ b/bindings/python/src/lib.rs @@ -71,6 +71,7 @@ impl Cursor { pub fn execute(&mut self, sql: &str, parameters: Option>) -> Result { let stmt_is_dml = stmt_is_dml(sql); let stmt_is_ddl = stmt_is_ddl(sql); + let stmt_is_tx = stmt_is_tx(sql); let statement = self.conn.conn.prepare(sql).map_err(|e| { PyErr::new::(format!("Failed to prepare statement: {:?}", e)) @@ -94,7 +95,7 @@ impl Cursor { // For DDL and DML statements, // we need to execute the statement immediately - if stmt_is_ddl || stmt_is_dml { + if stmt_is_ddl || stmt_is_dml || stmt_is_tx { while let turso_core::StepResult::IO = stmt .borrow_mut() .step() @@ -222,6 +223,12 @@ fn stmt_is_ddl(sql: &str) -> bool { sql.starts_with("CREATE") || sql.starts_with("ALTER") || sql.starts_with("DROP") } +fn stmt_is_tx(sql: &str) -> bool { + let sql = sql.trim(); + let sql = sql.to_uppercase(); + sql.starts_with("BEGIN") || sql.starts_with("COMMIT") || sql.starts_with("ROLLBACK") +} + #[pyclass(unsendable)] #[derive(Clone)] pub struct Connection {