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§
sourcefn is_identifier_start(&self, ch: char) -> bool
fn is_identifier_start(&self, ch: char) -> bool
Determine if a character is a valid start character for an unquoted identifier
sourcefn is_identifier_part(&self, ch: char) -> bool
fn is_identifier_part(&self, ch: char) -> bool
Determine if a character is a valid unquoted identifier character
Provided Methods§
sourcefn is_delimited_identifier_start(&self, ch: char) -> bool
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
sourcefn is_proper_identifier_inside_quotes(&self, _chars: Peekable<Chars<'_>>) -> bool
fn is_proper_identifier_inside_quotes(&self, _chars: Peekable<Chars<'_>>) -> bool
Determine if quoted characters are proper for identifier
sourcefn supports_filter_during_aggregation(&self) -> bool
fn supports_filter_during_aggregation(&self) -> bool
Does the dialect support FILTER (WHERE expr)
for aggregate queries?
sourcefn supports_within_after_array_aggregation(&self) -> bool
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
sourcefn parse_prefix(
&self,
_parser: &mut Parser<'_>
) -> Option<Result<Expr, ParserError>>
fn parse_prefix( &self, _parser: &mut Parser<'_> ) -> Option<Result<Expr, ParserError>>
Dialect-specific prefix parser override
sourcefn parse_infix(
&self,
_parser: &mut Parser<'_>,
_expr: &Expr,
_precedence: u8
) -> Option<Result<Expr, ParserError>>
fn parse_infix( &self, _parser: &mut Parser<'_>, _expr: &Expr, _precedence: u8 ) -> Option<Result<Expr, ParserError>>
Dialect-specific infix parser override
sourcefn get_next_precedence(
&self,
_parser: &Parser<'_>
) -> Option<Result<u8, ParserError>>
fn get_next_precedence( &self, _parser: &Parser<'_> ) -> Option<Result<u8, ParserError>>
Dialect-specific precedence override
sourcefn parse_statement(
&self,
_parser: &mut Parser<'_>
) -> Option<Result<Statement, ParserError>>
fn parse_statement( &self, _parser: &mut Parser<'_> ) -> Option<Result<Statement, ParserError>>
Dialect-specific statement parser override