do_memory_storage_turso/lib.rs
1#![allow(clippy::expect_used)]
2// Intentional allows for memory-storage-turso
3#![allow(unsafe_code)] // Intentional unsafe for performance in connection pooling
4#![allow(clippy::unwrap_used)] // Intentional .unwrap() on mutex locks
5#![allow(invalid_value)] // Intentional zero-initialization in connection pool
6#![allow(dead_code)] // Public API methods not used internally
7// Additional allows for complex code patterns
8#![allow(clippy::excessive_nesting)] // Complex control flow in cache logic
9#![allow(unused_mut)] // Variables used conditionally
10#![allow(unused_assignments)] // Variables assigned in loops
11#![allow(clippy::derivable_impls)] // Prefer explicit impls for clarity
12#![allow(clippy::should_implement_trait)] // Custom default methods
13#![allow(clippy::unnecessary_map_or)] // Explicit is better than implicit
14#![allow(clippy::useless_asref)] // Clarity in type conversions
15
16//! # Memory Storage - Turso
17//!
18//! Turso/libSQL storage backend for durable persistence of episodes and patterns.
19//!
20//! This crate provides:
21//! - Connection management for Turso databases
22//! - SQL schema creation and migration
23//! - CRUD operations for episodes, patterns, and heuristics
24//! - Query capabilities for analytical retrieval
25//! - Retry logic and circuit breaker pattern for resilience
26//!
27//! ## Example
28//!
29//! ```no_run
30//! use do_memory_storage_turso::TursoStorage;
31//!
32//! # async fn example() -> anyhow::Result<()> {
33//! let storage = TursoStorage::new("libsql://localhost:8080", "token").await?;
34//! storage.initialize_schema().await?;
35//! # Ok(())
36//! # }
37//! ```
38
39use do_memory_core::{Error, Result};
40
41// Cache module for performance optimization
42pub mod cache;
43pub mod pool;
44mod relationships;
45mod resilient;
46mod schema;
47#[cfg(test)]
48mod tests;
49
50#[cfg(feature = "hybrid_search")]
51mod fts5_schema;
52
53// Storage module - split into submodules for file size compliance
54pub mod storage;
55
56// Trait implementations - moved to separate module for file size compliance
57pub mod trait_impls;
58
59// Schema initialization - moved to separate module for file size compliance
60pub mod turso_config;
61
62// Prepared statement caching for query optimization
63pub mod prepared;
64
65// Performance metrics and export module
66pub mod metrics;
67
68// Compression module for network bandwidth reduction (40% target)
69#[cfg(feature = "compression")]
70pub mod compression;
71
72// Transport layer with compression support
73#[cfg(feature = "compression")]
74pub mod transport;
75
76// Lib implementation submodules - split for file size compliance
77mod lib_impls;
78
79// Re-export public types from lib_impls
80pub use lib_impls::TursoConfig;
81pub use lib_impls::TursoStorage;
82
83// Cache exports
84pub use cache::query_cache::{AdvancedCacheStats, AdvancedQueryCache, QueryKey};
85pub use cache::{
86 AdaptiveTTLCache, CacheConfig, CacheEntry, CacheStats, CacheStatsSnapshot, CachedTursoStorage,
87 TTLConfig, TTLConfigError,
88};
89
90// Performance metrics exports
91pub use pool::{
92 AdaptiveConnectionPool, AdaptivePoolConfig, AdaptivePoolMetrics, AdaptivePooledConnection,
93};
94pub use pool::{ConnectionPool, PoolConfig, PoolStatistics, PooledConnection};
95#[cfg(feature = "keepalive-pool")]
96pub use pool::{KeepAliveConfig, KeepAlivePool, KeepAliveStatistics};
97pub use prepared::{PreparedCacheConfig, PreparedCacheStats, PreparedStatementCache};
98pub use resilient::ResilientStorage;
99
100// Metrics export re-exports
101pub use metrics::{
102 ExportConfig, ExportFormat, ExportStats, ExportTarget, ExportedMetric, MetricType, MetricValue,
103 MetricsCollector, MetricsHttpServer, PrometheusExporter, TursoMetrics,
104};
105pub use storage::batch::episode_batch::BatchConfig;
106pub use storage::capacity::CapacityStatistics;
107pub use storage::episodes::EpisodeQuery;
108pub use storage::patterns::{PatternMetadata, PatternQuery};
109pub use trait_impls::StorageStatistics;
110
111// Compression exports (when compression feature is enabled)
112#[cfg(feature = "compression")]
113pub use compression::{
114 CompressedPayload, CompressionAlgorithm, CompressionStatistics, compress, compress_embedding,
115 compress_json, decompress, decompress_embedding,
116};
117
118// Transport exports (when compression feature is enabled)
119#[cfg(feature = "compression")]
120pub use transport::{
121 CompressedTransport, Transport, TransportCompressionConfig, TransportCompressionError,
122 TransportCompressionStats, TransportMetadata, TransportResponse,
123};
124
125// Include constructor implementations from lib_impls modules
126// These are automatically included via `mod lib_impls` declaration
127// The impl blocks are in:
128// - lib_impls::constructors_basic (new, from_database, with_config)
129// - lib_impls::constructors_pool (new_with_pool_config, new_with_keepalive)
130// - lib_impls::constructors_adaptive (new_with_adaptive_pool)
131//
132// Helper methods are in:
133// - lib_impls::helpers (get_connection, get_count, etc.)