From 2722cda5f62b17024ef7235de1f7f1811e18051e Mon Sep 17 00:00:00 2001 From: Handy-caT <37216852+Handy-caT@users.noreply.github.com> Date: Mon, 9 Mar 2026 16:25:08 +0300 Subject: [PATCH 1/5] rework persistence engine --- codegen/src/persist_table/generator/space.rs | 2 +- .../persist_table/generator/space_file/mod.rs | 2 +- .../src/worktable/generator/table/impls.rs | 2 +- src/lib.rs | 2 +- src/persistence/engine.rs | 43 ++++++++++++++++--- src/persistence/manager.rs | 16 +------ src/persistence/mod.rs | 15 +++++-- src/persistence/task.rs | 4 +- 8 files changed, 58 insertions(+), 28 deletions(-) diff --git a/codegen/src/persist_table/generator/space.rs b/codegen/src/persist_table/generator/space.rs index da76a093..da3e4174 100644 --- a/codegen/src/persist_table/generator/space.rs +++ b/codegen/src/persist_table/generator/space.rs @@ -43,7 +43,7 @@ impl Generator { }; quote! { - pub type #ident = PersistenceEngine< + pub type #ident = DiskPersistenceEngine< SpaceData< <<#primary_key_type as TablePrimaryKey>::Generator as PrimaryKeyGeneratorState>::State, { #inner_const_name}, diff --git a/codegen/src/persist_table/generator/space_file/mod.rs b/codegen/src/persist_table/generator/space_file/mod.rs index ed93b067..7b001352 100644 --- a/codegen/src/persist_table/generator/space_file/mod.rs +++ b/codegen/src/persist_table/generator/space_file/mod.rs @@ -237,7 +237,7 @@ impl Generator { }; let path = format!("{}/{}", config.tables_path.as_str(), #dir_name); - let engine: #engine_ident = PersistenceEngine::from_table_files_path(path) + let engine: #engine_ident = DiskPersistenceEngine::from_table_files_path(path) .await .expect("should not panic as SpaceFile is ok"); #wt_ident( diff --git a/codegen/src/worktable/generator/table/impls.rs b/codegen/src/worktable/generator/table/impls.rs index 0ddae8bd..0458b995 100644 --- a/codegen/src/worktable/generator/table/impls.rs +++ b/codegen/src/worktable/generator/table/impls.rs @@ -86,7 +86,7 @@ impl Generator { inner.table_name = #table_name; #index_setup let table_files_path = format!("{}/{}", config.tables_path, #dir_name); - let engine: #engine = PersistenceEngine::from_table_files_path(table_files_path).await?; + let engine: #engine = DiskPersistenceEngine::from_table_files_path(table_files_path).await?; core::result::Result::Ok(Self( inner, config, diff --git a/src/lib.rs b/src/lib.rs index 230b2597..e1bc7aca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,7 +25,7 @@ pub mod prelude { pub use crate::mem_stat::MemStat; pub use crate::persistence::{ DeleteOperation, IndexTableOfContents, InsertOperation, Operation, OperationId, - PersistenceConfig, PersistenceEngine, PersistenceEngineOps, PersistenceTask, SpaceData, + PersistenceConfig, DiskConfig, DiskPersistenceEngine, PersistenceEngine, PersistenceTask, SpaceData, SpaceDataOps, SpaceIndex, SpaceIndexOps, SpaceIndexUnsized, SpaceSecondaryIndexOps, UpdateOperation, map_index_pages_to_toc_and_general, map_unsized_index_pages_to_toc_and_general, validate_events, diff --git a/src/persistence/engine.rs b/src/persistence/engine.rs index 135335dc..1b22287d 100644 --- a/src/persistence/engine.rs +++ b/src/persistence/engine.rs @@ -1,7 +1,7 @@ use crate::TableSecondaryIndexEventsOps; use crate::persistence::operation::{BatchOperation, Operation}; use crate::persistence::{ - PersistenceEngineOps, SpaceDataOps, SpaceIndexOps, SpaceSecondaryIndexOps, + PersistenceEngine, SpaceDataOps, SpaceIndexOps, SpaceSecondaryIndexOps, }; use crate::prelude::{PrimaryKeyGeneratorState, TablePrimaryKey}; use futures::StreamExt; @@ -13,8 +13,23 @@ use std::hash::Hash; use std::marker::PhantomData; use std::path::Path; +#[derive(Debug, Clone)] +pub struct DiskConfig { + pub config_path: String, + pub tables_path: String, +} + +impl DiskConfig { + pub fn new, S2: Into>(config_path: S1, table_files_dir: S2) -> Self { + Self { + config_path: config_path.into(), + tables_path: table_files_dir.into(), + } + } +} + #[derive(Debug)] -pub struct PersistenceEngine< +pub struct DiskPersistenceEngine< SpaceData, SpacePrimaryIndex, SpaceSecondaryIndexes, @@ -42,7 +57,7 @@ impl< AvailableIndexes, PrimaryKeyGenState, > - PersistenceEngine< + DiskPersistenceEngine< SpaceData, SpacePrimaryIndex, SpaceSecondaryIndexes, @@ -83,8 +98,8 @@ impl< SecondaryIndexEvents, AvailableIndexes, PrimaryKeyGenState, -> PersistenceEngineOps - for PersistenceEngine< +> PersistenceEngine + for DiskPersistenceEngine< SpaceData, SpacePrimaryIndex, SpaceSecondaryIndexes, @@ -104,6 +119,24 @@ where PrimaryKeyGenState: Clone + Debug + Send, AvailableIndexes: Clone + Copy + Debug + Eq + Hash + Send, { + type Config = DiskConfig; + + async fn new(config: Self::Config) -> eyre::Result + where + Self: Sized, + { + let table_path = Path::new(&config.tables_path); + if !table_path.exists() { + fs::create_dir_all(table_path)?; + } + + Ok(Self { + data: SpaceData::from_table_files_path(config.tables_path.clone()).await?, + primary_index: SpacePrimaryIndex::primary_from_table_files_path(config.tables_path.clone()).await?, + secondary_indexes: SpaceSecondaryIndexes::from_table_files_path(config.tables_path).await?, + phantom_data: PhantomData, + }) + } async fn apply_operation( &mut self, op: Operation, diff --git a/src/persistence/manager.rs b/src/persistence/manager.rs index e59e0e0e..2cd2c93b 100644 --- a/src/persistence/manager.rs +++ b/src/persistence/manager.rs @@ -1,14 +1,2 @@ -#[derive(Debug, Clone)] -pub struct PersistenceConfig { - pub config_path: String, - pub tables_path: String, -} - -impl PersistenceConfig { - pub fn new, S2: Into>(config_path: S1, table_files_dir: S2) -> Self { - Self { - config_path: config_path.into(), - tables_path: table_files_dir.into(), - } - } -} +// Re-export DiskConfig from engine module +pub use crate::persistence::engine::DiskConfig; diff --git a/src/persistence/mod.rs b/src/persistence/mod.rs index 6c9b8a1c..8b31792d 100644 --- a/src/persistence/mod.rs +++ b/src/persistence/mod.rs @@ -5,8 +5,8 @@ mod space; mod task; use crate::persistence::operation::BatchOperation; -pub use engine::PersistenceEngine; -pub use manager::PersistenceConfig; +pub use engine::DiskPersistenceEngine; +pub use manager::DiskConfig; pub use operation::{ DeleteOperation, InsertOperation, Operation, OperationId, OperationType, UpdateOperation, validate_events, @@ -19,13 +19,22 @@ pub use space::{ use std::future::Future; pub use task::PersistenceTask; -pub trait PersistenceEngineOps< +// Re-export for backward compatibility +pub use DiskConfig as PersistenceConfig; + +pub trait PersistenceEngine< PrimaryKeyGenState, PrimaryKey, SecondaryIndexEvents, AvailableIndexes, > { + type Config; + + fn new(config: Self::Config) -> impl Future> + Send + where + Self: Sized; + fn apply_operation( &mut self, op: Operation, diff --git a/src/persistence/task.rs b/src/persistence/task.rs index 7d60232c..774416a3 100644 --- a/src/persistence/task.rs +++ b/src/persistence/task.rs @@ -10,7 +10,7 @@ use data_bucket::page::PageId; use tokio::sync::Notify; use worktable_codegen::worktable; -use crate::persistence::PersistenceEngineOps; +use crate::persistence::PersistenceEngine; use crate::persistence::operation::{ BatchInnerRow, BatchInnerWorkTable, BatchOperation, OperationId, PosByOpIdQuery, }; @@ -376,7 +376,7 @@ impl pub fn run_engine(mut engine: E) -> Self where - E: PersistenceEngineOps + E: PersistenceEngine + Send + 'static, SecondaryKeys: Clone From 72f45ed6a94b8c3b09110a54ca7119b271b5a8fa Mon Sep 17 00:00:00 2001 From: Handy-caT <37216852+Handy-caT@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:50:24 +0300 Subject: [PATCH 2/5] rework persist worktable initialization --- .../persist_table/generator/space_file/mod.rs | 50 +------------- .../generator/space_file/worktable_impls.rs | 50 +------------- .../src/worktable/generator/table/impls.rs | 6 +- codegen/src/worktable/generator/table/mod.rs | 2 +- src/lib.rs | 2 +- src/persistence/engine.rs | 68 ++++--------------- src/persistence/manager.rs | 2 - src/persistence/mod.rs | 33 ++++----- tests/persistence/concurrent/mod.rs | 2 +- tests/persistence/mod.rs | 22 +----- tests/persistence/read.rs | 4 +- tests/persistence/sync/many_strings.rs | 4 +- tests/persistence/sync/mod.rs | 18 ++--- tests/persistence/sync/option.rs | 32 ++++----- .../persistence/sync/string_primary_index.rs | 16 ++--- tests/persistence/sync/string_re_read.rs | 16 ++--- .../sync/string_secondary_index.rs | 18 ++--- tests/persistence/sync/uuid_.rs | 4 +- tests/persistence/write.rs | 49 ------------- 19 files changed, 95 insertions(+), 303 deletions(-) delete mode 100644 src/persistence/manager.rs delete mode 100644 tests/persistence/write.rs diff --git a/codegen/src/persist_table/generator/space_file/mod.rs b/codegen/src/persist_table/generator/space_file/mod.rs index 7b001352..6516558e 100644 --- a/codegen/src/persist_table/generator/space_file/mod.rs +++ b/codegen/src/persist_table/generator/space_file/mod.rs @@ -14,13 +14,11 @@ impl Generator { let type_ = self.gen_space_file_type(); let impls = self.gen_space_file_impls(); let worktable_impl = self.gen_space_file_worktable_impl(); - let space_persist_impl = self.gen_space_persist_impl(); quote! { #type_ #impls #worktable_impl - #space_persist_impl } } @@ -43,7 +41,6 @@ impl Generator { quote! { #[derive(Debug)] pub struct #space_file_ident { - pub path: String, #primary_index pub indexes: #index_persisted_ident, pub data: Vec>>, @@ -89,46 +86,6 @@ impl Generator { } } - fn gen_space_persist_impl(&self) -> TokenStream { - let name_generator = WorktableNameGenerator::from_struct_ident(&self.struct_def.ident); - let space_ident = name_generator.get_space_file_ident(); - let index_extension = Literal::string(WT_INDEX_EXTENSION); - let data_extension = Literal::string(WT_DATA_EXTENSION); - - quote! { - impl #space_ident { - pub async fn persist(&mut self) -> eyre::Result<()> { - let prefix = &self.path; - tokio::fs::create_dir_all(prefix).await?; - - { - let mut primary_index_file = tokio::fs::File::create(format!("{}/primary{}", &self.path, #index_extension)).await?; - let mut info = self.get_primary_index_info()?; - persist_page(&mut info, &mut primary_index_file).await?; - for mut toc_page in &mut self.primary_index.0 { - persist_page(&mut toc_page, &mut primary_index_file).await?; - } - for mut primary_index_page in &mut self.primary_index.1 { - persist_page(&mut primary_index_page, &mut primary_index_file).await?; - } - } - - self.indexes.persist(&prefix).await?; - - { - let mut data_file = tokio::fs::File::create(format!("{}/{}", &self.path, #data_extension)).await?; - persist_page(&mut self.data_info, &mut data_file).await?; - for mut data_page in &mut self.data { - persist_page(&mut data_page, &mut data_file).await?; - } - } - - Ok(()) - } - } - } - } - pub fn gen_space_file_impls(&self) -> TokenStream { let name_generator = WorktableNameGenerator::from_struct_ident(&self.struct_def.ident); let space_ident = name_generator.get_space_file_ident(); @@ -209,7 +166,7 @@ impl Generator { }; quote! { - pub async fn into_worktable(self, config: PersistenceConfig) -> #wt_ident { + pub async fn into_worktable(self, config: DiskConfig) -> #wt_ident { let mut page_id = 1; let data = self.data.into_iter().map(|p| { let mut data = Data::from_data_page(p); @@ -236,8 +193,8 @@ impl Generator { pk_phantom: std::marker::PhantomData, }; - let path = format!("{}/{}", config.tables_path.as_str(), #dir_name); - let engine: #engine_ident = DiskPersistenceEngine::from_table_files_path(path) + let engine_config = DiskConfig::new(config.config_path.clone(), format!("{}/{}", config.tables_path, #dir_name)); + let engine: #engine_ident = DiskPersistenceEngine::new(engine_config) .await .expect("should not panic as SpaceFile is ok"); #wt_ident( @@ -300,7 +257,6 @@ impl Generator { }; Ok(Self { - path: "".to_string(), primary_index, indexes, data, diff --git a/codegen/src/persist_table/generator/space_file/worktable_impls.rs b/codegen/src/persist_table/generator/space_file/worktable_impls.rs index 9fe0a1fb..78da2ab3 100644 --- a/codegen/src/persist_table/generator/space_file/worktable_impls.rs +++ b/codegen/src/persist_table/generator/space_file/worktable_impls.rs @@ -9,8 +9,6 @@ impl Generator { let ident = &self.struct_def.ident; let space_info_fn = self.gen_worktable_space_info_fn(); let persisted_pk_fn = self.gen_worktable_persisted_primary_key_fn(); - let into_space = self.gen_worktable_into_space(); - let persist_fn = self.gen_worktable_persist_fn(); let from_file_fn = self.gen_worktable_from_file_fn(); let wait_for_ops_fn = self.gen_worktable_wait_for_ops_fn(); @@ -18,8 +16,6 @@ impl Generator { impl #ident { #space_info_fn #persisted_pk_fn - #into_space - #persist_fn #from_file_fn #wait_for_ops_fn } @@ -34,16 +30,6 @@ impl Generator { } } - fn gen_worktable_persist_fn(&self) -> TokenStream { - quote! { - pub async fn persist(&self) -> eyre::Result<()> { - let mut space = self.into_space(); - space.persist().await?; - Ok(()) - } - } - } - fn gen_worktable_from_file_fn(&self) -> TokenStream { let name_generator = WorktableNameGenerator::from_struct_ident(&self.struct_def.ident); let space_ident = name_generator.get_space_file_ident(); @@ -51,7 +37,7 @@ impl Generator { let dir_name = name_generator.get_dir_name(); quote! { - pub async fn load_from_file(config: PersistenceConfig) -> eyre::Result { + pub async fn load_from_file(config: DiskConfig) -> eyre::Result { let filename = format!("{}/{}", config.tables_path.as_str(), #dir_name); if !std::path::Path::new(filename.as_str()).exists() { return #wt_ident::new(config).await; @@ -128,38 +114,4 @@ impl Generator { } } } - - fn gen_worktable_into_space(&self) -> TokenStream { - let name_generator = WorktableNameGenerator::from_struct_ident(&self.struct_def.ident); - let ident = name_generator.get_work_table_ident(); - let space_ident = name_generator.get_space_file_ident(); - let dir_name = name_generator.get_dir_name(); - - quote! { - pub fn into_space(&self) -> #space_ident { - let path = format!("{}/{}", self.1.config_path, #dir_name); - - let mut info = #ident::space_info_default(); - info.inner.pk_gen_state = self.0.pk_gen.get_state(); - info.inner.empty_links_list = self.0.data.get_empty_links(); - let mut header = &mut info.header; - - let mut primary_index = self.get_peristed_primary_key_with_toc(); - let mut indexes = self.0.indexes.get_persisted_index(); - let data = map_data_pages_to_general(self.0.data.get_bytes().into_iter().map(|(b, offset)| DataPage { - data: b, - length: offset, - }).collect::>()); - info.inner.page_count = data.len() as u32; - - #space_ident { - path, - primary_index, - indexes, - data, - data_info: info - } - } - } - } } diff --git a/codegen/src/worktable/generator/table/impls.rs b/codegen/src/worktable/generator/table/impls.rs index 0458b995..71bc32ec 100644 --- a/codegen/src/worktable/generator/table/impls.rs +++ b/codegen/src/worktable/generator/table/impls.rs @@ -81,12 +81,12 @@ impl Generator { } }; quote! { - pub async fn new(config: PersistenceConfig) -> eyre::Result { + pub async fn new(config: DiskConfig) -> eyre::Result { let mut inner = WorkTable::default(); inner.table_name = #table_name; #index_setup - let table_files_path = format!("{}/{}", config.tables_path, #dir_name); - let engine: #engine = DiskPersistenceEngine::from_table_files_path(table_files_path).await?; + let engine_config = DiskConfig::new(config.config_path.clone(), format!("{}/{}", config.tables_path, #dir_name)); + let engine: #engine = DiskPersistenceEngine::new(engine_config).await?; core::result::Result::Ok(Self( inner, config, diff --git a/codegen/src/worktable/generator/table/mod.rs b/codegen/src/worktable/generator/table/mod.rs index 6f0562ba..c88931d0 100644 --- a/codegen/src/worktable/generator/table/mod.rs +++ b/codegen/src/worktable/generator/table/mod.rs @@ -63,7 +63,7 @@ impl Generator { let persist_type_part = if self.is_persist { quote! { - , PersistenceConfig + , DiskConfig , #persistence_task } } else { diff --git a/src/lib.rs b/src/lib.rs index e1bc7aca..5cfa3439 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,7 +25,7 @@ pub mod prelude { pub use crate::mem_stat::MemStat; pub use crate::persistence::{ DeleteOperation, IndexTableOfContents, InsertOperation, Operation, OperationId, - PersistenceConfig, DiskConfig, DiskPersistenceEngine, PersistenceEngine, PersistenceTask, SpaceData, + DiskConfig, DiskPersistenceEngine, PersistenceEngine, PersistenceTask, SpaceData, SpaceDataOps, SpaceIndex, SpaceIndexOps, SpaceIndexUnsized, SpaceSecondaryIndexOps, UpdateOperation, map_index_pages_to_toc_and_general, map_unsized_index_pages_to_toc_and_general, validate_events, diff --git a/src/persistence/engine.rs b/src/persistence/engine.rs index 1b22287d..b0e15dd1 100644 --- a/src/persistence/engine.rs +++ b/src/persistence/engine.rs @@ -1,18 +1,18 @@ -use crate::TableSecondaryIndexEventsOps; -use crate::persistence::operation::{BatchOperation, Operation}; -use crate::persistence::{ - PersistenceEngine, SpaceDataOps, SpaceIndexOps, SpaceSecondaryIndexOps, -}; -use crate::prelude::{PrimaryKeyGeneratorState, TablePrimaryKey}; -use futures::StreamExt; -use futures::future::Either; -use futures::stream::FuturesUnordered; use std::fmt::Debug; use std::fs; use std::hash::Hash; use std::marker::PhantomData; use std::path::Path; +use futures::future::Either; +use futures::stream::FuturesUnordered; +use futures::StreamExt; + +use crate::persistence::operation::{BatchOperation, Operation}; +use crate::persistence::{PersistenceEngine, SpaceDataOps, SpaceIndexOps, SpaceSecondaryIndexOps}; +use crate::prelude::{PrimaryKeyGeneratorState, TablePrimaryKey}; +use crate::TableSecondaryIndexEventsOps; + #[derive(Debug, Clone)] pub struct DiskConfig { pub config_path: String, @@ -48,48 +48,6 @@ where phantom_data: PhantomData<(PrimaryKey, SecondaryIndexEvents, PrimaryKeyGenState, AvailableIndexes)>, } -impl< - SpaceData, - SpacePrimaryIndex, - SpaceSecondaryIndexes, - PrimaryKey, - SecondaryIndexEvents, - AvailableIndexes, - PrimaryKeyGenState, -> - DiskPersistenceEngine< - SpaceData, - SpacePrimaryIndex, - SpaceSecondaryIndexes, - PrimaryKey, - SecondaryIndexEvents, - AvailableIndexes, - PrimaryKeyGenState, - > -where - PrimaryKey: Ord + TablePrimaryKey, - ::Generator: PrimaryKeyGeneratorState, - SpaceData: SpaceDataOps, - SpacePrimaryIndex: SpaceIndexOps, - SpaceSecondaryIndexes: SpaceSecondaryIndexOps, -{ - pub async fn from_table_files_path + Clone + Send>( - path: S, - ) -> eyre::Result { - let table_path = Path::new(path.as_ref()); - if !table_path.exists() { - fs::create_dir_all(table_path)?; - } - - Ok(Self { - data: SpaceData::from_table_files_path(path.clone()).await?, - primary_index: SpacePrimaryIndex::primary_from_table_files_path(path.clone()).await?, - secondary_indexes: SpaceSecondaryIndexes::from_table_files_path(path).await?, - phantom_data: PhantomData, - }) - } -} - impl< SpaceData, SpacePrimaryIndex, @@ -132,8 +90,12 @@ where Ok(Self { data: SpaceData::from_table_files_path(config.tables_path.clone()).await?, - primary_index: SpacePrimaryIndex::primary_from_table_files_path(config.tables_path.clone()).await?, - secondary_indexes: SpaceSecondaryIndexes::from_table_files_path(config.tables_path).await?, + primary_index: SpacePrimaryIndex::primary_from_table_files_path( + config.tables_path.clone(), + ) + .await?, + secondary_indexes: SpaceSecondaryIndexes::from_table_files_path(config.tables_path) + .await?, phantom_data: PhantomData, }) } diff --git a/src/persistence/manager.rs b/src/persistence/manager.rs deleted file mode 100644 index 2cd2c93b..00000000 --- a/src/persistence/manager.rs +++ /dev/null @@ -1,2 +0,0 @@ -// Re-export DiskConfig from engine module -pub use crate::persistence::engine::DiskConfig; diff --git a/src/persistence/mod.rs b/src/persistence/mod.rs index 8b31792d..f75cbe33 100644 --- a/src/persistence/mod.rs +++ b/src/persistence/mod.rs @@ -1,33 +1,26 @@ -mod engine; -mod manager; -pub mod operation; -mod space; -mod task; +use std::future::Future; use crate::persistence::operation::BatchOperation; + +pub use engine::DiskConfig; pub use engine::DiskPersistenceEngine; -pub use manager::DiskConfig; pub use operation::{ - DeleteOperation, InsertOperation, Operation, OperationId, OperationType, UpdateOperation, - validate_events, + validate_events, DeleteOperation, InsertOperation, Operation, OperationId, OperationType, + UpdateOperation, }; pub use space::{ - IndexTableOfContents, SpaceData, SpaceDataOps, SpaceIndex, SpaceIndexOps, SpaceIndexUnsized, - SpaceSecondaryIndexOps, map_index_pages_to_toc_and_general, - map_unsized_index_pages_to_toc_and_general, + map_index_pages_to_toc_and_general, map_unsized_index_pages_to_toc_and_general, IndexTableOfContents, SpaceData, SpaceDataOps, SpaceIndex, + SpaceIndexOps, SpaceIndexUnsized, + SpaceSecondaryIndexOps, }; -use std::future::Future; pub use task::PersistenceTask; -// Re-export for backward compatibility -pub use DiskConfig as PersistenceConfig; +mod engine; +pub mod operation; +mod space; +mod task; -pub trait PersistenceEngine< - PrimaryKeyGenState, - PrimaryKey, - SecondaryIndexEvents, - AvailableIndexes, -> +pub trait PersistenceEngine { type Config; diff --git a/tests/persistence/concurrent/mod.rs b/tests/persistence/concurrent/mod.rs index a9d510b5..6dacf589 100644 --- a/tests/persistence/concurrent/mod.rs +++ b/tests/persistence/concurrent/mod.rs @@ -54,7 +54,7 @@ worktable! ( #[test] #[ignore] fn test_concurrent() { - let config = PersistenceConfig::new("tests/data/concurrent/test", "tests/data/concurrent/test"); + let config = DiskConfig::new("tests/data/concurrent/test", "tests/data/concurrent/test"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) diff --git a/tests/persistence/mod.rs b/tests/persistence/mod.rs index dc2ebc4d..0feb0d41 100644 --- a/tests/persistence/mod.rs +++ b/tests/persistence/mod.rs @@ -7,7 +7,6 @@ mod read; mod space_index; mod sync; mod toc; -mod write; worktable! ( name: TestPersist, @@ -46,10 +45,8 @@ worktable!( } ); -pub const TEST_ROW_COUNT: usize = 100; - pub async fn get_empty_test_wt() -> TestPersistWorkTable { - let config = PersistenceConfig::new("tests/data", "tests/data"); + let config = DiskConfig::new("tests/data", "tests/data"); TestPersistWorkTable::new(config).await.unwrap() } @@ -63,20 +60,3 @@ pub async fn get_test_wt() -> TestPersistWorkTable { table } - -pub async fn get_test_wt_without_secondary_indexes() -> TestWithoutSecondaryIndexesWorkTable { - let config = PersistenceConfig::new("tests/data", "tests/data"); - let table = TestWithoutSecondaryIndexesWorkTable::new(config) - .await - .unwrap(); - - for i in 1..TEST_ROW_COUNT { - let row = TestWithoutSecondaryIndexesRow { - another: i as u64, - id: i as u64, - }; - table.insert(row).unwrap(); - } - - table -} diff --git a/tests/persistence/read.rs b/tests/persistence/read.rs index 2cc4749d..dd0814ca 100644 --- a/tests/persistence/read.rs +++ b/tests/persistence/read.rs @@ -126,7 +126,7 @@ async fn test_data_parse() { #[tokio::test] async fn test_space_parse() { - let config = PersistenceConfig::new("tests/data/expected", "tests/data/expected"); + let config = DiskConfig::new("tests/data/expected", "tests/data/expected"); let table = TestPersistWorkTable::load_from_file(config).await.unwrap(); let expected = get_test_wt().await; @@ -140,7 +140,7 @@ async fn test_space_parse() { async fn test_space_parse_no_file() { remove_dir_if_exists("tests/non-existent".to_string()).await; - let config = PersistenceConfig::new("tests/non-existent", "tests/non-existent"); + let config = DiskConfig::new("tests/non-existent", "tests/non-existent"); let table = TestPersistWorkTable::load_from_file(config).await.unwrap(); let expected = get_empty_test_wt().await; assert_eq!( diff --git a/tests/persistence/sync/many_strings.rs b/tests/persistence/sync/many_strings.rs index 3ae5e7c2..1b6760d2 100644 --- a/tests/persistence/sync/many_strings.rs +++ b/tests/persistence/sync/many_strings.rs @@ -20,7 +20,7 @@ worktable! ( #[test] fn test_space_update_query_pk_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_and_other_sync/update_query_pk", "tests/data/unsized_primary_and_other_sync/update_query_pk", ); @@ -87,7 +87,7 @@ fn test_space_update_query_pk_sync() { #[test] fn test_space_update_query_pk_many_times_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_and_other_sync/update_query_pk_many", "tests/data/unsized_primary_and_other_sync/update_query_pk_many", ); diff --git a/tests/persistence/sync/mod.rs b/tests/persistence/sync/mod.rs index 775b2939..52c92086 100644 --- a/tests/persistence/sync/mod.rs +++ b/tests/persistence/sync/mod.rs @@ -38,7 +38,7 @@ worktable! ( #[test] fn test_wait_for_ops_for_empty() { - let config = PersistenceConfig::new("tests/data/sync/wait", "tests/data/sync/wait"); + let config = DiskConfig::new("tests/data/sync/wait", "tests/data/sync/wait"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -60,7 +60,7 @@ fn test_wait_for_ops_for_empty() { #[test] fn test_space_insert_sync() { - let config = PersistenceConfig::new("tests/data/sync/insert", "tests/data/sync/insert"); + let config = DiskConfig::new("tests/data/sync/insert", "tests/data/sync/insert"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -97,7 +97,7 @@ fn test_space_insert_sync() { #[test] fn test_space_insert_many_sync() { let config = - PersistenceConfig::new("tests/data/sync/insert_many", "tests/data/sync/insert_many"); + DiskConfig::new("tests/data/sync/insert_many", "tests/data/sync/insert_many"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -144,7 +144,7 @@ fn test_space_insert_many_sync() { #[test] fn test_space_update_full_sync() { let config = - PersistenceConfig::new("tests/data/sync/update_full", "tests/data/sync/update_full"); + DiskConfig::new("tests/data/sync/update_full", "tests/data/sync/update_full"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -190,7 +190,7 @@ fn test_space_update_full_sync() { #[test] fn test_space_update_query_pk_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/sync/update_query_pk", "tests/data/sync/update_query_pk", ); @@ -234,7 +234,7 @@ fn test_space_update_query_pk_sync() { #[test] fn test_space_update_query_unique_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/sync/update_query_unique", "tests/data/sync/update_query_unique", ); @@ -278,7 +278,7 @@ fn test_space_update_query_unique_sync() { #[test] fn test_space_update_query_non_unique_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/sync/update_query_non_unique", "tests/data/sync/update_query_non_unique", ); @@ -322,7 +322,7 @@ fn test_space_update_query_non_unique_sync() { #[test] fn test_space_delete_sync() { - let config = PersistenceConfig::new("tests/data/sync/delete", "tests/data/sync/delete"); + let config = DiskConfig::new("tests/data/sync/delete", "tests/data/sync/delete"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -359,7 +359,7 @@ fn test_space_delete_sync() { #[test] fn test_space_delete_query_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/sync/delete_query", "tests/data/sync/delete_query", ); diff --git a/tests/persistence/sync/option.rs b/tests/persistence/sync/option.rs index 5281fda9..58e51364 100644 --- a/tests/persistence/sync/option.rs +++ b/tests/persistence/sync/option.rs @@ -27,7 +27,7 @@ worktable! ( #[test] fn test_option_insert_none_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/insert_none", "tests/data/option_sync/insert_none", ); @@ -70,7 +70,7 @@ fn test_option_insert_none_sync() { #[test] fn test_option_insert_some_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/insert_some", "tests/data/option_sync/insert_some", ); @@ -113,7 +113,7 @@ fn test_option_insert_some_sync() { #[test] fn test_option_update_full_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/update_full", "tests/data/option_sync/update_full", ); @@ -166,7 +166,7 @@ fn test_option_update_full_sync() { #[test] fn test_option_update_by_id_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/update_by_id", "tests/data/option_sync/update_by_id", ); @@ -214,7 +214,7 @@ fn test_option_update_by_id_sync() { #[test] fn test_option_update_none_to_some_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/none_to_some", "tests/data/option_sync/none_to_some", ); @@ -262,7 +262,7 @@ fn test_option_update_none_to_some_sync() { #[test] fn test_option_update_some_to_none_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/some_to_none", "tests/data/option_sync/some_to_none", ); @@ -310,7 +310,7 @@ fn test_option_update_some_to_none_sync() { #[test] fn test_option_update_by_another_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/update_by_another", "tests/data/option_sync/update_by_another", ); @@ -358,7 +358,7 @@ fn test_option_update_by_another_sync() { #[test] fn test_option_update_by_exchange_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/update_by_exchange", "tests/data/option_sync/update_by_exchange", ); @@ -406,7 +406,7 @@ fn test_option_update_by_exchange_sync() { #[test] fn test_option_multiple_rows_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/multiple_rows", "tests/data/option_sync/multiple_rows", ); @@ -486,7 +486,7 @@ worktable! ( #[test] fn test_option_indexed_insert_none_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/indexed_insert_none", "tests/data/option_sync/indexed_insert_none", ); @@ -529,7 +529,7 @@ fn test_option_indexed_insert_none_sync() { #[test] fn test_option_indexed_insert_some_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/indexed_insert_some", "tests/data/option_sync/indexed_insert_some", ); @@ -572,7 +572,7 @@ fn test_option_indexed_insert_some_sync() { #[test] fn test_option_indexed_update_none_to_some_by_id_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/indexed_none_to_some", "tests/data/option_sync/indexed_none_to_some", ); @@ -620,7 +620,7 @@ fn test_option_indexed_update_none_to_some_by_id_sync() { #[test] fn test_option_indexed_update_some_to_none_by_id_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/indexed_some_to_none", "tests/data/option_sync/indexed_some_to_none", ); @@ -668,7 +668,7 @@ fn test_option_indexed_update_some_to_none_by_id_sync() { #[test] fn test_option_indexed_update_by_another_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/indexed_update_by_another", "tests/data/option_sync/indexed_update_by_another", ); @@ -716,7 +716,7 @@ fn test_option_indexed_update_by_another_sync() { #[test] fn test_option_indexed_multiple_rows_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/indexed_multiple_rows", "tests/data/option_sync/indexed_multiple_rows", ); @@ -787,7 +787,7 @@ fn test_option_indexed_multiple_rows_sync() { #[test] fn test_option_indexed_full_row_update_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/option_sync/indexed_full_update", "tests/data/option_sync/indexed_full_update", ); diff --git a/tests/persistence/sync/string_primary_index.rs b/tests/persistence/sync/string_primary_index.rs index 4899254f..c6ee9c47 100644 --- a/tests/persistence/sync/string_primary_index.rs +++ b/tests/persistence/sync/string_primary_index.rs @@ -30,7 +30,7 @@ worktable! ( #[test] fn test_space_insert_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_sync/insert", "tests/data/unsized_primary_sync/insert", ); @@ -68,7 +68,7 @@ fn test_space_insert_sync() { #[test] fn test_space_insert_many_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_sync/insert_many", "tests/data/unsized_primary_sync/insert_many", ); @@ -115,7 +115,7 @@ fn test_space_insert_many_sync() { #[test] fn test_space_update_full_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_sync/update_full", "tests/data/unsized_primary_sync/update_full", ); @@ -163,7 +163,7 @@ fn test_space_update_full_sync() { #[test] fn test_space_update_query_pk_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_sync/update_query_pk", "tests/data/unsized_primary_sync/update_query_pk", ); @@ -206,7 +206,7 @@ fn test_space_update_query_pk_sync() { #[test] fn test_space_update_query_unique_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_sync/update_query_unique", "tests/data/unsized_primary_sync/update_query_unique", ); @@ -250,7 +250,7 @@ fn test_space_update_query_unique_sync() { #[test] fn test_space_update_query_non_unique_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_sync/update_query_non_unique", "tests/data/unsized_primary_sync/update_query_non_unique", ); @@ -294,7 +294,7 @@ fn test_space_update_query_non_unique_sync() { #[test] fn test_space_delete_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_sync/delete", "tests/data/unsized_primary_sync/delete", ); @@ -340,7 +340,7 @@ fn test_space_delete_sync() { #[test] fn test_space_delete_query_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_primary_sync/delete_query", "tests/data/unsized_primary_sync/delete_query", ); diff --git a/tests/persistence/sync/string_re_read.rs b/tests/persistence/sync/string_re_read.rs index 5414af33..01086dc2 100644 --- a/tests/persistence/sync/string_re_read.rs +++ b/tests/persistence/sync/string_re_read.rs @@ -27,7 +27,7 @@ worktable!( #[test] fn test_key() { - let config = PersistenceConfig::new("tests/data/key/key", "tests/data/key/key"); + let config = DiskConfig::new("tests/data/key/key", "tests/data/key/key"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -90,7 +90,7 @@ fn test_key() { #[test] fn test_key_delete_scenario() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/key/delete_scenario", "tests/data/key/delete_scenario", ); @@ -204,7 +204,7 @@ fn test_key_delete_scenario() { #[test] fn test_key_delete() { - let config = PersistenceConfig::new("tests/data/key/delete", "tests/data/key/delete"); + let config = DiskConfig::new("tests/data/key/delete", "tests/data/key/delete"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -272,7 +272,7 @@ fn test_key_delete() { #[test] fn test_key_delete_all() { - let config = PersistenceConfig::new("tests/data/key/delete_all", "tests/data/key/delete_all"); + let config = DiskConfig::new("tests/data/key/delete_all", "tests/data/key/delete_all"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -343,7 +343,7 @@ fn test_key_delete_all() { #[test] fn test_key_delete_all_and_insert() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/key/delete_all_and_insert", "tests/data/key/delete_all_and_insert", ); @@ -435,7 +435,7 @@ fn test_key_delete_all_and_insert() { #[test] fn test_key_delete_by_unique() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/key/delete_unique", "tests/data/key/delete_unique", ); @@ -509,7 +509,7 @@ fn test_key_delete_by_unique() { #[test] fn test_key_delete_by_non_unique() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/key/delete_non_unique", "tests/data/key/delete_non_unique", ); @@ -582,7 +582,7 @@ fn test_key_delete_by_non_unique() { #[test] fn test_big_amount_reread() { - let config = PersistenceConfig::new("tests/data/key/big_amount", "tests/data/key/big_amount"); + let config = DiskConfig::new("tests/data/key/big_amount", "tests/data/key/big_amount"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) diff --git a/tests/persistence/sync/string_secondary_index.rs b/tests/persistence/sync/string_secondary_index.rs index 90686b31..8cfc98d0 100644 --- a/tests/persistence/sync/string_secondary_index.rs +++ b/tests/persistence/sync/string_secondary_index.rs @@ -30,7 +30,7 @@ worktable! ( #[test] fn test_space_insert_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_secondary_sync/insert", "tests/data/unsized_secondary_sync/insert", ); @@ -69,7 +69,7 @@ fn test_space_insert_sync() { #[test] fn test_space_insert_many_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_secondary_sync/insert_many", "tests/data/unsized_secondary_sync/insert_many", ); @@ -118,7 +118,7 @@ fn test_space_insert_many_sync() { #[test] fn test_space_update_full_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_secondary_sync/update_full", "tests/data/unsized_secondary_sync/update_full", ); @@ -174,7 +174,7 @@ fn test_space_update_full_sync() { #[test] fn test_space_update_query_pk_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_secondary_sync/update_query_pk", "tests/data/unsized_secondary_sync/update_query_pk", ); @@ -226,7 +226,7 @@ fn test_space_update_query_pk_sync() { #[test] fn test_space_update_query_unique_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_secondary_sync/update_query_unique", "tests/data/unsized_secondary_sync/update_query_unique", ); @@ -274,7 +274,7 @@ fn test_space_update_query_unique_sync() { #[test] fn test_space_update_query_non_unique_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_secondary_sync/update_query_non_unique", "tests/data/unsized_secondary_sync/update_query_non_unique", ); @@ -329,7 +329,7 @@ fn test_space_update_query_non_unique_sync() { #[test] fn test_space_delete_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_secondary_sync/delete", "tests/data/unsized_secondary_sync/delete", ); @@ -369,7 +369,7 @@ fn test_space_delete_sync() { #[test] fn test_space_delete_query_sync() { - let config = PersistenceConfig::new( + let config = DiskConfig::new( "tests/data/unsized_secondary_sync/delete_query", "tests/data/unsized_secondary_sync/delete_query", ); @@ -409,7 +409,7 @@ fn test_space_delete_query_sync() { // #[test] // fn test_space_all_data_is_available() { -// let config = PersistenceConfig::new( +// let config = DiskConfig::new( // "tests/data/unsized_secondary_sync/data_is_available", // "tests/data/unsized_secondary_sync/data_is_available", // ); diff --git a/tests/persistence/sync/uuid_.rs b/tests/persistence/sync/uuid_.rs index a10274cd..bdf60a81 100644 --- a/tests/persistence/sync/uuid_.rs +++ b/tests/persistence/sync/uuid_.rs @@ -20,7 +20,7 @@ worktable!( #[test] fn test_uuid() { - let config = PersistenceConfig::new("tests/data/uuid/reread", "tests/data/uuid/reread"); + let config = DiskConfig::new("tests/data/uuid/reread", "tests/data/uuid/reread"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -77,7 +77,7 @@ fn test_uuid() { #[test] fn test_big_amount_reread() { - let config = PersistenceConfig::new("tests/data/uuid/big_amount", "tests/data/uuid/big_amount"); + let config = DiskConfig::new("tests/data/uuid/big_amount", "tests/data/uuid/big_amount"); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) diff --git a/tests/persistence/write.rs b/tests/persistence/write.rs deleted file mode 100644 index 0d91271e..00000000 --- a/tests/persistence/write.rs +++ /dev/null @@ -1,49 +0,0 @@ -use crate::{check_if_dirs_are_same, remove_dir_if_exists}; - -use crate::persistence::{get_test_wt, get_test_wt_without_secondary_indexes}; - -#[test] -fn test_persist() { - let runtime = tokio::runtime::Builder::new_multi_thread() - .worker_threads(2) - .enable_io() - .enable_time() - .build() - .unwrap(); - - runtime.block_on(async { - remove_dir_if_exists("tests/data/test_persist".to_string()).await; - - let table = get_test_wt().await; - table.wait_for_ops().await; - table.persist().await.unwrap(); - - assert!(check_if_dirs_are_same( - "tests/data/test_persist".to_string(), - "tests/data/expected/test_persist".to_string() - )) - }); -} - -#[test] -fn test_persist_without_secondary_indexes() { - let runtime = tokio::runtime::Builder::new_multi_thread() - .worker_threads(2) - .enable_io() - .enable_time() - .build() - .unwrap(); - - runtime.block_on(async { - remove_dir_if_exists("tests/data/test_without_secondary_indexes".to_string()).await; - - let table = get_test_wt_without_secondary_indexes().await; - table.wait_for_ops().await; - table.persist().await.unwrap(); - - assert!(check_if_dirs_are_same( - "tests/data/test_without_secondary_indexes".to_string(), - "tests/data/expected/test_without_secondary_indexes".to_string() - )) - }); -} From 07d6369ec1bb8d82e42e2fbdaa2030456ab05e90 Mon Sep 17 00:00:00 2001 From: Handy-caT <37216852+Handy-caT@users.noreply.github.com> Date: Tue, 10 Mar 2026 22:20:18 +0300 Subject: [PATCH 3/5] finalize persistence refactor --- .../persist_table/generator/space_file/mod.rs | 8 +- .../generator/space_file/worktable_impls.rs | 21 -- .../src/worktable/generator/table/impls.rs | 47 +++- src/lib.rs | 15 +- src/persistence/engine.rs | 34 ++- src/persistence/mod.rs | 26 +- tests/persistence/concurrent/mod.rs | 17 +- tests/persistence/mod.rs | 6 +- tests/persistence/read.rs | 11 +- tests/persistence/sync/many_strings.rs | 37 ++- tests/persistence/sync/mod.rs | 102 ++++---- tests/persistence/sync/option.rs | 241 ++++++------------ .../persistence/sync/string_primary_index.rs | 105 +++----- tests/persistence/sync/string_re_read.rs | 164 +++++------- .../sync/string_secondary_index.rs | 105 +++----- tests/persistence/sync/uuid_.rs | 35 ++- 16 files changed, 416 insertions(+), 558 deletions(-) diff --git a/codegen/src/persist_table/generator/space_file/mod.rs b/codegen/src/persist_table/generator/space_file/mod.rs index 6516558e..65daa02e 100644 --- a/codegen/src/persist_table/generator/space_file/mod.rs +++ b/codegen/src/persist_table/generator/space_file/mod.rs @@ -109,7 +109,6 @@ impl Generator { let index_ident = name_generator.get_index_type_ident(); let task_ident = name_generator.get_persistence_task_ident(); let engine_ident = name_generator.get_persistence_engine_ident(); - let dir_name = name_generator.get_dir_name(); let const_name = name_generator.get_page_inner_size_const_ident(); let pk_type = name_generator.get_primary_key_type_ident(); let lock_type = name_generator.get_lock_type_ident(); @@ -166,7 +165,8 @@ impl Generator { }; quote! { - pub async fn into_worktable(self, config: DiskConfig) -> #wt_ident { + pub async fn into_worktable(self, engine: #engine_ident) -> #wt_ident { + let config = engine.config().clone(); let mut page_id = 1; let data = self.data.into_iter().map(|p| { let mut data = Data::from_data_page(p); @@ -193,10 +193,6 @@ impl Generator { pk_phantom: std::marker::PhantomData, }; - let engine_config = DiskConfig::new(config.config_path.clone(), format!("{}/{}", config.tables_path, #dir_name)); - let engine: #engine_ident = DiskPersistenceEngine::new(engine_config) - .await - .expect("should not panic as SpaceFile is ok"); #wt_ident( table, config, diff --git a/codegen/src/persist_table/generator/space_file/worktable_impls.rs b/codegen/src/persist_table/generator/space_file/worktable_impls.rs index 78da2ab3..df54184b 100644 --- a/codegen/src/persist_table/generator/space_file/worktable_impls.rs +++ b/codegen/src/persist_table/generator/space_file/worktable_impls.rs @@ -9,14 +9,12 @@ impl Generator { let ident = &self.struct_def.ident; let space_info_fn = self.gen_worktable_space_info_fn(); let persisted_pk_fn = self.gen_worktable_persisted_primary_key_fn(); - let from_file_fn = self.gen_worktable_from_file_fn(); let wait_for_ops_fn = self.gen_worktable_wait_for_ops_fn(); quote! { impl #ident { #space_info_fn #persisted_pk_fn - #from_file_fn #wait_for_ops_fn } } @@ -30,25 +28,6 @@ impl Generator { } } - fn gen_worktable_from_file_fn(&self) -> TokenStream { - let name_generator = WorktableNameGenerator::from_struct_ident(&self.struct_def.ident); - let space_ident = name_generator.get_space_file_ident(); - let wt_ident = name_generator.get_work_table_ident(); - let dir_name = name_generator.get_dir_name(); - - quote! { - pub async fn load_from_file(config: DiskConfig) -> eyre::Result { - let filename = format!("{}/{}", config.tables_path.as_str(), #dir_name); - if !std::path::Path::new(filename.as_str()).exists() { - return #wt_ident::new(config).await; - }; - let space = #space_ident::parse_file(&filename).await?; - let table = space.into_worktable(config).await; - Ok(table) - } - } - } - fn gen_worktable_space_info_fn(&self) -> TokenStream { let name_generator = WorktableNameGenerator::from_struct_ident(&self.struct_def.ident); let pk = name_generator.get_primary_key_type_ident(); diff --git a/codegen/src/worktable/generator/table/impls.rs b/codegen/src/worktable/generator/table/impls.rs index 71bc32ec..b23c86ae 100644 --- a/codegen/src/worktable/generator/table/impls.rs +++ b/codegen/src/worktable/generator/table/impls.rs @@ -10,7 +10,7 @@ impl Generator { let name_generator = WorktableNameGenerator::from_table_name(self.name.to_string()); let ident = name_generator.get_work_table_ident(); - let new_fn = self.gen_table_new_fn(); + let persisted_impl = self.gen_table_new_fn(); let name_fn = self.gen_table_name_fn(); let select_fn = self.gen_table_select_fn(); let insert_fn = self.gen_table_insert_fn(); @@ -24,8 +24,8 @@ impl Generator { let vacuum_fn = self.gen_table_vacuum_fn(); quote! { + #persisted_impl impl #ident { - #new_fn #name_fn #select_fn #insert_fn @@ -43,10 +43,11 @@ impl Generator { fn gen_table_new_fn(&self) -> TokenStream { let name_generator = WorktableNameGenerator::from_table_name(self.name.to_string()); + let ident = name_generator.get_work_table_ident(); let table_name = name_generator.get_work_table_literal_name(); let engine = name_generator.get_persistence_engine_ident(); let task = name_generator.get_persistence_task_ident(); - let dir_name = name_generator.get_dir_name(); + let space_ident = name_generator.get_space_file_ident(); let pk_type = name_generator.get_primary_key_type_ident(); let const_name = name_generator.get_page_inner_size_const_ident(); @@ -81,17 +82,28 @@ impl Generator { } }; quote! { - pub async fn new(config: DiskConfig) -> eyre::Result { - let mut inner = WorkTable::default(); - inner.table_name = #table_name; - #index_setup - let engine_config = DiskConfig::new(config.config_path.clone(), format!("{}/{}", config.tables_path, #dir_name)); - let engine: #engine = DiskPersistenceEngine::new(engine_config).await?; - core::result::Result::Ok(Self( - inner, - config, - #task::run_engine(engine) - )) + impl worktable::persistence::PersistedWorkTable<#engine> for #ident { + async fn new(engine: #engine) -> eyre::Result { + let mut inner = WorkTable::default(); + inner.table_name = #table_name; + #index_setup + let config = engine.config().clone(); + core::result::Result::Ok(Self( + inner, + config, + #task::run_engine(engine) + )) + } + + async fn load(engine: #engine) -> eyre::Result { + let table_path = engine.config().table_path(); + if !std::path::Path::new(table_path).exists() { + return Self::new(engine).await; + }; + let space = #space_ident::parse_file(table_path).await?; + let table = space.into_worktable(engine).await; + Ok(table) + } } } } else { @@ -100,10 +112,17 @@ impl Generator { } fn gen_table_name_fn(&self) -> TokenStream { + let name_generator = WorktableNameGenerator::from_table_name(self.name.to_string()); + let dir_name = name_generator.get_dir_name(); + quote! { pub fn name(&self) -> &'static str { &self.0.table_name } + + pub fn name_snake_case() -> &'static str { + #dir_name + } } } diff --git a/src/lib.rs b/src/lib.rs index 5cfa3439..b8aa9c50 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,18 +1,19 @@ pub mod in_memory; mod index; pub mod lock; +mod mem_stat; +pub mod persistence; mod primary_key; mod row; mod table; -pub use data_bucket; -mod mem_stat; -mod persistence; mod util; pub use index::*; +pub use persistence::{PersistedWorkTable, PersistenceConfig}; pub use row::*; pub use table::*; +pub use data_bucket; pub use worktable_codegen::worktable; pub mod prelude { @@ -24,10 +25,10 @@ pub mod prelude { pub use crate::lock::{LockGuard, LockMap}; pub use crate::mem_stat::MemStat; pub use crate::persistence::{ - DeleteOperation, IndexTableOfContents, InsertOperation, Operation, OperationId, - DiskConfig, DiskPersistenceEngine, PersistenceEngine, PersistenceTask, SpaceData, - SpaceDataOps, SpaceIndex, SpaceIndexOps, SpaceIndexUnsized, SpaceSecondaryIndexOps, - UpdateOperation, map_index_pages_to_toc_and_general, + DeleteOperation, DiskConfig, DiskPersistenceEngine, IndexTableOfContents, InsertOperation, + Operation, OperationId, PersistedWorkTable, PersistenceConfig, PersistenceEngine, + PersistenceTask, SpaceData, SpaceDataOps, SpaceIndex, SpaceIndexOps, SpaceIndexUnsized, + SpaceSecondaryIndexOps, UpdateOperation, map_index_pages_to_toc_and_general, map_unsized_index_pages_to_toc_and_general, validate_events, }; pub use crate::primary_key::{PrimaryKeyGenerator, PrimaryKeyGeneratorState, TablePrimaryKey}; diff --git a/src/persistence/engine.rs b/src/persistence/engine.rs index b0e15dd1..fb80e1b1 100644 --- a/src/persistence/engine.rs +++ b/src/persistence/engine.rs @@ -4,14 +4,16 @@ use std::hash::Hash; use std::marker::PhantomData; use std::path::Path; +use futures::StreamExt; use futures::future::Either; use futures::stream::FuturesUnordered; -use futures::StreamExt; +use crate::TableSecondaryIndexEventsOps; use crate::persistence::operation::{BatchOperation, Operation}; -use crate::persistence::{PersistenceEngine, SpaceDataOps, SpaceIndexOps, SpaceSecondaryIndexOps}; +use crate::persistence::{ + PersistenceConfig, PersistenceEngine, SpaceDataOps, SpaceIndexOps, SpaceSecondaryIndexOps, +}; use crate::prelude::{PrimaryKeyGeneratorState, TablePrimaryKey}; -use crate::TableSecondaryIndexEventsOps; #[derive(Debug, Clone)] pub struct DiskConfig { @@ -26,6 +28,25 @@ impl DiskConfig { tables_path: table_files_dir.into(), } } + + pub fn new_with_table_name, S2: AsRef>( + config_path: S1, + table_name_snake_case: S2, + ) -> Self { + let config_path = config_path.into(); + let table_name = table_name_snake_case.as_ref(); + let tables_path = format!("{}/{}", config_path.trim_end_matches('/'), table_name); + Self { + config_path, + tables_path, + } + } +} + +impl PersistenceConfig for DiskConfig { + fn table_path(&self) -> &str { + &self.tables_path + } } #[derive(Debug)] @@ -42,6 +63,7 @@ where PrimaryKey: TablePrimaryKey, ::Generator: PrimaryKeyGeneratorState { + config: DiskConfig, pub data: SpaceData, pub primary_index: SpacePrimaryIndex, pub secondary_indexes: SpaceSecondaryIndexes, @@ -89,6 +111,7 @@ where } Ok(Self { + config: config.clone(), data: SpaceData::from_table_files_path(config.tables_path.clone()).await?, primary_index: SpacePrimaryIndex::primary_from_table_files_path( config.tables_path.clone(), @@ -99,6 +122,11 @@ where phantom_data: PhantomData, }) } + + fn config(&self) -> &DiskConfig { + &self.config + } + async fn apply_operation( &mut self, op: Operation, diff --git a/src/persistence/mod.rs b/src/persistence/mod.rs index f75cbe33..ed1febf1 100644 --- a/src/persistence/mod.rs +++ b/src/persistence/mod.rs @@ -20,9 +20,30 @@ pub mod operation; mod space; mod task; +/// Trait for persistence configuration types. +/// Provides access to the table-specific path for file operations. +pub trait PersistenceConfig { + /// Returns the table-specific path for this worktable + fn table_path(&self) -> &str; +} + +/// Trait for worktables that can be created/loaded from a persistence engine. +/// The engine must implement PersistenceEngine and provide access to its config. +pub trait PersistedWorkTable: Sized +where + E: Send, +{ + /// Create a new empty worktable with the given engine + fn new(engine: E) -> impl Future> + Send; + + /// Load worktable from disk using the engine's config to find files. + /// Falls back to `new()` if no files exist. + fn load(engine: E) -> impl Future> + Send; +} + pub trait PersistenceEngine { - type Config; + type Config: PersistenceConfig; fn new(config: Self::Config) -> impl Future> + Send where @@ -42,4 +63,7 @@ pub trait PersistenceEngine, ) -> impl Future> + Send; + + /// Returns the configuration used to create this engine + fn config(&self) -> &Self::Config; } diff --git a/tests/persistence/concurrent/mod.rs b/tests/persistence/concurrent/mod.rs index 6dacf589..d5c35029 100644 --- a/tests/persistence/concurrent/mod.rs +++ b/tests/persistence/concurrent/mod.rs @@ -2,6 +2,7 @@ use std::sync::Arc; use std::time::Duration; use tokio::task; +use worktable::prelude::PersistedWorkTable; use worktable::prelude::*; use worktable::worktable; @@ -54,7 +55,7 @@ worktable! ( #[test] #[ignore] fn test_concurrent() { - let config = DiskConfig::new("tests/data/concurrent/test", "tests/data/concurrent/test"); + let config = DiskConfig::new_with_table_name("tests/data/concurrent/test", TestConcurrentWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -66,11 +67,8 @@ fn test_concurrent() { runtime.block_on(async { remove_dir_if_exists("tests/data/concurrent/test".to_string()).await; { - let table = Arc::new( - TestConcurrentWorkTable::load_from_file(config.clone()) - .await - .unwrap(), - ); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = Arc::new(TestConcurrentWorkTable::load(engine).await.unwrap()); let total: u64 = 5_000; let tasks = 8; @@ -110,11 +108,8 @@ fn test_concurrent() { table.wait_for_ops().await; } { - let table = Arc::new( - TestConcurrentWorkTable::load_from_file(config.clone()) - .await - .unwrap(), - ); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = Arc::new(TestConcurrentWorkTable::load(engine).await.unwrap()); assert_eq!(table.count(), 5_000) } }) diff --git a/tests/persistence/mod.rs b/tests/persistence/mod.rs index 0feb0d41..6ea0359d 100644 --- a/tests/persistence/mod.rs +++ b/tests/persistence/mod.rs @@ -1,3 +1,4 @@ +use worktable::prelude::PersistedWorkTable; use worktable::prelude::*; use worktable::worktable; @@ -46,8 +47,9 @@ worktable!( ); pub async fn get_empty_test_wt() -> TestPersistWorkTable { - let config = DiskConfig::new("tests/data", "tests/data"); - TestPersistWorkTable::new(config).await.unwrap() + let config = DiskConfig::new_with_table_name("tests/data", TestPersistWorkTable::name_snake_case()); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + TestPersistWorkTable::new(engine).await.unwrap() } pub async fn get_test_wt() -> TestPersistWorkTable { diff --git a/tests/persistence/read.rs b/tests/persistence/read.rs index dd0814ca..5de0e1fa 100644 --- a/tests/persistence/read.rs +++ b/tests/persistence/read.rs @@ -1,4 +1,5 @@ use tokio::fs::File; +use worktable::prelude::PersistedWorkTable; use worktable::prelude::*; // TODO: Fix naming. @@ -126,8 +127,9 @@ async fn test_data_parse() { #[tokio::test] async fn test_space_parse() { - let config = DiskConfig::new("tests/data/expected", "tests/data/expected"); - let table = TestPersistWorkTable::load_from_file(config).await.unwrap(); + let config = DiskConfig::new_with_table_name("tests/data/expected", TestPersistWorkTable::name_snake_case()); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestPersistWorkTable::load(engine).await.unwrap(); let expected = get_test_wt().await; assert_eq!( @@ -140,8 +142,9 @@ async fn test_space_parse() { async fn test_space_parse_no_file() { remove_dir_if_exists("tests/non-existent".to_string()).await; - let config = DiskConfig::new("tests/non-existent", "tests/non-existent"); - let table = TestPersistWorkTable::load_from_file(config).await.unwrap(); + let config = DiskConfig::new_with_table_name("tests/non-existent", TestPersistWorkTable::name_snake_case()); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestPersistWorkTable::load(engine).await.unwrap(); let expected = get_empty_test_wt().await; assert_eq!( table.select_all().execute().unwrap(), diff --git a/tests/persistence/sync/many_strings.rs b/tests/persistence/sync/many_strings.rs index 1b6760d2..2f96aaeb 100644 --- a/tests/persistence/sync/many_strings.rs +++ b/tests/persistence/sync/many_strings.rs @@ -1,3 +1,4 @@ +use worktable::prelude::PersistedWorkTable; use worktable::prelude::*; use worktable_codegen::worktable; @@ -20,10 +21,7 @@ worktable! ( #[test] fn test_space_update_query_pk_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_and_other_sync/update_query_pk", - "tests/data/unsized_primary_and_other_sync/update_query_pk", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_and_other_sync/update_query_pk", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -39,9 +37,8 @@ fn test_space_update_query_pk_sync() { .await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, field: "".to_string(), @@ -58,9 +55,8 @@ fn test_space_update_query_pk_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk.clone()).is_some()); assert_eq!(table.select(pk.clone()).unwrap().another, 43); let q = FieldAnotherByIdQuery { @@ -74,7 +70,8 @@ fn test_space_update_query_pk_sync() { table.wait_for_ops().await; } { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk.clone()).is_some()); assert_eq!(table.select(pk.clone()).unwrap().another, 0); assert_eq!( @@ -87,10 +84,7 @@ fn test_space_update_query_pk_sync() { #[test] fn test_space_update_query_pk_many_times_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_and_other_sync/update_query_pk_many", - "tests/data/unsized_primary_and_other_sync/update_query_pk_many", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_and_other_sync/update_query_pk_many", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -106,9 +100,8 @@ fn test_space_update_query_pk_many_times_sync() { .await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, field: "".to_string(), @@ -125,9 +118,8 @@ fn test_space_update_query_pk_many_times_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk.clone()).is_some()); assert_eq!(table.select(pk.clone()).unwrap().another, 43); for i in 0..512 { @@ -144,7 +136,8 @@ fn test_space_update_query_pk_many_times_sync() { table.wait_for_ops().await; } { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk.clone()).is_some()); assert_eq!(table.select(pk.clone()).unwrap().another, 511); assert_eq!( diff --git a/tests/persistence/sync/mod.rs b/tests/persistence/sync/mod.rs index 52c92086..fc0ebc19 100644 --- a/tests/persistence/sync/mod.rs +++ b/tests/persistence/sync/mod.rs @@ -2,6 +2,7 @@ use crate::remove_dir_if_exists; use std::time::Duration; use worktable::prelude::*; +use worktable::prelude::PersistedWorkTable; use worktable::worktable; mod many_strings; @@ -38,7 +39,7 @@ worktable! ( #[test] fn test_wait_for_ops_for_empty() { - let config = DiskConfig::new("tests/data/sync/wait", "tests/data/sync/wait"); + let config = DiskConfig::new_with_table_name("tests/data/sync/wait", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -50,9 +51,8 @@ fn test_wait_for_ops_for_empty() { runtime.block_on(async { remove_dir_if_exists("tests/data/sync/wait".to_string()).await; - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); tokio::time::sleep(Duration::from_millis(200)).await; table.wait_for_ops().await; }); @@ -60,7 +60,7 @@ fn test_wait_for_ops_for_empty() { #[test] fn test_space_insert_sync() { - let config = DiskConfig::new("tests/data/sync/insert", "tests/data/sync/insert"); + let config = DiskConfig::new_with_table_name("tests/data/sync/insert", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -73,9 +73,8 @@ fn test_space_insert_sync() { remove_dir_if_exists("tests/data/sync/insert".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -87,7 +86,8 @@ fn test_space_insert_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!(table.0.pk_gen.get_state(), pk + 1) } @@ -96,8 +96,7 @@ fn test_space_insert_sync() { #[test] fn test_space_insert_many_sync() { - let config = - DiskConfig::new("tests/data/sync/insert_many", "tests/data/sync/insert_many"); + let config = DiskConfig::new_with_table_name("tests/data/sync/insert_many", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -111,9 +110,8 @@ fn test_space_insert_many_sync() { let mut pks = vec![]; { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); for i in 0..5_000 { let pk = { let row = TestSyncRow { @@ -131,7 +129,8 @@ fn test_space_insert_many_sync() { } { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let last = *pks.last().unwrap(); for pk in pks { assert!(table.select(pk).is_some()); @@ -143,8 +142,7 @@ fn test_space_insert_many_sync() { #[test] fn test_space_update_full_sync() { - let config = - DiskConfig::new("tests/data/sync/update_full", "tests/data/sync/update_full"); + let config = DiskConfig::new_with_table_name("tests/data/sync/update_full", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -157,9 +155,8 @@ fn test_space_update_full_sync() { remove_dir_if_exists("tests/data/sync/update_full".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -180,7 +177,8 @@ fn test_space_update_full_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!(table.select(pk).unwrap().another, 13); assert_eq!(table.0.pk_gen.get_state(), pk + 1) @@ -190,10 +188,7 @@ fn test_space_update_full_sync() { #[test] fn test_space_update_query_pk_sync() { - let config = DiskConfig::new( - "tests/data/sync/update_query_pk", - "tests/data/sync/update_query_pk", - ); + let config = DiskConfig::new_with_table_name("tests/data/sync/update_query_pk", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -206,9 +201,8 @@ fn test_space_update_query_pk_sync() { remove_dir_if_exists("tests/data/sync/update_query_pk".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -224,7 +218,8 @@ fn test_space_update_query_pk_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!(table.select(pk).unwrap().another, 13); assert_eq!(table.0.pk_gen.get_state(), pk + 1) @@ -234,10 +229,7 @@ fn test_space_update_query_pk_sync() { #[test] fn test_space_update_query_unique_sync() { - let config = DiskConfig::new( - "tests/data/sync/update_query_unique", - "tests/data/sync/update_query_unique", - ); + let config = DiskConfig::new_with_table_name("tests/data/sync/update_query_unique", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -250,9 +242,8 @@ fn test_space_update_query_unique_sync() { remove_dir_if_exists("tests/data/sync/update_query_unique".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -268,7 +259,8 @@ fn test_space_update_query_unique_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!(table.select(pk).unwrap().field, 1.0); assert_eq!(table.0.pk_gen.get_state(), pk + 1) @@ -278,10 +270,7 @@ fn test_space_update_query_unique_sync() { #[test] fn test_space_update_query_non_unique_sync() { - let config = DiskConfig::new( - "tests/data/sync/update_query_non_unique", - "tests/data/sync/update_query_non_unique", - ); + let config = DiskConfig::new_with_table_name("tests/data/sync/update_query_non_unique", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -294,9 +283,8 @@ fn test_space_update_query_non_unique_sync() { remove_dir_if_exists("tests/data/sync/update_query_non_unique".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 10, @@ -312,7 +300,8 @@ fn test_space_update_query_non_unique_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!(table.select(pk).unwrap().another, 13); assert_eq!(table.0.pk_gen.get_state(), pk + 1) @@ -322,7 +311,7 @@ fn test_space_update_query_non_unique_sync() { #[test] fn test_space_delete_sync() { - let config = DiskConfig::new("tests/data/sync/delete", "tests/data/sync/delete"); + let config = DiskConfig::new_with_table_name("tests/data/sync/delete", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -335,9 +324,8 @@ fn test_space_delete_sync() { remove_dir_if_exists("tests/data/sync/delete".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -350,7 +338,8 @@ fn test_space_delete_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_none()); assert_eq!(table.0.pk_gen.get_state(), pk + 1) } @@ -359,10 +348,7 @@ fn test_space_delete_sync() { #[test] fn test_space_delete_query_sync() { - let config = DiskConfig::new( - "tests/data/sync/delete_query", - "tests/data/sync/delete_query", - ); + let config = DiskConfig::new_with_table_name("tests/data/sync/delete_query", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -375,9 +361,8 @@ fn test_space_delete_query_sync() { remove_dir_if_exists("tests/data/sync/delete_query".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -390,7 +375,8 @@ fn test_space_delete_query_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_none()); assert_eq!(table.0.pk_gen.get_state(), pk + 1) } diff --git a/tests/persistence/sync/option.rs b/tests/persistence/sync/option.rs index 58e51364..85d64a7c 100644 --- a/tests/persistence/sync/option.rs +++ b/tests/persistence/sync/option.rs @@ -1,4 +1,5 @@ use worktable::prelude::*; +use worktable::prelude::PersistedWorkTable; use worktable_codegen::worktable; use crate::remove_dir_if_exists; @@ -27,10 +28,7 @@ worktable! ( #[test] fn test_option_insert_none_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/insert_none", - "tests/data/option_sync/insert_none", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/insert_none", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -43,9 +41,8 @@ fn test_option_insert_none_sync() { remove_dir_if_exists("tests/data/option_sync/insert_none".to_string()).await; let pk = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncRow { id: table.get_next_pk().0, test: None, @@ -58,9 +55,8 @@ fn test_option_insert_none_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, None); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -70,10 +66,7 @@ fn test_option_insert_none_sync() { #[test] fn test_option_insert_some_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/insert_some", - "tests/data/option_sync/insert_some", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/insert_some", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -86,9 +79,8 @@ fn test_option_insert_some_sync() { remove_dir_if_exists("tests/data/option_sync/insert_some".to_string()).await; let pk = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncRow { id: table.get_next_pk().0, test: Some(42), @@ -101,9 +93,8 @@ fn test_option_insert_some_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(42)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -113,10 +104,7 @@ fn test_option_insert_some_sync() { #[test] fn test_option_update_full_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/update_full", - "tests/data/option_sync/update_full", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/update_full", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -129,9 +117,8 @@ fn test_option_update_full_sync() { remove_dir_if_exists("tests/data/option_sync/update_full".to_string()).await; let pk = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncRow { id: table.get_next_pk().0, test: None, @@ -154,9 +141,8 @@ fn test_option_update_full_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(100)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -166,10 +152,7 @@ fn test_option_update_full_sync() { #[test] fn test_option_update_by_id_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/update_by_id", - "tests/data/option_sync/update_by_id", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/update_by_id", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -182,9 +165,8 @@ fn test_option_update_by_id_sync() { remove_dir_if_exists("tests/data/option_sync/update_by_id".to_string()).await; let pk = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncRow { id: table.get_next_pk().0, test: None, @@ -202,9 +184,8 @@ fn test_option_update_by_id_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(42)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -214,10 +195,7 @@ fn test_option_update_by_id_sync() { #[test] fn test_option_update_none_to_some_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/none_to_some", - "tests/data/option_sync/none_to_some", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/none_to_some", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -230,9 +208,8 @@ fn test_option_update_none_to_some_sync() { remove_dir_if_exists("tests/data/option_sync/none_to_some".to_string()).await; let pk = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncRow { id: table.get_next_pk().0, test: None, @@ -250,9 +227,8 @@ fn test_option_update_none_to_some_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(55)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -262,10 +238,7 @@ fn test_option_update_none_to_some_sync() { #[test] fn test_option_update_some_to_none_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/some_to_none", - "tests/data/option_sync/some_to_none", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/some_to_none", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -278,9 +251,8 @@ fn test_option_update_some_to_none_sync() { remove_dir_if_exists("tests/data/option_sync/some_to_none".to_string()).await; let pk = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncRow { id: table.get_next_pk().0, test: Some(100), @@ -298,9 +270,8 @@ fn test_option_update_some_to_none_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, None); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -310,10 +281,7 @@ fn test_option_update_some_to_none_sync() { #[test] fn test_option_update_by_another_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/update_by_another", - "tests/data/option_sync/update_by_another", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/update_by_another", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -326,9 +294,8 @@ fn test_option_update_by_another_sync() { remove_dir_if_exists("tests/data/option_sync/update_by_another".to_string()).await; let pk = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncRow { id: table.get_next_pk().0, test: None, @@ -346,9 +313,8 @@ fn test_option_update_by_another_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(77)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -358,10 +324,7 @@ fn test_option_update_by_another_sync() { #[test] fn test_option_update_by_exchange_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/update_by_exchange", - "tests/data/option_sync/update_by_exchange", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/update_by_exchange", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -374,9 +337,8 @@ fn test_option_update_by_exchange_sync() { remove_dir_if_exists("tests/data/option_sync/update_by_exchange".to_string()).await; let pk = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncRow { id: table.get_next_pk().0, test: None, @@ -394,9 +356,8 @@ fn test_option_update_by_exchange_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(88)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -406,10 +367,7 @@ fn test_option_update_by_exchange_sync() { #[test] fn test_option_multiple_rows_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/multiple_rows", - "tests/data/option_sync/multiple_rows", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/multiple_rows", TestOptionSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -422,9 +380,8 @@ fn test_option_multiple_rows_sync() { remove_dir_if_exists("tests/data/option_sync/multiple_rows".to_string()).await; let (pk1, pk2) = { - let table = TestOptionSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); let row1 = TestOptionSyncRow { id: table.get_next_pk().0, @@ -452,9 +409,8 @@ fn test_option_multiple_rows_sync() { }; { - let table = TestOptionSyncWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncWorkTable::load(engine).await.unwrap(); assert_eq!(table.select(pk1).unwrap().test, Some(30)); assert_eq!(table.select(pk2).unwrap().test, Some(20)); } @@ -486,10 +442,7 @@ worktable! ( #[test] fn test_option_indexed_insert_none_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/indexed_insert_none", - "tests/data/option_sync/indexed_insert_none", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/indexed_insert_none", TestOptionSyncIndexWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -502,9 +455,8 @@ fn test_option_indexed_insert_none_sync() { remove_dir_if_exists("tests/data/option_sync/indexed_insert_none".to_string()).await; let pk = { - let table = TestOptionSyncIndexWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncIndexRow { id: table.get_next_pk().0, test: None, @@ -517,9 +469,8 @@ fn test_option_indexed_insert_none_sync() { }; { - let table = TestOptionSyncIndexWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, None); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -529,10 +480,7 @@ fn test_option_indexed_insert_none_sync() { #[test] fn test_option_indexed_insert_some_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/indexed_insert_some", - "tests/data/option_sync/indexed_insert_some", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/indexed_insert_some", TestOptionSyncIndexWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -545,9 +493,8 @@ fn test_option_indexed_insert_some_sync() { remove_dir_if_exists("tests/data/option_sync/indexed_insert_some".to_string()).await; let pk = { - let table = TestOptionSyncIndexWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncIndexRow { id: table.get_next_pk().0, test: Some(42), @@ -560,9 +507,8 @@ fn test_option_indexed_insert_some_sync() { }; { - let table = TestOptionSyncIndexWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(42)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -572,10 +518,7 @@ fn test_option_indexed_insert_some_sync() { #[test] fn test_option_indexed_update_none_to_some_by_id_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/indexed_none_to_some", - "tests/data/option_sync/indexed_none_to_some", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/indexed_none_to_some", TestOptionSyncIndexWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -588,9 +531,8 @@ fn test_option_indexed_update_none_to_some_by_id_sync() { remove_dir_if_exists("tests/data/option_sync/indexed_none_to_some".to_string()).await; let pk = { - let table = TestOptionSyncIndexWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncIndexRow { id: table.get_next_pk().0, test: None, @@ -608,9 +550,8 @@ fn test_option_indexed_update_none_to_some_by_id_sync() { }; { - let table = TestOptionSyncIndexWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(55)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -620,10 +561,7 @@ fn test_option_indexed_update_none_to_some_by_id_sync() { #[test] fn test_option_indexed_update_some_to_none_by_id_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/indexed_some_to_none", - "tests/data/option_sync/indexed_some_to_none", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/indexed_some_to_none", TestOptionSyncIndexWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -636,9 +574,8 @@ fn test_option_indexed_update_some_to_none_by_id_sync() { remove_dir_if_exists("tests/data/option_sync/indexed_some_to_none".to_string()).await; let pk = { - let table = TestOptionSyncIndexWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncIndexRow { id: table.get_next_pk().0, test: Some(100), @@ -656,9 +593,8 @@ fn test_option_indexed_update_some_to_none_by_id_sync() { }; { - let table = TestOptionSyncIndexWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, None); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -668,10 +604,7 @@ fn test_option_indexed_update_some_to_none_by_id_sync() { #[test] fn test_option_indexed_update_by_another_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/indexed_update_by_another", - "tests/data/option_sync/indexed_update_by_another", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/indexed_update_by_another", TestOptionSyncIndexWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -684,9 +617,8 @@ fn test_option_indexed_update_by_another_sync() { remove_dir_if_exists("tests/data/option_sync/indexed_update_by_another".to_string()).await; let pk = { - let table = TestOptionSyncIndexWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncIndexRow { id: table.get_next_pk().0, test: None, @@ -704,9 +636,8 @@ fn test_option_indexed_update_by_another_sync() { }; { - let table = TestOptionSyncIndexWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(77)); assert_eq!(table.0.pk_gen.get_state(), pk + 1); @@ -716,10 +647,7 @@ fn test_option_indexed_update_by_another_sync() { #[test] fn test_option_indexed_multiple_rows_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/indexed_multiple_rows", - "tests/data/option_sync/indexed_multiple_rows", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/indexed_multiple_rows", TestOptionSyncIndexWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -732,9 +660,8 @@ fn test_option_indexed_multiple_rows_sync() { remove_dir_if_exists("tests/data/option_sync/indexed_multiple_rows".to_string()).await; let (pk1, pk2, pk3) = { - let table = TestOptionSyncIndexWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let row1 = TestOptionSyncIndexRow { id: table.get_next_pk().0, @@ -775,9 +702,8 @@ fn test_option_indexed_multiple_rows_sync() { }; { - let table = TestOptionSyncIndexWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); assert_eq!(table.select(pk1).unwrap().test, Some(40)); assert_eq!(table.select(pk2).unwrap().test, Some(50)); assert_eq!(table.select(pk3).unwrap().test, Some(30)); @@ -787,10 +713,7 @@ fn test_option_indexed_multiple_rows_sync() { #[test] fn test_option_indexed_full_row_update_sync() { - let config = DiskConfig::new( - "tests/data/option_sync/indexed_full_update", - "tests/data/option_sync/indexed_full_update", - ); + let config = DiskConfig::new_with_table_name("tests/data/option_sync/indexed_full_update", TestOptionSyncIndexWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -803,9 +726,8 @@ fn test_option_indexed_full_row_update_sync() { remove_dir_if_exists("tests/data/option_sync/indexed_full_update".to_string()).await; let pk = { - let table = TestOptionSyncIndexWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let row = TestOptionSyncIndexRow { id: table.get_next_pk().0, test: None, @@ -828,9 +750,8 @@ fn test_option_indexed_full_row_update_sync() { }; { - let table = TestOptionSyncIndexWorkTable::load_from_file(config) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestOptionSyncIndexWorkTable::load(engine).await.unwrap(); let selected = table.select(pk).unwrap(); assert_eq!(selected.test, Some(99)); assert_eq!(selected.another, 100); diff --git a/tests/persistence/sync/string_primary_index.rs b/tests/persistence/sync/string_primary_index.rs index c6ee9c47..162a76d7 100644 --- a/tests/persistence/sync/string_primary_index.rs +++ b/tests/persistence/sync/string_primary_index.rs @@ -1,4 +1,5 @@ use worktable::prelude::*; +use worktable::prelude::PersistedWorkTable; use worktable_codegen::worktable; use crate::remove_dir_if_exists; @@ -30,10 +31,7 @@ worktable! ( #[test] fn test_space_insert_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_sync/insert", - "tests/data/unsized_primary_sync/insert", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_sync/insert", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -46,9 +44,8 @@ fn test_space_insert_sync() { remove_dir_if_exists("tests/data/unsized_primary_sync/insert".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -60,7 +57,8 @@ fn test_space_insert_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); } }); @@ -68,10 +66,7 @@ fn test_space_insert_sync() { #[test] fn test_space_insert_many_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_sync/insert_many", - "tests/data/unsized_primary_sync/insert_many", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_sync/insert_many", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -85,9 +80,8 @@ fn test_space_insert_many_sync() { let mut pks = vec![]; { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); for i in 0..1_000 { let pk = { let row = TestSyncRow { @@ -105,7 +99,8 @@ fn test_space_insert_many_sync() { } { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); for pk in pks { assert!(table.select(pk).is_some()); } @@ -115,10 +110,7 @@ fn test_space_insert_many_sync() { #[test] fn test_space_update_full_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_sync/update_full", - "tests/data/unsized_primary_sync/update_full", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_sync/update_full", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -131,9 +123,8 @@ fn test_space_update_full_sync() { remove_dir_if_exists("tests/data/unsized_primary_sync/update_full".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -154,7 +145,8 @@ fn test_space_update_full_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk.clone()).is_some()); assert_eq!(table.select(pk).unwrap().another, 13); } @@ -163,10 +155,7 @@ fn test_space_update_full_sync() { #[test] fn test_space_update_query_pk_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_sync/update_query_pk", - "tests/data/unsized_primary_sync/update_query_pk", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_sync/update_query_pk", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -179,9 +168,8 @@ fn test_space_update_query_pk_sync() { remove_dir_if_exists("tests/data/unsized_primary_sync/update_query_pk".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -197,7 +185,8 @@ fn test_space_update_query_pk_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk.clone()).is_some()); assert_eq!(table.select(pk).unwrap().another, 13); } @@ -206,10 +195,7 @@ fn test_space_update_query_pk_sync() { #[test] fn test_space_update_query_unique_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_sync/update_query_unique", - "tests/data/unsized_primary_sync/update_query_unique", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_sync/update_query_unique", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -223,9 +209,8 @@ fn test_space_update_query_unique_sync() { .await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -241,7 +226,8 @@ fn test_space_update_query_unique_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk.clone()).is_some()); assert_eq!(table.select(pk).unwrap().field, 1.0); } @@ -250,10 +236,7 @@ fn test_space_update_query_unique_sync() { #[test] fn test_space_update_query_non_unique_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_sync/update_query_non_unique", - "tests/data/unsized_primary_sync/update_query_non_unique", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_sync/update_query_non_unique", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -267,9 +250,8 @@ fn test_space_update_query_non_unique_sync() { .await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 10, @@ -285,7 +267,8 @@ fn test_space_update_query_non_unique_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk.clone()).is_some()); assert_eq!(table.select(pk).unwrap().another, 13); } @@ -294,10 +277,7 @@ fn test_space_update_query_non_unique_sync() { #[test] fn test_space_delete_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_sync/delete", - "tests/data/unsized_primary_sync/delete", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_sync/delete", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -310,9 +290,8 @@ fn test_space_delete_sync() { remove_dir_if_exists("tests/data/unsized_primary_sync/delete".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -332,7 +311,8 @@ fn test_space_delete_sync() { another_row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_none()); } }); @@ -340,10 +320,7 @@ fn test_space_delete_sync() { #[test] fn test_space_delete_query_sync() { - let config = DiskConfig::new( - "tests/data/unsized_primary_sync/delete_query", - "tests/data/unsized_primary_sync/delete_query", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_primary_sync/delete_query", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -356,9 +333,8 @@ fn test_space_delete_query_sync() { remove_dir_if_exists("tests/data/unsized_primary_sync/delete_query".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: 42, non_unique: 0, @@ -371,7 +347,8 @@ fn test_space_delete_query_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_none()); } }); diff --git a/tests/persistence/sync/string_re_read.rs b/tests/persistence/sync/string_re_read.rs index 01086dc2..c1f6419a 100644 --- a/tests/persistence/sync/string_re_read.rs +++ b/tests/persistence/sync/string_re_read.rs @@ -1,6 +1,7 @@ use crate::remove_dir_if_exists; use worktable::prelude::*; +use worktable::prelude::PersistedWorkTable; use worktable_codegen::worktable; worktable!( @@ -27,7 +28,7 @@ worktable!( #[test] fn test_key() { - let config = DiskConfig::new("tests/data/key/key", "tests/data/key/key"); + let config = DiskConfig::new_with_table_name("tests/data/key/key", StringReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -40,9 +41,8 @@ fn test_key() { remove_dir_if_exists("tests/data/key/key".to_string()).await; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table .insert(StringReReadRow { first: "first".to_string(), @@ -65,9 +65,8 @@ fn test_key() { table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table .insert(StringReReadRow { first: "first_last".to_string(), @@ -80,9 +79,8 @@ fn test_key() { table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 3); } }) @@ -90,10 +88,7 @@ fn test_key() { #[test] fn test_key_delete_scenario() { - let config = DiskConfig::new( - "tests/data/key/delete_scenario", - "tests/data/key/delete_scenario", - ); + let config = DiskConfig::new_with_table_name("tests/data/key/delete_scenario", StringReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -106,9 +101,8 @@ fn test_key_delete_scenario() { remove_dir_if_exists("tests/data/key/delete_scenario".to_string()).await; let (pk0, pk) = { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); let pk0 = table .insert(StringReReadRow { first: "first".to_string(), @@ -132,17 +126,15 @@ fn test_key_delete_scenario() { (pk0, pk) }; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table.delete(pk.clone()).await.unwrap(); table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 1); assert!(table.select(pk).is_none()); @@ -168,17 +160,15 @@ fn test_key_delete_scenario() { table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table.delete(pk0.clone()).await.unwrap(); table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 1); assert!(table.select(pk0).is_none()); @@ -204,7 +194,7 @@ fn test_key_delete_scenario() { #[test] fn test_key_delete() { - let config = DiskConfig::new("tests/data/key/delete", "tests/data/key/delete"); + let config = DiskConfig::new_with_table_name("tests/data/key/delete", StringReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -217,9 +207,8 @@ fn test_key_delete() { remove_dir_if_exists("tests/data/key/delete".to_string()).await; let pk = { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table .insert(StringReReadRow { first: "first".to_string(), @@ -243,17 +232,15 @@ fn test_key_delete() { pk }; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table.delete(pk.clone()).await.unwrap(); table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 1); assert!(table.select(pk).is_none()); @@ -272,7 +259,7 @@ fn test_key_delete() { #[test] fn test_key_delete_all() { - let config = DiskConfig::new("tests/data/key/delete_all", "tests/data/key/delete_all"); + let config = DiskConfig::new_with_table_name("tests/data/key/delete_all", StringReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -285,9 +272,8 @@ fn test_key_delete_all() { remove_dir_if_exists("tests/data/key/delete_all".to_string()).await; let (pk0, pk1) = { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); let pk0 = table .insert(StringReReadRow { first: "first".to_string(), @@ -311,18 +297,16 @@ fn test_key_delete_all() { (pk0, pk1) }; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table.delete(pk0.clone()).await.unwrap(); table.delete(pk1.clone()).await.unwrap(); table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 0); assert!(table.select(pk0).is_none()); @@ -343,10 +327,7 @@ fn test_key_delete_all() { #[test] fn test_key_delete_all_and_insert() { - let config = DiskConfig::new( - "tests/data/key/delete_all_and_insert", - "tests/data/key/delete_all_and_insert", - ); + let config = DiskConfig::new_with_table_name("tests/data/key/delete_all_and_insert", StringReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -359,9 +340,8 @@ fn test_key_delete_all_and_insert() { remove_dir_if_exists("tests/data/key/delete_all_and_insert".to_string()).await; let (pk0, pk1) = { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); let pk0 = table .insert(StringReReadRow { first: "first".to_string(), @@ -385,18 +365,16 @@ fn test_key_delete_all_and_insert() { (pk0, pk1) }; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table.delete(pk0.clone()).await.unwrap(); table.delete(pk1.clone()).await.unwrap(); table.wait_for_ops().await } let pk = { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 0); let pk = table @@ -413,9 +391,8 @@ fn test_key_delete_all_and_insert() { pk }; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 1); @@ -435,10 +412,7 @@ fn test_key_delete_all_and_insert() { #[test] fn test_key_delete_by_unique() { - let config = DiskConfig::new( - "tests/data/key/delete_unique", - "tests/data/key/delete_unique", - ); + let config = DiskConfig::new_with_table_name("tests/data/key/delete_unique", StringReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -451,9 +425,8 @@ fn test_key_delete_by_unique() { remove_dir_if_exists("tests/data/key/delete_unique".to_string()).await; let pk = { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table .insert(StringReReadRow { first: "first".to_string(), @@ -477,9 +450,8 @@ fn test_key_delete_by_unique() { pk }; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table .delete_by_second("second_again".to_string()) .await @@ -488,9 +460,8 @@ fn test_key_delete_by_unique() { table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 1); assert!(table.select(pk).is_none()); @@ -509,10 +480,7 @@ fn test_key_delete_by_unique() { #[test] fn test_key_delete_by_non_unique() { - let config = DiskConfig::new( - "tests/data/key/delete_non_unique", - "tests/data/key/delete_non_unique", - ); + let config = DiskConfig::new_with_table_name("tests/data/key/delete_non_unique", StringReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -525,9 +493,8 @@ fn test_key_delete_by_non_unique() { remove_dir_if_exists("tests/data/key/delete_non_unique".to_string()).await; let (pk0, pk1) = { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); let pk0 = table .insert(StringReReadRow { first: "first".to_string(), @@ -551,17 +518,15 @@ fn test_key_delete_by_non_unique() { (pk0, pk1) }; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table.delete_by_first("first".to_string()).await.unwrap(); table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 0); assert!(table.select(pk0).is_none()); @@ -582,7 +547,7 @@ fn test_key_delete_by_non_unique() { #[test] fn test_big_amount_reread() { - let config = DiskConfig::new("tests/data/key/big_amount", "tests/data/key/big_amount"); + let config = DiskConfig::new_with_table_name("tests/data/key/big_amount", StringReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -595,9 +560,8 @@ fn test_big_amount_reread() { remove_dir_if_exists("tests/data/key/big_amount".to_string()).await; { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); for i in 0..1000 { table .insert(StringReReadRow { @@ -613,9 +577,8 @@ fn test_big_amount_reread() { table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); table .insert(StringReReadRow { first: "first_last".to_string(), @@ -629,9 +592,8 @@ fn test_big_amount_reread() { table.wait_for_ops().await } { - let table = StringReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = StringReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 1001); assert!(table.select_by_second("second_last".to_string()).is_some()); } diff --git a/tests/persistence/sync/string_secondary_index.rs b/tests/persistence/sync/string_secondary_index.rs index 8cfc98d0..5c7d8690 100644 --- a/tests/persistence/sync/string_secondary_index.rs +++ b/tests/persistence/sync/string_secondary_index.rs @@ -1,4 +1,5 @@ use worktable::prelude::*; +use worktable::prelude::PersistedWorkTable; use worktable_codegen::worktable; use crate::remove_dir_if_exists; @@ -30,10 +31,7 @@ worktable! ( #[test] fn test_space_insert_sync() { - let config = DiskConfig::new( - "tests/data/unsized_secondary_sync/insert", - "tests/data/unsized_secondary_sync/insert", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_secondary_sync/insert", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -46,9 +44,8 @@ fn test_space_insert_sync() { remove_dir_if_exists("tests/data/unsized_secondary_sync/insert".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: "Some string to test".to_string(), non_unique: 0, @@ -60,7 +57,8 @@ fn test_space_insert_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!(table.0.pk_gen.get_state(), pk + 1) } @@ -69,10 +67,7 @@ fn test_space_insert_sync() { #[test] fn test_space_insert_many_sync() { - let config = DiskConfig::new( - "tests/data/unsized_secondary_sync/insert_many", - "tests/data/unsized_secondary_sync/insert_many", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_secondary_sync/insert_many", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -86,9 +81,8 @@ fn test_space_insert_many_sync() { let mut pks = vec![]; { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); for i in 0..20 { let pk = { let row = TestSyncRow { @@ -106,7 +100,8 @@ fn test_space_insert_many_sync() { } { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let last = *pks.last().unwrap(); for pk in pks { assert!(table.select(pk).is_some()); @@ -118,10 +113,7 @@ fn test_space_insert_many_sync() { #[test] fn test_space_update_full_sync() { - let config = DiskConfig::new( - "tests/data/unsized_secondary_sync/update_full", - "tests/data/unsized_secondary_sync/update_full", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_secondary_sync/update_full", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -134,9 +126,8 @@ fn test_space_update_full_sync() { remove_dir_if_exists("tests/data/unsized_secondary_sync/update_full".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: "Some string before".to_string(), non_unique: 0, @@ -161,7 +152,8 @@ fn test_space_update_full_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!( table.select(pk).unwrap().another, @@ -174,10 +166,7 @@ fn test_space_update_full_sync() { #[test] fn test_space_update_query_pk_sync() { - let config = DiskConfig::new( - "tests/data/unsized_secondary_sync/update_query_pk", - "tests/data/unsized_secondary_sync/update_query_pk", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_secondary_sync/update_query_pk", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -190,9 +179,8 @@ fn test_space_update_query_pk_sync() { remove_dir_if_exists("tests/data/unsized_secondary_sync/update_query_pk".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: "Some string before".to_string(), non_unique: 0, @@ -213,7 +201,8 @@ fn test_space_update_query_pk_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!( table.select(pk).unwrap().another, @@ -226,10 +215,7 @@ fn test_space_update_query_pk_sync() { #[test] fn test_space_update_query_unique_sync() { - let config = DiskConfig::new( - "tests/data/unsized_secondary_sync/update_query_unique", - "tests/data/unsized_secondary_sync/update_query_unique", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_secondary_sync/update_query_unique", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -243,9 +229,8 @@ fn test_space_update_query_unique_sync() { .await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: "Some string before".to_string(), non_unique: 0, @@ -264,7 +249,8 @@ fn test_space_update_query_unique_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!(table.select(pk).unwrap().field, 1.0); assert_eq!(table.0.pk_gen.get_state(), pk + 1) @@ -274,10 +260,7 @@ fn test_space_update_query_unique_sync() { #[test] fn test_space_update_query_non_unique_sync() { - let config = DiskConfig::new( - "tests/data/unsized_secondary_sync/update_query_non_unique", - "tests/data/unsized_secondary_sync/update_query_non_unique", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_secondary_sync/update_query_non_unique", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -293,9 +276,8 @@ fn test_space_update_query_non_unique_sync() { .await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: "Some string before".to_string(), non_unique: 10, @@ -316,7 +298,8 @@ fn test_space_update_query_non_unique_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_some()); assert_eq!( table.select(pk).unwrap().another, @@ -329,10 +312,7 @@ fn test_space_update_query_non_unique_sync() { #[test] fn test_space_delete_sync() { - let config = DiskConfig::new( - "tests/data/unsized_secondary_sync/delete", - "tests/data/unsized_secondary_sync/delete", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_secondary_sync/delete", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -345,9 +325,8 @@ fn test_space_delete_sync() { remove_dir_if_exists("tests/data/unsized_secondary_sync/delete".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: "Some string before".to_string(), non_unique: 0, @@ -360,7 +339,8 @@ fn test_space_delete_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_none()); assert_eq!(table.0.pk_gen.get_state(), pk + 1) } @@ -369,10 +349,7 @@ fn test_space_delete_sync() { #[test] fn test_space_delete_query_sync() { - let config = DiskConfig::new( - "tests/data/unsized_secondary_sync/delete_query", - "tests/data/unsized_secondary_sync/delete_query", - ); + let config = DiskConfig::new_with_table_name("tests/data/unsized_secondary_sync/delete_query", TestSyncWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -385,9 +362,8 @@ fn test_space_delete_query_sync() { remove_dir_if_exists("tests/data/unsized_secondary_sync/delete_query".to_string()).await; let pk = { - let table = TestSyncWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); let row = TestSyncRow { another: "Some string before".to_string(), non_unique: 0, @@ -400,7 +376,8 @@ fn test_space_delete_query_sync() { row.id }; { - let table = TestSyncWorkTable::load_from_file(config).await.unwrap(); + let engine = DiskPersistenceEngine::new(config).await.unwrap(); + let table = TestSyncWorkTable::load(engine).await.unwrap(); assert!(table.select(pk).is_none()); assert_eq!(table.0.pk_gen.get_state(), pk + 1) } diff --git a/tests/persistence/sync/uuid_.rs b/tests/persistence/sync/uuid_.rs index bdf60a81..3e2296a7 100644 --- a/tests/persistence/sync/uuid_.rs +++ b/tests/persistence/sync/uuid_.rs @@ -2,6 +2,7 @@ use crate::remove_dir_if_exists; use uuid::Uuid; use worktable::prelude::*; +use worktable::prelude::PersistedWorkTable; use worktable_codegen::worktable; worktable!( @@ -20,7 +21,7 @@ worktable!( #[test] fn test_uuid() { - let config = DiskConfig::new("tests/data/uuid/reread", "tests/data/uuid/reread"); + let config = DiskConfig::new_with_table_name("tests/data/uuid/reread", UuidReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -33,9 +34,8 @@ fn test_uuid() { remove_dir_if_exists("tests/data/uuid/reread".to_string()).await; { - let table = UuidReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = UuidReReadWorkTable::load(engine).await.unwrap(); table .insert(UuidReReadRow { first: Uuid::now_v7(), @@ -54,9 +54,8 @@ fn test_uuid() { table.wait_for_ops().await } { - let table = UuidReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = UuidReReadWorkTable::load(engine).await.unwrap(); table .insert(UuidReReadRow { first: Uuid::now_v7(), @@ -67,9 +66,8 @@ fn test_uuid() { table.wait_for_ops().await } { - let table = UuidReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = UuidReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 3); } }) @@ -77,7 +75,7 @@ fn test_uuid() { #[test] fn test_big_amount_reread() { - let config = DiskConfig::new("tests/data/uuid/big_amount", "tests/data/uuid/big_amount"); + let config = DiskConfig::new_with_table_name("tests/data/uuid/big_amount", UuidReReadWorkTable::name_snake_case()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) @@ -90,9 +88,8 @@ fn test_big_amount_reread() { remove_dir_if_exists("tests/data/uuid/big_amount".to_string()).await; { - let table = UuidReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = UuidReReadWorkTable::load(engine).await.unwrap(); for _ in 0..1000 { table .insert(UuidReReadRow { @@ -107,9 +104,8 @@ fn test_big_amount_reread() { } let second_last = Uuid::now_v7(); { - let table = UuidReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = UuidReReadWorkTable::load(engine).await.unwrap(); table .insert(UuidReReadRow { @@ -121,9 +117,8 @@ fn test_big_amount_reread() { table.wait_for_ops().await } { - let table = UuidReReadWorkTable::load_from_file(config.clone()) - .await - .unwrap(); + let engine = DiskPersistenceEngine::new(config.clone()).await.unwrap(); + let table = UuidReReadWorkTable::load(engine).await.unwrap(); assert_eq!(table.select_all().execute().unwrap().len(), 1001); assert!(table.select_by_second(second_last).is_some()); } From d8ff6c609ae60d14ccb626345c57c164b6d8e7f0 Mon Sep 17 00:00:00 2001 From: Handy-caT <37216852+Handy-caT@users.noreply.github.com> Date: Tue, 10 Mar 2026 22:20:52 +0300 Subject: [PATCH 4/5] bump --- Cargo.toml | 2 +- codegen/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 08c22d39..7d9d14b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["codegen", "examples", "performance_measurement", "performance_measur [package] name = "worktable" -version = "0.8.23" +version = "0.9.0-alpha1" edition = "2024" authors = ["Handy-caT"] license = "MIT" diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml index ec2d99f7..957ff3a2 100644 --- a/codegen/Cargo.toml +++ b/codegen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "worktable_codegen" -version = "0.8.23" +version = "0.9.0-alpha1" edition = "2024" license = "MIT" description = "WorkTable codegeneration crate" From c7663b4118f8ef530e264f998f6d7a1ae584cd42 Mon Sep 17 00:00:00 2001 From: Handy-caT <37216852+Handy-caT@users.noreply.github.com> Date: Tue, 10 Mar 2026 22:23:56 +0300 Subject: [PATCH 5/5] fix --- Cargo.toml | 2 +- examples/Cargo.toml | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7d9d14b9..c88ebad0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ perf_measurements = ["dep:performance_measurement", "dep:performance_measurement # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -worktable_codegen = { path = "codegen", version = "=0.8.23" } +worktable_codegen = { path = "codegen", version = "=0.9.0-alpha1" } async-trait = "0.1.89" eyre = "0.6.12" diff --git a/examples/Cargo.toml b/examples/Cargo.toml index 26698b74..12286903 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -4,13 +4,13 @@ version = "0.1.0" edition = "2021" [dependencies] -worktable = { path = "../", version = "0.8.0" } -tokio = { version = "1.39.2", features = ["full"] } -rkyv = { version = "0.8.9", features = ["uuid-1"] } -eyre = "0.6.12" -serde = { version = "1.0.215", features = ["derive"] } -futures = "0.3.30" -uuid = { version = "1.8.0", features = ["v4", "serde"] } -derive_more = { version = "1.0.0", features = ["full"] } -atomic_float = "1.1.0" -rand = "0.9.1" +#worktable = { path = "../", version = "0.8.0" } +#tokio = { version = "1.39.2", features = ["full"] } +#rkyv = { version = "0.8.9", features = ["uuid-1"] } +#eyre = "0.6.12" +#serde = { version = "1.0.215", features = ["derive"] } +#futures = "0.3.30" +#uuid = { version = "1.8.0", features = ["v4", "serde"] } +#derive_more = { version = "1.0.0", features = ["full"] } +#atomic_float = "1.1.0" +#rand = "0.9.1"