Trait Dialect

Source
pub trait Dialect: Debug + Any {
    // Required methods
    fn is_identifier_start(&self, ch: char) -> bool;
    fn is_identifier_part(&self, ch: char) -> bool;

    // Provided methods
    fn is_delimited_identifier_start(&self, ch: char) -> bool { ... }
    fn is_proper_identifier_inside_quotes(
        &self,
        _chars: Peekable<Chars<'_>>,
    ) -> bool { ... }
    fn supports_filter_during_aggregation(&self) -> bool { ... }
    fn supports_within_after_array_aggregation(&self) -> bool { ... }
    fn parse_prefix(
        &self,
        _parser: &mut Parser<'_>,
    ) -> Option<Result<Expr, ParserError>> { ... }
    fn parse_infix(
        &self,
        _parser: &mut Parser<'_>,
        _expr: &Expr,
        _precedence: u8,
    ) -> Option<Result<Expr, ParserError>> { ... }
    fn get_next_precedence(
        &self,
        _parser: &Parser<'_>,
    ) -> Option<Result<u8, ParserError>> { ... }
    fn parse_statement(
        &self,
        _parser: &mut Parser<'_>,
    ) -> Option<Result<Statement, ParserError>> { ... }
}

Required Methods§

Source

fn is_identifier_start(&self, ch: char) -> bool

Determine if a character is a valid start character for an unquoted identifier

Source

fn is_identifier_part(&self, ch: char) -> bool

Determine if a character is a valid unquoted identifier character

Provided Methods§

Source

fn is_delimited_identifier_start(&self, ch: char) -> bool

Determine if a character starts a quoted identifier. The default implementation, accepting “double quoted” ids is both ANSI-compliant and appropriate for most dialects (with the notable exception of MySQL, MS SQL, and sqlite). You can accept one of characters listed in Word::matching_end_quote here

Source

fn is_proper_identifier_inside_quotes( &self, _chars: Peekable<Chars<'_>>, ) -> bool

Determine if quoted characters are proper for identifier

Source

fn supports_filter_during_aggregation(&self) -> bool

Does the dialect support FILTER (WHERE expr) for aggregate queries?

Source

fn supports_within_after_array_aggregation(&self) -> bool

Returns true if the dialect supports ARRAY_AGG() [WITHIN GROUP (ORDER BY)] expressions. Otherwise, the dialect should expect an ORDER BY without the WITHIN GROUP clause, e.g. ANSI

Source

fn parse_prefix( &self, _parser: &mut Parser<'_>, ) -> Option<Result<Expr, ParserError>>

Dialect-specific prefix parser override

Source

fn parse_infix( &self, _parser: &mut Parser<'_>, _expr: &Expr, _precedence: u8, ) -> Option<Result<Expr, ParserError>>

Dialect-specific infix parser override

Source

fn get_next_precedence( &self, _parser: &Parser<'_>, ) -> Option<Result<u8, ParserError>>

Dialect-specific precedence override

Source

fn parse_statement( &self, _parser: &mut Parser<'_>, ) -> Option<Result<Statement, ParserError>>

Dialect-specific statement parser override

Implementations§

Source§

impl dyn Dialect

Source

pub fn is<T>(&self) -> bool
where T: Dialect,

Implementors§