mondrian.spi.impl
Class HiveDialect

java.lang.Object
  extended by mondrian.spi.impl.JdbcDialectImpl
      extended by mondrian.spi.impl.HiveDialect
All Implemented Interfaces:
Dialect

public class HiveDialect
extends JdbcDialectImpl

Implementation of Dialect for the Hive database.

Since:
Jan 10, 2011
Author:
Hongwei Fu

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
HiveDialect(Connection connection)
          Creates a HiveDialect.
 
Method Summary
 boolean allowsAs()
          Returns whether the SQL dialect allows "AS" in the FROM clause.
 boolean allowsCompoundCountDistinct()
          Returns whether this Dialect allows multiple arguments to the COUNT(DISTINCT ...) aggregate function, for example SELECT COUNT(DISTINCT x, y) FROM t
 boolean allowsJoinOn()
          Returns whether this dialect supports "ANSI-style JOIN syntax", FROM leftTable JOIN rightTable ON conditon.
protected  String deduceIdentifierQuoteString(DatabaseMetaData databaseMetaData)
           
protected  int deduceMaxColumnNameLength(DatabaseMetaData databaseMetaData)
           
protected  boolean deduceReadOnly(DatabaseMetaData databaseMetaData)
           
protected  Set<List<Integer>> deduceSupportedResultSetStyles(DatabaseMetaData databaseMetaData)
           
 String generateInline(List<String> columnNames, List<String> columnTypes, List<String[]> valueList)
          Generates a SQL statement to represent an inline dataset.
protected  String generateOrderByNulls(String expr, boolean ascending, boolean collateNullsLast)
          Generates SQL to force null values to collate last.
protected  void quoteDateLiteral(StringBuilder buf, String value, Date date)
          Helper method for JdbcDialectImpl.quoteDateLiteral(StringBuilder, String).
 boolean requiresAliasForFromQuery()
          Returns whether this Dialect requires subqueries in the FROM clause to have an alias.
 boolean requiresOrderByAlias()
          Returns true if this Dialect can include expressions in the ORDER BY clause only by adding an expression to the SELECT clause and using its alias.
 boolean requiresUnionOrderByExprToBeInSelectClause()
          Returns true if this dialect allows an expression in the ORDER BY clause of a UNION (or other set operation) query only if it occurs in the SELECT clause.
 
Methods inherited from class mondrian.spi.impl.JdbcDialectImpl
allowsCountDistinct, allowsDdl, allowsDialectSharing, allowsFromQuery, allowsMultipleCountDistinct, allowsMultipleDistinctSqlMeasures, allowsOrderByAlias, allowsRegularExpressionInWhereClause, allowsSelectNotInGroupBy, appendHintsAfterFromClause, caseWhenElse, deduceProductName, deduceProductVersion, deduceSupportsSelectNotInGroupBy, generateCountExpression, generateInlineForAnsi, generateInlineGeneric, generateOrderByNullsAnsi, generateOrderItem, generateOrderItem, generateRegularExpression, getDatabaseProduct, getMaxColumnNameLength, getProduct, getQuoteIdentifierString, needsExponent, quote, quoteBooleanLiteral, quoteDateLiteral, quoteIdentifier, quoteIdentifier, quoteIdentifier, quoteIdentifier, quoteNumericLiteral, quoteStringLiteral, quoteTimeLiteral, quoteTimestampLiteral, requiresGroupByAlias, requiresHavingAlias, requiresUnionOrderByOrdinal, supportsGroupByExpressions, supportsGroupingSets, 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

HiveDialect

public HiveDialect(Connection connection)
            throws SQLException
Creates a HiveDialect.

Parameters:
connection - Connection
Throws:
SQLException - on error
Method Detail

deduceIdentifierQuoteString

protected String deduceIdentifierQuoteString(DatabaseMetaData databaseMetaData)
Overrides:
deduceIdentifierQuoteString in class JdbcDialectImpl

deduceSupportedResultSetStyles

protected Set<List<Integer>> deduceSupportedResultSetStyles(DatabaseMetaData databaseMetaData)
Overrides:
deduceSupportedResultSetStyles in class JdbcDialectImpl

deduceReadOnly

protected boolean deduceReadOnly(DatabaseMetaData databaseMetaData)
Overrides:
deduceReadOnly in class JdbcDialectImpl

deduceMaxColumnNameLength

protected int deduceMaxColumnNameLength(DatabaseMetaData databaseMetaData)
Overrides:
deduceMaxColumnNameLength in class JdbcDialectImpl

allowsCompoundCountDistinct

public boolean allowsCompoundCountDistinct()
Description copied from interface: Dialect
Returns whether this Dialect allows multiple arguments to the COUNT(DISTINCT ...) aggregate function, for example
SELECT COUNT(DISTINCT x, y) FROM t

Specified by:
allowsCompoundCountDistinct in interface Dialect
Overrides:
allowsCompoundCountDistinct in class JdbcDialectImpl
Returns:
whether Dialect allows multiple arguments to COUNT DISTINCT
See Also:
Dialect.allowsCountDistinct(), Dialect.allowsMultipleCountDistinct()

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:
Dialect.allowsFromQuery()

requiresOrderByAlias

public boolean requiresOrderByAlias()
Description copied from interface: Dialect
Returns true if this Dialect can include expressions in the ORDER BY clause only by adding an expression to the SELECT clause and using its alias.

For example, in such a dialect,

SELECT x FROM t ORDER BY x + y
would be illegal, but
SELECT x, x + y AS z FROM t ORDER BY z
would be legal.

MySQL, DB2 and Ingres are examples of such dialects.

Specified by:
requiresOrderByAlias in interface Dialect
Overrides:
requiresOrderByAlias in class JdbcDialectImpl
Returns:
Whether this Dialect can include expressions in the ORDER BY clause only by adding an expression to the SELECT clause and using its alias

requiresUnionOrderByExprToBeInSelectClause

public boolean requiresUnionOrderByExprToBeInSelectClause()
Description copied from interface: Dialect
Returns true if this dialect allows an expression in the ORDER BY clause of a UNION (or other set operation) query only if it occurs in the SELECT clause.

For example, SELECT x, y + z FROM t
UNION ALL
SELECT x, y + z FROM t
ORDER BY y + z
is allowed but SELECT x, y, z FROM t
UNION ALL
SELECT x, y, z FROM t
ORDER BY y + z
SELECT x, y, z FROM t ORDER BY y + z is not.

Access is an example of a dialect with this restriction.

Specified by:
requiresUnionOrderByExprToBeInSelectClause in interface Dialect
Overrides:
requiresUnionOrderByExprToBeInSelectClause in class JdbcDialectImpl
Returns:
whether this dialect allows an expression in the ORDER BY clause of a UNION (or other set operation) query only if it occurs in the SELECT 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

quoteDateLiteral

protected void quoteDateLiteral(StringBuilder buf,
                                String value,
                                Date date)
Description copied from class: JdbcDialectImpl
Helper method for JdbcDialectImpl.quoteDateLiteral(StringBuilder, String).

Overrides:
quoteDateLiteral in class JdbcDialectImpl
Parameters:
buf - Buffer to append to
value - Value as string
date - Value as date

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.

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

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.

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