use std::collections::HashSet;
use nodedb_types::error::{NodeDbError, NodeDbResult};
use nodedb_types::result::{QueryResult, SearchResult};
use nodedb_types::text_search::TextSearchParams;
use nodedb_types::value::Value;
use crate::engine::fts::{TextSearchRequest, run_text_search};
use crate::nodedb::NodeDbLite;
use crate::nodedb::lock_ext::LockExt;
use crate::storage::engine::StorageEngine;
impl<S: StorageEngine> NodeDbLite<S> {
pub(super) async fn execute_sql_impl(
&self,
query: &str,
params: &[Value],
) -> NodeDbResult<QueryResult> {
self.query_engine
.execute_sql_with_params(query, params)
.await
.map_err(NodeDbError::from)
}
pub(super) async fn text_search_impl(
&self,
collection: &str,
field: &str,
query: &str,
top_k: usize,
params: TextSearchParams,
allowed_ids: Option<&HashSet<String>>,
) -> NodeDbResult<Vec<SearchResult>> {
let indexed = self
.fts_state
.manager
.lock_or_recover()
.has_text_index(collection);
if !indexed && !self.collection_known(collection).await? {
return Err(NodeDbError::collection_not_found(collection));
}
run_text_search(
&self.fts_state,
&self.crdt,
TextSearchRequest {
collection,
field,
query,
top_k,
params: ¶ms,
allowed_ids,
},
)
.map_err(NodeDbError::from)
}
}