Skip to main content

CommandTranslator

Trait CommandTranslator 

Source
pub trait CommandTranslator {
    // Required method
    fn translate_explode(
        &self,
        _ctx: &mut TranslationContext<'_>,
        cmd: &IRCommand,
        _explode_cmd: &IRExplodeCommand,
        _query: QueryInput,
    ) -> CommandTranslationResult;

    // Provided methods
    fn translate_command(
        &self,
        ctx: &mut TranslationContext<'_>,
        cmd: &IRCommand,
        query: QueryInput,
    ) -> CommandTranslationResult { ... }
    fn translate_from(
        &self,
        _ctx: &mut TranslationContext<'_>,
        cmd: &IRCommand,
        from_cmd: &IRFromCommand,
        _query: QueryInput,
    ) -> CommandTranslationResult { ... }
    fn translate_where(
        &self,
        _ctx: &mut TranslationContext<'_>,
        cmd: &IRCommand,
        where_cmd: &IRWhereCommand,
        query: QueryInput,
    ) -> CommandTranslationResult { ... }
    fn translate_select(
        &self,
        ctx: &mut TranslationContext<'_>,
        _cmd: &IRCommand,
        select_cmd: &IRSelectCommand,
        query: QueryInput,
    ) -> CommandTranslationResult { ... }
    fn translate_sort(
        &self,
        ctx: &mut TranslationContext<'_>,
        _cmd: &IRCommand,
        sort_cmd: &IRSortCommand,
        query: QueryInput,
    ) -> CommandTranslationResult { ... }
    fn translate_limit(
        &self,
        _ctx: &mut TranslationContext<'_>,
        cmd: &IRCommand,
        limit_cmd: &IRLimitCommand,
        query: QueryInput,
    ) -> CommandTranslationResult { ... }
    fn translate_agg(
        &self,
        ctx: &mut TranslationContext<'_>,
        _cmd: &IRCommand,
        agg_cmd: &IRAggCommand,
        query: QueryInput,
    ) -> CommandTranslationResult { ... }
    fn translate_window(
        &self,
        ctx: &mut TranslationContext<'_>,
        cmd: &IRCommand,
        window_cmd: &IRWindowCommand,
        query: QueryInput,
    ) -> CommandTranslationResult { ... }
    fn translate_join(
        &self,
        ctx: &mut TranslationContext<'_>,
        cmd: &IRCommand,
        join_cmd: &IRJoinCommand,
        query: QueryInput,
    ) -> CommandTranslationResult { ... }
}
Expand description

Trait for translating IR commands to SQL.

This trait provides default implementations for all command types. Dialects can override specific methods to customize SQL generation.

Required Methods§

Source

fn translate_explode( &self, _ctx: &mut TranslationContext<'_>, cmd: &IRCommand, _explode_cmd: &IRExplodeCommand, _query: QueryInput, ) -> CommandTranslationResult

Translate an EXPLODE command.

No default implementation - EXPLODE syntax varies significantly across dialects:

  • Trino: CROSS JOIN UNNEST(array_col) AS t(col_name)
  • DuckDB: unnest(array_col) as a table function

Each dialect must provide its own implementation.

Provided Methods§

Source

fn translate_command( &self, ctx: &mut TranslationContext<'_>, cmd: &IRCommand, query: QueryInput, ) -> CommandTranslationResult

Main dispatcher - translates any IR command to SQL.

Override this only if you need to change the dispatch logic itself. Most dialects should override individual command methods instead.

Source

fn translate_from( &self, _ctx: &mut TranslationContext<'_>, cmd: &IRCommand, from_cmd: &IRFromCommand, _query: QueryInput, ) -> CommandTranslationResult

Translate a FROM command.

FROM can have one or more inputs:

  • Single input: direct table reference or CTE reference
  • Multiple inputs: UNION ALL of all inputs
Source

fn translate_where( &self, _ctx: &mut TranslationContext<'_>, cmd: &IRCommand, where_cmd: &IRWhereCommand, query: QueryInput, ) -> CommandTranslationResult

Translate a WHERE command.

Adds a filter predicate to the query.

If there’s an input query, we wrap it in a subquery first. This ensures that the WHERE clause can reference column aliases from the previous SELECT (SQL doesn’t allow referencing aliases in the same SELECT’s WHERE).

Source

fn translate_select( &self, ctx: &mut TranslationContext<'_>, _cmd: &IRCommand, select_cmd: &IRSelectCommand, query: QueryInput, ) -> CommandTranslationResult

Translate a SELECT command.

If no input query, just apply projections directly (expression-only queries). Otherwise wraps the input in a subquery and applies projections.

Source

fn translate_sort( &self, ctx: &mut TranslationContext<'_>, _cmd: &IRCommand, sort_cmd: &IRSortCommand, query: QueryInput, ) -> CommandTranslationResult

Translate a SORT command.

Adds ORDER BY clause to the query.

Source

fn translate_limit( &self, _ctx: &mut TranslationContext<'_>, cmd: &IRCommand, limit_cmd: &IRLimitCommand, query: QueryInput, ) -> CommandTranslationResult

Translate a LIMIT command.

Adds LIMIT clause to the query. If the query already has a LIMIT, wraps it in a subquery first to preserve both limits.

Source

fn translate_agg( &self, ctx: &mut TranslationContext<'_>, _cmd: &IRCommand, agg_cmd: &IRAggCommand, query: QueryInput, ) -> CommandTranslationResult

Translate an AGG command.

Creates a GROUP BY query with aggregate projections.

Source

fn translate_window( &self, ctx: &mut TranslationContext<'_>, cmd: &IRCommand, window_cmd: &IRWindowCommand, query: QueryInput, ) -> CommandTranslationResult

Translate a WINDOW command.

Creates window function projections with OVER clause.

WINDOW extends the input with new columns (unlike AGG which replaces). So we need to pass through all input columns AND add the window projections.

Source

fn translate_join( &self, ctx: &mut TranslationContext<'_>, cmd: &IRCommand, join_cmd: &IRJoinCommand, query: QueryInput, ) -> CommandTranslationResult

Translate a JOIN command.

Creates a SQL JOIN with the specified join type and condition.

Implementors§