Class PostgreSqlDialect

java.lang.Object
mondrian.spi.impl.JdbcDialectImpl
mondrian.spi.impl.PostgreSqlDialect
All Implemented Interfaces:
Dialect
Direct Known Subclasses:
GreenplumDialect, NetezzaDialect, RedshiftDialect

public class PostgreSqlDialect extends JdbcDialectImpl
Implementation of Dialect for the PostgreSQL database.
Since:
Nov 23, 2008
Author:
jhyde
  • Field Details

  • Constructor Details

    • PostgreSqlDialect

      public PostgreSqlDialect(Connection connection) throws SQLException
      Creates a PostgreSqlDialect.
      Parameters:
      connection - Connection
      Throws:
      SQLException
  • Method Details

    • requiresAliasForFromQuery

      public boolean requiresAliasForFromQuery()
      Description copied from interface: Dialect
      Returns whether this Dialect requires subqueries in the FROM clause to have an alias.
      Specified by:
      requiresAliasForFromQuery in interface Dialect
      Overrides:
      requiresAliasForFromQuery in class JdbcDialectImpl
      Returns:
      whether dialewct requires subqueries to have an alias
      See Also:
    • generateOrderByNulls

      protected String generateOrderByNulls(String expr, boolean ascending, boolean collateNullsLast)
      Description copied from class: JdbcDialectImpl
      Generates SQL to force null values to collate last.

      This default implementation makes use of the ANSI SQL 1999 CASE-WHEN-THEN-ELSE in conjunction with IS NULL syntax. The resulting SQL will look something like this:

      CASE WHEN "expr" IS NULL THEN 0 ELSE 1 END

      You can override this method for a particular database to use something more efficient, like ISNULL().

      ANSI SQL provides the syntax "ASC/DESC NULLS LAST" and "ASC/DESC NULLS FIRST". If your database supports the ANSI syntax, implement this method by calling JdbcDialectImpl.generateOrderByNullsAnsi(java.lang.String, boolean, boolean).

      This method is only called from JdbcDialectImpl.generateOrderItem(String, boolean, boolean, boolean). Some dialects override that method and therefore never call this method.

      Overrides:
      generateOrderByNulls in class JdbcDialectImpl
      Parameters:
      expr - Expression.
      ascending - Whether ascending.
      collateNullsLast - Whether nulls should appear first or last.
      Returns:
      Expression to force null values to collate last or first.
    • getDatabaseProduct

      public Dialect.DatabaseProduct getDatabaseProduct()
      Description copied from interface: Dialect
      Returns the database for this Dialect, or Dialect.DatabaseProduct.UNKNOWN if the database is not a common database.
      Specified by:
      getDatabaseProduct in interface Dialect
      Overrides:
      getDatabaseProduct in class JdbcDialectImpl
      Returns:
      Database
    • allowsRegularExpressionInWhereClause

      public boolean allowsRegularExpressionInWhereClause()
      Description copied from interface: Dialect
      Informs Mondrian if the dialect supports regular expressions when creating the 'where' or the 'having' clause.
      Specified by:
      allowsRegularExpressionInWhereClause in interface Dialect
      Overrides:
      allowsRegularExpressionInWhereClause in class JdbcDialectImpl
      Returns:
      True if regular expressions are supported.
    • generateRegularExpression

      public String generateRegularExpression(String source, String javaRegex)
      Description copied from interface: Dialect
      Must generate a String representing a regular expression match operation between a string literal and a Java regular expression. The string literal might be a column identifier or some other identifier, but the implementation must presume that it is already escaped and fit for use. The regular expression is not escaped and must be adapted to the proper dialect rules.

      Postgres / Greenplum example:

      generateRegularExpression( "'foodmart'.'customer_name'", "(?i).*oo.*") -> 'foodmart'.'customer_name' ~ "(?i).*oo.*"

      Oracle example:

      generateRegularExpression( "'foodmart'.'customer_name'", ".*oo.*") -> REGEXP_LIKE('foodmart'.'customer_name', ".*oo.*")

      Dialects are allowed to return null if the dialect cannot convert that particular regular expression into something that the database would support.

      Specified by:
      generateRegularExpression in interface Dialect
      Overrides:
      generateRegularExpression in class JdbcDialectImpl
      Parameters:
      source - A String identifying the column to match against.
      javaRegex - A Java regular expression to match against.
      Returns:
      A dialect specific matching operation, or null if the dialect cannot convert that particular regular expression into something that the database would support.
    • getType

      public SqlStatement.Type getType(ResultSetMetaData metaData, int columnIndex) throws SQLException
      Description copied from interface: Dialect

      Chooses the most appropriate type for accessing the values of a column in a result set for a dialect.

      Dialect-specific nuances involving type representation should be encapsulated in implementing methods. For example, if a dialect has implicit rules involving scale or precision, they should be handled within this method so the client can simply retrieve the "best fit" SqlStatement.Type for the column.

      Specified by:
      getType in interface Dialect
      Overrides:
      getType in class JdbcDialectImpl
      Parameters:
      metaData - Results set metadata
      columnIndex - Column ordinal (0-based)
      Returns:
      the most appropriate SqlStatement.Type for the column
      Throws:
      SQLException