use std::path::Path;
use std::sync::Arc;
use crate::segment::common::operation_error::OperationResult;
use crate::segment::data_types::facets::FacetResponse;
use crate::segment::types::{PointIdType, ScoredPoint};
use crate::shard::locked_segment::LockedSegment;
use crate::shard::retrieve::record_internal::RecordInternal;
use crate::edge::read_view::{EdgeShardRead, ReadViewProvider};
use crate::edge::requests::{
CountRequest, FacetRequest, QueryRequest, RetrieveRequest, ScrollRequest, SearchRequest,
};
use crate::edge::{EdgeConfig, EdgeShard, ShardInfo};
impl ReadViewProvider for EdgeShard {
type Handle = LockedSegment;
fn read_segments(&self) -> Vec<LockedSegment> {
self.segments
.read()
.non_appendable_then_appendable_segments()
.collect()
}
fn config_snapshot(&self) -> Arc<EdgeConfig> {
Arc::new(self.config.read().clone())
}
fn search_pool(&self) -> Arc<rayon::ThreadPool> {
self.search_pool.clone()
}
fn path(&self) -> &Path {
&self.path
}
}
impl EdgeShard {
pub fn search(&self, request: SearchRequest) -> OperationResult<Vec<ScoredPoint>> {
EdgeShardRead::search(self, request)
}
pub fn query(&self, request: QueryRequest) -> OperationResult<Vec<ScoredPoint>> {
EdgeShardRead::query(self, request)
}
pub fn scroll(
&self,
request: ScrollRequest,
) -> OperationResult<(Vec<RecordInternal>, Option<PointIdType>)> {
EdgeShardRead::scroll(self, request)
}
pub fn retrieve(&self, request: RetrieveRequest) -> OperationResult<Vec<RecordInternal>> {
EdgeShardRead::retrieve(self, request)
}
pub fn count(&self, request: CountRequest) -> OperationResult<usize> {
EdgeShardRead::count(self, request)
}
pub fn facet(&self, request: FacetRequest) -> OperationResult<FacetResponse> {
EdgeShardRead::facet(self, request)
}
pub fn info(&self) -> OperationResult<ShardInfo> {
EdgeShardRead::info(self)
}
}