Trait Dialect

Source
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§

Source

fn identifier_quote_style(&self, _identifier: &str) -> Option<char>

Return the character used to quote identifiers.

Provided Methods§

Source

fn supports_nulls_first_in_sort(&self) -> bool

Does the dialect support specifying NULLS FIRST/LAST in ORDER BY clauses?

Source

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

Source

fn interval_style(&self) -> IntervalStyle

Source

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

Source

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

Source

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

Source

fn date_field_extract_style(&self) -> DateFieldExtractStyle

The date field extract style to use: DateFieldExtractStyle

Source

fn character_length_style(&self) -> CharacterLengthStyle

The character length extraction style to use: CharacterLengthStyle

Source

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

Source

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

Source

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

Source

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

Source

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)

Source

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.

Source

fn division_operator(&self) -> BinaryOperator

The division operator for the dialect Most dialect uses BinaryOperator::Divide (/) But DuckDB dialect uses BinaryOperator::DuckIntegerDivide (//)

Source

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.

Source

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

Source

fn with_custom_scalar_overrides( self, _handlers: Vec<(&str, ScalarFnToSqlHandler)>, ) -> Self
where Self: Sized,

Extends the dialect’s default rules for unparsing scalar functions. This is useful for supporting application-specific UDFs or custom engine extensions.

Source

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)

Source

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.

Implementors§