Class RedshiftSqlDialect

java.lang.Object
org.apache.calcite.sql.SqlDialect
org.apache.calcite.sql.dialect.RedshiftSqlDialect

public class RedshiftSqlDialect extends SqlDialect
A SqlDialect implementation for the Redshift database.
  • Field Details

  • Constructor Details

    • RedshiftSqlDialect

      public RedshiftSqlDialect(SqlDialect.Context context)
      Creates a RedshiftSqlDialect.
  • Method Details

    • unparseOffsetFetch

      public void unparseOffsetFetch(SqlWriter writer, @Nullable SqlNode offset, @Nullable SqlNode fetch)
      Description copied from class: SqlDialect
      Converts an offset and fetch into SQL.

      At least one of offset and fetch must be provided.

      Common options:

      • OFFSET offset ROWS FETCH NEXT fetch ROWS ONLY (ANSI standard SQL, Oracle, PostgreSQL, and the default)
      • LIMIT fetch OFFSET offset (Apache Hive, MySQL, Redshift)
      Overrides:
      unparseOffsetFetch in class SqlDialect
      Parameters:
      writer - Writer
      offset - Number of rows to skip before emitting, or null
      fetch - Number of rows to fetch, or null
      See Also:
    • supportsCharSet

      public boolean supportsCharSet()
      Description copied from class: SqlDialect
      Returns whether the dialect supports character set names as part of a data type, for instance VARCHAR(30) CHARACTER SET `ISO-8859-1`.
      Overrides:
      supportsCharSet in class SqlDialect
    • getCastSpec

      public @Nullable SqlNode getCastSpec(RelDataType type)
      Description copied from class: SqlDialect
      Returns SqlNode for type in "cast(column as type)", which might be different between databases by type name, precision etc.

      If this method returns null, the cast will be omitted. In the default implementation, this is the case for the NULL type, and therefore CAST(NULL AS <nulltype>) is rendered as NULL.

      Overrides:
      getCastSpec in class SqlDialect
    • rewriteMaxMinExpr

      public SqlNode rewriteMaxMinExpr(SqlNode aggCall, RelDataType relDataType)
      Description copied from class: SqlDialect
      Rewrites MAX(x)/MIN(x) as BOOL_OR(x)/BOOL_AND(x) for certain database variants (Postgres and Redshift, currently).
      Overrides:
      rewriteMaxMinExpr in class SqlDialect
      See Also:
    • supportsGroupByLiteral

      public boolean supportsGroupByLiteral()
      Description copied from class: SqlDialect
      Returns whether the dialect supports GROUP BY literals.

      For instance, in SqlDialect.DatabaseProduct.REDSHIFT, the following queries are illegal:

      
       select avg(salary)
       from emp
       group by true
      
       select avg(salary)
       from emp
       group by 'a', DATE '2022-01-01'
       
      Overrides:
      supportsGroupByLiteral in class SqlDialect
    • supportsAliasedValues

      public boolean supportsAliasedValues()
      Description copied from class: SqlDialect
      Returns whether the dialect supports VALUES in a sub-query with and an "AS t(column, ...)" values to define column names.

      Currently, only Oracle does not. For this, we generate "SELECT v0 AS c0, v1 AS c1 ... UNION ALL ...". We may need to refactor this method when we support VALUES for other dialects.

      Overrides:
      supportsAliasedValues in class SqlDialect