Class AbstractHANADialect

    • Constructor Detail

      • AbstractHANADialect

        public AbstractHANADialect()
    • Method Detail

      • castPattern

        public String castPattern​(CastType from,
                                  CastType to)
        Description copied from class: Dialect
        Obtain a pattern for the SQL equivalent to a cast() function call. The resulting pattern must contain ?1 and ?2 placeholders for the arguments.
        Overrides:
        castPattern in class Dialect
        Parameters:
        from - a CastType indicating the type of the value argument
        to - a CastType indicating the type the value argument is cast to
      • getDefaultDecimalPrecision

        public int getDefaultDecimalPrecision()
        Description copied from class: Dialect
        This is the default precision for a generated column mapped to a BigInteger or BigDecimal.

        Usually returns the maximum precision of the database, except when there is no such maximum precision, or the maximum precision is very high.

        Overrides:
        getDefaultDecimalPrecision in class Dialect
        Returns:
        the default precision, in decimal digits
      • initializeFunctionRegistry

        public void initializeFunctionRegistry​(QueryEngine queryEngine)
        Description copied from class: Dialect
        Initialize the given registry with any dialect-specific functions. Support for certain SQL functions is required, and if the database does not support a required function, then the dialect must define a way to emulate it. These required functions include the functions defined by the JPA query language specification:
        • avg(arg) - aggregate function
        • count([distinct ]arg) - aggregate function
        • max(arg) - aggregate function
        • min(arg) - aggregate function
        • sum(arg) - aggregate function
        • coalesce(arg0, arg1, ...)
        • nullif(arg0, arg1)
        • lower(arg)
        • upper(arg)
        • length(arg)
        • concat(arg0, arg1, ...)
        • locate(pattern, string[, start])
        • substring(string, start[, length])
        • trim([[spec ][character ]from] string)
        • abs(arg)
        • mod(arg0, arg1)
        • sqrt(arg)
        • current date
        • current time
        • current timestamp
        Along with an additional set of functions defined by ANSI SQL:
        • any(arg) - aggregate function
        • every(arg) - aggregate function
        • cast(arg as Type)
        • extract(field from arg)
        • ln(arg)
        • exp(arg)
        • power(arg0, arg1)
        • floor(arg)
        • ceiling(arg)
        • position(pattern in string)
        • substring(string from start[ for length])
        • overlay(string placing replacement from start[ for length])
        And the following functions for working with java.time types:
        • local date
        • local time
        • local datetime
        • offset datetime
        • instant
        And a number of additional "standard" functions:
        • left(string, length)
        • right(string, length)
        • replace(string, pattern, replacement)
        • pad(string with length spec[ character])
        • sign(arg)
        • sin(arg)
        • cos(arg)
        • tan(arg)
        • asin(arg)
        • acos(arg)
        • atan(arg)
        • atan2(arg0, arg1)
        • round(arg0, arg1)
        • least(arg0, arg1, ...)
        • greatest(arg0, arg1, ...)
        • format(datetime as pattern)
        • str(arg) - synonym of cast(a as String)
        • ifnull(arg0, arg1) - synonym of coalesce(a, b)
        Finally, the following functions are defined as abbreviations for extract(), and desugared by the parser:
        • second(arg) - synonym of extract(second from a)
        • minute(arg) - synonym of extract(minute from a)
        • hour(arg) - synonym of extract(hour from a)
        • day(arg) - synonym of extract(day from a)
        • month(arg) - synonym of extract(month from a)
        • year(arg) - synonym of extract(year from a)
        Overrides:
        initializeFunctionRegistry in class Dialect
      • buildSQLExceptionConversionDelegate

        public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate()
        Description copied from class: Dialect
        Build an instance of a SQLExceptionConversionDelegate for interpreting dialect-specific error or SQLState codes.

        If this method is overridden to return a non-null value, the default SQLExceptionConverter will use the returned SQLExceptionConversionDelegate in addition to the following standard delegates:

        1. a "static" delegate based on the JDBC 4 defined SQLException hierarchy;
        2. a delegate that interprets SQLState codes for either X/Open or SQL-2003 codes, depending on java.sql.DatabaseMetaData#getSQLStateType

        It is strongly recommended that specific Dialect implementations override this method, since interpretation of a SQL error is much more accurate when based on the vendor-specific ErrorCode rather than the SQLState.

        Specific Dialects may override to return whatever is most appropriate for that vendor.

        Overrides:
        buildSQLExceptionConversionDelegate in class Dialect
        Returns:
        The SQLExceptionConversionDelegate for this dialect
      • getAddColumnString

        public String getAddColumnString()
        Description copied from class: Dialect
        The syntax used to add a column to a table (optional).
        Overrides:
        getAddColumnString in class Dialect
        Returns:
        The "add column" fragment.
      • getAddColumnSuffixString

        public String getAddColumnSuffixString()
        Description copied from class: Dialect
        The syntax for the suffix used to add a column to a table (optional).
        Overrides:
        getAddColumnSuffixString in class Dialect
        Returns:
        The suffix "add column" fragment.
      • getCascadeConstraintsString

        public String getCascadeConstraintsString()
        Description copied from class: Dialect
        The keyword that specifies that a drop table operation should be cascaded to its constraints, typically " cascade" where the leading space is required, or the empty string if there is no such keyword in this dialect.
        Overrides:
        getCascadeConstraintsString in class Dialect
        Returns:
        The cascade drop keyword, if any, with a leading space
      • getCurrentTimestampSelectString

        public String getCurrentTimestampSelectString()
        Description copied from class: Dialect
        Retrieve the command used to retrieve the current timestamp from the database.
        Overrides:
        getCurrentTimestampSelectString in class Dialect
        Returns:
        The command.
      • getForUpdateString

        public String getForUpdateString​(String aliases)
        Description copied from class: Dialect
        Get the FOR UPDATE OF column_list fragment appropriate for this dialect given the aliases of the columns to be write locked.
        Overrides:
        getForUpdateString in class Dialect
        Parameters:
        aliases - The columns to be write locked.
        Returns:
        The appropriate FOR UPDATE OF column_list clause string.
      • getForUpdateString

        public String getForUpdateString​(String aliases,
                                         LockOptions lockOptions)
        Description copied from class: Dialect
        Get the FOR UPDATE OF column_list fragment appropriate for this dialect given the aliases of the columns to be write locked.
        Overrides:
        getForUpdateString in class Dialect
        Parameters:
        aliases - The columns to be write locked.
        lockOptions - the lock options to apply
        Returns:
        The appropriate FOR UPDATE OF column_list clause string.
      • getForUpdateNowaitString

        public String getForUpdateNowaitString()
        Description copied from class: Dialect
        Retrieves the FOR UPDATE NOWAIT syntax specific to this dialect.
        Overrides:
        getForUpdateNowaitString in class Dialect
        Returns:
        The appropriate FOR UPDATE NOWAIT clause string.
      • getQuerySequencesString

        public String getQuerySequencesString()
        Description copied from class: Dialect
        Get the select command used retrieve the names of all sequences.
        Overrides:
        getQuerySequencesString in class Dialect
        Returns:
        The select command; or null if sequences are not supported.
        See Also:
        org.hibernate.tool.hbm2ddl.SchemaUpdate
      • registerHanaKeywords

        protected void registerHanaKeywords()
      • defaultScrollMode

        public ScrollMode defaultScrollMode()
        Description copied from class: Dialect
        Certain dialects support a subset of ScrollModes. Provide a default to be used by Criteria and Query.
        Overrides:
        defaultScrollMode in class Dialect
        Returns:
        ScrollMode
      • supportsColumnCheck

        public boolean supportsColumnCheck()
        HANA currently does not support check constraints.
        Overrides:
        supportsColumnCheck in class Dialect
        Returns:
        True if column-level CHECK constraints are supported; false otherwise.
      • supportsCurrentTimestampSelection

        public boolean supportsCurrentTimestampSelection()
        Description copied from class: Dialect
        Does this dialect support a way to retrieve the database's current timestamp value?
        Overrides:
        supportsCurrentTimestampSelection in class Dialect
        Returns:
        True if the current timestamp can be retrieved; false otherwise.
      • supportsExistsInSelect

        public boolean supportsExistsInSelect()
        Description copied from class: Dialect
        Does the dialect support an exists statement in the select clause?
        Overrides:
        supportsExistsInSelect in class Dialect
        Returns:
        True if exists checks are allowed in the select clause; false otherwise.
      • supportsExpectedLobUsagePattern

        public boolean supportsExpectedLobUsagePattern()
        Description copied from class: Dialect
        Expected LOB usage pattern is such that I can perform an insert via prepared statement with a parameter binding for a LOB value without crazy casting to JDBC driver implementation-specific classes...

        Part of the trickiness here is the fact that this is largely driver dependent. For example, Oracle (which is notoriously bad with LOB support in their drivers historically) actually does a pretty good job with LOB support as of the 10.2.x versions of their drivers...

        Overrides:
        supportsExpectedLobUsagePattern in class Dialect
        Returns:
        True if normal LOB usage patterns can be used with this driver; false if driver-specific hookiness needs to be applied.
      • supportsUnboundedLobLocatorMaterialization

        public boolean supportsUnboundedLobLocatorMaterialization()
        Description copied from class: Dialect
        Is it supported to materialize a LOB locator outside the transaction in which it was created?

        Again, part of the trickiness here is the fact that this is largely driver dependent.

        NOTE: all database I have tested which Dialect.supportsExpectedLobUsagePattern() also support the ability to materialize a LOB outside the owning transaction...

        Overrides:
        supportsUnboundedLobLocatorMaterialization in class Dialect
        Returns:
        True if unbounded materialization is supported; false otherwise.
      • supportsTableCheck

        public boolean supportsTableCheck()
        Description copied from class: Dialect
        Does this dialect support table-level check constraints?
        Overrides:
        supportsTableCheck in class Dialect
        Returns:
        True if table-level CHECK constraints are supported; false otherwise.
      • supportsTupleDistinctCounts

        public boolean supportsTupleDistinctCounts()
        Description copied from class: Dialect
        Does this dialect support `count(distinct a,b)`?
        Overrides:
        supportsTupleDistinctCounts in class Dialect
        Returns:
        True if the database supports counting distinct tuples; false otherwise.
      • dropConstraints

        public boolean dropConstraints()
        Description copied from class: Dialect
        Do we need to drop constraints before dropping tables in this dialect?
        Overrides:
        dropConstraints in class Dialect
        Returns:
        True if constraints must be dropped prior to dropping the table; false otherwise.
      • getMaxAliasLength

        public int getMaxAliasLength()
        Description copied from class: Dialect
        What is the maximum length Hibernate can use for generated aliases?

        The maximum here should account for the fact that Hibernate often needs to append "uniqueing" information to the end of generated aliases. That "uniqueing" information will be added to the end of a identifier generated to the length specified here; so be sure to leave some room (generally speaking 5 positions will suffice).

        Overrides:
        getMaxAliasLength in class Dialect
        Returns:
        The maximum length.
      • getSelectGUIDString

        public String getSelectGUIDString()
        Description copied from class: Dialect
        Get the command used to select a GUID from the underlying database.

        Optional operation.

        Overrides:
        getSelectGUIDString in class Dialect
        Returns:
        The appropriate command.
      • getCurrentSchemaCommand

        public String getCurrentSchemaCommand()
        Description copied from class: Dialect
        Get the SQL command used to retrieve the current schema name. Works in conjunction with Dialect.getSchemaNameResolver(), unless the return from there does not need this information. E.g., a custom impl might make use of the Java 1.7 addition of the Connection.getSchema() method
        Overrides:
        getCurrentSchemaCommand in class Dialect
        Returns:
        The current schema retrieval SQL
      • getForUpdateNowaitString

        public String getForUpdateNowaitString​(String aliases)
        Description copied from class: Dialect
        Get the FOR UPDATE OF column_list NOWAIT fragment appropriate for this dialect given the aliases of the columns to be write locked.
        Overrides:
        getForUpdateNowaitString in class Dialect
        Parameters:
        aliases - The columns to be write locked.
        Returns:
        The appropriate FOR UPDATE OF colunm_list NOWAIT clause string.
      • getReadLockString

        public String getReadLockString​(int timeout)
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire READ locks for this dialect. Location of the returned string is treated the same as getForUpdateString.
        Overrides:
        getReadLockString in class Dialect
        Parameters:
        timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
        Returns:
        The appropriate LOCK clause string.
      • getReadLockString

        public String getReadLockString​(String aliases,
                                        int timeout)
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire READ locks for this dialect given the aliases of the columns to be read locked. Location of the returned string is treated the same as getForUpdateString.
        Overrides:
        getReadLockString in class Dialect
        Parameters:
        aliases - The columns to be read locked.
        timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
        Returns:
        The appropriate LOCK clause string.
      • getWriteLockString

        public String getWriteLockString​(int timeout)
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire WRITE locks for this dialect. Location of the returned string is treated the same as getForUpdateString.
        Overrides:
        getWriteLockString in class Dialect
        Parameters:
        timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
        Returns:
        The appropriate LOCK clause string.
      • getWriteLockString

        public String getWriteLockString​(String aliases,
                                         int timeout)
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire WRITE locks for this dialect given the aliases of the columns to be write locked. Location of the of the returned string is treated the same as getForUpdateString.
        Overrides:
        getWriteLockString in class Dialect
        Parameters:
        aliases - The columns to be read locked.
        timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
        Returns:
        The appropriate LOCK clause string.
      • getQueryHintString

        public String getQueryHintString​(String query,
                                         List<String> hints)
        Description copied from class: Dialect
        Apply a hint to the query. The entire query is provided, allowing the Dialect full control over the placement and syntax of the hint. By default, ignore the hint and simply return the query.
        Overrides:
        getQueryHintString in class Dialect
        Parameters:
        query - The query to which to apply the hint.
        hints - The hints to apply
        Returns:
        The modified SQL
      • getTableComment

        public String getTableComment​(String comment)
        Description copied from class: Dialect
        Get the comment into a form supported for table definition.
        Overrides:
        getTableComment in class Dialect
        Parameters:
        comment - The comment to apply
        Returns:
        The comment fragment
      • getColumnComment

        public String getColumnComment​(String comment)
        Description copied from class: Dialect
        Get the comment into a form supported for column definition.
        Overrides:
        getColumnComment in class Dialect
        Parameters:
        comment - The comment to apply
        Returns:
        The comment fragment
      • supportsCommentOn

        public boolean supportsCommentOn()
        Description copied from class: Dialect
        Does this dialect/database support commenting on tables, columns, etc?
        Overrides:
        supportsCommentOn in class Dialect
        Returns:
        true if commenting is supported
      • supportsPartitionBy

        public boolean supportsPartitionBy()
        Description copied from class: Dialect
        Does the underlying database support partition by
        Overrides:
        supportsPartitionBy in class Dialect
        Returns:
        boolean
      • contributeTypes

        public void contributeTypes​(TypeContributions typeContributions,
                                    ServiceRegistry serviceRegistry)
        Description copied from class: Dialect
        Allows the Dialect to contribute additional types
        Overrides:
        contributeTypes in class Dialect
        Parameters:
        typeContributions - Callback to contribute the types
        serviceRegistry - The service registry
      • getBlobTypeDescriptor

        public JdbcType getBlobTypeDescriptor()
      • registerResultSetOutParameter

        public int registerResultSetOutParameter​(CallableStatement statement,
                                                 int position)
                                          throws SQLException
        Description copied from class: Dialect
        Registers a parameter (either OUT, or the new REF_CURSOR param type available in Java 8) capable of returning ResultSet *by position*. Pre-Java 8, registering such ResultSet-returning parameters varied greatly across database and drivers; hence its inclusion as part of the Dialect contract.
        Overrides:
        registerResultSetOutParameter in class Dialect
        Parameters:
        statement - The callable statement.
        position - The bind position at which to register the output param.
        Returns:
        The number of (contiguous) bind positions used.
        Throws:
        SQLException - Indicates problems registering the param.
      • registerResultSetOutParameter

        public int registerResultSetOutParameter​(CallableStatement statement,
                                                 String name)
                                          throws SQLException
        Description copied from class: Dialect
        Registers a parameter (either OUT, or the new REF_CURSOR param type available in Java 8) capable of returning ResultSet *by name*. Pre-Java 8, registering such ResultSet-returning parameters varied greatly across database and drivers; hence its inclusion as part of the Dialect contract.
        Overrides:
        registerResultSetOutParameter in class Dialect
        Parameters:
        statement - The callable statement.
        name - The parameter name (for drivers which support named parameters).
        Returns:
        The number of (contiguous) bind positions used.
        Throws:
        SQLException - Indicates problems registering the param.
      • supportsOffsetInSubquery

        public boolean supportsOffsetInSubquery()
        Description copied from class: Dialect
        Does this dialect support offset in subqueries? Ex: select * from Table1 where col1 in (select col1 from Table2 order by col2 limit 1 offset 1)
        Overrides:
        supportsOffsetInSubquery in class Dialect
        Returns:
        boolean
      • supportsWindowFunctions

        public boolean supportsWindowFunctions()
        Description copied from class: Dialect
        Does this dialect support window functions like `row_number() over (..)`
        Overrides:
        supportsWindowFunctions in class Dialect
        Returns:
        true if the underlying database supports window functions, false otherwise. The default is false.
      • supportsNoWait

        public boolean supportsNoWait()
        Description copied from class: Dialect
        Does this dialect/database support NO_WAIT timeout.
        Overrides:
        supportsNoWait in class Dialect
        Returns:
        true if NO_WAIT is supported
      • supportsNoColumnsInsert

        public boolean supportsNoColumnsInsert()
        Description copied from class: Dialect
        Check if the INSERT statement is allowed to contain no column.
        Overrides:
        supportsNoColumnsInsert in class Dialect
        Returns:
        if the Dialect supports no-column INSERT.
      • supportsValuesListForInsert

        public boolean supportsValuesListForInsert()
        Description copied from class: Dialect
        Does this dialect/database support VALUES list (e.g. VALUES (1), (2), (3) ) for insert statements.
        Overrides:
        supportsValuesListForInsert in class Dialect
        Returns:
        true if VALUES list are supported for insert statements
      • supportsOrderByInSubquery

        public boolean supportsOrderByInSubquery()
        Description copied from class: Dialect
        Does this dialect support the order by clause in subqueries? Ex: select * from Table1 where col1 in (select col1 from Table2 order by col2 limit 1)
        Overrides:
        supportsOrderByInSubquery in class Dialect
        Returns:
        boolean
      • appendDatetimeFormat

        public void appendDatetimeFormat​(SqlAppender appender,
                                         String format)
        Description copied from class: Dialect
        Translate the given datetime format string from the pattern language defined by Java's DateTimeFormatter to whatever pattern language is understood by the native datetime formatting function for this database (often the to_char() function).

        Since it's never possible to translate all of the pattern letter sequences understood by DateTimeFormatter, only the following subset of pattern letters is accepted by Hibernate:

        • G: era
        • y: year of era
        • Y: year of week-based year
        • M: month of year
        • w: week of week-based year (ISO week number)
        • W: week of month
        • E: day of week (name)
        • e: day of week (number)
        • d: day of month
        • D: day of year
        • a: AM/PM
        • H: hour of day (24 hour time)
        • h: hour of AM/PM (12 hour time)
        • m: minutes
        • s: seconds
        • z,Z,x: timezone offset
        In addition, punctuation characters and single-quoted literal strings are accepted.
        Overrides:
        appendDatetimeFormat in class Dialect
      • supportsFractionalTimestampArithmetic

        public boolean supportsFractionalTimestampArithmetic()
        Description copied from class: Dialect
        Whether the database supports adding a fractional interval to a timestamp e.g. `timestamp + 0.5 second`
        Overrides:
        supportsFractionalTimestampArithmetic in class Dialect
      • timestampaddPattern

        public String timestampaddPattern​(TemporalUnit unit,
                                          jakarta.persistence.TemporalType temporalType,
                                          IntervalType intervalType)
        Description copied from class: Dialect
        Obtain a pattern for the SQL equivalent to a timestampadd() function call. The resulting pattern must contain ?1, ?2, and ?3 placeholders for the arguments.
        Overrides:
        timestampaddPattern in class Dialect
        Parameters:
        unit - The unit to add to the temporal
        temporalType - The type of the temporal
        intervalType - The type of interval to add or null if it's not a native interval
      • timestampdiffPattern

        public String timestampdiffPattern​(TemporalUnit unit,
                                           jakarta.persistence.TemporalType fromTemporalType,
                                           jakarta.persistence.TemporalType toTemporalType)
        Description copied from class: Dialect
        Obtain a pattern for the SQL equivalent to a timestampdiff() function call. The resulting pattern must contain ?1, ?2, and ?3 placeholders for the arguments.
        Overrides:
        timestampdiffPattern in class Dialect
        Parameters:
        unit - the first argument
        fromTemporalType - true if the first argument is a timestamp, false if a date
        toTemporalType - true if the second argument is
      • isUseUnicodeStringTypes

        public boolean isUseUnicodeStringTypes()
      • supportsAsciiStringTypes

        protected abstract boolean supportsAsciiStringTypes()
      • useUnicodeStringTypesDefault

        protected abstract Boolean useUnicodeStringTypesDefault()