diff --git a/Lib/test/test_sqlite3/test_dbapi.py b/Lib/test/test_sqlite3/test_dbapi.py index 49c9764a1b..a2530a03e2 100644 --- a/Lib/test/test_sqlite3/test_dbapi.py +++ b/Lib/test/test_sqlite3/test_dbapi.py @@ -1469,8 +1469,6 @@ def test_blob_closed(self): with self.assertRaisesRegex(sqlite.ProgrammingError, msg): blob[0] = b"" - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_blob_closed_db_read(self): with memory_database() as cx: cx.execute("create table test(b blob)") diff --git a/crates/stdlib/src/sqlite.rs b/crates/stdlib/src/sqlite.rs index e19aca1f6d..b875c60944 100644 --- a/crates/stdlib/src/sqlite.rs +++ b/crates/stdlib/src/sqlite.rs @@ -1007,6 +1007,10 @@ mod _sqlite { Ok(()) } + fn is_closed(&self) -> bool { + self.db.lock().is_none() + } + #[pymethod] fn commit(&self, vm: &VirtualMachine) -> PyResult<()> { self.db_lock(vm)?.implicit_commit(vm) @@ -2169,6 +2173,13 @@ mod _sqlite { length: OptionalArg, vm: &VirtualMachine, ) -> PyResult> { + if self.connection.is_closed() { + return Err(new_programming_error( + vm, + "Cannot operate on a closed database".to_owned(), + )); + } + let mut length = length.unwrap_or(-1); let mut inner = self.inner(vm)?; let blob_len = inner.blob.bytes();