mod config;
mod models;
mod provider;
pub use config::{DistanceMetric, IndexType, PROVIDER_NAME, PgVectorConfig, PgVectorConfigBuilder};
pub use models::{EmbeddingModel, SearchOptions, SearchResult, TableStats, VectorPoint};
pub use provider::{
PgVectorExecutor, PgVectorProvider, PreparedStatement, QueryRow, StatementParam,
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_module_exports() {
let _ = PROVIDER_NAME;
let _ = IndexType::default();
let _ = DistanceMetric::default();
let _ = EmbeddingModel::default();
}
#[tokio::test]
async fn test_provider_integration() {
let config = PgVectorConfig::new("postgresql://localhost:5432/test")
.with_table_name("test_vectors")
.with_dimension(768)
.with_index_type(IndexType::Hnsw)
.with_distance_metric(DistanceMetric::Cosine);
let provider = PgVectorProvider::new(config).await.unwrap();
let create_ext = provider.create_extension_sql();
assert!(create_ext.contains("vector"));
let create_table = provider.create_table_sql();
assert!(create_table.contains("test_vectors"));
assert!(create_table.contains("vector(768)"));
let create_index = provider.create_index_sql();
assert!(create_index.is_some());
assert!(create_index.unwrap().contains("hnsw"));
}
#[test]
fn test_embedding_models() {
assert_eq!(EmbeddingModel::OpenAISmall.dimension(), 1536);
assert_eq!(EmbeddingModel::OpenAILarge.dimension(), 3072);
assert_eq!(EmbeddingModel::CohereEnglishV3.dimension(), 1024);
assert_eq!(EmbeddingModel::MiniLMv2.dimension(), 384);
}
#[test]
fn test_search_options() {
let options = SearchOptions::new(10)
.with_threshold(0.8)
.with_vector()
.with_filter_eq("type", "document");
assert_eq!(options.limit, 10);
assert_eq!(options.threshold, Some(0.8));
assert!(options.include_vector);
assert!(options.metadata_filters.is_some());
}
}