mondrian.spi.impl
Class OracleDialect

java.lang.Object
  extended by mondrian.spi.impl.JdbcDialectImpl
      extended by 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

Nested Class Summary
 
Nested classes/interfaces inherited from interface mondrian.spi.Dialect
Dialect.DatabaseProduct, Dialect.Datatype
 
Field Summary
static JdbcDialectFactory FACTORY
           
 
Fields inherited from class mondrian.spi.impl.JdbcDialectImpl
databaseProduct, permitsSelectNotInGroupBy, productVersion
 
Constructor Summary
OracleDialect(Connection connection)
          Creates an OracleDialect.
 
Method Summary
 boolean allowsAs()
          Returns whether the SQL dialect allows "AS" in the FROM clause.
 boolean allowsJoinOn()
          Returns whether this dialect supports "ANSI-style JOIN syntax", FROM leftTable JOIN rightTable ON conditon.
 boolean allowsRegularExpressionInWhereClause()
          Informs Mondrian if the dialect supports regular expressions when creating the 'where' or the 'having' clause.
 String generateInline(List<String> columnNames, List<String> columnTypes, List<String[]> valueList)
          Generates a SQL statement to represent an inline dataset.
 String generateOrderByNulls(String expr, boolean ascending, boolean collateNullsLast)
          Generates SQL to force null values to collate last.
 String generateRegularExpression(String source, String javaRegex)
          Must generate a String representing a regular expression match operation between a string literal and a Java regular expression.
 void quoteDateLiteral(StringBuilder buf, String value)
          Appends to a buffer a date literal.
 boolean supportsGroupingSets()
          Returns whether this Dialect allows the GROUPING SETS construct in the GROUP BY clause.
 
Methods inherited from class mondrian.spi.impl.JdbcDialectImpl
allowsCompoundCountDistinct, allowsCountDistinct, allowsDdl, allowsDialectSharing, allowsFromQuery, allowsMultipleCountDistinct, allowsMultipleDistinctSqlMeasures, allowsOrderByAlias, allowsSelectNotInGroupBy, appendHintsAfterFromClause, caseWhenElse, deduceIdentifierQuoteString, deduceMaxColumnNameLength, deduceProductName, deduceProductVersion, deduceReadOnly, deduceSupportedResultSetStyles, deduceSupportsSelectNotInGroupBy, generateCountExpression, generateInlineForAnsi, generateInlineGeneric, generateOrderByNullsAnsi, generateOrderItem, generateOrderItem, getDatabaseProduct, getMaxColumnNameLength, getProduct, getQuoteIdentifierString, needsExponent, quote, quoteBooleanLiteral, quoteDateLiteral, quoteIdentifier, quoteIdentifier, quoteIdentifier, quoteIdentifier, quoteNumericLiteral, quoteStringLiteral, quoteTimeLiteral, quoteTimestampLiteral, requiresAliasForFromQuery, requiresGroupByAlias, requiresHavingAlias, requiresOrderByAlias, requiresUnionOrderByExprToBeInSelectClause, requiresUnionOrderByOrdinal, supportsGroupByExpressions, supportsMultiValueInExpr, supportsResultSetConcurrency, supportsUnlimitedValueList, toString, toUpper
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

FACTORY

public static final JdbcDialectFactory FACTORY
Constructor Detail

OracleDialect

public OracleDialect(Connection connection)
              throws SQLException
Creates an OracleDialect.

Parameters:
connection - Connection
Throws:
SQLException
Method Detail

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.

quoteDateLiteral

public void quoteDateLiteral(StringBuilder buf,
                             String value)
Description copied from interface: Dialect
Appends to a buffer a date literal.

For example, in the default dialect, quoteStringLiteral(buf, "1969-03-17") appends DATE '1969-03-17'.

Specified by:
quoteDateLiteral in interface Dialect
Overrides:
quoteDateLiteral in class JdbcDialectImpl
Parameters:
buf - Buffer to append to
value - Literal

Get Mondrian at SourceForge.net. Fast, secure and free Open Source software downloads