Class HSQLDialect

  • All Implemented Interfaces:
    ConversionContext

    public class HSQLDialect
    extends Dialect
    An SQL dialect compatible with HyperSQL (HSQLDB) version 1.8 and above.
    • Constructor Detail

      • HSQLDialect

        public HSQLDialect()
      • HSQLDialect

        public HSQLDialect​(int version)
    • Method Detail

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

        public String currentTime()
        Description copied from class: Dialect
        Translation of the HQL/JPQL current_time function, which maps to the Java type java.sql.Time which is a time with no time zone. This contradicts ANSI SQL where current_time has the type TIME WITH TIME ZONE.

        It is recommended to override this in dialects for databases which support localtime or time at local.

        Overrides:
        currentTime in class Dialect
      • currentTimestamp

        public String currentTimestamp()
        Description copied from class: Dialect
        Translation of the HQL/JPQL current_timestamp function, which maps to the Java type java.sql.Timestamp which is a datetime with no time zone. This contradicts ANSI SQL where current_timestamp has the type TIMESTAMP WITH TIME ZONE.

        It is recommended to override this in dialects for databases which support localtimestamp or timestamp at local.

        Overrides:
        currentTimestamp in class Dialect
      • currentTimestampWithTimeZone

        public String currentTimestampWithTimeZone()
        Description copied from class: Dialect
        Translation of the HQL offset_datetime function, which maps to the Java type java.time.OffsetDateTime which is a datetime with a time zone. This in principle correctly maps to the ANSI SQL current_timestamp which has the type TIMESTAMP WITH TIME ZONE.
        Overrides:
        currentTimestampWithTimeZone in class Dialect
      • 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
      • 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
      • supportsLockTimeouts

        public boolean supportsLockTimeouts()
        Description copied from class: Dialect
        Informational metadata about whether this dialect is known to support specifying timeouts for requested lock acquisitions.
        Overrides:
        supportsLockTimeouts in class Dialect
        Returns:
        True is this dialect supports specifying lock timeouts.
      • getForUpdateString

        public String getForUpdateString()
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire locks for this dialect.
        Overrides:
        getForUpdateString in class Dialect
        Returns:
        The appropriate FOR UPDATE clause string.
      • supportsIfExistsAfterTableName

        public boolean supportsIfExistsAfterTableName()
        Description copied from class: Dialect
        For dropping a table, can the phrase "if exists" be applied after the table name?

        NOTE : Only one or the other (or neither) of this and Dialect.supportsIfExistsBeforeTableName() should return true

        Overrides:
        supportsIfExistsAfterTableName in class Dialect
        Returns:
        true if the "if exists" can be applied after the table name
      • supportsIfExistsBeforeTableName

        public boolean supportsIfExistsBeforeTableName()
        Description copied from class: Dialect
        For dropping a table, can the phrase "if exists" be applied before the table name?

        NOTE : Only one or the other (or neither) of this and Dialect.supportsIfExistsAfterTableName() should return true

        Overrides:
        supportsIfExistsBeforeTableName in class Dialect
        Returns:
        true if the "if exists" can be applied before the table name
      • supportsColumnCheck

        public boolean supportsColumnCheck()
        Description copied from class: Dialect
        Does this dialect support column-level check constraints?
        Overrides:
        supportsColumnCheck in class Dialect
        Returns:
        True if column-level CHECK constraints are supported; false otherwise.
      • 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
      • getSelectClauseNullString

        public String getSelectClauseNullString​(int sqlType)
        Description copied from class: Dialect
        Given a Types type code, determine an appropriate null value to use in a select clause.

        One thing to consider here is that certain databases might require proper casting for the nulls here since the select here will be part of a UNION/UNION ALL.

        Overrides:
        getSelectClauseNullString in class Dialect
        Parameters:
        sqlType - The Types type code.
        Returns:
        The appropriate select clause value fragment.
      • supportsCurrentTimestampSelection

        public boolean supportsCurrentTimestampSelection()
        HSQLDB 1.8.x requires CALL CURRENT_TIMESTAMP but this should not be treated as a callable statement. It is equivalent to "select current_timestamp from dual" in some databases. HSQLDB 2.0 also supports VALUES CURRENT_TIMESTAMP

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

        public LockingStrategy getLockingStrategy​(Lockable lockable,
                                                  LockMode lockMode)
        For HSQLDB 2.0, this is a copy of the base class implementation. For HSQLDB 1.8, only READ_UNCOMMITTED is supported.

        Get a strategy instance which knows how to acquire a database-level lock of the specified mode for this dialect.

        Overrides:
        getLockingStrategy in class Dialect
        Parameters:
        lockable - The persister for the entity to be locked.
        lockMode - The type of lock to be acquired.
        Returns:
        The appropriate locking strategy.
      • 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
      • doesReadCommittedCauseWritersToBlockReaders

        public boolean doesReadCommittedCauseWritersToBlockReaders()
        Description copied from class: Dialect
        For the underlying database, is READ_COMMITTED isolation implemented by forcing readers to wait for write locks to be released?
        Overrides:
        doesReadCommittedCauseWritersToBlockReaders in class Dialect
        Returns:
        True if writers block readers to achieve READ_COMMITTED; false otherwise.
      • doesRepeatableReadCauseReadersToBlockWriters

        public boolean doesRepeatableReadCauseReadersToBlockWriters()
        Description copied from class: Dialect
        For the underlying database, is REPEATABLE_READ isolation implemented by forcing writers to wait for read locks to be released?
        Overrides:
        doesRepeatableReadCauseReadersToBlockWriters in class Dialect
        Returns:
        True if readers block writers to achieve REPEATABLE_READ; false otherwise.
      • supportsTupleCounts

        public boolean supportsTupleCounts()
        Description copied from class: Dialect
        Does this dialect support `count(a,b)`?
        Overrides:
        supportsTupleCounts in class Dialect
        Returns:
        True if the database supports counting tuples; 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.
      • 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
      • requiresFloatCastingOfIntegerDivision

        public boolean requiresFloatCastingOfIntegerDivision()
        Description copied from class: Dialect
        Does this dialect require that integer divisions be wrapped in cast() calls to tell the db parser the expected type.
        Overrides:
        requiresFloatCastingOfIntegerDivision in class Dialect
        Returns:
        True if integer divisions must be cast()ed to float
      • supportsNamedParameters

        public boolean supportsNamedParameters​(DatabaseMetaData databaseMetaData)
        Description copied from class: Dialect
        Override the DatabaseMetaData#supportsNamedParameters()
        Overrides:
        supportsNamedParameters in class Dialect
        Returns:
        boolean
      • 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.
      • 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
      • 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