diff --git a/README.md b/README.md index 14bb7ac..080be0b 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ fn main() -> Result<(), db_type::Error> { let retrieve_data: Item = r.get().primary(3_u32)?.unwrap(); println!("data id='3': {:?}", retrieve_data); // Iterate items with name starting with "red" - for item in r.scan().secondary::(ItemKey::name)?.start_with("red") { + for item in r.scan().secondary::(ItemKey::name)?.start_with("red")? { println!("data name=\"red\": {:?}", item); } diff --git a/benches/overhead_data_size.rs b/benches/overhead_data_size.rs index 541ee8b..b8185ba 100644 --- a/benches/overhead_data_size.rs +++ b/benches/overhead_data_size.rs @@ -134,7 +134,7 @@ fn use_native_db_insert(db: &Database, data: Data) { fn use_native_db_scan(db: &Database) -> Vec { let r = db.r_transaction().unwrap(); - let out = r.scan().primary().unwrap().all().try_collect().unwrap(); + let out = r.scan().primary().unwrap().all().unwrap().try_collect().unwrap(); out } diff --git a/src/transaction/query/scan/primary_scan.rs b/src/transaction/query/scan/primary_scan.rs index d04aa79..2366b5c 100644 --- a/src/transaction/query/scan/primary_scan.rs +++ b/src/transaction/query/scan/primary_scan.rs @@ -49,16 +49,16 @@ where /// let r = db.r_transaction()?; /// /// // Get all values - /// let _values: Vec = r.scan().primary()?.all().try_collect()?; + /// let _values: Vec = r.scan().primary()?.all().unwrap().try_collect()?; /// Ok(()) /// } /// ``` - pub fn all(&self) -> PrimaryScanIterator { - let range = self.primary_table.range::(..).unwrap(); - PrimaryScanIterator { + pub fn all(&self) -> Result> { + let range = self.primary_table.range::(..)?; + Ok(PrimaryScanIterator { range, _marker: PhantomData::default(), - } + }) } /// Iterate over all values in a range. @@ -87,20 +87,19 @@ where /// let r = db.r_transaction()?; /// /// // Get the values from 5 to the end - /// let _values: Vec = r.scan().primary()?.range(5u64..).try_collect()?; + /// let _values: Vec = r.scan().primary()?.range(5u64..)?.try_collect()?; /// Ok(()) /// } /// ``` - pub fn range>(&self, range: R) -> PrimaryScanIterator { + pub fn range>(&self, range: R) -> Result> { let database_inner_key_value_range = KeyRange::new(range); let range = self .primary_table - .range::(database_inner_key_value_range) - .unwrap(); - PrimaryScanIterator { + .range::(database_inner_key_value_range)?; + Ok(PrimaryScanIterator { range, _marker: PhantomData::default(), - } + }) } /// Iterate over all values starting with a prefix. @@ -129,24 +128,24 @@ where /// let r = db.r_transaction()?; /// /// // Get the values starting with "victor" - /// let _values: Vec = r.scan().primary()?.start_with("victor").try_collect()?; + /// let _values: Vec = r.scan().primary()?.start_with("victor")?.try_collect()?; /// Ok(()) /// } /// ``` pub fn start_with<'a>( &'a self, start_with: impl ToKey + 'a, - ) -> PrimaryScanIteratorStartWith<'a, T> { + ) -> Result> { let start_with = start_with.to_key(); let range = self .primary_table - .range::(start_with.clone()..) - .unwrap(); - PrimaryScanIteratorStartWith { - start_with, + .range::(start_with.clone()..)?; + + Ok(PrimaryScanIteratorStartWith { range, + start_with, _marker: PhantomData::default(), - } + }) } } diff --git a/src/transaction/query/scan/secondary_scan.rs b/src/transaction/query/scan/secondary_scan.rs index fdfc5c0..b9e26d2 100644 --- a/src/transaction/query/scan/secondary_scan.rs +++ b/src/transaction/query/scan/secondary_scan.rs @@ -61,31 +61,25 @@ where /// let r = db.r_transaction()?; /// /// // Get only values that have the secondary key set (name is not None) - /// let _values: Vec = r.scan().secondary(DataKey::name)?.all().try_collect()?; + /// let _values: Vec = r.scan().secondary(DataKey::name)?.all().unwrap().try_collect()?; /// Ok(()) /// } /// ``` - /// TODO: remove unwrap and return Result - pub fn all(&self) -> SecondaryScanIterator { + pub fn all(&self) -> Result> { let mut primary_keys = vec![]; - for keys in self.secondary_table.iter().unwrap() { - let (l_secondary_key, l_primary_keys) = keys.unwrap(); - dbg!(&l_secondary_key.value()); + for keys in self.secondary_table.iter()? { + let (_, l_primary_keys) = keys?; for primary_key in l_primary_keys { - let primary_key = primary_key.unwrap(); + let primary_key = primary_key?; primary_keys.push(primary_key); } } - for primary_key in primary_keys.iter() { - dbg!(&primary_key.value()); - } - - SecondaryScanIterator { + Ok(SecondaryScanIterator { primary_table: &self.primary_table, primary_keys: primary_keys.into_iter(), _marker: PhantomData::default(), - } + }) } /// Iterate over all values by secondary key. @@ -118,20 +112,19 @@ where /// let r = db.r_transaction()?; /// /// // Get only values that have the secondary key name from C to the end - /// let _values: Vec = r.scan().secondary(DataKey::name)?.range("C"..).try_collect()?; + /// let _values: Vec = r.scan().secondary(DataKey::name)?.range("C"..).unwrap().try_collect()?; /// Ok(()) /// } /// ``` pub fn range>( &self, range: R, - ) -> SecondaryScanIterator { + ) -> Result> { let mut primary_keys = vec![]; let database_inner_key_value_range = KeyRange::new(range); for keys in self .secondary_table - .range::(database_inner_key_value_range) - .unwrap() + .range::(database_inner_key_value_range)? { let (_, l_primary_keys) = keys.unwrap(); for primary_key in l_primary_keys { @@ -140,11 +133,11 @@ where } } - SecondaryScanIterator { + Ok(SecondaryScanIterator { primary_table: &self.primary_table, primary_keys: primary_keys.into_iter(), _marker: PhantomData::default(), - } + }) } /// Iterate over all values by secondary key. @@ -177,20 +170,19 @@ where /// let r = db.r_transaction()?; /// /// // Get only values that have the secondary key name starting with "hello" - /// let _values: Vec = r.scan().secondary(DataKey::name)?.start_with("hello").try_collect()?; + /// let _values: Vec = r.scan().secondary(DataKey::name)?.start_with("hello").unwrap().try_collect()?; /// Ok(()) /// } /// ``` pub fn start_with<'a>( &'a self, start_with: impl ToKey + 'a, - ) -> SecondaryScanIterator<'a, PrimaryTable, T> { + ) -> Result> { let start_with = start_with.to_key(); let mut primary_keys = vec![]; for keys in self .secondary_table - .range::(start_with.clone()..) - .unwrap() + .range::(start_with.clone()..)? { let (l_secondary_key, l_primary_keys) = keys.unwrap(); if !l_secondary_key @@ -206,11 +198,11 @@ where } } - SecondaryScanIterator { + Ok(SecondaryScanIterator { primary_table: &self.primary_table, primary_keys: primary_keys.into_iter(), _marker: PhantomData::default(), - } + }) } } diff --git a/src/transaction/rw_transaction.rs b/src/transaction/rw_transaction.rs index 59a526a..9308fc6 100644 --- a/src/transaction/rw_transaction.rs +++ b/src/transaction/rw_transaction.rs @@ -283,7 +283,7 @@ impl<'db, 'txn> RwTransaction<'db> { OldType: ToInput + Clone, NewType: ToInput + From, { - let find_all_old: Result> = self.scan().primary()?.all().collect(); + let find_all_old: Result> = self.scan().primary()?.all()?.collect(); let find_all_old = find_all_old?; for old in find_all_old { let new: NewType = old.clone().into(); diff --git a/tests/deserialization_error.rs b/tests/deserialization_error.rs index 1bd2964..7fd8377 100644 --- a/tests/deserialization_error.rs +++ b/tests/deserialization_error.rs @@ -33,7 +33,7 @@ fn create_local_database_for_tests() { models.define::().unwrap(); let db = Builder::new().open(&models, &database_path).unwrap(); let r = db.r_transaction().unwrap(); - let result: Result> = r.scan().primary().unwrap().all().try_collect(); + let result: Result> = r.scan().primary().unwrap().all().unwrap().try_collect(); assert!(matches!( result, Err(Error::ModelError(ModelError::DecodeBodyError(_))) diff --git a/tests/migrate/with_secondary_keys.rs b/tests/migrate/with_secondary_keys.rs index 40d88b9..2e05b1d 100644 --- a/tests/migrate/with_secondary_keys.rs +++ b/tests/migrate/with_secondary_keys.rs @@ -165,7 +165,7 @@ fn test_migrate() { .secondary(ItemV2Key::first_name_key) .unwrap() .start_with("Alexandre") - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!( item, @@ -182,7 +182,7 @@ fn test_migrate() { .secondary(ItemV2Key::last_name_key) .unwrap() .start_with("Verne") - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!( item, diff --git a/tests/scan.rs b/tests/scan.rs index ded1341..b3dc097 100644 --- a/tests/scan.rs +++ b/tests/scan.rs @@ -52,7 +52,7 @@ fn test_iter() { rw.commit().unwrap(); let r = db.r_transaction().unwrap(); - let result: Vec = r.scan().primary().unwrap().all().try_collect().unwrap(); + let result: Vec = r.scan().primary().unwrap().all().unwrap().try_collect().unwrap(); assert_eq!(result.len(), 2); let obj1 = result.get(0).unwrap(); @@ -85,7 +85,7 @@ fn test_iter_many_items_to_be_bytes() { let r = db.r_transaction().unwrap(); { - let iter: Vec = r.scan().primary().unwrap().all().try_collect().unwrap(); + let iter: Vec = r.scan().primary().unwrap().all().unwrap().try_collect().unwrap(); assert_eq!(iter.len(), 257); let obj1 = iter.get(0).unwrap(); @@ -119,7 +119,7 @@ fn test_double_ended_iter() { let r = db.r_transaction().unwrap(); let scan = r.scan().primary().unwrap(); - let iter = scan.all(); + let iter = scan.all().unwrap(); let result: Vec = iter.rev().try_collect().unwrap(); assert_eq!(result.len(), 2); @@ -156,7 +156,7 @@ fn test_iter_range() { .primary() .unwrap() .range(..2_i32) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 1); @@ -169,7 +169,7 @@ fn test_iter_range() { .primary() .unwrap() .range(2_i32..) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 2); @@ -186,7 +186,7 @@ fn test_iter_range() { .primary() .unwrap() .range(2_i32..3_i32) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 1); @@ -216,7 +216,7 @@ fn test_iter_by_key() { .secondary(ItemKey::secondary_key_1) .unwrap() .all() - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 2); @@ -247,7 +247,7 @@ fn test_double_ended_iter_by_key() { let r = db.r_transaction().unwrap(); let scan = r.scan().secondary(ItemKey::secondary_key_1).unwrap(); - let iter = scan.all(); + let iter = scan.all().unwrap(); let result: Vec = iter.rev().try_collect().unwrap(); assert_eq!(result.len(), 2); @@ -279,7 +279,7 @@ fn test_double_ended_iter_by_key_range() { let r = db.r_transaction().unwrap(); let scan = r.scan().secondary(ItemKey::secondary_key_1).unwrap(); - let iter = scan.range(..b"2".as_slice()); + let iter = scan.range(..b"2".as_slice()).unwrap(); let result: Vec = iter.rev().try_collect().unwrap(); assert_eq!(result.len(), 1); @@ -289,7 +289,7 @@ fn test_double_ended_iter_by_key_range() { assert_eq!(obj1.name, "test"); let scan = r.scan().secondary(ItemKey::secondary_key_1).unwrap(); - let iter = scan.range(b"2".as_slice()..); + let iter = scan.range(b"2".as_slice()..).unwrap(); let result: Vec = iter.rev().try_collect().unwrap(); assert_eq!(result.len(), 2); @@ -302,7 +302,7 @@ fn test_double_ended_iter_by_key_range() { assert_eq!(obj2.name, "test2"); let scan = r.scan().secondary(ItemKey::secondary_key_1).unwrap(); - let iter = scan.range(b"2".as_slice()..b"3".as_slice()); + let iter = scan.range(b"2".as_slice()..b"3".as_slice()).unwrap(); let result: Vec = iter.rev().try_collect().unwrap(); assert_eq!(result.len(), 1); @@ -364,7 +364,7 @@ fn test_start_with_scenario() { .primary() .unwrap() .start_with(p.to_string().as_str()) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 3); @@ -438,7 +438,7 @@ fn test_start_with_by_key_scenario_write_txn() { .secondary(ItemIdFlagKey::flag) .unwrap() .start_with(p.to_string().as_str()) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 3); @@ -485,7 +485,7 @@ fn test_start_with_by_key_scenario_readonly_txn() { .secondary(ItemIdFlagKey::flag) .unwrap() .start_with(p.to_string().as_str()) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 3); @@ -516,7 +516,7 @@ fn test_txn_write_iter() { rw.commit().unwrap(); let rw = db.rw_transaction().unwrap(); - let result: Vec = rw.scan().primary().unwrap().all().try_collect().unwrap(); + let result: Vec = rw.scan().primary().unwrap().all().unwrap().try_collect().unwrap(); assert_eq!(result.len(), 2); let obj1 = result.get(0).unwrap(); @@ -550,7 +550,7 @@ fn test_txn_write_iter_range() { .primary() .unwrap() .range(..2_i32.to_be_bytes().as_slice()) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 1); @@ -563,7 +563,7 @@ fn test_txn_write_iter_range() { .primary() .unwrap() .range(2_i32.to_be_bytes().as_slice()..) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 2); @@ -580,7 +580,7 @@ fn test_txn_write_iter_range() { .primary() .unwrap() .range(2_i32.to_be_bytes().as_slice()..3_i32.to_be_bytes().as_slice()) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 1); @@ -622,7 +622,7 @@ fn test_txn_write_start_with_scenario() { .primary() .unwrap() .start_with(p.to_string().as_str()) - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 3); @@ -691,6 +691,7 @@ fn test_scan_range() { .secondary(ItemScanRangeKey::nr) .unwrap() .range(0..10) + .unwrap() .collect::, _>>() .unwrap() .iter() @@ -703,6 +704,7 @@ fn test_scan_range() { .secondary(ItemScanRangeKey::nr) .unwrap() .range(2..3) + .unwrap() .collect::, _>>() .unwrap() .iter() @@ -715,6 +717,7 @@ fn test_scan_range() { .secondary(ItemScanRangeKey::unique_nr) .unwrap() .range(1..3) + .unwrap() .collect::, _>>() .unwrap() .iter() @@ -727,6 +730,7 @@ fn test_scan_range() { .secondary(ItemScanRangeKey::unique_nr) .unwrap() .range(1..=3) + .unwrap() .collect::, _>>() .unwrap() .iter() @@ -739,6 +743,7 @@ fn test_scan_range() { .secondary(ItemScanRangeKey::unique_nr) .unwrap() .range(3..=3) + .unwrap() .collect::, _>>() .unwrap() .iter() @@ -751,6 +756,7 @@ fn test_scan_range() { .secondary(ItemScanRangeKey::nr) .unwrap() .range(2..=3) + .unwrap() .collect::, _>>() .unwrap() .iter() @@ -763,6 +769,7 @@ fn test_scan_range() { .secondary(ItemScanRangeKey::nr) .unwrap() .range(2..=2) + .unwrap() .collect::, _>>() .unwrap() .iter() @@ -775,6 +782,7 @@ fn test_scan_range() { .secondary(ItemScanRangeKey::nr) .unwrap() .range(0..=2) + .unwrap() .collect::, _>>() .unwrap() .iter() @@ -838,7 +846,7 @@ fn test_low_level_scan_range() { .secondary(ItemLowLevelScanRangeKey::secondary_key) .unwrap() .all() - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(result.len(), 2); assert_eq!(result[0].secondary_key, vec![2]); diff --git a/tests/upgrade/from_0_7_x_to_0_8_x.rs b/tests/upgrade/from_0_7_x_to_0_8_x.rs index 5537b86..824e8a5 100644 --- a/tests/upgrade/from_0_7_x_to_0_8_x.rs +++ b/tests/upgrade/from_0_7_x_to_0_8_x.rs @@ -121,7 +121,7 @@ fn upgrade_from_0_7_x_to_0_8_x() { .secondary(Item2Key::name) .unwrap() .range("item2_5".."item2_599") - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(items.len(), 110); @@ -130,7 +130,7 @@ fn upgrade_from_0_7_x_to_0_8_x() { .secondary(Item2Key::name) .unwrap() .range("item2_5"..="item2_599") - .try_collect() + .unwrap().try_collect() .unwrap(); assert_eq!(items.len(), 111); }