pub struct CacheManager { /* private fields */ }Expand description
Manages the Reflex cache directory
Implementations§
Source§impl CacheManager
impl CacheManager
Sourcepub fn new(root: impl AsRef<Path>) -> Self
pub fn new(root: impl AsRef<Path>) -> Self
Create a new cache manager for the given root directory
Sourcepub fn validate(&self) -> Result<()>
pub fn validate(&self) -> Result<()>
Validate cache integrity and detect corruption
Performs basic integrity checks on the cache:
- Verifies all required files exist
- Checks SQLite database can be opened
- Validates binary file headers (trigrams.bin, content.bin)
Returns Ok(()) if cache is valid, Err with details if corrupted.
Sourcepub fn workspace_root(&self) -> PathBuf
pub fn workspace_root(&self) -> PathBuf
Get the workspace root directory (parent of .reflex/)
Sourcepub fn checkpoint_wal(&self) -> Result<()>
pub fn checkpoint_wal(&self) -> Result<()>
Force SQLite WAL (Write-Ahead Log) checkpoint
Ensures all data written in transactions is flushed to the main database file. This is critical when spawning background processes that open new connections, as they need to see the committed data immediately.
Uses TRUNCATE mode to completely flush and reset the WAL file.
Sourcepub fn load_all_hashes(&self) -> Result<HashMap<String, String>>
pub fn load_all_hashes(&self) -> Result<HashMap<String, String>>
Load all file hashes across all branches from SQLite
Used by background indexer to get hashes for all indexed files. Returns the most recent hash for each file across all branches.
Sourcepub fn load_hashes_for_branch(
&self,
branch: &str,
) -> Result<HashMap<String, String>>
pub fn load_hashes_for_branch( &self, branch: &str, ) -> Result<HashMap<String, String>>
Load file hashes for a specific branch from SQLite
Used by indexer and query engine to get hashes for the current branch. This ensures branch-specific incremental indexing and symbol cache lookups.
Sourcepub fn save_hashes(&self, _hashes: &HashMap<String, String>) -> Result<()>
👎Deprecated: Hashes are now stored in file_branches table via record_branch_file()
pub fn save_hashes(&self, _hashes: &HashMap<String, String>) -> Result<()>
Save file hashes for incremental indexing
DEPRECATED: Hashes are now saved via record_branch_file() or batch_record_branch_files(). This method is kept for backward compatibility but does nothing.
Sourcepub fn update_file(
&self,
path: &str,
language: &str,
line_count: usize,
) -> Result<()>
pub fn update_file( &self, path: &str, language: &str, line_count: usize, ) -> Result<()>
Update file metadata in the files table
Note: File content hashes are stored separately in the file_branches table via record_branch_file() or batch_record_branch_files().
Sourcepub fn batch_update_files(
&self,
files: &[(String, String, usize)],
) -> Result<()>
pub fn batch_update_files( &self, files: &[(String, String, usize)], ) -> Result<()>
Batch update multiple files in a single transaction for performance
Note: File content hashes are stored separately in the file_branches table via batch_update_files_and_branch().
Sourcepub fn batch_update_files_and_branch(
&self,
files: &[(String, String, usize)],
branch_files: &[(String, String)],
branch: &str,
commit_sha: Option<&str>,
) -> Result<()>
pub fn batch_update_files_and_branch( &self, files: &[(String, String, usize)], branch_files: &[(String, String)], branch: &str, commit_sha: Option<&str>, ) -> Result<()>
Batch update files AND record their hashes for a branch in a SINGLE transaction
This is the recommended method for indexing as it ensures atomicity: if files are inserted, their branch hashes are guaranteed to be inserted too.
Sourcepub fn update_stats(&self, branch: &str) -> Result<()>
pub fn update_stats(&self, branch: &str) -> Result<()>
Update statistics after indexing by calculating totals from database for a specific branch
Counts only files indexed for the given branch, not all files across all branches.
Sourcepub fn update_schema_hash(&self) -> Result<()>
pub fn update_schema_hash(&self) -> Result<()>
Update cache schema hash in statistics table
This should be called after every index operation to ensure the cache is marked as compatible with the current binary version.
Sourcepub fn list_files(&self) -> Result<Vec<IndexedFile>>
pub fn list_files(&self) -> Result<Vec<IndexedFile>>
Get list of all indexed files
Sourcepub fn stats(&self) -> Result<IndexStats>
pub fn stats(&self) -> Result<IndexStats>
Get statistics about the current cache
Returns statistics for the current git branch if in a git repo, or global statistics if not in a git repo.
Sourcepub fn record_branch_file(
&self,
path: &str,
branch: &str,
hash: &str,
commit_sha: Option<&str>,
) -> Result<()>
pub fn record_branch_file( &self, path: &str, branch: &str, hash: &str, commit_sha: Option<&str>, ) -> Result<()>
Record a file’s hash for a specific branch
Sourcepub fn batch_record_branch_files(
&self,
files: &[(String, String)],
branch: &str,
commit_sha: Option<&str>,
) -> Result<()>
pub fn batch_record_branch_files( &self, files: &[(String, String)], branch: &str, commit_sha: Option<&str>, ) -> Result<()>
Batch record multiple files for a specific branch in a single transaction
IMPORTANT: Files must already exist in the files table before calling this method.
For atomic insertion of both files and branch hashes, use batch_update_files_and_branch() instead.
Sourcepub fn get_branch_files(&self, branch: &str) -> Result<HashMap<String, String>>
pub fn get_branch_files(&self, branch: &str) -> Result<HashMap<String, String>>
Get all files indexed for a specific branch
Returns a HashMap of path → hash for all files in the branch.
Sourcepub fn branch_exists(&self, branch: &str) -> Result<bool>
pub fn branch_exists(&self, branch: &str) -> Result<bool>
Check if a branch has any indexed files
Fast existence check using LIMIT 1 for O(1) performance.
Sourcepub fn get_branch_info(&self, branch: &str) -> Result<BranchInfo>
pub fn get_branch_info(&self, branch: &str) -> Result<BranchInfo>
Get branch metadata (commit, last_indexed, file_count, dirty status)
Sourcepub fn update_branch_metadata(
&self,
branch: &str,
commit_sha: Option<&str>,
file_count: usize,
is_dirty: bool,
) -> Result<()>
pub fn update_branch_metadata( &self, branch: &str, commit_sha: Option<&str>, file_count: usize, is_dirty: bool, ) -> Result<()>
Update branch metadata after indexing
Uses UPDATE instead of INSERT OR REPLACE to preserve branch_id and prevent CASCADE DELETE on file_branches table.
Sourcepub fn find_file_with_hash(
&self,
hash: &str,
) -> Result<Option<(String, String)>>
pub fn find_file_with_hash( &self, hash: &str, ) -> Result<Option<(String, String)>>
Find a file with a specific hash (for symbol reuse optimization)
Returns the path and branch where this hash was first seen, enabling reuse of parsed symbols across branches.
Sourcepub fn get_file_id(&self, path: &str) -> Result<Option<i64>>
pub fn get_file_id(&self, path: &str) -> Result<Option<i64>>
Get file ID by path
Returns the integer ID for a file path, or None if not found.
Sourcepub fn batch_get_file_ids(
&self,
paths: &[String],
) -> Result<HashMap<String, i64>>
pub fn batch_get_file_ids( &self, paths: &[String], ) -> Result<HashMap<String, i64>>
Batch get file IDs for multiple paths
Returns a HashMap of path → file_id for all found paths. Paths not in the database are omitted from the result.
Automatically chunks large batches to avoid SQLite parameter limits (999 max).
Sourcepub fn should_compact(&self) -> Result<bool>
pub fn should_compact(&self) -> Result<bool>
Check if cache compaction should run
Returns true if 24+ hours have passed since last compaction (or never compacted). Compaction threshold: 86400 seconds (24 hours)
Sourcepub fn update_compaction_timestamp(&self) -> Result<()>
pub fn update_compaction_timestamp(&self) -> Result<()>
Update last_compaction timestamp in statistics table
Called after successful compaction to record when it ran.
Sourcepub fn compact(&self) -> Result<CompactionReport>
pub fn compact(&self) -> Result<CompactionReport>
Compact the cache by removing deleted files and reclaiming disk space
This operation:
- Identifies files in the database that no longer exist on disk
- Deletes those files from all database tables (CASCADE handles related data)
- Runs VACUUM to reclaim disk space from deleted rows
- Updates the last_compaction timestamp
Returns a CompactionReport with statistics about the operation. Safe to run concurrently with queries (uses SQLite transactions).
Trait Implementations§
Source§impl Clone for CacheManager
impl Clone for CacheManager
Source§fn clone(&self) -> CacheManager
fn clone(&self) -> CacheManager
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for CacheManager
impl RefUnwindSafe for CacheManager
impl Send for CacheManager
impl Sync for CacheManager
impl Unpin for CacheManager
impl UnwindSafe for CacheManager
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more