pub struct RedshiftSqlDialect {}
Trait Implementations§
Source§impl Debug for RedshiftSqlDialect
impl Debug for RedshiftSqlDialect
Source§impl Dialect for RedshiftSqlDialect
impl Dialect for RedshiftSqlDialect
Source§fn is_nested_delimited_identifier_start(&self, ch: char) -> bool
fn is_nested_delimited_identifier_start(&self, ch: char) -> bool
Determine if a character starts a potential nested quoted identifier. Example: RedShift supports the following quote styles to all mean the same thing:
SELECT 1 AS foo;
SELECT 1 AS "foo";
SELECT 1 AS [foo];
SELECT 1 AS ["foo"];
Source§fn peek_nested_delimited_identifier_quotes(
&self,
chars: Peekable<Chars<'_>>,
) -> Option<(char, Option<char>)>
fn peek_nested_delimited_identifier_quotes( &self, chars: Peekable<Chars<'_>>, ) -> Option<(char, Option<char>)>
Only applicable whenever Self::is_nested_delimited_identifier_start
returns true
If the next sequence of tokens potentially represent a nested identifier, then this method
returns a tuple containing the outer quote style, and if present, the inner (nested) quote style.
Example (Redshift):
`["foo"]` => Some(`[`, Some(`"`))
`[foo]` => Some(`[`, None)
`[0]` => None
`"foo"` => None
Source§fn convert_type_before_value(&self) -> bool
fn convert_type_before_value(&self) -> bool
redshift has CONVERT(type, value)
instead of CONVERT(value, type)
https://docs.aws.amazon.com/redshift/latest/dg/r_CONVERT_function.html
Source§fn supports_top_before_distinct(&self) -> bool
fn supports_top_before_distinct(&self) -> bool
Redshift expects the TOP
option before the ALL/DISTINCT
option:
https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_list.html#r_SELECT_list-parameters
Source§fn supports_partiql(&self) -> bool
fn supports_partiql(&self) -> bool
Redshift supports PartiQL: https://docs.aws.amazon.com/redshift/latest/dg/super-overview.html
Source§fn is_identifier_start(&self, ch: char) -> bool
fn is_identifier_start(&self, ch: char) -> bool
Source§fn is_identifier_part(&self, ch: char) -> bool
fn is_identifier_part(&self, ch: char) -> bool
Source§fn supports_connect_by(&self) -> bool
fn supports_connect_by(&self) -> bool
Source§fn is_delimited_identifier_start(&self, ch: char) -> bool
fn is_delimited_identifier_start(&self, ch: char) -> bool
Word::matching_end_quote
hereSource§fn identifier_quote_style(&self, _identifier: &str) -> Option<char>
fn identifier_quote_style(&self, _identifier: &str) -> Option<char>
Source§fn is_custom_operator_part(&self, _ch: char) -> bool
fn is_custom_operator_part(&self, _ch: char) -> bool
Source§fn supports_string_literal_backslash_escape(&self) -> bool
fn supports_string_literal_backslash_escape(&self) -> bool
Source§fn supports_unicode_string_literal(&self) -> bool
fn supports_unicode_string_literal(&self) -> bool
U&
prefix.
This is used to specify Unicode code points in string literals.
For example, in PostgreSQL, the following is a valid string literal: Read moreSource§fn supports_filter_during_aggregation(&self) -> bool
fn supports_filter_during_aggregation(&self) -> bool
FILTER (WHERE expr)
for aggregate queries?Source§fn supports_window_clause_named_window_reference(&self) -> bool
fn supports_window_clause_named_window_reference(&self) -> bool
Source§fn supports_within_after_array_aggregation(&self) -> bool
fn supports_within_after_array_aggregation(&self) -> bool
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 supports_group_by_expr(&self) -> bool
fn supports_group_by_expr(&self) -> bool
group sets, roll up, or cube
expressions.Source§fn supports_match_recognize(&self) -> bool
fn supports_match_recognize(&self) -> bool
Source§fn supports_in_empty_list(&self) -> bool
fn supports_in_empty_list(&self) -> bool
(NOT) IN ()
expressionsSource§fn supports_start_transaction_modifier(&self) -> bool
fn supports_start_transaction_modifier(&self) -> bool
BEGIN {DEFERRED | IMMEDIATE | EXCLUSIVE | TRY | CATCH} [TRANSACTION]
statementsSource§fn supports_end_transaction_modifier(&self) -> bool
fn supports_end_transaction_modifier(&self) -> bool
END {TRY | CATCH}
statementsSource§fn supports_named_fn_args_with_eq_operator(&self) -> bool
fn supports_named_fn_args_with_eq_operator(&self) -> bool
FUN(a = '1', b = '2')
.Source§fn supports_named_fn_args_with_colon_operator(&self) -> bool
fn supports_named_fn_args_with_colon_operator(&self) -> bool
FUN(a : '1', b : '2')
.Source§fn supports_named_fn_args_with_assignment_operator(&self) -> bool
fn supports_named_fn_args_with_assignment_operator(&self) -> bool
FUN(a := '1', b := '2')
.Source§fn supports_named_fn_args_with_rarrow_operator(&self) -> bool
fn supports_named_fn_args_with_rarrow_operator(&self) -> bool
FUN(a => '1', b => '2')
.Source§fn supports_named_fn_args_with_expr_name(&self) -> bool
fn supports_named_fn_args_with_expr_name(&self) -> bool
FUN(LOWER('a'):'1', b:'2')
Such function arguments are represented in the AST by the FunctionArg::ExprNamed
variant,
otherwise use the FunctionArg::Named
variant (compatible reason).Source§fn supports_numeric_prefix(&self) -> bool
fn supports_numeric_prefix(&self) -> bool
59901_user_login
Source§fn supports_window_function_null_treatment_arg(&self) -> bool
fn supports_window_function_null_treatment_arg(&self) -> bool
Source§fn supports_dictionary_syntax(&self) -> bool
fn supports_dictionary_syntax(&self) -> bool
{'x': 1, 'y': 2, 'z': 3}
.Source§fn support_map_literal_syntax(&self) -> bool
fn support_map_literal_syntax(&self) -> bool
Map {1: 10, 2: 20}
.Source§fn supports_lambda_functions(&self) -> bool
fn supports_lambda_functions(&self) -> bool
Source§fn supports_methods(&self) -> bool
fn supports_methods(&self) -> bool
Source§fn supports_parenthesized_set_variables(&self) -> bool
fn supports_parenthesized_set_variables(&self) -> bool
SET
variable declaration. Read moreSource§fn supports_select_wildcard_except(&self) -> bool
fn supports_select_wildcard_except(&self) -> bool
EXCEPT
clause following a
wildcard in a select list. Read moreSource§fn supports_triple_quoted_string(&self) -> bool
fn supports_triple_quoted_string(&self) -> bool
"""abc"""
Source§fn parse_prefix(
&self,
_parser: &mut Parser<'_>,
) -> Option<Result<Expr, ParserError>>
fn parse_prefix( &self, _parser: &mut Parser<'_>, ) -> Option<Result<Expr, ParserError>>
Source§fn supports_trailing_commas(&self) -> bool
fn supports_trailing_commas(&self) -> bool
Source§fn supports_limit_comma(&self) -> bool
fn supports_limit_comma(&self) -> bool
LIMIT 1, 2
as LIMIT 2 OFFSET 1
?Source§fn supports_projection_trailing_commas(&self) -> bool
fn supports_projection_trailing_commas(&self) -> bool
Source§fn supports_from_trailing_commas(&self) -> bool
fn supports_from_trailing_commas(&self) -> bool
FROM
clause of a SELECT
statement.
/// Example: SELECT 1 FROM T, U, LIMIT 1
Source§fn supports_object_name_double_dot_notation(&self) -> bool
fn supports_object_name_double_dot_notation(&self) -> bool
Source§fn supports_struct_literal(&self) -> bool
fn supports_struct_literal(&self) -> bool
Source§fn supports_empty_projections(&self) -> bool
fn supports_empty_projections(&self) -> bool
Source§fn supports_user_host_grantee(&self) -> bool
fn supports_user_host_grantee(&self) -> bool
'user'@'host'
grantee syntax?Source§fn 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>>
Source§fn get_next_precedence(
&self,
_parser: &Parser<'_>,
) -> Option<Result<u8, ParserError>>
fn get_next_precedence( &self, _parser: &Parser<'_>, ) -> Option<Result<u8, ParserError>>
Source§fn get_next_precedence_default(
&self,
parser: &Parser<'_>,
) -> Result<u8, ParserError>
fn get_next_precedence_default( &self, parser: &Parser<'_>, ) -> Result<u8, ParserError>
Source§fn parse_statement(
&self,
_parser: &mut Parser<'_>,
) -> Option<Result<Statement, ParserError>>
fn parse_statement( &self, _parser: &mut Parser<'_>, ) -> Option<Result<Statement, ParserError>>
Source§fn parse_column_option(
&self,
_parser: &mut Parser<'_>,
) -> Result<Option<Result<Option<ColumnOption>, ParserError>>, ParserError>
fn parse_column_option( &self, _parser: &mut Parser<'_>, ) -> Result<Option<Result<Option<ColumnOption>, ParserError>>, ParserError>
Source§fn prec_value(&self, prec: Precedence) -> u8
fn prec_value(&self, prec: Precedence) -> u8
Source§fn prec_unknown(&self) -> u8
fn prec_unknown(&self) -> u8
Source§fn describe_requires_table_keyword(&self) -> bool
fn describe_requires_table_keyword(&self) -> bool
Source§fn allow_extract_custom(&self) -> bool
fn allow_extract_custom(&self) -> bool
EXTRACT
function to words other than Keyword
.Source§fn allow_extract_single_quotes(&self) -> bool
fn allow_extract_single_quotes(&self) -> bool
EXTRACT
function to use single quotes in the part being extracted.Source§fn supports_dollar_placeholder(&self) -> bool
fn supports_dollar_placeholder(&self) -> bool
SELECT $var
(SQLite)Source§fn supports_create_index_with_clause(&self) -> bool
fn supports_create_index_with_clause(&self) -> bool
CREATE INDEX idx ON t WITH (key = value, key2)
Source§fn require_interval_qualifier(&self) -> bool
fn require_interval_qualifier(&self) -> bool
INTERVAL
expressions require units (called “qualifiers” in the ANSI SQL spec) to be specified,
e.g. INTERVAL 1 DAY
vs INTERVAL 1
. Read morefn supports_explain_with_utility_options(&self) -> bool
fn supports_asc_desc_in_column_definition(&self) -> bool
Source§fn supports_factorial_operator(&self) -> bool
fn supports_factorial_operator(&self) -> bool
a!
expressionsSource§fn supports_nested_comments(&self) -> bool
fn supports_nested_comments(&self) -> bool
/* /* nested */ */
Source§fn supports_eq_alias_assignment(&self) -> bool
fn supports_eq_alias_assignment(&self) -> bool
=
within a SelectItem
as an alias assignment operator, rather than a boolean expression.
For example: the following statements are equivalent for such a dialect: Read moreSource§fn supports_try_convert(&self) -> bool
fn supports_try_convert(&self) -> bool
TRY_CONVERT
functionSource§fn supports_bang_not_operator(&self) -> bool
fn supports_bang_not_operator(&self) -> bool
!a
syntax for boolean NOT
expressions.Source§fn supports_listen_notify(&self) -> bool
fn supports_listen_notify(&self) -> bool
LISTEN
, UNLISTEN
and NOTIFY
statementsSource§fn supports_load_data(&self) -> bool
fn supports_load_data(&self) -> bool
LOAD DATA
statementSource§fn supports_load_extension(&self) -> bool
fn supports_load_extension(&self) -> bool
LOAD extension
statementSource§fn supports_boolean_literals(&self) -> bool
fn supports_boolean_literals(&self) -> bool
true
and false
).
For example, in MSSQL these are treated as identifiers rather than boolean literals.Source§fn supports_show_like_before_in(&self) -> bool
fn supports_show_like_before_in(&self) -> bool
LIKE 'pattern'
option in
a SHOW
statement before the IN
optionSource§fn supports_comment_on(&self) -> bool
fn supports_comment_on(&self) -> bool
COMMENT
statementSource§fn supports_create_table_select(&self) -> bool
fn supports_create_table_select(&self) -> bool
CREATE TABLE SELECT
statementSource§fn is_reserved_for_identifier(&self, kw: Keyword) -> bool
fn is_reserved_for_identifier(&self, kw: Keyword) -> bool
Source§fn get_reserved_keywords_for_table_factor(&self) -> &[Keyword]
fn get_reserved_keywords_for_table_factor(&self) -> &[Keyword]
Source§fn supports_table_sample_before_alias(&self) -> bool
fn supports_table_sample_before_alias(&self) -> bool
TABLESAMPLE
option
before the table alias option. For example: Read moreSource§fn supports_insert_set(&self) -> bool
fn supports_insert_set(&self) -> bool
INSERT INTO ... SET col1 = 1, ...
syntax. Read moreSource§fn supports_insert_table_function(&self) -> bool
fn supports_insert_table_function(&self) -> bool
Source§fn supports_insert_format(&self) -> bool
fn supports_insert_format(&self) -> bool
INSERT INTO ... FORMAT <format>
Source§fn supports_set_stmt_without_operator(&self) -> bool
fn supports_set_stmt_without_operator(&self) -> bool
SET
statements without an explicit
assignment operator such as =
. For example: SET SHOWPLAN_XML ON
.Source§fn is_select_item_alias(
&self,
explicit: bool,
kw: &Keyword,
_parser: &mut Parser<'_>,
) -> bool
fn is_select_item_alias( &self, explicit: bool, kw: &Keyword, _parser: &mut Parser<'_>, ) -> bool
AS
word. Parser is provided
to enable looking ahead if needed.Source§fn is_table_factor_alias(
&self,
explicit: bool,
kw: &Keyword,
_parser: &mut Parser<'_>,
) -> bool
fn is_table_factor_alias( &self, explicit: bool, kw: &Keyword, _parser: &mut Parser<'_>, ) -> bool
AS
word. Parser is provided
to enable looking ahead if needed.Source§fn supports_timestamp_versioning(&self) -> bool
fn supports_timestamp_versioning(&self) -> bool
Auto Trait Implementations§
impl Freeze for RedshiftSqlDialect
impl RefUnwindSafe for RedshiftSqlDialect
impl Send for RedshiftSqlDialect
impl Sync for RedshiftSqlDialect
impl Unpin for RedshiftSqlDialect
impl UnwindSafe for RedshiftSqlDialect
Blanket Implementations§
Source§impl<T> AlignerFor<1> for T
impl<T> AlignerFor<1> for T
Source§impl<T> AlignerFor<1024> for T
impl<T> AlignerFor<1024> for T
Source§type Aligner = AlignTo1024<T>
type Aligner = AlignTo1024<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<128> for T
impl<T> AlignerFor<128> for T
Source§type Aligner = AlignTo128<T>
type Aligner = AlignTo128<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<16> for T
impl<T> AlignerFor<16> for T
Source§impl<T> AlignerFor<16384> for T
impl<T> AlignerFor<16384> for T
Source§type Aligner = AlignTo16384<T>
type Aligner = AlignTo16384<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<2> for T
impl<T> AlignerFor<2> for T
Source§impl<T> AlignerFor<2048> for T
impl<T> AlignerFor<2048> for T
Source§type Aligner = AlignTo2048<T>
type Aligner = AlignTo2048<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<256> for T
impl<T> AlignerFor<256> for T
Source§type Aligner = AlignTo256<T>
type Aligner = AlignTo256<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<32> for T
impl<T> AlignerFor<32> for T
Source§impl<T> AlignerFor<32768> for T
impl<T> AlignerFor<32768> for T
Source§type Aligner = AlignTo32768<T>
type Aligner = AlignTo32768<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<4> for T
impl<T> AlignerFor<4> for T
Source§impl<T> AlignerFor<4096> for T
impl<T> AlignerFor<4096> for T
Source§type Aligner = AlignTo4096<T>
type Aligner = AlignTo4096<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<512> for T
impl<T> AlignerFor<512> for T
Source§type Aligner = AlignTo512<T>
type Aligner = AlignTo512<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<64> for T
impl<T> AlignerFor<64> for T
Source§impl<T> AlignerFor<8> for T
impl<T> AlignerFor<8> for T
Source§impl<T> AlignerFor<8192> for T
impl<T> AlignerFor<8192> for T
Source§type Aligner = AlignTo8192<T>
type Aligner = AlignTo8192<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
Source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset
. Read moreSource§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
offset
. Read moreSource§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
offset
. Read moreSource§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
offset
. Read moreSource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
Source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
piped
except that the function takes &Self
Useful for functions that take &Self
instead of Self
. Read moreSource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read more