Class OracleDialect

  • All Implemented Interfaces:
    Dialect

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

      • OracleDialect

        public OracleDialect()
    • 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.
      • 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