mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-08-04 18:18:03 +00:00
refactor database open_file and open
This commit is contained in:
parent
7137f4ab3b
commit
f464d15f8b
3 changed files with 17 additions and 42 deletions
|
@ -4,7 +4,7 @@ use std::cell::RefCell;
|
|||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
|
||||
use limbo_core::{Clock, Instant};
|
||||
use limbo_core::{maybe_init_database_file, Clock, Instant};
|
||||
use napi::{Env, JsUnknown, Result as NapiResult};
|
||||
use napi_derive::napi;
|
||||
|
||||
|
@ -29,20 +29,9 @@ impl Database {
|
|||
let file = io
|
||||
.open_file(&path, limbo_core::OpenFlags::Create, false)
|
||||
.unwrap();
|
||||
limbo_core::maybe_init_database_file(&file, &io).unwrap();
|
||||
maybe_init_database_file(&file, &io).unwrap();
|
||||
let db_file = Arc::new(DatabaseFile::new(file));
|
||||
let db_header = limbo_core::Pager::begin_open(db_file.clone()).unwrap();
|
||||
|
||||
// ensure db header is there
|
||||
io.run_once().unwrap();
|
||||
|
||||
let page_size = db_header.lock().page_size;
|
||||
|
||||
let wal_path = format!("{}-wal", path);
|
||||
let wal_shared =
|
||||
limbo_core::WalFileShared::open_shared(&io, wal_path.as_str(), page_size).unwrap();
|
||||
|
||||
let db = limbo_core::Database::open(io, db_file, wal_shared, false).unwrap();
|
||||
let db = limbo_core::Database::open(io, &path, db_file, false).unwrap();
|
||||
let conn = db.connect().unwrap();
|
||||
Self {
|
||||
memory,
|
||||
|
|
|
@ -19,22 +19,10 @@ impl Database {
|
|||
#[wasm_bindgen(constructor)]
|
||||
pub fn new(path: &str) -> Database {
|
||||
let io: Arc<dyn limbo_core::IO> = Arc::new(PlatformIO { vfs: VFS::new() });
|
||||
let file = io
|
||||
.open_file(path, limbo_core::OpenFlags::Create, false)
|
||||
.unwrap();
|
||||
let file = io.open_file(path, OpenFlags::Create, false).unwrap();
|
||||
maybe_init_database_file(&file, &io).unwrap();
|
||||
let db_file = Arc::new(DatabaseFile::new(file));
|
||||
let db_header = Pager::begin_open(db_file.clone()).unwrap();
|
||||
|
||||
// ensure db header is there
|
||||
io.run_once().unwrap();
|
||||
|
||||
let page_size = db_header.lock().page_size;
|
||||
|
||||
let wal_path = format!("{}-wal", path);
|
||||
let wal_shared = WalFileShared::open_shared(&io, wal_path.as_str(), page_size).unwrap();
|
||||
|
||||
let db = limbo_core::Database::open(io, db_file, wal_shared, false).unwrap();
|
||||
let db = limbo_core::Database::open(io, path, db_file, false).unwrap();
|
||||
let conn = db.connect().unwrap();
|
||||
Database { db, conn }
|
||||
}
|
||||
|
|
26
core/lib.rs
26
core/lib.rs
|
@ -109,48 +109,46 @@ unsafe impl Sync for Database {}
|
|||
impl Database {
|
||||
#[cfg(feature = "fs")]
|
||||
pub fn open_file(io: Arc<dyn IO>, path: &str, enable_mvcc: bool) -> Result<Arc<Database>> {
|
||||
use storage::wal::WalFileShared;
|
||||
|
||||
let file = io.open_file(path, OpenFlags::Create, true)?;
|
||||
maybe_init_database_file(&file, &io)?;
|
||||
let db_file = Arc::new(DatabaseFile::new(file));
|
||||
let wal_path = format!("{}-wal", path);
|
||||
let db_header = Pager::begin_open(db_file.clone())?;
|
||||
io.run_once()?;
|
||||
let page_size = db_header.lock().page_size;
|
||||
let wal_shared = WalFileShared::open_shared(&io, wal_path.as_str(), page_size)?;
|
||||
Self::open(io, db_file, wal_shared, enable_mvcc)
|
||||
Self::open(io, path, db_file, enable_mvcc)
|
||||
}
|
||||
|
||||
#[allow(clippy::arc_with_non_send_sync)]
|
||||
pub fn open(
|
||||
io: Arc<dyn IO>,
|
||||
path: &str,
|
||||
db_file: Arc<dyn DatabaseStorage>,
|
||||
shared_wal: Arc<UnsafeCell<WalFileShared>>,
|
||||
enable_mvcc: bool,
|
||||
) -> Result<Arc<Database>> {
|
||||
let db_header = Pager::begin_open(db_file.clone())?;
|
||||
io.run_once()?;
|
||||
|
||||
let page_size = db_header.lock().page_size;
|
||||
let wal_path = format!("{}-wal", path);
|
||||
let shared_wal = WalFileShared::open_shared(&io, wal_path.as_str(), page_size)?;
|
||||
|
||||
DATABASE_VERSION.get_or_init(|| {
|
||||
let version = db_header.lock().version_number;
|
||||
version.to_string()
|
||||
});
|
||||
|
||||
let mv_store = if enable_mvcc {
|
||||
Some(Rc::new(MvStore::new(
|
||||
crate::mvcc::LocalClock::new(),
|
||||
crate::mvcc::persistent_storage::Storage::new_noop(),
|
||||
mvcc::LocalClock::new(),
|
||||
mvcc::persistent_storage::Storage::new_noop(),
|
||||
)))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let shared_page_cache = Arc::new(RwLock::new(DumbLruPageCache::new(10)));
|
||||
let page_size = db_header.lock().page_size;
|
||||
let header = db_header;
|
||||
let schema = Arc::new(RwLock::new(Schema::new()));
|
||||
let db = Database {
|
||||
mv_store,
|
||||
schema: schema.clone(),
|
||||
header: header.clone(),
|
||||
header: db_header.clone(),
|
||||
shared_page_cache: shared_page_cache.clone(),
|
||||
shared_wal: shared_wal.clone(),
|
||||
db_file,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue