diff --git a/src/model/helper/bucket.rs b/src/model/helper/bucket.rs index bb4b5b245..8bc54b3f0 100644 --- a/src/model/helper/bucket.rs +++ b/src/model/helper/bucket.rs @@ -116,12 +116,11 @@ impl<'a> BucketHelper<'a> { .get_range( &EmptyKey, None, - Some(KeyFilter::Matches(pattern.to_string())), + Some(KeyFilter::MatchesAndNotDeleted(pattern.to_string())), 10, ) .await? .into_iter() - .filter(|k| !k.state.is_deleted()) .collect::>(); if candidates.len() != 1 { Err(Error::BadRequest(format!( diff --git a/src/model/key_table.rs b/src/model/key_table.rs index daea54736..7afa03378 100644 --- a/src/model/key_table.rs +++ b/src/model/key_table.rs @@ -152,7 +152,7 @@ pub struct KeyTable; #[derive(Clone, Debug, Serialize, Deserialize)] pub enum KeyFilter { Deleted(DeletedFilter), - Matches(String), + MatchesAndNotDeleted(String), } impl TableSchema for KeyTable { @@ -166,10 +166,11 @@ impl TableSchema for KeyTable { fn matches_filter(entry: &Self::E, filter: &Self::Filter) -> bool { match filter { KeyFilter::Deleted(df) => df.apply(entry.state.is_deleted()), - KeyFilter::Matches(pat) => { + KeyFilter::MatchesAndNotDeleted(pat) => { let pat = pat.to_lowercase(); - entry.key_id.to_lowercase().starts_with(&pat) - || entry.name.get().to_lowercase() == pat + !entry.state.is_deleted() + && (entry.key_id.to_lowercase().starts_with(&pat) + || entry.name.get().to_lowercase() == pat) } } } diff --git a/src/table/util.rs b/src/table/util.rs index 043a457c4..2a5c3afe8 100644 --- a/src/table/util.rs +++ b/src/table/util.rs @@ -19,7 +19,7 @@ impl PartitionKey for EmptyKey { #[derive(Clone, Copy, Debug, Serialize, Deserialize)] pub enum DeletedFilter { - All, + Any, Deleted, NotDeleted, } @@ -27,7 +27,7 @@ pub enum DeletedFilter { impl DeletedFilter { pub fn apply(&self, deleted: bool) -> bool { match self { - DeletedFilter::All => true, + DeletedFilter::Any => true, DeletedFilter::Deleted => deleted, DeletedFilter::NotDeleted => !deleted, }