Delete src/core/index.rs
This commit is contained in:
parent
2eae7f785c
commit
e2dfcc0445
@ -1,58 +0,0 @@
|
|||||||
//! Модуль управления индексами
|
|
||||||
|
|
||||||
use std::collections::{HashMap, HashSet};
|
|
||||||
use crate::parser::sql::Value;
|
|
||||||
|
|
||||||
/// Индекс для быстрого поиска
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
pub struct Index {
|
|
||||||
name: String,
|
|
||||||
data: HashMap<Value, HashSet<u64>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Index {
|
|
||||||
/// Создание нового индекса
|
|
||||||
pub fn new(name: &str) -> Self {
|
|
||||||
Self {
|
|
||||||
name: name.to_string(),
|
|
||||||
data: HashMap::new(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Вставка значения в индекс
|
|
||||||
pub fn insert(&mut self, value: Value, record_id: u64) {
|
|
||||||
self.data.entry(value)
|
|
||||||
.or_insert_with(HashSet::new)
|
|
||||||
.insert(record_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Поиск по значению
|
|
||||||
pub fn search(&self, value: &Value) -> Option<HashSet<u64>> {
|
|
||||||
self.data.get(value).cloned()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Удаление значения из индекса
|
|
||||||
pub fn remove(&mut self, value: &Value, record_id: u64) {
|
|
||||||
if let Some(set) = self.data.get_mut(value) {
|
|
||||||
set.remove(&record_id);
|
|
||||||
if set.is_empty() {
|
|
||||||
self.data.remove(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Получение всех значений индекса
|
|
||||||
pub fn get_all(&self) -> Vec<&Value> {
|
|
||||||
self.data.keys().collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Очистка индекса
|
|
||||||
pub fn clear(&mut self) {
|
|
||||||
self.data.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Получение имени индекса
|
|
||||||
pub fn name(&self) -> &str {
|
|
||||||
&self.name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user