From 8ab0777471f2b860e01ab12349bc685618c761cd Mon Sep 17 00:00:00 2001 From: Handy-caT <37216852+Handy-caT@users.noreply.github.com> Date: Wed, 16 Apr 2025 14:04:11 +0300 Subject: [PATCH 1/2] add support for arrays --- src/mem_stat/mod.rs | 2 +- src/mem_stat/primitives.rs | 19 +++++++ tests/worktable/array.rs | 110 ++++++++++++++++++++++++++++++++++++- 3 files changed, 128 insertions(+), 3 deletions(-) diff --git a/src/mem_stat/mod.rs b/src/mem_stat/mod.rs index 69746bb2..5c322c65 100644 --- a/src/mem_stat/mod.rs +++ b/src/mem_stat/mod.rs @@ -174,4 +174,4 @@ where } } -impl_memstat_zero!(Link, Uuid, [u8]); +impl_memstat_zero!(Link, Uuid); diff --git a/src/mem_stat/primitives.rs b/src/mem_stat/primitives.rs index 6b7aaf6f..ee159f96 100644 --- a/src/mem_stat/primitives.rs +++ b/src/mem_stat/primitives.rs @@ -45,3 +45,22 @@ impl_memstat_zero!( std::time::SystemTime, std::time::Instant ); + +impl_memstat_zero!( + [u8], + [i8], + [u16], + [i16], + [u32], + [i32], + [u64], + [i64], + [usize], + [isize], + [f32], + [f64], + [bool], + [char], + [u128], + [i128] +); diff --git a/tests/worktable/array.rs b/tests/worktable/array.rs index 007f06a1..1cf37090 100644 --- a/tests/worktable/array.rs +++ b/tests/worktable/array.rs @@ -11,7 +11,7 @@ worktable! ( }, queries: { update: { - Test(test) by id, + TestById(test) by id, } } ); @@ -40,7 +40,7 @@ async fn update() { let pk = table.insert(row.clone()).unwrap(); let new_row = TestRow { id: 1, - test: [1; 20], + test: [2; 20], }; table.update(new_row.clone()).await.unwrap(); let selected_row = table.select(pk).unwrap(); @@ -68,3 +68,109 @@ async fn update_in_a_middle() { assert_eq!(selected_row, new_row); } + +#[tokio::test] +async fn update_query() { + let table = TestWorkTable::default(); + let row = TestRow { + id: 1, + test: [1; 20], + }; + let pk = table.insert(row.clone()).unwrap(); + let q = TestByIdQuery { test: [2; 20] }; + table + .update_test_by_id(q.clone(), pk.clone()) + .await + .unwrap(); + let selected_row = table.select(pk).unwrap(); + + assert_eq!(selected_row.test, q.test); + assert!(table.select(2.into()).is_none()) +} + +type ArrI = [i64; 20]; + +worktable! ( + name: TestI, + columns: { + id: u64 primary_key autoincrement, + test: ArrI + }, + queries: { + update: { + TestIById(test) by id, + } + } +); + +#[test] +fn insert_i() { + let table = TestIWorkTable::default(); + let row = TestIRow { + id: 1, + test: [1; 20], + }; + let pk = table.insert(row.clone()).unwrap(); + let selected_row = table.select(pk).unwrap(); + + assert_eq!(selected_row, row); + assert!(table.select(2.into()).is_none()) +} + +#[tokio::test] +async fn update_i() { + let table = TestIWorkTable::default(); + let row = TestIRow { + id: 1, + test: [1; 20], + }; + let pk = table.insert(row.clone()).unwrap(); + let new_row = TestIRow { + id: 1, + test: [2; 20], + }; + table.update(new_row.clone()).await.unwrap(); + let selected_row = table.select(pk).unwrap(); + + assert_eq!(selected_row, new_row); + assert!(table.select(2.into()).is_none()) +} + +#[tokio::test] +async fn update_in_a_middle_i() { + let table = TestIWorkTable::default(); + for i in 0..10 { + let row = TestIRow { + id: i, + test: [1; 20], + }; + let _ = table.insert(row.clone()).unwrap(); + } + let new_row = TestIRow { + id: 3, + test: [1; 20], + }; + table.update(new_row.clone()).await.unwrap(); + let selected_row = table.select(3.into()).unwrap(); + + assert_eq!(selected_row, new_row); +} + +#[tokio::test] +async fn update_query_i() { + let table = TestIWorkTable::default(); + let row = TestIRow { + id: 1, + test: [1; 20], + }; + let pk = table.insert(row.clone()).unwrap(); + let q = TestIByIdQuery { test: [2; 20] }; + table + .update_test_i_by_id(q.clone(), pk.clone()) + .await + .unwrap(); + let selected_row = table.select(pk).unwrap(); + + assert_eq!(selected_row.test, q.test); + assert!(table.select(2.into()).is_none()) +} From 54a107fbb711da2d62dc6f23747d1fb0db5369fa Mon Sep 17 00:00:00 2001 From: Handy-caT <37216852+Handy-caT@users.noreply.github.com> Date: Wed, 16 Apr 2025 14:32:35 +0300 Subject: [PATCH 2/2] version bump --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 2ced39c6..63b001c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["codegen", "examples", "performance_measurement", "performance_measur [package] name = "worktable" -version = "0.5.4" +version = "0.5.5" edition = "2024" authors = ["Handy-caT"] license = "MIT"