pub trait Dialect: Send + Sync {
Show 21 methods
// Required method
fn identifier_quote_style(&self, _identifier: &str) -> Option<char>;
// Provided methods
fn supports_nulls_first_in_sort(&self) -> bool { ... }
fn use_timestamp_for_date64(&self) -> bool { ... }
fn interval_style(&self) -> IntervalStyle { ... }
fn float64_ast_dtype(&self) -> DataType { ... }
fn utf8_cast_dtype(&self) -> DataType { ... }
fn large_utf8_cast_dtype(&self) -> DataType { ... }
fn date_field_extract_style(&self) -> DateFieldExtractStyle { ... }
fn character_length_style(&self) -> CharacterLengthStyle { ... }
fn int64_cast_dtype(&self) -> DataType { ... }
fn int32_cast_dtype(&self) -> DataType { ... }
fn timestamp_cast_dtype(
&self,
_time_unit: &TimeUnit,
tz: &Option<Arc<str>>,
) -> DataType { ... }
fn date32_cast_dtype(&self) -> DataType { ... }
fn supports_column_alias_in_table_alias(&self) -> bool { ... }
fn requires_derived_table_alias(&self) -> bool { ... }
fn division_operator(&self) -> BinaryOperator { ... }
fn scalar_function_to_sql_overrides(
&self,
_unparser: &Unparser<'_>,
_func_name: &str,
_args: &[Expr],
) -> Result<Option<Expr>> { ... }
fn window_func_support_window_frame(
&self,
_func_name: &str,
_start_bound: &WindowFrameBound,
_end_bound: &WindowFrameBound,
) -> bool { ... }
fn with_custom_scalar_overrides(
self,
_handlers: Vec<(&str, ScalarFnToSqlHandler)>,
) -> Self
where Self: Sized { ... }
fn full_qualified_col(&self) -> bool { ... }
fn unnest_as_table_factor(&self) -> bool { ... }
}
Expand description
Dialect
to use for Unparsing
The default dialect tries to avoid quoting identifiers unless necessary (e.g. a
instead of "a"
)
but this behavior can be overridden as needed
Note: This trait will eventually be replaced by the Dialect in the SQLparser package
See https://github.com/sqlparser-rs/sqlparser-rs/pull/1170 See also the discussion in https://github.com/apache/datafusion/pull/10625
Required Methods§
Sourcefn identifier_quote_style(&self, _identifier: &str) -> Option<char>
fn identifier_quote_style(&self, _identifier: &str) -> Option<char>
Return the character used to quote identifiers.
Provided Methods§
Sourcefn supports_nulls_first_in_sort(&self) -> bool
fn supports_nulls_first_in_sort(&self) -> bool
Does the dialect support specifying NULLS FIRST/LAST
in ORDER BY
clauses?
Sourcefn use_timestamp_for_date64(&self) -> bool
fn use_timestamp_for_date64(&self) -> bool
Does the dialect use TIMESTAMP to represent Date64 rather than DATETIME? E.g. Trino, Athena and Dremio does not have DATETIME data type
fn interval_style(&self) -> IntervalStyle
Sourcefn float64_ast_dtype(&self) -> DataType
fn float64_ast_dtype(&self) -> DataType
Does the dialect use DOUBLE PRECISION to represent Float64 rather than DOUBLE? E.g. Postgres uses DOUBLE PRECISION instead of DOUBLE
Sourcefn utf8_cast_dtype(&self) -> DataType
fn utf8_cast_dtype(&self) -> DataType
The SQL type to use for Arrow Utf8 unparsing Most dialects use VARCHAR, but some, like MySQL, require CHAR
Sourcefn large_utf8_cast_dtype(&self) -> DataType
fn large_utf8_cast_dtype(&self) -> DataType
The SQL type to use for Arrow LargeUtf8 unparsing Most dialects use TEXT, but some, like MySQL, require CHAR
Sourcefn date_field_extract_style(&self) -> DateFieldExtractStyle
fn date_field_extract_style(&self) -> DateFieldExtractStyle
The date field extract style to use: DateFieldExtractStyle
Sourcefn character_length_style(&self) -> CharacterLengthStyle
fn character_length_style(&self) -> CharacterLengthStyle
The character length extraction style to use: CharacterLengthStyle
Sourcefn int64_cast_dtype(&self) -> DataType
fn int64_cast_dtype(&self) -> DataType
The SQL type to use for Arrow Int64 unparsing Most dialects use BigInt, but some, like MySQL, require SIGNED
Sourcefn int32_cast_dtype(&self) -> DataType
fn int32_cast_dtype(&self) -> DataType
The SQL type to use for Arrow Int32 unparsing Most dialects use Integer, but some, like MySQL, require SIGNED
Sourcefn timestamp_cast_dtype(
&self,
_time_unit: &TimeUnit,
tz: &Option<Arc<str>>,
) -> DataType
fn timestamp_cast_dtype( &self, _time_unit: &TimeUnit, tz: &Option<Arc<str>>, ) -> DataType
The SQL type to use for Timestamp unparsing Most dialects use Timestamp, but some, like MySQL, require Datetime Some dialects like Dremio does not support WithTimeZone and requires always Timestamp
Sourcefn date32_cast_dtype(&self) -> DataType
fn date32_cast_dtype(&self) -> DataType
The SQL type to use for Arrow Date32 unparsing Most dialects use Date, but some, like SQLite require TEXT
Sourcefn supports_column_alias_in_table_alias(&self) -> bool
fn supports_column_alias_in_table_alias(&self) -> bool
Does the dialect support specifying column aliases as part of alias table definition? (SELECT col1, col2 from my_table) AS my_table_alias(col1_alias, col2_alias)
Sourcefn requires_derived_table_alias(&self) -> bool
fn requires_derived_table_alias(&self) -> bool
Whether the dialect requires a table alias for any subquery in the FROM clause This affects behavior when deriving logical plans for Sort, Limit, etc.
Sourcefn division_operator(&self) -> BinaryOperator
fn division_operator(&self) -> BinaryOperator
The division operator for the dialect
Most dialect uses BinaryOperator::Divide
(/)
But DuckDB dialect uses BinaryOperator::DuckIntegerDivide
(//)
Sourcefn scalar_function_to_sql_overrides(
&self,
_unparser: &Unparser<'_>,
_func_name: &str,
_args: &[Expr],
) -> Result<Option<Expr>>
fn scalar_function_to_sql_overrides( &self, _unparser: &Unparser<'_>, _func_name: &str, _args: &[Expr], ) -> Result<Option<Expr>>
Allows the dialect to override scalar function unparsing if the dialect has specific rules. Returns None if the default unparsing should be used, or Some(ast::Expr) if there is a custom implementation for the function.
Sourcefn window_func_support_window_frame(
&self,
_func_name: &str,
_start_bound: &WindowFrameBound,
_end_bound: &WindowFrameBound,
) -> bool
fn window_func_support_window_frame( &self, _func_name: &str, _start_bound: &WindowFrameBound, _end_bound: &WindowFrameBound, ) -> bool
Allows the dialect to choose to omit window frame in unparsing based on function name and window frame bound Returns false if specific function name / window frame bound indicates no window frame is needed in unparsing
Sourcefn with_custom_scalar_overrides(
self,
_handlers: Vec<(&str, ScalarFnToSqlHandler)>,
) -> Selfwhere
Self: Sized,
fn with_custom_scalar_overrides(
self,
_handlers: Vec<(&str, ScalarFnToSqlHandler)>,
) -> Selfwhere
Self: Sized,
Extends the dialect’s default rules for unparsing scalar functions. This is useful for supporting application-specific UDFs or custom engine extensions.
Sourcefn full_qualified_col(&self) -> bool
fn full_qualified_col(&self) -> bool
Allow to unparse a qualified column with a full qualified name (e.g. catalog_name.schema_name.table_name.column_name) Otherwise, the column will be unparsed with only the table name and column name (e.g. table_name.column_name)
Sourcefn unnest_as_table_factor(&self) -> bool
fn unnest_as_table_factor(&self) -> bool
Allow to unparse the unnest plan as ast::TableFactor::UNNEST.
Some dialects like BigQuery require UNNEST to be used in the FROM clause but the LogicalPlan planner always puts UNNEST in the SELECT clause. This flag allows to unparse the UNNEST plan as ast::TableFactor::UNNEST instead of a subquery.