mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-23 08:55:40 +01:00
VDBE: use temporary on-disk file for OpenEphemeral
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
use crate::function::AlterTableFunc;
|
||||
use crate::numeric::{NullableInteger, Numeric};
|
||||
use crate::storage::btree::{integrity_check, IntegrityCheckError, IntegrityCheckState};
|
||||
use crate::storage::database::FileMemoryStorage;
|
||||
use crate::storage::database::DatabaseFile;
|
||||
use crate::storage::page_cache::DumbLruPageCache;
|
||||
use crate::storage::pager::{AtomicDbState, CreateBTreeFlags, DbState};
|
||||
use crate::storage::sqlite3_ondisk::read_varint;
|
||||
@@ -30,6 +30,7 @@ use crate::{
|
||||
},
|
||||
IO,
|
||||
};
|
||||
use std::env::temp_dir;
|
||||
use std::ops::DerefMut;
|
||||
use std::{
|
||||
borrow::BorrowMut,
|
||||
@@ -6374,12 +6375,22 @@ pub fn op_open_ephemeral(
|
||||
OpOpenEphemeralState::Start => {
|
||||
tracing::trace!("Start");
|
||||
let conn = program.connection.clone();
|
||||
let io = conn.pager.borrow().io.get_memory_io();
|
||||
let io = conn.pager.borrow().io.clone();
|
||||
let rand_num = io.generate_random_number();
|
||||
let temp_dir = temp_dir();
|
||||
let rand_path =
|
||||
std::path::Path::new(&temp_dir).join(format!("tursodb-ephemeral-{rand_num}"));
|
||||
let Some(rand_path_str) = rand_path.to_str() else {
|
||||
return Err(LimboError::InternalError(
|
||||
"Failed to convert path to string".to_string(),
|
||||
));
|
||||
};
|
||||
let file = io.open_file(rand_path_str, OpenFlags::Create, false)?;
|
||||
let db_file = Arc::new(DatabaseFile::new(file));
|
||||
|
||||
let file = io.open_file("", OpenFlags::Create, true)?;
|
||||
let db_file = Arc::new(FileMemoryStorage::new(file));
|
||||
|
||||
let buffer_pool = Arc::new(BufferPool::new(None));
|
||||
let buffer_pool = Arc::new(BufferPool::new(Some(header_accessor::get_page_size(
|
||||
&conn.pager.borrow(),
|
||||
)? as usize)));
|
||||
let page_cache = Arc::new(RwLock::new(DumbLruPageCache::default()));
|
||||
|
||||
let pager = Rc::new(Pager::new(
|
||||
|
||||
Reference in New Issue
Block a user