Class 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
    • Constructor Detail

    • Method Detail

      • 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
      • 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