Class OracleDialect

java.lang.Object
mondrian.spi.impl.JdbcDialectImpl
mondrian.spi.impl.OracleDialect
All Implemented Interfaces:
Dialect

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

  • Constructor Details

    • OracleDialect

      public OracleDialect(Connection connection) throws SQLException
      Creates an OracleDialect.
      Parameters:
      connection - Connection
      Throws:
      SQLException
    • OracleDialect

      public OracleDialect()
  • Method Details

    • allowsAs

      public boolean allowsAs()
      Description copied from interface: Dialect
      Returns whether the SQL dialect allows "AS" in the FROM clause. If so, "SELECT * FROM t AS alias" is a valid query.
      Specified by:
      allowsAs in interface Dialect
      Overrides:
      allowsAs in class JdbcDialectImpl
      Returns:
      whether dialect allows AS in FROM clause
    • generateInline

      public String generateInline(List<String> columnNames, List<String> columnTypes, List<String[]> valueList)
      Description copied from interface: Dialect
      Generates a SQL statement to represent an inline dataset.

      For example, for Oracle, generates

       SELECT 1 AS FOO, 'a' AS BAR FROM dual
       UNION ALL
       SELECT 2 AS FOO, 'b' AS BAR FROM dual
       

      For ANSI SQL, generates:

       VALUES (1, 'a'), (2, 'b')
       
      Specified by:
      generateInline in interface Dialect
      Overrides:
      generateInline in class JdbcDialectImpl
      Parameters:
      columnNames - List of column names
      columnTypes - List of column types ("String" or "Numeric")
      valueList - List of rows values
      Returns:
      SQL string
    • supportsGroupingSets

      public boolean supportsGroupingSets()
      Description copied from interface: Dialect
      Returns whether this Dialect allows the GROUPING SETS construct in the GROUP BY clause. Currently Greenplum, IBM DB2, Oracle, and Teradata.
      Specified by:
      supportsGroupingSets in interface Dialect
      Overrides:
      supportsGroupingSets in class JdbcDialectImpl
      Returns:
      Whether this Dialect allows GROUPING SETS clause
    • generateOrderByNulls

      public 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.
    • allowsJoinOn

      public boolean allowsJoinOn()
      Description copied from interface: Dialect
      Returns whether this dialect supports "ANSI-style JOIN syntax", FROM leftTable JOIN rightTable ON conditon.
      Specified by:
      allowsJoinOn in interface Dialect
      Overrides:
      allowsJoinOn in class JdbcDialectImpl
      Returns:
      Whether this dialect supports FROM-JOIN-ON syntax.
    • 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
      Chooses the most appropriate type for accessing the values of a column in a result set. The OracleDialect implementation handles some of the specific quirks of Oracle: e.g. scale = -127 has special meaning with NUMERIC types and may indicate a FLOAT value if precision is non-zero.
      Specified by:
      getType in interface Dialect
      Overrides:
      getType in class JdbcDialectImpl
      Parameters:
      metaData - Resultset metadata
      columnIndex - index of the column in the result set
      Returns:
      For Types.NUMERIC and Types.DECIMAL, getType() will return a Type.INT, Type.DOUBLE, or Type.OBJECT based on scale, precision, and column name.
      Throws:
      SQLException