CacheManager

Struct CacheManager 

Source
pub struct CacheManager { /* private fields */ }
Expand description

Manages the Reflex cache directory

Implementations§

Source§

impl CacheManager

Source

pub fn new(root: impl AsRef<Path>) -> Self

Create a new cache manager for the given root directory

Source

pub fn init(&self) -> Result<()>

Initialize the cache directory structure if it doesn’t exist

Source

pub fn exists(&self) -> bool

Check if cache exists and is valid

Source

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.

Source

pub fn path(&self) -> &Path

Get the path to the cache directory

Source

pub fn workspace_root(&self) -> PathBuf

Get the workspace root directory (parent of .reflex/)

Source

pub fn clear(&self) -> Result<()>

Clear the entire cache

Source

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.

Source

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.

Source

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.

Source

pub fn save_hashes(&self, _hashes: &HashMap<String, String>) -> Result<()>

👎Deprecated: Hashes are now stored in file_branches table via record_branch_file()

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.

Source

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().

Source

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().

Source

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.

Source

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.

Source

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.

Source

pub fn list_files(&self) -> Result<Vec<IndexedFile>>

Get list of all indexed files

Source

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.

Source

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

Source

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.

Source

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.

Source

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.

Source

pub fn get_branch_info(&self, branch: &str) -> Result<BranchInfo>

Get branch metadata (commit, last_indexed, file_count, dirty status)

Source

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.

Source

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.

Source

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.

Source

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).

Source

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)

Source

pub fn update_compaction_timestamp(&self) -> Result<()>

Update last_compaction timestamp in statistics table

Called after successful compaction to record when it ran.

Source

pub fn compact(&self) -> Result<CompactionReport>

Compact the cache by removing deleted files and reclaiming disk space

This operation:

  1. Identifies files in the database that no longer exist on disk
  2. Deletes those files from all database tables (CASCADE handles related data)
  3. Runs VACUUM to reclaim disk space from deleted rows
  4. 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

Source§

fn clone(&self) -> CacheManager

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,