diff --git a/bindings/python/src/lib.rs b/bindings/python/src/lib.rs index d69ae3b8f..085d71b3b 100644 --- a/bindings/python/src/lib.rs +++ b/bindings/python/src/lib.rs @@ -267,20 +267,26 @@ impl Connection { #[allow(clippy::arc_with_non_send_sync)] #[pyfunction] pub fn connect(path: &str) -> Result { + #[inline(always)] + fn open_or( + io: Arc, + path: &str, + ) -> std::result::Result, PyErr> { + limbo_core::Database::open_file(io, path).map_err(|e| { + PyErr::new::(format!("Failed to open database: {:?}", e)) + }) + } + match path { ":memory:" => { let io: Arc = Arc::new(limbo_core::MemoryIO::new()?); - let db = limbo_core::Database::open_file(io.clone(), path).map_err(|e| { - PyErr::new::(format!("Failed to open database: {:?}", e)) - })?; + let db = open_or(io.clone(), path)?; let conn: Rc = db.connect(); Ok(Connection { conn, io }) } path => { let io: Arc = Arc::new(limbo_core::PlatformIO::new()?); - let db = limbo_core::Database::open_file(io.clone(), path).map_err(|e| { - PyErr::new::(format!("Failed to open database: {:?}", e)) - })?; + let db = open_or(io.clone(), path)?; let conn: Rc = db.connect(); Ok(Connection { conn, io }) }