use crate::engine::{LanceDbEngine, LanceDbEngineOptions};
use crate::manager::{BoxError, DatabaseManager, DatabaseRuntimeConfig};
#[derive(Clone)]
pub struct LanceDbRuntime {
manager: DatabaseManager,
engine_options: LanceDbEngineOptions,
}
impl LanceDbRuntime {
pub fn new(config: DatabaseRuntimeConfig, engine_options: LanceDbEngineOptions) -> Self {
Self {
manager: DatabaseManager::new(config),
engine_options,
}
}
pub fn manager(&self) -> &DatabaseManager {
&self.manager
}
pub fn engine_options(&self) -> &LanceDbEngineOptions {
&self.engine_options
}
pub async fn open_default_engine(&self) -> Result<LanceDbEngine, BoxError> {
self.open_named_engine(None).await
}
pub async fn open_named_engine(
&self,
database_name: Option<&str>,
) -> Result<LanceDbEngine, BoxError> {
let connection = self.manager.open_named(database_name).await?;
Ok(LanceDbEngine::new(connection, self.engine_options.clone()))
}
pub fn database_path_for_name(&self, database_name: Option<&str>) -> Result<String, BoxError> {
self.manager.database_path_for_name(database_name)
}
pub async fn cached_database_keys(&self) -> Vec<String> {
self.manager.cached_database_keys().await
}
}
#[cfg(test)]
mod tests {
use super::LanceDbRuntime;
use crate::engine::LanceDbEngineOptions;
use crate::manager::DatabaseRuntimeConfig;
fn sample_runtime() -> LanceDbRuntime {
LanceDbRuntime::new(
DatabaseRuntimeConfig {
default_db_path: "/srv/vldb/default".to_string(),
db_root: Some("/srv/vldb/databases".to_string()),
read_consistency_interval_ms: Some(250),
},
LanceDbEngineOptions {
max_upsert_payload: 1024,
max_search_limit: 64,
max_concurrent_requests: 8,
},
)
}
#[test]
fn runtime_exposes_engine_options() {
let runtime = sample_runtime();
assert_eq!(runtime.engine_options().max_upsert_payload, 1024);
assert_eq!(runtime.engine_options().max_search_limit, 64);
assert_eq!(runtime.engine_options().max_concurrent_requests, 8);
}
#[test]
fn runtime_resolves_named_database_path_via_manager() {
let runtime = sample_runtime();
assert_eq!(
runtime
.database_path_for_name(Some("memory"))
.expect("named database path should resolve"),
std::path::PathBuf::from("/srv/vldb/databases")
.join("memory")
.to_string_lossy()
.to_string()
);
}
}