Class SQLServerDialect

All Implemented Interfaces:
FunctionContributor, TypeContributor, ConversionContext
Direct Known Subclasses:
AzureSQLServerDialect, SqlServerSpatialDialect

public class SQLServerDialect extends AbstractTransactSQLDialect
A dialect for Microsoft SQL Server 2012 and above.

Please refer to the SQL Server documentation.

  • Constructor Details

    • SQLServerDialect

      public SQLServerDialect()
    • SQLServerDialect

      public SQLServerDialect(DatabaseVersion version)
    • SQLServerDialect

      public SQLServerDialect(DialectResolutionInfo info)
  • Method Details

    • determineDatabaseVersion

      public DatabaseVersion determineDatabaseVersion(DialectResolutionInfo info)
      Description copied from class: Dialect
      Determine the database version, as precise as possible and using Dialect-specific techniques, from a DialectResolutionInfo object.
      Overrides:
      determineDatabaseVersion in class Dialect
      Parameters:
      info - The dialect resolution info that would be passed by Hibernate ORM to the constructor of a Dialect of the same type.
      Returns:
      The corresponding database version.
    • getMinimumSupportedVersion

      protected DatabaseVersion getMinimumSupportedVersion()
      Description copied from class: Dialect
      Get the version of the SQL dialect that is the minimum supported by this implementation.
      Overrides:
      getMinimumSupportedVersion in class Dialect
    • registerDefaultKeywords

      protected void registerDefaultKeywords()
      Description copied from class: Dialect
      Register the reserved words of ANSI-standard SQL as keywords.
      Overrides:
      registerDefaultKeywords in class Dialect
      See Also:
    • columnType

      protected String columnType(int sqlTypeCode)
      Description copied from class: Dialect
      The database column type name for a given JDBC type code defined in Types or SqlTypes. This default implementation returns the ANSI-standard type name.

      This method may be overridden by concrete Dialects as an alternative to Dialect.registerColumnTypes(TypeContributions, ServiceRegistry) for simple registrations.

      Note that:

      1. Implementations of this method are expected to define a sensible mapping forTypes.NCLOB Types.NCHAR, and Types.NVARCHAR. On some database, these types are simply remapped to CLOB, CHAR, and VARCHAR.
      2. Mappings for Types.TIMESTAMP and Types.TIMESTAMP_WITH_TIMEZONE should support explicit specification of precision if possible.
      3. As specified by DdlTypeRegistry.getDescriptor(int), this method never receives Types.LONGVARCHAR, Types.LONGNVARCHAR, nor Types.LONGVARBINARY, which are considered synonyms for their non-LONG counterparts.
      4. On the other hand, the types SqlTypes.LONG32VARCHAR, SqlTypes.LONG32NVARCHAR, and SqlTypes.LONG32VARBINARY are not synonyms, and implementations of this method must define sensible mappings, for example to database-native TEXT or CLOB types.
      Overrides:
      columnType in class AbstractTransactSQLDialect
      Parameters:
      sqlTypeCode - a SQL type code
      Returns:
      a column type name, with $l, $p, $s placeholders for length, precision, scale
      See Also:
    • 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()
    • registerColumnTypes

      protected void registerColumnTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry)
      Description copied from class: Dialect
      Register ANSI-standard column types using the length limits defined by Dialect.getMaxVarcharLength(), Dialect.getMaxNVarcharLength(), and Dialect.getMaxVarbinaryLength().

      This method is always called when a Dialect is instantiated.

      Overrides:
      registerColumnTypes in class Dialect
    • getPreferredSqlTypeCodeForArray

      public int getPreferredSqlTypeCodeForArray()
      Description copied from class: Dialect
      The JDBC type code to use for mapping properties of basic Java array or Collection types.

      Usually SqlTypes.ARRAY or SqlTypes.VARBINARY.

      Overrides:
      getPreferredSqlTypeCodeForArray in class Dialect
      Returns:
      one of the type codes defined by SqlTypes.
    • 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 AbstractTransactSQLDialect
      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
    • 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
    • getMaxNVarcharLength

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

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

      Overrides:
      getMaxNVarcharLength in class Dialect
    • getTimeZoneSupport

      public TimeZoneSupport getTimeZoneSupport()
      Description copied from class: Dialect
      How the dialect supports time zone types like Types.TIMESTAMP_WITH_TIMEZONE.
      Overrides:
      getTimeZoneSupport in class Dialect
    • getDefaultLobLength

      public long getDefaultLobLength()
      Description copied from class: Dialect
      This is the default length for a generated column of type BLOB or CLOB mapped to Blob or Clob, if LOB columns have a length in this dialect.
      Overrides:
      getDefaultLobLength in class Dialect
      Returns:
      1048576L by default
      See Also:
    • 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.
    • 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)
      • bitand(arg1, arg1)
      • bitor(arg1, arg1)
      • bitxor(arg1, arg1)
      • 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 AbstractTransactSQLDialect
    • getMaximumSeriesSize

      protected int getMaximumSeriesSize()
      SQL Server doesn't support the generate_series function or lateral recursive CTEs, so it has to be emulated with a top level recursive CTE which requires an upper bound on the amount of elements that the series can return.
    • trimPattern

      public String trimPattern(TrimSpec specification, boolean isWhitespace)
      Description copied from class: Dialect
      Obtain a pattern for the SQL equivalent to a trim() function call. The resulting pattern must contain a ?1 placeholder for the argument of type String and a ?2 placeholder for the trim character if isWhitespace was false.
      Overrides:
      trimPattern in class AbstractTransactSQLDialect
      Parameters:
      specification - leading, trailing, or both
      isWhitespace - true if trimming whitespace, and the ?2 placeholder for the trim character should be omitted, false if the trim character is explicit and the ?2 placeholder must be included in the pattern
    • getSqlAstTranslatorFactory

      public SqlAstTranslatorFactory getSqlAstTranslatorFactory()
      Description copied from class: Dialect
      Return a SqlAstTranslatorFactory specific to this dialect, or null to use the standard translator.
      Overrides:
      getSqlAstTranslatorFactory in class Dialect
      See Also:
    • getAggregateSupport

      public AggregateSupport getAggregateSupport()
      Description copied from class: Dialect
      How does this dialect support aggregate types like SqlTypes.STRUCT.
      Overrides:
      getAggregateSupport in class Dialect
    • getSizeStrategy

      public Dialect.SizeStrategy getSizeStrategy()
      Description copied from class: Dialect
      A custom Dialect.SizeStrategy for column types.
      Overrides:
      getSizeStrategy 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
    • 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
    • buildIdentifierHelper

      public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, DatabaseMetaData dbMetaData) throws SQLException
      Description copied from class: Dialect
      The IdentifierHelper indicated by this dialect for handling identifier conversions. Returning null is allowed and indicates that Hibernate should fall back to building a "standard" helper. In the fallback path, any changes made to the IdentifierHelperBuilder during this call will still be incorporated into the built IdentifierHelper.

      The incoming builder will have the following set:

      By default, Hibernate will do the following:

      Overrides:
      buildIdentifierHelper in class Dialect
      Parameters:
      builder - A partially-configured IdentifierHelperBuilder.
      dbMetaData - Access to the metadata returned from the driver if needed and if available. WARNING: it may be null.
      Returns:
      The IdentifierHelper instance to use, or null to indicate Hibernate should use its fallback path
      Throws:
      SQLException - Accessing the DatabaseMetaData can throw it. Just rethrow and Hibernate will handle it.
      See Also:
    • 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
    • currentDate

      public String currentDate()
      Description copied from class: Dialect
      Translation of the HQL/JPQL current_date function, which maps to the Java type Date, and of the HQL local_date function which maps to the Java type LocalDate.
      Overrides:
      currentDate 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
    • 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.
    • getLimitHandler

      public LimitHandler getLimitHandler()
      Description copied from class: Dialect
      Obtain a LimitHandler that implements pagination support for Query.setMaxResults(int) and Query.setFirstResult(int).
      Overrides:
      getLimitHandler in class Dialect
    • 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
    • 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
    • closeQuote

      public char closeQuote()
      Description copied from class: Dialect
      The character specific to this dialect used to close a quoted identifier.
      Overrides:
      closeQuote in class Dialect
      Returns:
      The dialect-specific close quote character.
    • 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 resulting SchemaNameResolver does not need this information. For example, a custom implementation might make use of the Java 1.7 Connection.getSchema() method.

      Overrides:
      getCurrentSchemaCommand in class Dialect
      Returns:
      The current schema retrieval SQL
    • 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
    • openQuote

      public char openQuote()
      Description copied from class: Dialect
      The character specific to this dialect used to begin a quoted identifier.
      Overrides:
      openQuote in class Dialect
      Returns:
      The dialect-specific open quote character.
    • appendLockHint

      public String appendLockHint(LockOptions lockOptions, String tableName)
      Description copied from class: Dialect
      Some dialects support an alternative means to SELECT FOR UPDATE, whereby a "lock hint" is appended to the table name in the from clause.
      Overrides:
      appendLockHint in class AbstractTransactSQLDialect
      Parameters:
      lockOptions - The lock options to apply
      tableName - The name of the table to which to apply the lock hint.
      Returns:
      The table with any required lock hints.
    • getCurrentTimestampSelectString

      public String getCurrentTimestampSelectString()
      The current_timestamp is more accurate, but only known to be supported in SQL Server 7.0 and later and Sybase not known to support it at all

      The command used to retrieve the current timestamp from the database.

      Overrides:
      getCurrentTimestampSelectString in class AbstractTransactSQLDialect
    • supportsResultSetPositionQueryMethodsOnForwardOnlyCursor

      public boolean supportsResultSetPositionQueryMethodsOnForwardOnlyCursor()
      Description copied from class: Dialect
      Does this dialect support asking the result set its positioning information on forward-only cursors?

      Specifically, in the case of scrolling fetches, Hibernate needs to use ResultSet.isAfterLast() and ResultSet.isBeforeFirst(). Certain drivers do not allow access to these methods for forward-only cursors.

      Overrides:
      supportsResultSetPositionQueryMethodsOnForwardOnlyCursor in class Dialect
      Returns:
      True if methods like ResultSet.isAfterLast() and ResultSet.isBeforeFirst() are supported for forward only cursors; false otherwise.
    • supportsCircularCascadeDeleteConstraints

      public boolean supportsCircularCascadeDeleteConstraints()
      Description copied from class: Dialect
      Does this dialect support definition of cascade delete constraints which can cause circular chains?
      Overrides:
      supportsCircularCascadeDeleteConstraints in class Dialect
      Returns:
      True if circular cascade delete constraints are supported; false otherwise.
    • supportsLobValueChangePropagation

      public boolean supportsLobValueChangePropagation()
      Description copied from class: Dialect
      Does the dialect support propagating changes to LOB values back to the database? Talking about mutating the internal value of the locator, as opposed to supplying a new locator instance.
      Overrides:
      supportsLobValueChangePropagation in class Dialect
      Returns:
      True if the changes are propagated back to the database; 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 AbstractTransactSQLDialect
      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 AbstractTransactSQLDialect
      Returns:
      True if readers block writers to achieve REPEATABLE_READ; false otherwise.
    • getInExpressionCountLimit

      public int getInExpressionCountLimit()
      Description copied from class: Dialect
      Return the limit that the underlying database places on the number of elements in an IN predicate. If the database defines no such limits, simply return zero or a number smaller than zero.
      Overrides:
      getInExpressionCountLimit in class Dialect
      Returns:
      The limit, or a non-positive integer to indicate no limit.
    • getIdentityColumnSupport

      public IdentityColumnSupport getIdentityColumnSupport()
      Description copied from class: Dialect
      Get the appropriate IdentityColumnSupport for this dialect.
      Overrides:
      getIdentityColumnSupport in class AbstractTransactSQLDialect
      Returns:
      the IdentityColumnSupport
    • 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
    • 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
    • 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
    • getSequenceSupport

      public SequenceSupport getSequenceSupport()
      Description copied from class: Dialect
      Get the appropriate SequenceSupport for this dialect.
      Overrides:
      getSequenceSupport in class Dialect
    • 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.
    • getQueryHintString

      public String getQueryHintString(String sql, 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:
      sql - The query to which to apply the hint.
      hints - The hints to apply
      Returns:
      The modified SQL
    • supportsNullPrecedence

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

      public ViolatedConstraintNameExtractor getViolatedConstraintNameExtractor()
      Description copied from class: Dialect
      A ViolatedConstraintNameExtractor for extracting the name of a violated constraint from a SQLException.
      Specified by:
      getViolatedConstraintNameExtractor in interface ConversionContext
      Overrides:
      getViolatedConstraintNameExtractor in class Dialect
    • buildSQLExceptionConversionDelegate

      public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate()
      Description copied from class: Dialect
      An instance of 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 JDBC4-defined SQLException hierarchy, and
      2. a delegate that interprets SQLState codes as either X/Open or SQL-2003 codes, depending on what is reported by the JDBC driver.

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

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

      public int getDefaultTimestampPrecision()
      Description copied from class: Dialect
      This is the default precision for a generated column of type TIMESTAMP mapped to a Timestamp or LocalDateTime.

      Usually 6 (microseconds) or 3 (milliseconds).

      Overrides:
      getDefaultTimestampPrecision in class Dialect
      Returns:
      the default precision, in decimal digits, of the fractional seconds field
      See Also:
    • getFractionalSecondPrecisionInNanos

      public long getFractionalSecondPrecisionInNanos()
      Even though SQL Server only supports 1/10th microsecond precision, we use nanosecond as the "native" precision for datetime arithmetic since it simplifies calculations.
      Overrides:
      getFractionalSecondPrecisionInNanos in class Dialect
      Returns:
      the precision, specified as a quantity of nanoseconds
      See Also:
    • extractPattern

      public String extractPattern(TemporalUnit unit)
      Description copied from class: Dialect
      Obtain a pattern for the SQL equivalent to an extract() function call. The resulting pattern must contain ?1 and ?2 placeholders for the arguments.

      This method does not need to handle TemporalUnit.NANOSECOND, TemporalUnit.NATIVE, TemporalUnit.OFFSET, TemporalUnit.DATE, TemporalUnit.TIME, TemporalUnit.WEEK_OF_YEAR, or TemporalUnit.WEEK_OF_MONTH, which are already desugared by ExtractFunction.

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

      public String translateDurationField(TemporalUnit unit)
      Description copied from class: Dialect
      Return the name used to identify the given unit of duration as an argument to #timestampadd() or #timestampdiff(), or of this dialect's equivalent functions.

      This method does not need to handle TemporalUnit.NANOSECOND, TemporalUnit.NATIVE, TemporalUnit.OFFSET, TemporalUnit.DAY_OF_WEEK, TemporalUnit.DAY_OF_MONTH, TemporalUnit.DAY_OF_YEAR, TemporalUnit.DATE, TemporalUnit.TIME, TemporalUnit.TIMEZONE_HOUR, TemporalUnit.TIMEZONE_MINUTE, TemporalUnit.WEEK_OF_YEAR, nor TemporalUnit.WEEK_OF_MONTH, which are not units of duration.

      Overrides:
      translateDurationField in class Dialect
    • translateExtractField

      public String translateExtractField(TemporalUnit unit)
      Description copied from class: Dialect
      Return the name used to identify the given field as an argument to the extract() function, or of this dialect's equivalent function.

      This method does not need to handle TemporalUnit.NANOSECOND, TemporalUnit.NATIVE, TemporalUnit.OFFSET, TemporalUnit.DATE, TemporalUnit.TIME, TemporalUnit.WEEK_OF_YEAR, nor TemporalUnit.WEEK_OF_MONTH, which are already desugared by ExtractFunction.

      Overrides:
      translateExtractField in class Dialect
    • 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
    • datetimeFormat

      public static Replacer datetimeFormat(String format)
    • appendUUIDLiteral

      public void appendUUIDLiteral(SqlAppender appender, UUID literal)
      Description copied from class: Dialect
      Append a literal SQL uuid representing the given Java UUID.

      This is usually a cast() expression, but it might be a function call.

      Overrides:
      appendUUIDLiteral in class Dialect
    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender, TemporalAccessor temporalAccessor, TemporalType precision, TimeZone jdbcTimeZone)
      Description copied from class: Dialect
      Append a datetime literal representing the given java.time value to the given SqlAppender.
      Overrides:
      appendDateTimeLiteral in class Dialect
    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender, Date date, TemporalType precision, TimeZone jdbcTimeZone)
      Description copied from class: Dialect
      Append a datetime literal representing the given Date value to the given SqlAppender.
      Overrides:
      appendDateTimeLiteral in class Dialect
    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender, Calendar calendar, TemporalType precision, TimeZone jdbcTimeZone)
      Description copied from class: Dialect
      Append a datetime literal representing the given Calendar value to the given SqlAppender.
      Overrides:
      appendDateTimeLiteral in class Dialect
    • getCreateTemporaryTableColumnAnnotation

      public String getCreateTemporaryTableColumnAnnotation(int sqlTypeCode)
      Description copied from class: Dialect
      Annotation to be appended to the end of each COLUMN clause for temporary tables.
      Overrides:
      getCreateTemporaryTableColumnAnnotation in class Dialect
      Parameters:
      sqlTypeCode - The SQL type code
      Returns:
      The annotation to be appended, for example, COLLATE DATABASE_DEFAULT in SQL Server
    • getDropSchemaCommand

      public String[] getDropSchemaCommand(String schemaName)
      Description copied from class: Dialect
      Get the SQL command used to drop the named schema.
      Overrides:
      getDropSchemaCommand in class Dialect
      Parameters:
      schemaName - The name of the schema to be dropped.
      Returns:
      The drop commands
    • getCreateIndexString

      public String getCreateIndexString(boolean unique)
      Description copied from class: Dialect
      The command used to create an index, usually create index or create unique index.
      Overrides:
      getCreateIndexString in class Dialect
      Parameters:
      unique - true if the index is a unique index
      Returns:
      The command used to create an index.
    • getCreateIndexTail

      public String getCreateIndexTail(boolean unique, List<Column> columns)
      Description copied from class: Dialect
      A string to be appended to the end of the create index command, usually to specify that null values are to be considered distinct.
      Overrides:
      getCreateIndexTail 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
    • 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
    • getNameQualifierSupport

      public NameQualifierSupport getNameQualifierSupport()
      Description copied from class: Dialect
      The support for qualified identifiers.

      By default, decide based on DatabaseMetaData.

      Overrides:
      getNameQualifierSupport in class Dialect
      Returns:
      The NameQualifierSupport, or null to use DatabaseMetaData.
    • getUniqueDelegate

      public UniqueDelegate getUniqueDelegate()
      Description copied from class: Dialect
      Get the UniqueDelegate supported by this dialect
      Overrides:
      getUniqueDelegate in class Dialect
      Returns:
      The UniqueDelegate
    • getTableExporter

      public Exporter<Table> getTableExporter()
      Description copied from class: Dialect
      Get an Exporter for Tables, usually StandardTableExporter.
      Overrides:
      getTableExporter in class Dialect
    • getSequenceExporter

      public Exporter<Sequence> getSequenceExporter()
      Description copied from class: Dialect
      Overrides:
      getSequenceExporter 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
    • hasDataTypeBeforeGeneratedAs

      public boolean hasDataTypeBeforeGeneratedAs()
      Description copied from class: Dialect
      Is an explicit column type required for generated as columns?
      Overrides:
      hasDataTypeBeforeGeneratedAs in class Dialect
      Returns:
      true if an explicit type is required
    • createOptionalTableUpdateOperation

      public MutationOperation createOptionalTableUpdateOperation(EntityMutationTarget mutationTarget, OptionalTableUpdate optionalTableUpdate, SessionFactoryImplementor factory)
      Description copied from class: Dialect
      Create a MutationOperation for a updating an optional table
      Overrides:
      createOptionalTableUpdateOperation in class Dialect
    • getDmlTargetColumnQualifierSupport

      public DmlTargetColumnQualifierSupport getDmlTargetColumnQualifierSupport()
      Description copied from class: Dialect
      Get the minimum DmlTargetColumnQualifierSupport required by this dialect.
      Overrides:
      getDmlTargetColumnQualifierSupport in class Dialect
      Returns:
      the column qualifier support required by this dialect
    • supportsFromClauseInUpdate

      public boolean supportsFromClauseInUpdate()
      Description copied from class: Dialect
      Does this dialect support the from clause for update statements?
      Overrides:
      supportsFromClauseInUpdate in class Dialect
      Returns:
      true if from clause is supported
    • getCallableStatementSupport

      public CallableStatementSupport getCallableStatementSupport()
      Description copied from class: Dialect
      The CallableStatementSupport for this database. Does this database support returning cursors?
      Overrides:
      getCallableStatementSupport in class Dialect
    • getCheckConstraintString

      public String getCheckConstraintString(CheckConstraint checkConstraint)
      Description copied from class: Dialect
      Render a SQL check condition for CheckConstraint
      Overrides:
      getCheckConstraintString in class Dialect
      Returns:
      a SQL expression representing the CheckConstraint
    • supportsBindingNullForSetObject

      public boolean supportsBindingNullForSetObject()
      Description copied from class: Dialect
      Does this dialect support binding null for PreparedStatement.setObject(int, Object)? if it does, then call of PreparedStatement.getParameterMetaData() could be eliminated for better performance.
      Overrides:
      supportsBindingNullForSetObject in class Dialect
      Returns:
      true indicates it does; false indicates it does not;
      See Also: