Skip to main content

ParseCache

Struct ParseCache 

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

A thread-safe LRU cache for parsed SQL ASTs.

Avoids re-parsing identical SQL strings. Cache capacity is configurable. Both the SQL text and the SqlDialect are used as the cache key so that the same query text parsed under different dialects is stored separately.

§Example

use oxisql_parse::{ParseCache, SqlDialect};

let cache = ParseCache::new(32);
let stmts = cache.parse("SELECT 1", SqlDialect::Generic).unwrap();
assert_eq!(stmts.len(), 1);
assert_eq!(cache.len(), 1);

Implementations§

Source§

impl ParseCache

Source

pub fn new(capacity: usize) -> Self

Create a new cache with the given capacity.

If capacity is 0 it is silently promoted to 1 so the cache is always functional.

Source

pub fn parse( &self, sql: &str, dialect: SqlDialect, ) -> Result<Vec<Statement>, OxiSqlError>

Parse sql with dialect, returning the cached result if available.

On a cache miss the SQL is parsed and the result stored before returning.

Source

pub fn len(&self) -> usize

Return the number of currently cached entries.

Source

pub fn is_empty(&self) -> bool

Return true if the cache holds no entries.

Source

pub fn clear(&self)

Evict all cached entries.

Trait Implementations§

Source§

impl Debug for ParseCache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.