diff --git a/minisql/src/internals/column_index.rs b/minisql/src/internals/column_index.rs index f6c2a43..cdd331d 100644 --- a/minisql/src/internals/column_index.rs +++ b/minisql/src/internals/column_index.rs @@ -12,11 +12,8 @@ impl ColumnIndex { Self { index } } - pub fn get(&self, value: &IndexableValue) -> HashSet { - match self.index.get(value) { - Some(set) => set.clone(), - None => HashSet::new(), - } + pub fn get(&self, value: &IndexableValue) -> Option<&HashSet> { + self.index.get(value) } pub fn add(&mut self, value: IndexableValue, id: Uuid) { diff --git a/minisql/src/internals/table.rs b/minisql/src/internals/table.rs index 6728a5d..d4210b8 100644 --- a/minisql/src/internals/table.rs +++ b/minisql/src/internals/table.rs @@ -218,8 +218,8 @@ impl Table { } else { match self.indexes.get(&column_position) { Some(index) => { - let ids = index.get(value); - Ok(Some(ids)) + let ids = index.get(value).cloned(); + Ok(ids) } None => Ok(None), } diff --git a/minisql/src/interpreter.rs b/minisql/src/interpreter.rs index 2ee109d..4bd3f35 100644 --- a/minisql/src/interpreter.rs +++ b/minisql/src/interpreter.rs @@ -148,6 +148,7 @@ trait SqlResponseConsumer { #[cfg(test)] mod tests { use super::*; + use std::collections::HashSet; fn users_schema() -> TableSchema { let id: ColumnPosition = 0; @@ -505,7 +506,7 @@ mod tests { let plato_id = 0; let aristotle_id = 1; - let plato_ids = index.get(&String("Plato".to_string())); + let plato_ids = index.get(&String("Plato".to_string())).cloned().unwrap_or(HashSet::new()); assert!(plato_ids.contains(&plato_id)); assert!(!plato_ids.contains(&aristotle_id)); assert!(plato_ids.len() == 1);