Class CockroachDialect

    • Method Detail

      • 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()
      • 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
      • 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
      • 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
      • 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
      • 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
      • 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
      • 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
      • 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
      • 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
      • 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
      • qualifyIndexName

        public boolean qualifyIndexName()
        Description copied from class: Dialect
        Do we need to qualify index names with the schema name?
        Overrides:
        qualifyIndexName in class Dialect
        Returns:
        true if we do
      • supportsValuesList

        public boolean supportsValuesList()
        Description copied from class: Dialect
        Does this dialect support values lists of form VALUES (1), (2), (3)?
        Overrides:
        supportsValuesList in class Dialect
        Returns:
        true if values list are supported
      • supportsPartitionBy

        public boolean supportsPartitionBy()
        Description copied from class: Dialect
        Does is dialect support partition by?
        Overrides:
        supportsPartitionBy in class Dialect
      • supportsNonQueryWithCTE

        public boolean supportsNonQueryWithCTE()
        Description copied from class: Dialect
        Does this dialect support insert, update, and delete statements with Common Table Expressions (CTEs)?
        Overrides:
        supportsNonQueryWithCTE in class Dialect
        Returns:
        true if non-query statements are supported with CTE
      • 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
      • getNoColumnsInsertString

        public String getNoColumnsInsertString()
        Description copied from class: Dialect
        The fragment used to insert a row without specifying any column values, usually just (), but sometimes default values.
        Overrides:
        getNoColumnsInsertString in class Dialect
        Returns:
        The appropriate empty values clause.
      • 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.
      • supportsNullPrecedence

        public boolean supportsNullPrecedence()
        Description copied from class: Dialect
        Does this dialect support nulls first and nulls last?
        Overrides:
        supportsNullPrecedence 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.
      • getNativeIdentifierGeneratorStrategy

        public String getNativeIdentifierGeneratorStrategy()
        Description copied from class: Dialect
        The name identifying the "native" id generation strategy for this dialect.

        This is the name of the id generation strategy which should be used when "native" is specified in hbm.xml.

        Overrides:
        getNativeIdentifierGeneratorStrategy in class Dialect
        Returns:
        The name identifying the native generator strategy.
      • 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.
      • getMaxIdentifierLength

        public int getMaxIdentifierLength()
        Description copied from class: Dialect
        What is the maximum identifier length supported by this dialect?
        Overrides:
        getMaxIdentifierLength in class Dialect
        Returns:
        The maximum length.
      • 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
      • supportsTemporalLiteralOffset

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

        public String extractPattern​(TemporalUnit unit)
        The extract() function returns TemporalUnit.DAY_OF_WEEK numbered from 0 to 6. This isn't consistent with what most other databases do, so here we adjust the result by generating (extract(dayofweek,arg)+1)).
        Overrides:
        extractPattern in class Dialect
        Parameters:
        unit - the first argument
      • getFractionalSecondPrecisionInNanos

        public long getFractionalSecondPrecisionInNanos()
        microsecond is the smallest unit for an interval, and the highest precision for a timestamp.
        Overrides:
        getFractionalSecondPrecisionInNanos in class Dialect
        Returns:
        the precision, specified as a quantity of nanoseconds
        See Also:
        TemporalUnit.NATIVE
      • 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
      • 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
      • 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​(LockOptions lockOptions)
        Description copied from class: Dialect
        Given a set of LockOptions (lock level, timeout), determine the appropriate for update fragment to use to obtain the lock.
        Overrides:
        getForUpdateString in class Dialect
        Parameters:
        lockOptions - contains the lock mode to apply.
        Returns:
        The appropriate for update fragment.
      • getForUpdateString

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

        public String getWriteLockString​(int timeout)
        Description copied from class: Dialect
        Get the string to append to SELECT statements to acquire pessimistic WRITE locks for this dialect.

        Location of the returned string is treated the same as Dialect.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 returned string is treated the same as Dialect.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.
      • 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 Dialect.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 Dialect.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.
      • 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.
      • 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.
      • getForUpdateSkipLockedString

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

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

        public boolean supportsOuterJoinForUpdate()
        Description copied from class: Dialect
        Does this dialect support FOR UPDATE in conjunction with outer-joined rows?
        Overrides:
        supportsOuterJoinForUpdate in class Dialect
        Returns:
        True if outer-joined rows can be locked via FOR UPDATE.
      • 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.
      • supportsLateral

        public boolean supportsLateral()
        Description copied from class: Dialect
        Does this dialect support the SQL lateral keyword or a proprietary alternative?
        Overrides:
        supportsLateral in class Dialect
        Returns:
        true if the underlying database supports lateral, false otherwise. The default is false.
      • supportsNoWait

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

        public boolean supportsWait()
        Description copied from class: Dialect
        Does this dialect support WAIT timeout.
        Overrides:
        supportsWait in class Dialect
        Returns:
        true if WAIT is supported
      • supportsSkipLocked

        public boolean supportsSkipLocked()
        Description copied from class: Dialect
        Does this dialect support SKIP_LOCKED timeout.
        Overrides:
        supportsSkipLocked in class Dialect
        Returns:
        true if SKIP_LOCKED is supported
      • getQueryHintString

        public String getQueryHintString​(String query,
                                         List<String> hintList)
        Applies the hints to the query string. The hints can be index selection hints or join hints.

        For index selection hints, use the format <tablename>@{FORCE_INDEX=<index>[,<DIRECTION>]} where the optional DIRECTION is either ASC (ascending) or DESC (descending). Multiple index hints can be provided. The effect is that in the final SQL statement the hint is added to the table name mentioned in the hint.

        For join hints, use the format "<MERGE|HASH|LOOKUP|INVERTED> JOIN". Only one join hint will be added. It is applied to all join statements in the SQL statement.

        Hints are only added to select statements.

        Overrides:
        getQueryHintString in class Dialect
        Parameters:
        query - The query to which to apply the hint.
        hintList - The hints to apply
        Returns:
        the query with hints added