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: Dialect>(&self) -> bool

Implementors§