Class AccessDialect

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

public class AccessDialect extends JdbcDialectImpl
Implementation of Dialect for the Microsoft Access database (also called the JET Engine).
Since:
Nov 23, 2008
Author:
jhyde
  • Field Details

  • Constructor Details

  • Method Details

    • toUpper

      public String toUpper(String expr)
      Description copied from interface: Dialect
      Converts an expression to upper case.

      For example, for MySQL, toUpper("foo.bar") returns "UPPER(foo.bar)".

      Specified by:
      toUpper in interface Dialect
      Overrides:
      toUpper in class JdbcDialectImpl
      Parameters:
      expr - SQL expression
      Returns:
      SQL syntax that converts expr into upper case.
    • caseWhenElse

      public String caseWhenElse(String cond, String thenExpr, String elseExpr)
      Description copied from interface: Dialect
      Generates a conditional statement in this dialect's syntax.

      For example, caseWhenElse("b", "1", "0") returns "case when b then 1 else 0 end" on Oracle, "Iif(b, 1, 0)" on Access.

      Specified by:
      caseWhenElse in interface Dialect
      Overrides:
      caseWhenElse in class JdbcDialectImpl
      Parameters:
      cond - Predicate expression
      thenExpr - Expression if condition is true
      elseExpr - Expression if condition is false
      Returns:
      Conditional expression
    • quoteDateLiteral

      protected void quoteDateLiteral(StringBuilder buf, String value, Date date)
      Description copied from class: JdbcDialectImpl
      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.
    • 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
    • allowsCountDistinct

      public boolean allowsCountDistinct()
      Description copied from interface: Dialect
      Returns whether this Dialect supports distinct aggregations.

      For example, Access does not allow

      select count(distinct x) from t
      Specified by:
      allowsCountDistinct in interface Dialect
      Overrides:
      allowsCountDistinct in class JdbcDialectImpl
      Returns:
      whether Dialect allows COUNT DISTINCT
    • 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