Skip to main content

Canonicalizer

Struct Canonicalizer 

Source
pub struct Canonicalizer<'a> { /* private fields */ }
Expand description

Canonicalizes predicates under one SQL dialect.

The dialect decides how identifiers fold, so it decides which two spellings mean one column. Build this from the dialect that parsed whatever you hand it.

Implementations§

Source§

impl<'a> Canonicalizer<'a>

Source

pub fn normalize_sql(&self, sql: &str) -> Result<String, CanonicalizeError>

Parses one SELECT and returns canonical text for its WHERE clause.

The canonical text is verified to survive being read back as itself, so a predicate whose canonical form would read as something else is rejected instead of hashed.

Source

pub fn normalize_where_clause( &self, where_expr: Option<&Expr>, ) -> Result<String, CanonicalizeError>

Canonicalizes a parsed WHERE clause in O(n log n) time for boolean chains and O(n) otherwise.

where_expr MUST have been parsed with this canonicalizer’s dialect, which decides how names fold and which reads the canonical text back to check it.

Source§

impl<'a> Canonicalizer<'a>

Source

pub fn new(dialect: &'a dyn Dialect) -> Self

Reads the folding rules for dialect.

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Canonicalizer<'a>

§

impl<'a> !Send for Canonicalizer<'a>

§

impl<'a> !Sync for Canonicalizer<'a>

§

impl<'a> !UnwindSafe for Canonicalizer<'a>

§

impl<'a> Freeze for Canonicalizer<'a>

§

impl<'a> Unpin for Canonicalizer<'a>

§

impl<'a> UnsafeUnpin for Canonicalizer<'a>

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.