Class H2Dialect

    • Method Detail

      • supportsStandardArrays

        public boolean supportsStandardArrays()
        Description copied from class: Dialect
        Does this database have native support for ANSI SQL standard arrays which are expressed in terms of the element type name: integer array.
        Overrides:
        supportsStandardArrays in class Dialect
        Returns:
        boolean
      • useArrayForMultiValuedParameters

        public boolean useArrayForMultiValuedParameters()
        Description copied from class: Dialect
        Does this database prefer to use array types for multi-valued parameters.
        Overrides:
        useArrayForMultiValuedParameters in class Dialect
        Returns:
        boolean
      • castType

        protected String castType​(int sqlTypeCode)
        Description copied from class: Dialect
        The SQL type to use in cast( ... as ... ) expressions when casting to the target type represented by the given JDBC type code.
        Overrides:
        castType in class Dialect
        Parameters:
        sqlTypeCode - The JDBC type code representing the target type
        Returns:
        The SQL type to use in cast()
      • contributeTypes

        public void contributeTypes​(TypeContributions typeContributions,
                                    ServiceRegistry serviceRegistry)
        Description copied from class: Dialect
        A callback which allows the Dialect to contribute types.
        Overrides:
        contributeTypes in class Dialect
        Parameters:
        typeContributions - Callback to contribute the types
        serviceRegistry - The service registry
      • hasOddDstBehavior

        public boolean hasOddDstBehavior()
      • initializeFunctionRegistry

        public void initializeFunctionRegistry​(FunctionContributions functionContributions)
        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
        • var_samp(arg) - aggregate function
        • var_pop(arg) - aggregate function
        • stddev_samp(arg) - aggregate function
        • stddev_pop(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])
        • repeat(string, times)
        • pi
        • log10(arg)
        • log(base, arg)
        • sign(arg)
        • sin(arg)
        • cos(arg)
        • tan(arg)
        • asin(arg)
        • acos(arg)
        • atan(arg)
        • atan2(arg0, arg1)
        • round(arg0[, arg1])
        • truncate(arg0[, arg1])
        • sinh(arg)
        • tanh(arg)
        • cosh(arg)
        • least(arg0, arg1, ...)
        • greatest(arg0, arg1, ...)
        • degrees(arg)
        • radians(arg)
        • format(datetime as pattern)
        • collate(string as collation)
        • 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)
        Note that according to this definition, the second() function returns a floating point value, contrary to the integer type returned by the native function with this name on many databases. Thus, we don't just naively map these HQL functions to the native SQL functions with the same names.
        Overrides:
        initializeFunctionRegistry in class Dialect
      • getMaximumArraySize

        protected int getMaximumArraySize()
        H2 requires a very special emulation, because unnest is pretty much useless, due to https://github.com/h2database/h2database/issues/1815. This emulation uses array_get, array_length and system_range functions to roughly achieve the same, but requires that system_range is fed with a "maximum array size".
      • resolveSqlTypeDescriptor

        public JdbcType resolveSqlTypeDescriptor​(String columnTypeName,
                                                 int jdbcTypeCode,
                                                 int precision,
                                                 int scale,
                                                 JdbcTypeRegistry jdbcTypeRegistry)
        Description copied from class: Dialect
        Assigns an appropriate JdbcType to a column of a JDBC result set based on the column type name, JDBC type code, precision, and scale.
        Overrides:
        resolveSqlTypeDescriptor in class Dialect
        Parameters:
        columnTypeName - the column type name
        jdbcTypeCode - the type code
        precision - the precision or 0
        scale - the scale or 0
        Returns:
        an appropriate instance of JdbcType
      • resolveSqlTypeCode

        protected Integer resolveSqlTypeCode​(String typeName,
                                             String baseTypeName,
                                             TypeConfiguration typeConfiguration)
        Description copied from class: Dialect
        Resolves the SqlTypes type code for the given column type name as reported by the database and the base type name (i.e. without precision, length and scale), or null if it can't be resolved.
        Overrides:
        resolveSqlTypeCode in class Dialect
      • getMaxVarcharLength

        public int getMaxVarcharLength()
        Description copied from class: Dialect
        The biggest size value that can be supplied as argument to a Types.VARCHAR-like type.

        For longer column lengths, use some sort of text-like type for the column.

        Overrides:
        getMaxVarcharLength 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 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 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 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
      • extractPattern

        public String extractPattern​(TemporalUnit unit)
        In H2, the extract() function does not return fractional seconds for the field TemporalUnit.SECOND. We work around this here with two calls to extract().
        Overrides:
        extractPattern in class Dialect
        Parameters:
        unit - the first argument
      • timestampaddPattern

        public String timestampaddPattern​(TemporalUnit unit,
                                          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,
                                           TemporalType fromTemporalType,
                                           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
      • supportsTimeLiteralOffset

        public boolean supportsTimeLiteralOffset()
      • supportsTemporalLiteralOffset

        public boolean supportsTemporalLiteralOffset()
        Description copied from class: Dialect
        Does this dialect supports timezone offsets in temporal literals.
        Overrides:
        supportsTemporalLiteralOffset in class Dialect
      • supportsIsTrue

        public boolean supportsIsTrue()
        Description copied from class: Dialect
        Does this dialect support the is true and is false operators?
        Overrides:
        supportsIsTrue in class Dialect
        Returns:
        true if the database supports is true and is false, or false if it does not. The default is is false.
      • appendBooleanValueString

        public void appendBooleanValueString​(SqlAppender appender,
                                             boolean bool)
        Description copied from class: Dialect
        Append the SQL literal expression representing the given boolean value to the given SqlAppender.
        Overrides:
        appendBooleanValueString in class Dialect
        Parameters:
        appender - The SqlAppender to append the literal expression to
        bool - The boolean value
      • supportsDistinctFromPredicate

        public boolean supportsDistinctFromPredicate()
        Description copied from class: Dialect
        Does this dialect support some kind of distinct from predicate?

        That is, does it support syntax like:

         ... where FIRST_NAME IS DISTINCT FROM LAST_NAME
         
        Overrides:
        supportsDistinctFromPredicate in class Dialect
        Returns:
        True if this SQL dialect is known to support some kind of distinct from predicate; false otherwise
      • supportsIfExistsAfterTableName

        public boolean supportsIfExistsAfterTableName()
        Description copied from class: Dialect
        For dropping a table, can the phrase if exists be applied after the table name?
        Overrides:
        supportsIfExistsAfterTableName in class Dialect
        Returns:
        true if 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?
        Overrides:
        supportsIfExistsBeforeTableName in class Dialect
        Returns:
        true if if exists can be applied before the table name
      • supportsIfExistsAfterAlterTable

        public boolean supportsIfExistsAfterAlterTable()
        Description copied from class: Dialect
        For an alter table, can the phrase if exists be applied?
        Overrides:
        supportsIfExistsAfterAlterTable in class Dialect
        Returns:
        true if if exists can be applied after alter table
      • supportsIfExistsBeforeConstraintName

        public boolean supportsIfExistsBeforeConstraintName()
        Description copied from class: Dialect
        For dropping a constraint with an alter table statement, can the phrase if exists be applied before the constraint name?
        Overrides:
        supportsIfExistsBeforeConstraintName in class Dialect
        Returns:
        true if if exists can be applied before the constraint name
      • 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
      • supportsAlterColumnType

        public boolean supportsAlterColumnType()
        Description copied from class: Dialect
        Does this dialect support modifying the type of an existing column?
        Overrides:
        supportsAlterColumnType in class Dialect
      • getAlterColumnTypeString

        public String getAlterColumnTypeString​(String columnName,
                                               String columnType,
                                               String columnDefinition)
        Description copied from class: Dialect
        The fragment of an alter table command which modifies a column type, or null if column types cannot be modified. Often alter column col_name set data type col_type.
        Overrides:
        getAlterColumnTypeString in class Dialect
        Parameters:
        columnName - the name of the column
        columnType - the new type of the column
        columnDefinition - the full column definition
        Returns:
        a fragment to be appended to alter table
      • supportsCommentOn

        public boolean supportsCommentOn()
        Description copied from class: Dialect
        Does this dialect support commenting on tables and columns?
        Overrides:
        supportsCommentOn in class Dialect
        Returns:
        true if commenting is supported
      • 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.
      • 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.
      • getTemporaryTableCreateOptions

        public String getTemporaryTableCreateOptions()
        Description copied from class: Dialect
        An arbitrary SQL fragment appended to the end of the statement to create a temporary table, specifying dialect-specific options, or null if there are no options to specify.
        Overrides:
        getTemporaryTableCreateOptions in class Dialect
      • supportsCurrentTimestampSelection

        public boolean supportsCurrentTimestampSelection()
        Description copied from class: Dialect
        Does this dialect support some way to retrieve the current timestamp value from the database?
        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
        The command used to retrieve the current timestamp from the database.
        Overrides:
        getCurrentTimestampSelectString in class Dialect
      • 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.
      • 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.
      • supportsOffsetInSubquery

        public boolean supportsOffsetInSubquery()
        Description copied from class: Dialect
        Does this dialect support offset in subqueries?

        For example:

         select * from Table1 where col1 in (select col1 from Table2 order by col2 limit 1 offset 1)
         
        Overrides:
        supportsOffsetInSubquery in class Dialect
        Returns:
        true if it does
      • 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.
      • supportsRecursiveCTE

        public boolean supportsRecursiveCTE()
        Description copied from class: Dialect
        Does this dialect/database support recursive CTEs?
        Overrides:
        supportsRecursiveCTE in class Dialect
        Returns:
        true if recursive CTEs are supported
      • supportsFetchClause

        public boolean supportsFetchClause​(FetchClauseType type)
        Description copied from class: Dialect
        Does this dialect support the given FETCH clause type.
        Overrides:
        supportsFetchClause in class Dialect
        Parameters:
        type - The fetch clause type
        Returns:
        true if the underlying database supports the given fetch clause type, false otherwise. The default is false.
      • registerResultSetOutParameter

        public int registerResultSetOutParameter​(CallableStatement statement,
                                                 int position)
                                          throws SQLException
        Description copied from class: Dialect
        Registers a parameter capable of returning a ResultSet by position, either an OUT parameter, or a REF_CURSOR parameter as defined in Java 8.
        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.
      • getQueryHintString

        public String getQueryHintString​(String query,
                                         String hints)
        Description copied from class: Dialect
        Apply a hint to the given SQL query.

        The entire query is provided, allowing 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
      • 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 every 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.

        Appends a pattern accepted by the function that formats dates and times in this dialect to a SQL fragment that is being constructed.

        Overrides:
        appendDatetimeFormat in class Dialect
      • generatedAs

        public String generatedAs​(String generatedAs)
        Description copied from class: Dialect
        The generated as clause, or similar, for generated column declarations in DDL statements.
        Overrides:
        generatedAs in class Dialect
        Parameters:
        generatedAs - a SQL expression used to generate the column value
        Returns:
        The generated as clause containing the given expression
      • getEnableConstraintsStatement

        public String getEnableConstraintsStatement()
        Description copied from class: Dialect
        A SQL statement that re-enables foreign key constraint checking for all tables.
        Overrides:
        getEnableConstraintsStatement in class Dialect
      • getDisableConstraintsStatement

        public String getDisableConstraintsStatement()
        Description copied from class: Dialect
        A SQL statement that temporarily disables foreign key constraint checking for all tables.
        Overrides:
        getDisableConstraintsStatement in class Dialect
      • rowId

        public String rowId​(String rowId)
        Description copied from class: Dialect
        The name of a rowid-like pseudo-column which acts as a high-performance row locator, or null if this dialect has no such pseudo-column.

        If the rowid-like value is an explicitly-declared named column instead of an implicit pseudo-column, and if the given name is nonempty, return the given name.

        Overrides:
        rowId in class Dialect
        Parameters:
        rowId - the name specified by RowId.value(), which is ignored if Dialect.getRowIdColumnString(java.lang.String) is not overridden
      • rowIdSqlType

        public int rowIdSqlType()
        Description copied from class: Dialect
        The JDBC type code of the rowid-like pseudo-column which acts as a high-performance row locator.
        Overrides:
        rowIdSqlType in class Dialect
        Returns:
        Types.ROWID by default
      • getNativeParameterMarkerStrategy

        public ParameterMarkerStrategy getNativeParameterMarkerStrategy()
        Description copied from class: Dialect
        Support for native parameter markers.

        This is generally dependent on both the database and the driver.

        Overrides:
        getNativeParameterMarkerStrategy in class Dialect
        Returns:
        May return null to indicate that the JDBC standard strategy should be used
      • getCaseInsensitiveLike

        public String getCaseInsensitiveLike()
        Description copied from class: Dialect
        The name of the SQL operator that performs case-insensitive LIKE comparisons.
        Overrides:
        getCaseInsensitiveLike in class Dialect
        Returns:
        The dialect-specific case-insensitive like operator.
      • supportsCaseInsensitiveLike

        public boolean supportsCaseInsensitiveLike()
        Description copied from class: Dialect
        Does this dialect support case-insensitive LIKE comparisons?
        Overrides:
        supportsCaseInsensitiveLike in class Dialect
        Returns:
        true if the database supports case-insensitive like comparisons, false otherwise. The default is false.