Package org.hibernate.dialect

Class Dialect

java.lang.Object
org.hibernate.dialect.Dialect
All Implemented Interfaces:
FunctionContributor,TypeContributor,ConversionContext
Direct Known Subclasses:
AbstractTransactSQLDialect,CockroachDialect,DB2Dialect,GenericDialect,H2Dialect,HANADialect,HSQLDialect,MySQLDialect,OracleDialect,PostgreSQLDialect,SpannerDialect

public abstract classDialectextendsObjectimplementsConversionContext,TypeContributor,FunctionContributor
Represents a dialect of SQL implemented by a particular RDBMS. Every subclass of this class implements support for a certain database platform. For example,PostgreSQLDialect implements support for PostgreSQL, andMySQLDialect implements support for MySQL.

A subclass must provide a public constructor with a single parameter of typeDialectResolutionInfo. Alternatively, for purposes of backward compatibility with older versions of Hibernate, a constructor with no parameters is also allowed.

Almost every subclass must, as a bare minimum, override at least:

A subclass representing a dialect of SQL which deviates significantly from ANSI SQL will certainly override many additional operations.

Subclasses should be thread-safe and immutable.

Since Hibernate 6, a single subclass ofDialect represents all releases of a given product-specific SQL dialect. The version of the database is exposed at runtime via theDialectResolutionInfo passed to the constructor, and by thegetVersion() property.

Programs using Hibernate should migrate away from the use of versioned dialect classes like, for example,MySQL8Dialect. These classes are now deprecated and will be removed in a future release.

A customDialect may be specified using the configuration property"hibernate.dialect", but for supported databases this property is unnecessary, and Hibernate will select the correctDialect based on the JDBC URL andDialectResolutionInfo.

  • Field Details

    • QUOTE

      public static final String QUOTE
      Characters used as opening for quoting SQL identifiers
      See Also:
    • CLOSED_QUOTE

      public static final String CLOSED_QUOTE
      Characters used as closing for quoting SQL identifiers
      See Also:
    • LOG_BASE2OF10

      protected static final double LOG_BASE2OF10
    • TRUE_STRING_VALUES

      protected static final String[] TRUE_STRING_VALUES
    • FALSE_STRING_VALUES

      protected static final String[] FALSE_STRING_VALUES
    • LEGACY_LOB_MERGE_STRATEGY

      protected static final LobMergeStrategy LEGACY_LOB_MERGE_STRATEGY
      ALobMergeStrategy representing the legacy behavior of Hibernate. LOBs are not processed by merge.
    • STREAM_XFER_LOB_MERGE_STRATEGY

      protected static final LobMergeStrategy STREAM_XFER_LOB_MERGE_STRATEGY
      ALobMergeStrategy based on transferring contents using streams.
    • NEW_LOCATOR_LOB_MERGE_STRATEGY

      protected static final LobMergeStrategy NEW_LOCATOR_LOB_MERGE_STRATEGY
      ALobMergeStrategy based on creating a new LOB locator.
    • STANDARD_MULTI_KEY_LOAD_SIZING_STRATEGY

      protected final MultiKeyLoadSizingStrategy STANDARD_MULTI_KEY_LOAD_SIZING_STRATEGY
  • Constructor Details

  • Method Details

    • checkVersion

      protected void checkVersion()
    • determineDatabaseVersion

      public DatabaseVersion determineDatabaseVersion(DialectResolutionInfo info)
      Determine the database version, as precise as possible and using Dialect-specific techniques, from aDialectResolutionInfo object.
      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.
    • initDefaultProperties

      protected void initDefaultProperties()
      Set appropriate default values for configuration properties.

      This default implementation sets"hibernate.jdbc.batch_size","hibernate.jdbc.lob.non_contextual_creation", and"hibernate.jdbc.use_get_generated_keys" to defaults determined by callinggetDefaultStatementBatchSize(),getDefaultNonContextualLobCreation(), andgetDefaultUseGetGeneratedKeys().

      An implementation may set additional configuration properties, but this is discouraged.

    • registerColumnTypes

      protected void registerColumnTypes(TypeContributions typeContributions,ServiceRegistry serviceRegistry)
      Register ANSI-standard column types using the length limits defined bygetMaxVarcharLength(),getMaxNVarcharLength(), andgetMaxVarbinaryLength().

      This method is always called when aDialect is instantiated.

    • isLob

      protected boolean isLob(int sqlTypeCode)
    • columnType

      protected String columnType(int sqlTypeCode)
      The database column type name for a given JDBC type code defined inTypes orSqlTypes. This default implementation returns the ANSI-standard type name.

      This method may be overridden by concreteDialects as an alternative toregisterColumnTypes(TypeContributions, ServiceRegistry) for simple registrations.

      Note that:

      1. Implementations of this method are expected to define a sensible mapping forTypes.NCLOBTypes.NCHAR, andTypes.NVARCHAR. On some database, these types are simply remapped toCLOB,CHAR, andVARCHAR.
      2. Mappings forTypes.TIMESTAMP andTypes.TIMESTAMP_WITH_TIMEZONE should support explicit specification of precision if possible.
      3. As specified byDdlTypeRegistry.getDescriptor(int), this method never receivesTypes.LONGVARCHAR,Types.LONGNVARCHAR, norTypes.LONGVARBINARY, which are considered synonyms for their non-LONG counterparts.
      4. On the other hand, the typesSqlTypes.LONG32VARCHAR,SqlTypes.LONG32NVARCHAR, andSqlTypes.LONG32VARBINARY arenot synonyms, and implementations of this method must define sensible mappings, for example to database-nativeTEXT orCLOB types.
      Parameters:
      sqlTypeCode - a SQLtype code
      Returns:
      a column type name, with$l,$p,$s placeholders for length, precision, scale
      See Also:
    • stripsTrailingSpacesFromChar

      public boolean stripsTrailingSpacesFromChar()
      Does this dialect strip trailing spaces from values stored in columns of typechar(n)? MySQL and Sybase are the main offenders here.
    • castType

      protected String castType(int sqlTypeCode)
      The SQL type to use incast( ... as ... ) expressions when casting to the target type represented by the given JDBC type code.
      Parameters:
      sqlTypeCode - The JDBC type code representing the target type
      Returns:
      The SQL type to use incast()
    • registerDefaultKeywords

      protected void registerDefaultKeywords()
      Register the reserved words of ANSI-standard SQL as keywords.
      See Also:
    • registerKeywords

      protected void registerKeywords(DialectResolutionInfo info)
      Register the reserved wordsreported by the JDBC driver as keywords.
      See Also:
    • getVersion

      public DatabaseVersion getVersion()
      Get the version of the SQL dialect that is the target of this instance.
    • getMinimumSupportedVersion

      protected DatabaseVersion getMinimumSupportedVersion()
      Get the version of the SQL dialect that is the minimum supported by this implementation.
    • resolveSqlTypeCode

      protected Integer resolveSqlTypeCode(String columnTypeName,TypeConfiguration typeConfiguration)
      Resolves theSqlTypes type code for the given column type name as reported by the database, ornull if it can't be resolved.
    • resolveSqlTypeCode

      protected Integer resolveSqlTypeCode(String typeName,String baseTypeName,TypeConfiguration typeConfiguration)
      Resolves theSqlTypes 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), ornull if it can't be resolved.
    • resolveSqlTypeDescriptor

      public JdbcType resolveSqlTypeDescriptor(String columnTypeName, int jdbcTypeCode, int precision, int scale,JdbcTypeRegistry jdbcTypeRegistry)
      Assigns an appropriateJdbcType to a column of a JDBC result set based on the column type name, JDBC type code, precision, and scale.
      Parameters:
      columnTypeName - the column type name
      jdbcTypeCode - thetype code
      precision - the precision or 0
      scale - the scale or 0
      Returns:
      an appropriate instance ofJdbcType
    • resolveSqlTypeLength

      public int resolveSqlTypeLength(String columnTypeName, int jdbcTypeCode, int precision, int scale, int displaySize)
      Determine the length/precision of a column based on information in the JDBCResultSetMetaData. Note that what JDBC reports as a "precision"might actually be the column length.
      Parameters:
      columnTypeName - the name of the column type
      jdbcTypeCode - the JDBC type code of the column type
      precision - the (numeric) precision or (character) length of the column
      scale - the scale of a numeric column
      displaySize - thedisplay size of the column
      Returns:
      the precision or length of the column
    • getEnumTypeDeclaration

      public String getEnumTypeDeclaration(String name,String[] values)
      If this database has a special MySQL-styleenum column type, return the type declaration for the given enumeration of values.

      If the database has no such type, returnnull.

      Parameters:
      values - the enumerated values of the type
      Returns:
      the DDL column type declaration
    • getEnumTypeDeclaration

      public String getEnumTypeDeclaration(Class<? extendsEnum<?>> enumType)
    • getCreateEnumTypeCommand

      public String[] getCreateEnumTypeCommand(String name,String[] values)
    • getCreateEnumTypeCommand

      public String[] getCreateEnumTypeCommand(Class<? extendsEnum<?>> enumType)
    • getDropEnumTypeCommand

      public String[] getDropEnumTypeCommand(String name)
    • getDropEnumTypeCommand

      public String[] getDropEnumTypeCommand(Class<? extendsEnum<?>> enumType)
    • getCheckCondition

      public String getCheckCondition(String columnName,String[] values)
      Render a SQL check condition for a column that represents an enumerated value by itsstring representation or a given list of values (with NULL value allowed).
      Returns:
      a SQL expression that will occur in acheck constraint
    • getCheckCondition

      public String getCheckCondition(String columnName,Class<? extendsEnum<?>> enumType)
    • getCheckCondition

      public String getCheckCondition(String columnName, long min, long max)
      Render a SQL check condition for a column that represents an enumerated value. by itsordinal representation.
      Returns:
      a SQL expression that will occur in acheck constraint
    • getCheckCondition

      @Deprecated(since="6.5",forRemoval=true)public String getCheckCondition(String columnName, long[] values)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Render a SQL check condition for a column that represents an enumerated value by itsordinal representation.
      Returns:
      a SQL expression that will occur in acheck constraint
    • getCheckCondition

      public String getCheckCondition(String columnName,Long[] values)
      Render a SQL check condition for a column that represents an enumerated value by itsordinal representation or a given list of values.
      Returns:
      a SQL expression that will occur in acheck constraint
    • getCheckCondition

      public String getCheckCondition(String columnName,Collection<?> valueSet,JdbcType jdbcType)
      Generate a SQLcheck condition for the given column, constraining to the given values.
      Returns:
      a SQL expression that will occur in acheck constraint
      Since:
      7.0
      API Note:
      Only supportsTINYINT,SMALLINT,CHAR, andVARCHAR
    • contributeFunctions

      public void contributeFunctions(FunctionContributions functionContributions)
      Description copied from interface: FunctionContributor
      Contribute functions
      Specified by:
      contributeFunctions in interface FunctionContributor
      Parameters:
      functionContributions - The target for the contributions
    • ordinal

      public int ordinal()
      Description copied from interface: FunctionContributor
      Determines order in which the contributions will be applied (lowest ordinal first).

      The range 0-500 is reserved for Hibernate, range 500-1000 for libraries and 1000-Integer.MAX_VALUE for user-defined FunctionContributors.

      Contributions from higher precedence contributors (higher numbers) effectively override contributions from lower precedence. E.g. if a contributor with precedence 1000 contributes a function named"max", that will override Hibernate's standard function of that name.

      Specified by:
      ordinal in interface FunctionContributor
      Returns:
      the ordinal for this FunctionContributor
    • initializeFunctionRegistry

      public void initializeFunctionRegistry(FunctionContributions functionContributions)
      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 withjava.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 ofcast(a as String)
      • ifnull(arg0, arg1) - synonym ofcoalesce(a, b)
      Finally, the following functions are defined as abbreviations forextract(), and desugared by the parser:
      • second(arg) - synonym ofextract(second from a)
      • minute(arg) - synonym ofextract(minute from a)
      • hour(arg) - synonym ofextract(hour from a)
      • day(arg) - synonym ofextract(day from a)
      • month(arg) - synonym ofextract(month from a)
      • year(arg) - synonym ofextract(year from a)
      Note that according to this definition, thesecond() 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.
    • currentDate

      public String currentDate()
      Translation of the HQL/JPQLcurrent_date function, which maps to the Java typeDate, and of the HQLlocal_date function which maps to the Java typeLocalDate.
    • currentTime

      public String currentTime()
      Translation of the HQL/JPQLcurrent_time function, which maps to the Java typeTime which is a time with no time zone. This contradicts ANSI SQL wherecurrent_time has the typeTIME WITH TIME ZONE.

      It is recommended to override this in dialects for databases which supportlocaltime ortime at local.

    • currentTimestamp

      public String currentTimestamp()
      Translation of the HQL/JPQLcurrent_timestamp function, which maps to the Java typeTimestamp which is a datetime with no time zone. This contradicts ANSI SQL wherecurrent_timestamp has the typeTIMESTAMP WITH TIME ZONE.

      It is recommended to override this in dialects for databases which supportlocaltimestamp ortimestamp at local.

    • currentLocalTime

      public String currentLocalTime()
      Translation of the HQLlocal_time function, which maps to the Java typeLocalTime which is a time with no time zone. It should usually be the same SQL function as forcurrentTime().

      It is recommended to override this in dialects for databases which supportlocaltime orcurrent_time at local.

    • currentLocalTimestamp

      public String currentLocalTimestamp()
      Translation of the HQLlocal_datetime function, which maps to the Java typeLocalDateTime which is a datetime with no time zone. It should usually be the same SQL function as forcurrentTimestamp().

      It is recommended to override this in dialects for databases which supportlocaltimestamp orcurrent_timestamp at local.

    • currentTimestampWithTimeZone

      public String currentTimestampWithTimeZone()
      Translation of the HQLoffset_datetime function, which maps to the Java typeOffsetDateTime which is a datetime with a time zone. This in principle correctly maps to the ANSI SQLcurrent_timestamp which has the typeTIMESTAMP WITH TIME ZONE.
    • extractPattern

      public String extractPattern(TemporalUnit unit)
      Obtain a pattern for the SQL equivalent to anextract() function call. The resulting pattern must contain ?1 and ?2 placeholders for the arguments.

      This method does not need to handleTemporalUnit.NANOSECOND,TemporalUnit.NATIVE,TemporalUnit.OFFSET,TemporalUnit.DATE,TemporalUnit.TIME,TemporalUnit.WEEK_OF_YEAR, orTemporalUnit.WEEK_OF_MONTH, which are already desugared byExtractFunction.

      Parameters:
      unit - the first argument
    • castPattern

      public String castPattern(CastType from,CastType to)
      Obtain a pattern for the SQL equivalent to acast() function call. The resulting pattern must contain ?1 and ?2 placeholders for the arguments.
      Parameters:
      from - aCastType indicating the type of the value argument
      to - aCastType indicating the type the value argument is cast to
    • buildStringToBooleanCast

      protected String buildStringToBooleanCast(String trueValue,String falseValue)
    • buildStringToBooleanCastDecode

      protected String buildStringToBooleanCastDecode(String trueValue,String falseValue)
    • buildStringToBooleanDecode

      protected String buildStringToBooleanDecode(String trueValue,String falseValue)
    • getDual

      public String getDual()
      Returns a table expression that has one row.
      Returns:
      the SQL equivalent to Oracle'sdual.
    • getFromDualForSelectOnly

      public String getFromDualForSelectOnly()
    • trimPattern

      public String trimPattern(TrimSpec specification, boolean isWhitespace)
      Obtain a pattern for the SQL equivalent to atrim() function call. The resulting pattern must contain a ?1 placeholder for the argument of typeString and a ?2 placeholder for the trim character ifisWhitespace was false.
      Parameters:
      specification -leading,trailing, orboth
      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
    • supportsFractionalTimestampArithmetic

      public boolean supportsFractionalTimestampArithmetic()
      Whether the database supports adding a fractional interval to a timestamp, for exampletimestamp + 0.5 second.
    • timestampdiffPattern

      public String timestampdiffPattern(TemporalUnit unit,TemporalType fromTemporalType,TemporalType toTemporalType)
      Obtain a pattern for the SQL equivalent to atimestampdiff() function call. The resulting pattern must contain ?1, ?2, and ?3 placeholders for the arguments.
      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
    • timestampaddPattern

      public String timestampaddPattern(TemporalUnit unit,TemporalType temporalType,IntervalType intervalType)
      Obtain a pattern for the SQL equivalent to atimestampadd() function call. The resulting pattern must contain ?1, ?2, and ?3 placeholders for the arguments.
      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
    • equivalentTypes

      public boolean equivalentTypes(int typeCode1, int typeCode2)
      Do the given JDBC type codes, as defined inTypes represent essentially the same type in this dialect of SQL?

      The default implementation treatsNUMERIC andDECIMAL as the same type, andFLOAT,REAL, andDOUBLE as essentially the same type, since the ANSI SQL specification fails to meaningfully distinguish them.

      The default implementation also treatsVARCHAR,NVARCHAR,LONGVARCHAR, andLONGNVARCHAR as the same type, andBINARY andLONGVARBINARY as the same type, since Hibernate doesn't really differentiate these types.

      On the other hand, integral types are not treated as equivalent, instead,isCompatibleIntegralType(int, int) is responsible for determining if the types are compatible.

      Parameters:
      typeCode1 - the first column type info
      typeCode2 - the second column type info
      Returns:
      true if the two type codes are equivalent
    • getDefaultProperties

      public Properties getDefaultProperties()
      Retrieve a set of default Hibernate properties for this database.

      An implementation may set configuration properties frominitDefaultProperties(), though it is discouraged.

      Returns:
      the Hibernate configuration properties
      See Also:
    • getDefaultStatementBatchSize

      public int getDefaultStatementBatchSize()
      The default value to use for the configuration property"hibernate.jdbc.batch_size".
    • getDefaultNonContextualLobCreation

      public boolean getDefaultNonContextualLobCreation()
      The default value to use for the configuration property"hibernate.jdbc.lob.non_contextual_creation".
    • getDefaultUseGetGeneratedKeys

      public boolean getDefaultUseGetGeneratedKeys()
      The default value to use for the configuration property"hibernate.jdbc.use_get_generated_keys".
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • contribute

      public void contribute(TypeContributions typeContributions,ServiceRegistry serviceRegistry)
      Description copied from interface: TypeContributor
      Contribute types
      Specified by:
      contribute in interface TypeContributor
      Parameters:
      typeContributions - The callback for adding contributed types
      serviceRegistry - The service registry
    • contributeTypes

      public void contributeTypes(TypeContributions typeContributions,ServiceRegistry serviceRegistry)
      A callback which allows theDialect to contribute types.
      Parameters:
      typeContributions - Callback to contribute the types
      serviceRegistry - The service registry
    • getLobMergeStrategy

      public LobMergeStrategy getLobMergeStrategy()
    • getNativeIdentifierGeneratorStrategy

      @Deprecated(since="7.0",forRemoval=true)public String getNativeIdentifierGeneratorStrategy()
      Deprecated, for removal: This API element is subject to removal in a future version.
      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 inhbm.xml.

      Returns:
      The name identifying the native generator strategy.
      Implementation Note:
      Only used withhbm.xml andGenericGenerator, both of which have been deprecated
    • getNativeValueGenerationStrategy

      @Incubatingpublic GenerationType getNativeValueGenerationStrategy()
      The native type of generation supported by this Dialect.
      Since:
      7.0
      See Also:
    • getIdentityColumnSupport

      public IdentityColumnSupport getIdentityColumnSupport()
      Get the appropriateIdentityColumnSupport for this dialect.
      Returns:
      the IdentityColumnSupport
      Since:
      5.1
    • getSequenceSupport

      public SequenceSupport getSequenceSupport()
      Get the appropriateSequenceSupport for this dialect.
    • getQuerySequencesString

      public String getQuerySequencesString()
      Get theselect command used retrieve the names of all sequences.
      Returns:
      The select command; or null if sequences are not supported.
    • getSequenceInformationExtractor

      public SequenceInformationExtractor getSequenceInformationExtractor()
      ASequenceInformationExtractor which is able to extractSequenceInformation from the JDBC result set returned whengetQuerySequencesString() is executed.
    • getSelectGUIDString

      public String getSelectGUIDString()
      Get the command used to select a GUID from the database.

      Optional operation.

      Returns:
      The appropriate command.
    • supportsTemporaryTables

      public boolean supportsTemporaryTables()
      Does this database have some sort of support for temporary tables?
      Returns:
      true by default, since most do
    • supportsTemporaryTablePrimaryKey

      public boolean supportsTemporaryTablePrimaryKey()
      Does this database support primary keys for temporary tables?
      Returns:
      true by default, since most do
    • getLimitHandler

      public LimitHandler getLimitHandler()
      Obtain aLimitHandler that implements pagination support forQuery.setMaxResults(int) andQuery.setFirstResult(int).
    • supportsLockTimeouts

      public boolean supportsLockTimeouts()
      Does this dialect support specifying timeouts when requesting locks.
      Returns:
      True is this dialect supports specifying lock timeouts.
    • getLockingStrategy

      public LockingStrategy getLockingStrategy(EntityPersister lockable,LockMode lockMode)
      ALockingStrategy which is able to acquire a database-level lock with the specifiedlevel.
      Parameters:
      lockable - The persister for the entity to be locked.
      lockMode - The type of lock to be acquired.
      Returns:
      The appropriate locking strategy.
      Since:
      3.2
    • getForUpdateString

      public String getForUpdateString(LockOptions lockOptions)
      Given a set ofLockOptions (lock level, timeout), determine the appropriatefor update fragment to use to obtain the lock.
      Parameters:
      lockOptions - contains the lock mode to apply.
      Returns:
      The appropriatefor update fragment.
    • getForUpdateString

      public String getForUpdateString(LockMode lockMode,Timeout timeout)
      Given alock level and timeout, determine the appropriatefor update fragment to use to obtain the lock.
      Parameters:
      lockMode - the lock mode to apply.
      timeout - the timeout
      Returns:
      The appropriatefor update fragment.
    • getForUpdateString

      @Deprecated(since="7.0")public String getForUpdateString(LockMode lockMode, int timeout)
      Given alock level and timeout, determine the appropriatefor update fragment to use to obtain the lock.
      Parameters:
      lockMode - the lock mode to apply.
      timeout - the timeout
      Returns:
      The appropriatefor update fragment.
    • getForUpdateString

      public String getForUpdateString(LockMode lockMode)
      Given aLockMode, determine the appropriatefor update fragment to use to obtain the lock.
      Parameters:
      lockMode - The lock mode to apply.
      Returns:
      The appropriate for update fragment.
    • getForUpdateString

      public String getForUpdateString()
      Get the string to append toSELECT statements to acquire pessimistic UPGRADE locks for this dialect.
      Returns:
      The appropriateFOR UPDATE clause string.
    • getWriteLockString

      public String getWriteLockString(Timeout timeout)
      Get the string to append toSELECT statements to acquire pessimistic WRITE locks for this dialect.
      Parameters:
      timeout - How long the database should wait to acquire the lock. SeeTimeouts for some "magic values".
      Returns:
      The appropriate lock clause.
    • getWriteLockString

      @Deprecated(since="7.0")public String getWriteLockString(int timeout)
      Deprecated.
      Get the string to append toSELECT statements to acquire pessimistic WRITE locks for this dialect.

      Location of the returned string is treated the same asgetForUpdateString().

      Parameters:
      timeout - How long, in milliseconds, the database should wait to acquire the lock. SeeTimeouts for some "magic values".
      Returns:
      The appropriateLOCK clause string.
    • getWriteLockString

      public String getWriteLockString(String aliases,Timeout timeout)
      Get the string to append toSELECT statements to acquire WRITE locks for this dialect, given the aliases of the columns to be WRITE locked. * * @param timeout How long the database should wait to acquire the lock.

      Location of the returned string is treated the same asgetForUpdateString().

      Parameters:
      aliases - The columns to be read locked.
      timeout - How long the database should wait to acquire the lock. SeeTimeouts for some "magic values".
      Returns:
      The appropriateLOCK clause string.
    • getWriteLockString

      @Deprecated(since="7.0")public String getWriteLockString(String aliases, int timeout)
      Get the string to append toSELECT 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 asgetForUpdateString().

      Parameters:
      aliases - The columns to be read locked.
      timeout - How long, in milliseconds, the database should wait to acquire the lock. SeeTimeouts for some "magic values".
      Returns:
      The appropriateLOCK clause string.
    • getReadLockString

      public String getReadLockString(Timeout timeout)
      Get the string to append toSELECT statements to acquire READ locks for this dialect.
      Parameters:
      timeout - How long the database should wait to acquire the lock. SeeTimeouts for some "magic values".
      Returns:
      The appropriateLOCK clause string.
    • getReadLockString

      @Deprecated(since="7.0")public String getReadLockString(int timeout)
      Deprecated.
      Get the string to append toSELECT statements to acquire READ locks for this dialect.

      Location of the returned string is treated the same asgetForUpdateString().

      Parameters:
      timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
      Returns:
      The appropriateLOCK clause string.
    • getReadLockString

      public String getReadLockString(String aliases,Timeout timeout)
      Get the string to append toSELECT statements to acquire READ locks for this dialect, given the aliases of the columns to be read locked.
      Parameters:
      aliases - The columns to be read locked.
      timeout - How long the database should wait to acquire the lock. SeeTimeouts for some "magic values".
      Returns:
      The appropriateLOCK clause string.
      Implementation Note:
      By default, simply returns thegetReadLockString(Timeout) result since the default is to say no support for "FOR UPDATE OF ...".
    • getReadLockString

      @Deprecated(since="7.0")public String getReadLockString(String aliases, int timeout)
      Deprecated.
      Get the string to append toSELECT 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 asgetForUpdateString().

      Parameters:
      aliases - The columns to be read locked.
      timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
      Returns:
      The appropriateLOCK clause string.
    • getWriteRowLockStrategy

      public RowLockStrategy getWriteRowLockStrategy()
      Therow lock strategy to use for write locks.
    • getReadRowLockStrategy

      public RowLockStrategy getReadRowLockStrategy()
      Therow lock strategy to use for read locks.
    • supportsOuterJoinForUpdate

      public boolean supportsOuterJoinForUpdate()
      Does this dialect supportFOR UPDATE in conjunction with outer-joined rows?
      Returns:
      True if outer-joined rows can be locked viaFOR UPDATE.
    • getForUpdateString

      public String getForUpdateString(String aliases)
      Get theFOR UPDATE OF column_list fragment appropriate for this dialect, given the aliases of the columns to be write locked.
      Parameters:
      aliases - The columns to be write locked.
      Returns:
      The appropriateFOR UPDATE OF column_list clause string.
    • getForUpdateString

      public String getForUpdateString(String aliases,LockOptions lockOptions)
      Get theFOR UPDATE OF orFOR SHARE OF fragment appropriate for this dialect, given the aliases of the columns to be locked.
      Parameters:
      aliases - The columns to be locked.
      lockOptions - the lock options to apply
      Returns:
      The appropriateFOR UPDATE OF column_list clause string.
    • getForUpdateNowaitString

      public String getForUpdateNowaitString()
      Retrieves theFOR UPDATE NOWAIT syntax specific to this dialect.
      Returns:
      The appropriateFOR UPDATE NOWAIT clause string.
    • getForUpdateSkipLockedString

      public String getForUpdateSkipLockedString()
      Retrieves theFOR UPDATE SKIP LOCKED syntax specific to this dialect.
      Returns:
      The appropriateFOR UPDATE SKIP LOCKED clause string.
    • getForUpdateNowaitString

      public String getForUpdateNowaitString(String aliases)
      Get theFOR UPDATE OF column_list NOWAIT fragment appropriate for this dialect, given the aliases of the columns to be write locked.
      Parameters:
      aliases - The columns to be write locked.
      Returns:
      The appropriateFOR UPDATE OF colunm_list NOWAIT clause string.
    • getForUpdateSkipLockedString

      public String getForUpdateSkipLockedString(String aliases)
      Get theFOR UPDATE OF column_list SKIP LOCKED fragment appropriate for this dialect, given the aliases of the columns to be write locked.
      Parameters:
      aliases - The columns to be write locked.
      Returns:
      The appropriateFOR UPDATE colunm_list SKIP LOCKED clause string.
    • appendLockHint

      public String appendLockHint(LockOptions lockOptions,String tableName)
      Some dialects support an alternative means toSELECT FOR UPDATE, whereby a "lock hint" is appended to the table name in thefrom clause.
      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.
    • applyLocksToSql

      public String applyLocksToSql(String sql,LockOptions aliasedLockOptions,Map<String,String[]> keyColumnNames)
      Modifies the given SQL, applying the appropriate updates for the specified lock modes and key columns.

      This allows emulation ofSELECT FOR UPDATE for dialects which do not support the standard syntax.

      Parameters:
      sql - the SQL string to modify
      aliasedLockOptions - lock options indexed by aliased table names.
      keyColumnNames - a map of key columns indexed by aliased table names.
      Returns:
      the modified SQL string.
    • getTimeoutInSeconds

      @Deprecatedprotected int getTimeoutInSeconds(int millis)
      Deprecated.
    • getCreateTableString

      public String getCreateTableString()
      The command used to create a table, usuallycreate table.
      Returns:
      The command used to create a table.
    • getTableTypeString

      public String getTableTypeString()
      An arbitrary fragment appended to the end of thecreate table statement.
      API Note:
      An example is the MySQLengine option specifying a storage engine.
    • supportsIfExistsBeforeTableName

      public boolean supportsIfExistsBeforeTableName()
      For dropping a table, can the phraseif exists be applied before the table name?
      Returns:
      true ifif exists can be applied before the table name
      API Note:
      Only one or the other (or neither) of this andsupportsIfExistsAfterTableName() should return true.
    • supportsIfExistsAfterTableName

      public boolean supportsIfExistsAfterTableName()
      For dropping a table, can the phraseif exists be applied after the table name?
      Returns:
      true ifif exists can be applied after the table name
      API Note:
      Only one or the other (or neither) of this andsupportsIfExistsBeforeTableName() should return true.
    • getBeforeDropStatement

      public String getBeforeDropStatement()
      A command to execute before dropping tables.
      Returns:
      A SQL statement, ornull
    • getDropTableString

      @Deprecated(since="6.6")public String getDropTableString(String tableName)
      Deprecated.
      No longer used
      The command used to drop a table with the given name, usuallydrop table tab_name.
      Parameters:
      tableName - The name of the table to drop
      Returns:
      Thedrop table statement as a string
      See Also:
    • getCreateIndexString

      public String getCreateIndexString(boolean unique)
      The command used to create an index, usuallycreate index orcreate unique index.
      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)
      A string to be appended to the end of thecreate index command, usually to specify thatnull values are to be considered distinct.
    • qualifyIndexName

      public boolean qualifyIndexName()
      Do we need to qualify index names with the schema name?
      Returns:
      true if we do
    • getCreateMultisetTableString

      public String getCreateMultisetTableString()
      Slight variation ongetCreateTableString(). Here, we have the command used to create a table when there is no primary key and duplicate rows are expected.
      Returns:
      The command used to create a multiset table.
      API Note:
      Most databases do not have this distinction; this method was originally added for Teradata which does.
    • hasAlterTable

      public boolean hasAlterTable()
      Does this dialect support theALTER TABLE syntax?
      Returns:
      True if we support altering existing tables; false otherwise.
    • getAlterTableString

      public String getAlterTableString(String tableName)
      The command used to alter a table with the given name, usuallyalter table tab_name oralter table tab_name if exists.

      We prefer theif exists form if supported.

      Parameters:
      tableName - The name of the table to alter
      Returns:
      The command used to alter a table.
      Since:
      5.2.11
    • supportsIfExistsAfterAlterTable

      public boolean supportsIfExistsAfterAlterTable()
      For analter table, can the phraseif exists be applied?
      Returns:
      true ifif exists can be applied afteralter table
      Since:
      5.2.11
    • getAddColumnString

      public String getAddColumnString()
      The subcommand of thealter table command used to add a column to a table, usuallyadd column oradd.
      Returns:
      Theadd column fragment.
    • getAddColumnSuffixString

      public String getAddColumnSuffixString()
      The syntax for the suffix used to add a column to a table.
      Returns:
      The suffix of theadd column fragment.
    • dropConstraints

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

      public String getDropForeignKeyString()
      The subcommand of thealter table command used to drop a foreign key constraint, usuallydrop constraint.
    • getDropUniqueKeyString

      public String getDropUniqueKeyString()
      The subcommand of thealter table command used to drop a unique key constraint.
    • supportsIfExistsBeforeConstraintName

      public boolean supportsIfExistsBeforeConstraintName()
      For dropping a constraint with analter table statement, can the phraseif exists be applied before the constraint name?
      Returns:
      true ifif exists can be applied before the constraint name
      API Note:
      Only one or the other (or neither) of this andsupportsIfExistsAfterConstraintName() should return true
    • supportsIfExistsAfterConstraintName

      public boolean supportsIfExistsAfterConstraintName()
      For dropping a constraint with analter table, can the phraseif exists be applied after the constraint name?
      Returns:
      true ifif exists can be applied after the constraint name
      API Note:
      Only one or the other (or neither) of this andsupportsIfExistsBeforeConstraintName() should return true.
    • supportsAlterColumnType

      public boolean supportsAlterColumnType()
      Does this dialect support modifying the type of an existing column?
    • getAlterColumnTypeString

      public String getAlterColumnTypeString(String columnName,String columnType,String columnDefinition)
      The fragment of analter table command which modifies a column type, or null if column types cannot be modified. Oftenalter column col_name set data type col_type.
      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 toalter table
    • getAddForeignKeyConstraintString

      public String getAddForeignKeyConstraintString(String constraintName,String[] foreignKey,String referencedTable,String[] primaryKey, boolean referencesPrimaryKey)
      The syntax used to add a foreign key constraint to a table, with the referenced key columns explicitly specified.
      Parameters:
      constraintName - The foreign key constraint name
      foreignKey - The names of the columns comprising the foreign key
      referencedTable - The table referenced by the foreign key
      primaryKey - The explicit columns in the referencedTable referenced by this foreign key.
      referencesPrimaryKey - if false, constraint should be explicit about which column names the constraint refers to
      Returns:
      the "add FK" fragment
    • getAddForeignKeyConstraintString

      public String getAddForeignKeyConstraintString(String constraintName,String foreignKeyDefinition)
      The syntax used to add a foreign key constraint to a table, given the definition of the foreign key as a string.
      Parameters:
      constraintName - The foreign key constraint name
      foreignKeyDefinition - The whole definition of the foreign key as a fragment
    • useCrossReferenceForeignKeys

      public boolean useCrossReferenceForeignKeys()
      Does the dialect also need cross-references to get a complete list of foreign keys?
    • getCrossReferenceParentTableFilter

      public String getCrossReferenceParentTableFilter()
      Some dialects require a not null primaryTable filter. Sometimes a wildcard entry is sufficient for the like condition.
    • getAddPrimaryKeyConstraintString

      public String getAddPrimaryKeyConstraintString(String constraintName)
      The syntax used to add a primary key constraint to a table.
      Parameters:
      constraintName - The name of the PK constraint.
      Returns:
      The "add PK" fragment
    • getFallbackSqmMutationStrategy

      public SqmMultiTableMutationStrategy getFallbackSqmMutationStrategy(EntityMappingType entityDescriptor,RuntimeModelCreationContext runtimeModelCreationContext)
      See Also:
    • getFallbackSqmInsertStrategy

      public SqmMultiTableInsertStrategy getFallbackSqmInsertStrategy(EntityMappingType entityDescriptor,RuntimeModelCreationContext runtimeModelCreationContext)
      See Also:
    • getCreateUserDefinedTypeKindString

      public String getCreateUserDefinedTypeKindString()
      The kind of user-defined type to create, or the empty string if this does not need to be specified. Included aftercreate type type_name as, but before the list of members.
    • getCreateUserDefinedTypeExtensionsString

      public String getCreateUserDefinedTypeExtensionsString()
      An arbitrary extension to append to the end of the UDTcreate type command.
    • supportsIfExistsBeforeTypeName

      public boolean supportsIfExistsBeforeTypeName()
      For dropping a type, can the phraseif exists be applied before the type name?
      Returns:
      true ifif exists can be applied before the type name
      API Note:
      Only one or the other (or neither) of this andsupportsIfExistsAfterTypeName() should return true.
    • supportsIfExistsAfterTypeName

      public boolean supportsIfExistsAfterTypeName()
      For dropping a type, can the phraseif exists be applied after the type name?
      Returns:
      true ifif exists can be applied after the type name
      API Note:
      Only one or the other (or neither) of this andsupportsIfExistsBeforeTypeName() should return true.
    • registerResultSetOutParameter

      public int registerResultSetOutParameter(CallableStatement statement, int position) throwsSQLException
      Registers a parameter capable of returning aResultSetby position, either anOUT parameter, or aREF_CURSOR parameter as defined in Java 8.
      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.
      API Note:
      Before Java 8, support forResultSet-returning parameters was very uneven across database and drivers, leading to its inclusion as part of theDialect contract.
    • registerResultSetOutParameter

      public int registerResultSetOutParameter(CallableStatement statement,String name) throwsSQLException
      Registers a parameter capable of returning aResultSetby name, either anOUT parameter, or aREF_CURSOR parameter as defined in Java 8.
      Parameters:
      statement - The callable statement.
      name - The parameter name (for drivers which support named parameters).
      Returns:
      The number of (contiguous) bind positions used.
      Throws:
      SQLException - Indicates problems registering the param.
      API Note:
      Before Java 8, support forResultSet-returning parameters was very uneven across database and drivers, leading to its inclusion as part of theDialect contract.
    • getResultSet

      public ResultSet getResultSet(CallableStatement statement) throwsSQLException
      Given acallable statement previously processed byregisterResultSetOutParameter(java.sql.CallableStatement, int), extract theResultSet from theOUT parameter.
      Parameters:
      statement - The callable statement.
      Returns:
      The extracted result set.
      Throws:
      SQLException - Indicates problems extracting the result set.
    • getResultSet

      public ResultSet getResultSet(CallableStatement statement, int position) throwsSQLException
      Given acallable statement previously processed byregisterResultSetOutParameter(java.sql.CallableStatement, int), extract theResultSet from the positionalOUT parameter.
      Parameters:
      statement - The callable statement.
      position - The bind position at which to register the output param.
      Returns:
      The extracted result set.
      Throws:
      SQLException - Indicates problems extracting the result set.
    • getResultSet

      public ResultSet getResultSet(CallableStatement statement,String name) throwsSQLException
      Given acallable statement previously processed byregisterResultSetOutParameter(java.sql.CallableStatement, int), extract theResultSet from the namedOUT parameter.
      Parameters:
      statement - The callable statement.
      name - The parameter name (for drivers which support named parameters).
      Returns:
      The extracted result set.
      Throws:
      SQLException - Indicates problems extracting the result set.
    • supportsCurrentTimestampSelection

      public boolean supportsCurrentTimestampSelection()
      Does this dialect support some way to retrieve the current timestamp value from the database?
      Returns:
      True if the current timestamp can be retrieved; false otherwise.
    • isCurrentTimestampSelectStringCallable

      public boolean isCurrentTimestampSelectStringCallable()
      Is the command returned bygetCurrentTimestampSelectString() treated as callable?

      Typically, this indicates the use of the JDBC escape syntax.

      Returns:
      if thegetCurrentTimestampSelectString() is treated as callable; false otherwise.
    • getCurrentTimestampSelectString

      public String getCurrentTimestampSelectString()
      The command used to retrieve the current timestamp from the database.
    • supportsStandardCurrentTimestampFunction

      public boolean supportsStandardCurrentTimestampFunction()
      Does this dialect have an ANSI SQLcurrent_timestamp function?
    • buildSQLExceptionConversionDelegate

      public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate()
      An instance ofSQLExceptionConversionDelegate for interpreting dialect-specificerror orSQLState codes.

      If this method is overridden to return a non-null value, the defaultSQLExceptionConverter will use the returnedSQLExceptionConversionDelegate in addition to the following standard delegates:

      1. a "static" delegate based on the JDBC4-definedSQLException hierarchy, and
      2. a delegate that interprets SQLState codes as either X/Open or SQL-2003 codes, depending on what isreported by the JDBC driver.

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

      Returns:
      TheSQLExceptionConversionDelegate for this dialect
    • getViolatedConstraintNameExtractor

      public ViolatedConstraintNameExtractor getViolatedConstraintNameExtractor()
      AViolatedConstraintNameExtractor for extracting the name of a violated constraint from aSQLException.
      Specified by:
      getViolatedConstraintNameExtractor in interface ConversionContext
    • getSelectClauseNullString

      @Deprecated(forRemoval=true)public String getSelectClauseNullString(int sqlType,TypeConfiguration typeConfiguration)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Given aJDBC type code, return the expression for a literal null value of that type, to use in aselect clause.

      Theselect query will be an element of aUNION orUNION ALL.

      Parameters:
      sqlType - TheTypes type code.
      typeConfiguration - The type configuration
      Returns:
      The appropriate select clause value fragment.
      Implementation Note:
      Some databases require an explicit type cast.
    • getSelectClauseNullString

      public String getSelectClauseNullString(SqlTypedMapping sqlTypeMapping,TypeConfiguration typeConfiguration)
      Given a type mapping, return the expression for a literal null value of that type, to use in aselect clause.

      Theselect query will be an element of aUNION orUNION ALL.

      Parameters:
      sqlTypeMapping - The type mapping.
      typeConfiguration - The type configuration
      Returns:
      The appropriate select clause value fragment.
      Implementation Note:
      Some databases require an explicit type cast.
    • supportsUnionAll

      public boolean supportsUnionAll()
      Does this dialect supportUNION ALL?
      Returns:
      True ifUNION ALL is supported; false otherwise.
    • supportsUnionInSubquery

      public boolean supportsUnionInSubquery()
      Does this dialect supportUNION in a subquery.
      Returns:
      True ifUNION is supported in a subquery; false otherwise.
    • getNoColumnsInsertString

      @Deprecated(since="6")public String getNoColumnsInsertString()
      Deprecated.
      Override the methodrenderInsertIntoNoColumns() on thetranslator returned by this dialect.
      The fragment used to insert a row without specifying any column values, usually just(), but sometimesdefault values.
      Returns:
      The appropriate empty values clause.
      Implementation Note:
      On the other hand, this is simply not possible on some databases!
    • supportsNoColumnsInsert

      public boolean supportsNoColumnsInsert()
      Is theINSERT statement is allowed to contain no columns?
      Returns:
      if this dialect supports no-columnINSERT.
    • getLowercaseFunction

      public String getLowercaseFunction()
      The name of the SQL function that transforms a string to lowercase, almost alwayslower.
      Returns:
      The dialect-specific lowercase function.
    • getCaseInsensitiveLike

      public String getCaseInsensitiveLike()
      The name of the SQL operator that performs case-insensitiveLIKE comparisons.
      Returns:
      The dialect-specific case-insensitive like operator.
    • supportsCaseInsensitiveLike

      public boolean supportsCaseInsensitiveLike()
      Does this dialect support case-insensitiveLIKE comparisons?
      Returns:
      true if the database supports case-insensitive like comparisons,false otherwise. The default isfalse.
    • supportsTruncateWithCast

      public boolean supportsTruncateWithCast()
      Does this dialect support truncation of values to a specified length via acast?
      Returns:
      true if the database supports truncation via a cast,false otherwise. The default istrue.
    • supportsIsTrue

      public boolean supportsIsTrue()
      Does this dialect support theis true andis false operators?
      Returns:
      true if the database supportsis true andis false, orfalse if it does not. The default isis false.
    • transformSelectString

      public String transformSelectString(String select)
      Meant as a means for end users to affect the select strings being sent to the database and perhaps manipulate them in some fashion.
      Parameters:
      select - The select command
      Returns:
      The mutated select command, or the same as was passed in.
    • getMaxAliasLength

      public int getMaxAliasLength()
      What is the maximum length Hibernate can use for generated aliases?
      Returns:
      The maximum length.
      Implementation Note:
      The maximum here should account for the fact that Hibernate often needs to append "uniqueing" information to the end of generated aliases. That "uniqueing" information will be added to the end of an identifier generated to the length specified here; so be sure to leave some room (generally speaking 5 positions will suffice).
    • getMaxIdentifierLength

      public int getMaxIdentifierLength()
      What is the maximum identifier length supported by this dialect?
      Returns:
      The maximum length.
    • toBooleanValueString

      public String toBooleanValueString(boolean bool)
      The SQL literal expression representing the given boolean value.
      Parameters:
      bool - The boolean value
      Returns:
      The appropriate SQL literal.
    • appendBooleanValueString

      public void appendBooleanValueString(SqlAppender appender, boolean bool)
      Append the SQL literal expression representing the given boolean value to the givenSqlAppender.
      Parameters:
      bool - The boolean value
      appender - TheSqlAppender to append the literal expression to
    • registerKeyword

      protected void registerKeyword(String word)
      Register a keyword.
      Parameters:
      word - a reserved word in this SQL dialect
    • getKeywords

      public Set<String> getKeywords()
      The keywords of this SQL dialect.
    • buildIdentifierHelper

      public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, @NullableDatabaseMetaData dbMetaData) throwsSQLException
      TheIdentifierHelper indicated by this dialect for handling identifier conversions. Returningnull 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:

      Parameters:
      builder - A partially-configuredIdentifierHelperBuilder.
      dbMetaData - Access to the metadata returned from the driver if needed and if available.WARNING: it may benull.
      Returns:
      TheIdentifierHelper instance to use, ornull to indicate Hibernate should use its fallback path
      Throws:
      SQLException - Accessing theDatabaseMetaData can throw it. Just rethrow and Hibernate will handle it.
      See Also:
    • openQuote

      public char openQuote()
      The character specific to this dialect used to begin a quoted identifier.
      Returns:
      The dialect-specific open quote character.
    • closeQuote

      public char closeQuote()
      The character specific to this dialect used to close a quoted identifier.
      Returns:
      The dialect-specific close quote character.
    • toQuotedIdentifier

      public String toQuotedIdentifier(String name)
      Apply dialect-specific quoting.
      Parameters:
      name - The value to be quoted.
      Returns:
      The quoted value.
      See Also:
    • quote

      public String quote(String name)
      Apply dialect-specific quoting if the given name is quoted using backticks.

      By default, the incoming name is checked to see if its first character is a backtick (`). If it is, the dialect specific quoting is applied.

      Parameters:
      name - The value to be quoted.
      Returns:
      The quoted (or unmodified, if not starting with backtick) value.
      See Also:
    • getFallbackSchemaManagementTool

      @Incubatingpublic SchemaManagementTool getFallbackSchemaManagementTool(Map<String,Object> configurationValues,ServiceRegistryImplementor registry)
      TheSchemaManagementTool to use if none is explicitly specified.
      Returns:
      aHibernateSchemaManagementTool by default
      API Note:
      Allows implementations to override how schema tooling works by default
    • getTableExporter

      public Exporter<Table> getTableExporter()
    • getTableMigrator

      public TableMigrator getTableMigrator()
    • getTableCleaner

      public Cleaner getTableCleaner()
      Get a schemaCleaner, usuallyStandardTableCleaner.
    • getUserDefinedTypeExporter

      public Exporter<UserDefinedType> getUserDefinedTypeExporter()
    • getSequenceExporter

      public Exporter<Sequence> getSequenceExporter()
    • getIndexExporter

      public Exporter<Index> getIndexExporter()
    • getForeignKeyExporter

      public Exporter<ForeignKey> getForeignKeyExporter()
      Get anExporter forforeign key constraints, usuallyStandardForeignKeyExporter.
    • getUniqueKeyExporter

      public Exporter<UniqueKey> getUniqueKeyExporter()
      Get anExporter forunique key constraints, usuallyStandardUniqueKeyExporter.
    • getAuxiliaryDatabaseObjectExporter

      public Exporter<AuxiliaryDatabaseObject> getAuxiliaryDatabaseObjectExporter()
    • getTemporaryTableExporter

      public TemporaryTableExporter getTemporaryTableExporter()
    • getSupportedTemporaryTableKind

      public TemporaryTableKind getSupportedTemporaryTableKind()
      The kind of temporary tables that are supported on this database.
    • getTemporaryTableCreateOptions

      public String getTemporaryTableCreateOptions()
      An arbitrary SQL fragment appended to the end of the statement to create a temporary table, specifying dialect-specific options, ornull if there are no options to specify.
    • getTemporaryTableCreateCommand

      public String getTemporaryTableCreateCommand()
      The command to create a temporary table.
    • getTemporaryTableDropCommand

      public String getTemporaryTableDropCommand()
      The command to drop a temporary table.
    • getTemporaryTableTruncateCommand

      public String getTemporaryTableTruncateCommand()
      The command to truncate a temporary table.
    • getCreateTemporaryTableColumnAnnotation

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

      @Deprecated(since="7.0")public TempTableDdlTransactionHandling getTemporaryTableDdlTransactionHandling()
      Deprecated.
      No dialect currently overrides this, so it's obsolete
      The sort oftransaction handling to use when creating or dropping temporary tables.
    • getTemporaryTableAfterUseAction

      public AfterUseAction getTemporaryTableAfterUseAction()
      The action to take after finishing use of a temporary table.
    • getTemporaryTableBeforeUseAction

      public BeforeUseAction getTemporaryTableBeforeUseAction()
      The action to take before beginning use of a temporary table.
    • canCreateCatalog

      public boolean canCreateCatalog()
      Does this dialect support creating and dropping catalogs?
      Returns:
      True if the dialect supports catalog creation; false otherwise.
    • getCreateCatalogCommand

      public String[] getCreateCatalogCommand(String catalogName)
      Get the SQL command used to create the named catalog.
      Parameters:
      catalogName - The name of the catalog to be created.
      Returns:
      The creation commands
    • getDropCatalogCommand

      public String[] getDropCatalogCommand(String catalogName)
      Get the SQL command used to drop the named catalog.
      Parameters:
      catalogName - The name of the catalog to be dropped.
      Returns:
      The drop commands
    • canCreateSchema

      public boolean canCreateSchema()
      Does this dialect support creating and dropping schema?
      Returns:
      True if the dialect supports schema creation; false otherwise.
    • getCreateSchemaCommand

      public String[] getCreateSchemaCommand(String schemaName)
      Get the SQL command used to create the named schema.
      Parameters:
      schemaName - The name of the schema to be created.
      Returns:
      The creation commands
    • getDropSchemaCommand

      public String[] getDropSchemaCommand(String schemaName)
      Get the SQL command used to drop the named schema.
      Parameters:
      schemaName - The name of the schema to be dropped.
      Returns:
      The drop commands
    • getCurrentSchemaCommand

      @Deprecatedpublic String getCurrentSchemaCommand()
      Deprecated.
      Since Hibernate now baselines on Java 17,Connection.getSchema() is always available directly. Never used internally.
      Get the SQL command used to retrieve the current schema name.

      Works in conjunction withgetSchemaNameResolver(), unless the resultingSchemaNameResolver does not need this information. For example, a custom implementation might make use of the Java 1.7Connection.getSchema() method.

      Returns:
      The current schema retrieval SQL
    • getSchemaNameResolver

      public SchemaNameResolver getSchemaNameResolver()
      Get the strategy for determining the schema name from a JDBCConnection, usuallyDefaultSchemaNameResolver.
      Returns:
      The schema name resolver strategy
    • hasSelfReferentialForeignKeyBug

      public boolean hasSelfReferentialForeignKeyBug()
      Does the database/driver have bug in deleting rows that refer to other rows being deleted in the same query?
      Returns:
      true if the database/driver has this bug
      Implementation Note:
      The main culprit is MySQL.
    • getNullColumnString

      public String getNullColumnString()
      The keyword used to specify a nullable column, usually"", but sometimes" null".
    • getNullColumnString

      public String getNullColumnString(String columnType)
      The keyword used to specify a nullable column of the given SQL type.
      Implementation Note:
      The culprit istimestamp columns on MySQL.
    • quoteCollation

      public String quoteCollation(String collation)
      Quote the given collation name if necessary.
    • supportsCommentOn

      public boolean supportsCommentOn()
      Does this dialect support commenting on tables and columns?
      Returns:
      true if commenting is supported
    • getTableComment

      public String getTableComment(String comment)
      Get the comment into a form supported for table definition.
      Parameters:
      comment - The comment to apply
      Returns:
      The comment fragment
    • getUserDefinedTypeComment

      public String getUserDefinedTypeComment(String comment)
      Get the comment into a form supported for UDT definition.
      Parameters:
      comment - The comment to apply
      Returns:
      The comment fragment
    • getColumnComment

      public String getColumnComment(String comment)
      Get the comment into a form supported for column definition.
      Parameters:
      comment - The comment to apply
      Returns:
      The comment fragment
    • supportsColumnCheck

      public boolean supportsColumnCheck()
      Does this dialect support column-level check constraints?
      Returns:
      True if column-levelcheck constraints are supported; false otherwise.
    • supportsTableCheck

      public boolean supportsTableCheck()
      Does this dialect support table-level check constraints?
      Returns:
      True if table-levelcheck constraints are supported; false otherwise.
    • supportsCascadeDelete

      public boolean supportsCascadeDelete()
      Does this dialect supporton delete actions in foreign key definitions?
      Returns:
      true if the dialect does support theon delete clause.
    • getCascadeConstraintsString

      public String getCascadeConstraintsString()
      The keyword that specifies that adrop 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.
      Returns:
      The cascade drop keyword, if any, with a leading space
    • getColumnAliasExtractor

      public ColumnAliasExtractor getColumnAliasExtractor()
    • useInputStreamToInsertBlob

      public boolean useInputStreamToInsertBlob()
      Should LOBs (both BLOB and CLOB) be bound using stream operations, that is, usingPreparedStatement.setBinaryStream(int, java.io.InputStream, int)).
      Returns:
      True if BLOBs and CLOBs should be bound using stream operations.
      Since:
      3.2
    • useConnectionToCreateLob

      public boolean useConnectionToCreateLob()
      ShouldBlob,Clob, andNClob be created solely usingConnection.createBlob(),Connection.createClob(), andConnection.createNClob(), instead of allowing the use of our own implementations.
      Returns:
      True if these types should be instantiated usingConnection.
      Since:
      6.6
    • supportsOrdinalSelectItemReference

      public boolean supportsOrdinalSelectItemReference()
      Does this dialect support references to result variables (i.e, select items) by column positions (1-origin) as defined by the select clause?
      Returns:
      true if result variable references by column positions are supported; false otherwise.
      Since:
      6.0.0
    • getNullOrdering

      public NullOrdering getNullOrdering()
      Returns the default ordering of null.
      Since:
      6.0.0
    • supportsNullPrecedence

      public boolean supportsNullPrecedence()
      Does this dialect supportnulls first andnulls last?
    • requiresCastForConcatenatingNonStrings

      public boolean requiresCastForConcatenatingNonStrings()
      Does this dialect/database require casting of non-string arguments in theconcat() function?
      Returns:
      true if casting usingcast() is required
      Since:
      6.2
    • requiresFloatCastingOfIntegerDivision

      public boolean requiresFloatCastingOfIntegerDivision()
      Does this dialect require that integer divisions be wrapped incast() calls to tell the db parser the expected type.
      Returns:
      True if integer divisions must becast()ed to float
      Implementation Note:
      The culprit is HSQLDB.
    • supportsResultSetPositionQueryMethodsOnForwardOnlyCursor

      public boolean supportsResultSetPositionQueryMethodsOnForwardOnlyCursor()
      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 useResultSet.isAfterLast() andResultSet.isBeforeFirst(). Certain drivers do not allow access to these methods for forward-only cursors.

      Returns:
      True if methods likeResultSet.isAfterLast() andResultSet.isBeforeFirst() are supported for forward only cursors; false otherwise.
      Since:
      3.2
      API Note:
      This is highly driver dependent!
    • supportsCircularCascadeDeleteConstraints

      public boolean supportsCircularCascadeDeleteConstraints()
      Does this dialect support definition of cascade delete constraints which can cause circular chains?
      Returns:
      True if circular cascade delete constraints are supported; false otherwise.
      Since:
      3.2
    • supportsSubselectAsInPredicateLHS

      public boolean supportsSubselectAsInPredicateLHS()
      Is a subselect supported as the left-hand side (LHS) of anIN predicates?

      In other words, is syntax like<subquery> IN (1, 2, 3) supported?

      Returns:
      True if a subselect can appear as the LHS of an in-predicate; false otherwise.
      Since:
      3.2
    • supportsExpectedLobUsagePattern

      public boolean supportsExpectedLobUsagePattern()
      "Expected" LOB usage pattern is such that I can perform an insert via prepared statement with a parameter binding for a LOB value without crazy casting to JDBC driver implementation-specific classes.
      Returns:
      True if normal LOB usage patterns can be used with this driver; false if driver-specific hookiness needs to be applied.
      Since:
      3.2
      Implementation Note:
      Part of the trickiness here is the fact that this is largely driver-dependent. For example, Oracle (which is notoriously bad with LOB support in their drivers historically) actually does a pretty good job with LOB support as of the 10.2.x v ersions of their driver.
    • supportsLobValueChangePropagation

      public boolean supportsLobValueChangePropagation()
      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.
      Returns:
      True if the changes are propagated back to the database; false otherwise.
      Since:
      3.2
      Implementation Note:
      I do not know the correct answer currently for databases which (1) are not part of the cruise control process, or (2) do notsupportsExpectedLobUsagePattern().
    • supportsUnboundedLobLocatorMaterialization

      public boolean supportsUnboundedLobLocatorMaterialization()
      Is it supported to materialize a LOB locator outside the transaction in which it was created?
      Returns:
      True if unbounded materialization is supported; false otherwise.
      Since:
      3.2
      Implementation Note:
      Again, part of the trickiness here is the fact that this is largely driver-dependent. All database I have tested whichsupportsExpectedLobUsagePattern() also support the ability to materialize a LOB outside the owning transaction.
    • supportsSubqueryOnMutatingTable

      public boolean supportsSubqueryOnMutatingTable()
      Does this dialect support referencing the table being mutated in a subquery? The "table being mutated" is the table referenced in an update or delete query. And so can that table then be referenced in a subquery of the update or delete query?

      For example, would the following two syntaxes be supported:

      • delete from TABLE_A where ID not in (select ID from TABLE_A)
      • update TABLE_A set NON_ID = 'something' where ID in (select ID from TABLE_A)
      Returns:
      True if this dialect allows references the mutating table from a subquery.
    • supportsExistsInSelect

      public boolean supportsExistsInSelect()
      Does the dialect support an exists statement in the select clause?
      Returns:
      True if exists checks are allowed in the select clause; false otherwise.
    • doesReadCommittedCauseWritersToBlockReaders

      public boolean doesReadCommittedCauseWritersToBlockReaders()
      For the underlying database, isREAD_COMMITTED isolation implemented by forcing readers to wait for write locks to be released?
      Returns:
      True if writers block readers to achieveREAD_COMMITTED; false otherwise.
    • doesRepeatableReadCauseReadersToBlockWriters

      public boolean doesRepeatableReadCauseReadersToBlockWriters()
      For the underlying database, isREPEATABLE_READ isolation implemented by forcing writers to wait for read locks to be released?
      Returns:
      True if readers block writers to achieveREPEATABLE_READ; false otherwise.
    • supportsBindAsCallableArgument

      public boolean supportsBindAsCallableArgument()
      Does this dialect support using a JDBC bind parameter as an argument to a function or procedure call?
      Returns:
      Returnstrue if the database supports accepting bind params as args,false otherwise. The default istrue.
    • supportsTupleCounts

      public boolean supportsTupleCounts()
      Does this dialect supportcount(a,b)?
      Returns:
      True if the database supports counting tuples; false otherwise.
    • requiresParensForTupleCounts

      public boolean requiresParensForTupleCounts()
      IfsupportsTupleCounts() is true, does this dialect require the tuple to be delimited with parentheses?
      Returns:
      boolean
    • supportsTupleDistinctCounts

      public boolean supportsTupleDistinctCounts()
      Does this dialect supportcount(distinct a,b)?
      Returns:
      True if the database supports counting distinct tuples; false otherwise.
    • requiresParensForTupleDistinctCounts

      public boolean requiresParensForTupleDistinctCounts()
      IfsupportsTupleDistinctCounts() is true, does this dialect require the tuple to be delimited with parentheses?
      Returns:
      boolean
    • getInExpressionCountLimit

      public int getInExpressionCountLimit()
      Return the limit that the underlying database places on the number of elements in anIN predicate. If the database defines no such limits, simply return zero or a number smaller than zero.
      Returns:
      The limit, or a non-positive integer to indicate no limit.
    • getParameterCountLimit

      public int getParameterCountLimit()
      Return the limit that the underlying database places on the number of parameters that can be defined for a PreparedStatement. If the database defines no such limits, simply return zero or a number smaller than zero. By default, Dialect returns the same value asgetInExpressionCountLimit().
      Returns:
      The limit, or a non-positive integer to indicate no limit.
    • forceLobAsLastValue

      public boolean forceLobAsLastValue()
      Must LOB values occur last in inserts and updates?
      Returns:
      boolean True if Lob values should be last, false if it does not matter.
      Implementation Note:
      Oracle is the culprit here, see HHH-4635.
    • isEmptyStringTreatedAsNull

      public boolean isEmptyStringTreatedAsNull()
      Return whether the dialect considers an empty string value to be null.
      Returns:
      boolean True if an empty string is treated as null, false otherwise.
      Implementation Note:
      Once again, the culprit is Oracle.
    • useFollowOnLocking

      public boolean useFollowOnLocking(String sql,QueryOptions queryOptions)
      Some dialects have trouble applying pessimistic locking depending upon what other query options are specified (paging, ordering, etc). This method allows these dialects to request that locking be applied by subsequent selects.
      Returns:
      true indicates that the dialect requests that locking be applied by subsequent select;false (the default) indicates that locking should be applied to the main SQL statement.
      Since:
      6.0
    • getUniqueDelegate

      public UniqueDelegate getUniqueDelegate()
      Get theUniqueDelegate supported by this dialect
      Returns:
      The UniqueDelegate
    • getQueryHintString

      public String getQueryHintString(String query,List<String> hintList)
      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.

      Parameters:
      query - The query to which to apply the hint.
      hintList - The hints to apply
      Returns:
      The modified SQL
    • getQueryHintString

      public String getQueryHintString(String query,String hints)
      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.

      Parameters:
      query - The query to which to apply the hint.
      hints - The hints to apply
      Returns:
      The modified SQL
    • defaultScrollMode

      public ScrollMode defaultScrollMode()
      A defaultScrollMode to be used byQuery.scroll().
      Returns:
      the defaultScrollMode to use.
      API Note:
      Certain dialects support a subset ofScrollModes.
    • supportsOffsetInSubquery

      public boolean supportsOffsetInSubquery()
      Does this dialect supportoffset in subqueries?

      For example:

       select * from Table1 where col1 in (select col1 from Table2 order by col2 limit 1 offset 1)
      Returns:
      true if it does
    • supportsOrderByInSubquery

      public boolean supportsOrderByInSubquery()
      Does this dialect support theorder by clause in subqueries?

      For example:

       select * from Table1 where col1 in (select col1 from Table2 order by col2 limit 1)
      Returns:
      true if it does
    • supportsSubqueryInSelect

      public boolean supportsSubqueryInSelect()
      Does this dialect support subqueries in theselect clause?

      For example:

       select col1, (select col2 from Table2 where ...) from Table1
      Returns:
      true if it does
    • supportsInsertReturning

      public boolean supportsInsertReturning()
      Does this dialect fully support returning arbitrary generated column values after execution of aninsert statement, using native SQL syntax?

      Support for identity columns is insufficient here, we require something like:

      1. insert ... returning ..., or
      2. select from final table (insert ... ).
      Returns:
      true ifInsertReturningDelegate works for any sort of primary key column (not just identity columns), orfalse ifInsertReturningDelegate does not work, or only works for specialized identity/"autoincrement" columns
      Since:
      6.2
      See Also:
    • supportsInsertReturningRowId

      public boolean supportsInsertReturningRowId()
      Does this dialect supports returning theRowId column after execution of aninsert statement, using native SQL syntax?
      Returns:
      true is the dialect supports returning the rowid column
      Since:
      6.5
      See Also:
    • supportsUpdateReturning

      public boolean supportsUpdateReturning()
      Does this dialect fully support returning arbitrary generated column values after execution of anupdate statement, using native SQL syntax?

      Defaults to the value ofsupportsInsertReturning() but can be overridden to explicitly disable this for updates.

      Since:
      6.5
      See Also:
    • supportsInsertReturningGeneratedKeys

      public boolean supportsInsertReturningGeneratedKeys()
      Does this dialect fully support returning arbitrary generated column values after execution of aninsert statement, using the JDBC methodConnection.prepareStatement(String, String[]).

      Support for returning the generated value of an identity column via the JDBC methodConnection.prepareStatement(String, int) is insufficient here.

      Returns:
      true ifGetGeneratedKeysDelegate works for any sort of primary key column (not just identity columns), orfalse ifGetGeneratedKeysDelegate does not work, or only works for specialized identity/"autoincrement" columns
      Since:
      6.2
      See Also:
    • unquoteGetGeneratedKeys

      public boolean unquoteGetGeneratedKeys()
      Does this dialect require unquoting identifiers when passing them to theConnection.prepareStatement(String, String[]) JDBC method.
      See Also:
    • supportsFetchClause

      public boolean supportsFetchClause(FetchClauseType type)
      Does this dialect support the givenFETCH clause type.
      Parameters:
      type - The fetch clause type
      Returns:
      true if the underlying database supports the given fetch clause type,false otherwise. The default isfalse.
    • supportsWindowFunctions

      public boolean supportsWindowFunctions()
      Does this dialect support window functions likerow_number() over (..)?
      Returns:
      true if the underlying database supports window functions,false otherwise. The default isfalse.
    • supportsLateral

      public boolean supportsLateral()
      Does this dialect support the SQLlateral keyword or a proprietary alternative?
      Returns:
      true if the underlying database supports lateral,false otherwise. The default isfalse.
    • getCallableStatementSupport

      public CallableStatementSupport getCallableStatementSupport()
      TheCallableStatementSupport for this database. Does this database support returning cursors?
    • getNameQualifierSupport

      public NameQualifierSupport getNameQualifierSupport()
      Thesupport for qualified identifiers.

      By default, decide based onDatabaseMetaData.

      Returns:
      TheNameQualifierSupport, or null to useDatabaseMetaData.
    • getMultiKeyLoadSizingStrategy

      public MultiKeyLoadSizingStrategy getMultiKeyLoadSizingStrategy()
      The strategy used to determine the appropriate number of keys to load in a single SQL query with multi-key loading.
      See Also:
    • getBatchLoadSizingStrategy

      public MultiKeyLoadSizingStrategy getBatchLoadSizingStrategy()
      The strategy used to determine the appropriate number of keys to load in a single SQL query with batch-fetch loading.
      See Also:
      Implementation Note:
      By default, the same asgetMultiKeyLoadSizingStrategy()
    • isJdbcLogWarningsEnabledByDefault

      public boolean isJdbcLogWarningsEnabledByDefault()
      Is JDBC statement warning logging enabled by default?
      Since:
      5.1
    • augmentPhysicalTableTypes

      public void augmentPhysicalTableTypes(List<String> tableTypesList)
    • augmentRecognizedTableTypes

      public void augmentRecognizedTableTypes(List<String> tableTypesList)
    • supportsPartitionBy

      public boolean supportsPartitionBy()
      Does is dialect supportpartition by?
      Since:
      5.2
    • supportsNamedParameters

      public boolean supportsNamedParameters(@NullableDatabaseMetaData databaseMetaData) throwsSQLException
      Throws:
      SQLException - Accessing theDatabaseMetaData cause an exception. Just rethrow and Hibernate will handle it.
    • getNationalizationSupport

      public NationalizationSupport getNationalizationSupport()
      Determines whether this database requires the use of explicitly nationalized character (Unicode) data types.

      That is, whether the use ofTypes.NCHAR,Types.NVARCHAR, andTypes.NCLOB is required for nationalized character data.

    • supportsNationalizedMethods

      public boolean supportsNationalizedMethods()
      Returns:
      true if the driver implements these methods
    • getAggregateSupport

      public AggregateSupport getAggregateSupport()
      How does this dialect support aggregate types likeSqlTypes.STRUCT.
      Since:
      6.2
    • supportsUserDefinedTypes

      public boolean supportsUserDefinedTypes()
      Does the database support user defined types?
      Since:
      7.1
      See Also:
    • supportsStandardArrays

      public boolean supportsStandardArrays()
      Does this database have native support for ANSI SQL standard arrays which are expressed in terms of the element type name:integer array.
      Returns:
      boolean
      Since:
      6.1
      Implementation Note:
      Oracle doesn't have this; we must instead use named array types.
    • useArrayForMultiValuedParameters

      public boolean useArrayForMultiValuedParameters()
      Does this database prefer to use array types for multi-valued parameters.
      Returns:
      boolean
      Since:
      6.3
    • getArrayTypeName

      public String getArrayTypeName(String javaElementTypeName,String elementTypeName,Integer maxLength)
      The SQL type name for the array type with elements of the given type name.

      The ANSI-standard syntax isinteger array.

      Since:
      6.1
    • appendArrayLiteral

      public void appendArrayLiteral(SqlAppender appender,Object[] literal,JdbcLiteralFormatter<Object> elementFormatter,WrapperOptions wrapperOptions)
      Append an array literal with the given elements to the givenSqlAppender.
    • supportsDistinctFromPredicate

      public boolean supportsDistinctFromPredicate()
      Does this dialect support some kind ofdistinct from predicate?

      That is, does it support syntax like:

       ... where FIRST_NAME IS DISTINCT FROM LAST_NAME
      Returns:
      True if this SQL dialect is known to support some kind ofdistinct from predicate; false otherwise
      Since:
      6.1
    • getPreferredSqlTypeCodeForArray

      public int getPreferredSqlTypeCodeForArray()
      The JDBCtype code to use for mapping properties of basic Java array orCollection types.

      UsuallySqlTypes.ARRAY orSqlTypes.VARBINARY.

      Returns:
      one of the type codes defined bySqlTypes.
      Since:
      6.1
    • getPreferredSqlTypeCodeForBoolean

      public int getPreferredSqlTypeCodeForBoolean()
      The JDBCtype code to use for mapping properties of Java typeboolean.

      UsuallyTypes.BOOLEAN orTypes.BIT.

      Returns:
      one of the type codes defined byTypes.
    • supportsNonQueryWithCTE

      public boolean supportsNonQueryWithCTE()
      Does this dialect support insert, update, and delete statements with Common Table Expressions (CTEs)?
      Returns:
      true if non-query statements are supported with CTE
    • supportsRecursiveCTE

      public boolean supportsRecursiveCTE()
      Does this dialect/database support recursive CTEs?
      Returns:
      true if recursive CTEs are supported
      Since:
      6.2
    • supportsConflictClauseForInsertCTE

      public boolean supportsConflictClauseForInsertCTE()
      Does this dialect support theconflict clause for insert statements that appear in a CTE?
      Returns:
      true ifconflict clause is supported
      Since:
      6.5
    • supportsValuesList

      public boolean supportsValuesList()
      Does this dialect supportvalues lists of formVALUES (1), (2), (3)?
      Returns:
      true ifvalues list are supported
    • supportsValuesListForInsert

      public boolean supportsValuesListForInsert()
      Does this dialect supportvalues lists of formVALUES (1), (2), (3) in insert statements?
      Returns:
      true ifvalues list are allowed in insert statements
    • supportsFromClauseInUpdate

      public boolean supportsFromClauseInUpdate()
      Does this dialect support thefrom clause for update statements?
      Returns:
      true iffrom clause is supported
      Since:
      6.5
    • supportsSkipLocked

      public boolean supportsSkipLocked()
      Does this dialect supportSKIP_LOCKED timeout.
      Returns:
      true if SKIP_LOCKED is supported
    • supportsNoWait

      public boolean supportsNoWait()
      Does this dialect supportNO_WAIT timeout.
      Returns:
      true ifNO_WAIT is supported
    • supportsWait

      public boolean supportsWait()
      Does this dialect supportWAIT timeout.
      Returns:
      true ifWAIT is supported
    • appendLiteral

      public void appendLiteral(SqlAppender appender,String literal)
      Append a literal string to the givenSqlAppender.
      API Note:
      Needed because MySQL has nonstandard escape characters
    • appendBinaryLiteral

      public void appendBinaryLiteral(SqlAppender appender, byte[] bytes)
      Append a binary literal to the givenSqlAppender.
    • supportsJdbcConnectionLobCreation

      public boolean supportsJdbcConnectionLobCreation(DatabaseMetaData databaseMetaData)
      Check whether the JDBCConnection supports creating LOBs viaConnection.createBlob(),Connection.createNClob(), orConnection.createClob().
      Parameters:
      databaseMetaData - JDBCDatabaseMetaData which can be used if LOB creation is supported only starting from a given driver version
      Returns:
      true if LOBs can be created via the JDBC Connection.
    • supportsMaterializedLobAccess

      public boolean supportsMaterializedLobAccess()
      Returns:
      true if LOBs can be set with the materialized APIs.
      Since:
      6.2
    • useMaterializedLobWhenCapacityExceeded

      public boolean useMaterializedLobWhenCapacityExceeded()
      Whether to switch:
      Returns:
      true if materialized LOBs should be used for capacity exceeding types.
      Since:
      6.2
    • addSqlHintOrComment

      public String addSqlHintOrComment(String sql,QueryOptions queryOptions, boolean commentsEnabled)
      Modify the SQL, adding hints or comments, if necessary.
      See Also:
    • addUseIndexQueryHint

      public static String addUseIndexQueryHint(String query,String hints)
      Adds anINDEX query hint as follows:
       SELECT * FROM TEST USE INDEX (hint1, hint2) WHERE X=1
      Since:
      7.0
    • prependComment

      protected String prependComment(String sql,String comment)
      Prepend a comment to the given SQL fragment.
    • escapeComment

      public static String escapeComment(String comment)
      Perform necessary character escaping on the text of the comment.
    • getHqlTranslator

      public HqlTranslator getHqlTranslator()
      Return anHqlTranslator specific to this dialect, ornull to use thestandard translator.

      Note thatQueryEngineOptions.getCustomHqlTranslator() has higher precedence since it comes directly from the user config.

      See Also:
    • getSqmTranslatorFactory

      public SqmTranslatorFactory getSqmTranslatorFactory()
      Return aSqmTranslatorFactory specific to this dialect, ornull to use thestandard translator.

      Note thatQueryEngineOptions.getCustomSqmTranslatorFactory() has higher precedence since it comes directly from the user config.

      See Also:
    • getSqlAstTranslatorFactory

      public SqlAstTranslatorFactory getSqlAstTranslatorFactory()
      Return aSqlAstTranslatorFactory specific to this dialect, ornull to use thestandard translator.
      See Also:
    • getGroupBySelectItemReferenceStrategy

      public SelectItemReferenceStrategy getGroupBySelectItemReferenceStrategy()
      Determine how selected items are referenced in thegroup by clause.
    • getSizeStrategy

      public Dialect.SizeStrategy getSizeStrategy()
      A customDialect.SizeStrategy for column types.
    • getMaxVarcharLength

      public int getMaxVarcharLength()
      The biggest size value that can be supplied as argument to aTypes.VARCHAR-like type.

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

    • getMaxNVarcharLength

      public int getMaxNVarcharLength()
      The biggest size value that can be supplied as argument to aTypes.NVARCHAR-like type.

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

    • getMaxVarbinaryLength

      public int getMaxVarbinaryLength()
      The biggest size value that can be supplied as argument to aTypes.VARBINARY-like type.

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

    • getMaxVarcharCapacity

      public int getMaxVarcharCapacity()
      The longest possible length of aTypes.VARCHAR-like column.

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

    • getMaxNVarcharCapacity

      public int getMaxNVarcharCapacity()
      The longest possible length of aTypes.NVARCHAR-like column.

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

    • getMaxVarbinaryCapacity

      public int getMaxVarbinaryCapacity()
      The longest possible length of aTypes.VARBINARY-like column.

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

    • getDefaultLobLength

      public long getDefaultLobLength()
      This is the default length for a generated column of typeBLOB orCLOB mapped toBlob orClob, if LOB columns have a length in this dialect.
      Returns:
      1048576L by default
      See Also:
    • getDefaultDecimalPrecision

      public int getDefaultDecimalPrecision()
      This is the default precision for a generated column of exact numeric typeDECIMAL orNUMERIC mapped to aBigInteger orBigDecimal.

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

      Returns:
      the default precision, in decimal digits
      See Also:
    • getDefaultTimestampPrecision

      public int getDefaultTimestampPrecision()
      This is the default precision for a generated column of typeTIMESTAMP mapped to aTimestamp orLocalDateTime.

      Usually 6 (microseconds) or 3 (milliseconds).

      Returns:
      the default precision, in decimal digits, of the fractional seconds field
      See Also:
    • getDefaultIntervalSecondScale

      public int getDefaultIntervalSecondScale()
      This is the default scale for a generated column of typeINTERVAL SECOND mapped to aDuration.

      Usually 9 (nanoseconds) or 6 (microseconds).

      Returns:
      the default scale, in decimal digits, of the fractional seconds field
      See Also:
    • doesRoundTemporalOnOverflow

      public boolean doesRoundTemporalOnOverflow()
      Does this dialect round a temporal when converting from a precision higher to a lower one?
      Returns:
      true if rounding is applied, false if truncation is applied
    • getFloatPrecision

      public int getFloatPrecision()
      This is the default precision for a generated column mapped to a JavaFloat orfloat. That is, a value representing "single precision".

      Usually 24 binary digits, at least for databases with a conventional interpretation of the ANSI SQL specification.

      Returns:
      a value representing "single precision", usually in binary digits, but sometimes in decimal digits
    • getDoublePrecision

      public int getDoublePrecision()
      This is the default precision for a generated column mapped to a JavaDouble ordouble. That is, a value representing "double precision".

      Usually 53 binary digits, at least for databases with a conventional interpretation of the ANSI SQL specification.

      Returns:
      a value representing "double precision", usually in binary digits, but sometimes in decimal digits
    • getFractionalSecondPrecisionInNanos

      public long getFractionalSecondPrecisionInNanos()
      The "native" precision for arithmetic with datetimes and day-to-second durations. Datetime differences will be calculated with this precision except when a precision is explicitly specified as aTemporalUnit.

      Usually 1 (nanoseconds), 1_000 (microseconds), or 1_000_000 (milliseconds).

      Returns:
      the precision, specified as a quantity of nanoseconds
      See Also:
      Implementation Note:
      Getting this right is very important. It would be great if all platforms supported datetime arithmetic with nanosecond precision, since that is how we representDuration. But they don't, and we don't want to fill up the SQL expression with many conversions to/from nanoseconds. (Not to mention the problems with numeric overflow that this sometimes causes.) So we need to pick the right value here, and implementtimestampaddPattern(org.hibernate.query.common.TemporalUnit, jakarta.persistence.TemporalType, org.hibernate.query.sqm.IntervalType) andtimestampdiffPattern(org.hibernate.query.common.TemporalUnit, jakarta.persistence.TemporalType, jakarta.persistence.TemporalType) consistent with our choice.
    • supportsBitType

      public boolean supportsBitType()
      Does this dialect have a true SQLBIT type with just two values (0 and 1) or, even better, a proper SQLBOOLEAN type, or doesTypes.BIT get mapped to a numeric type with more than two values?
      Returns:
      true if there is aBIT orBOOLEAN type
    • supportsPredicateAsExpression

      protected boolean supportsPredicateAsExpression()
      Whether a predicate likea > 0 can appear in an expression context, for example, in aselect list item.
    • getLockRowIdentifier

      public RowLockStrategy getLockRowIdentifier(LockMode lockMode)
      Obtain aRowLockStrategy for the givenLockMode.
    • generatedAs

      public String generatedAs(String generatedAs)
      Thegenerated as clause, or similar, for generated column declarations in DDL statements.
      Parameters:
      generatedAs - a SQL expression used to generate the column value
      Returns:
      Thegenerated as clause containing the given expression
    • hasDataTypeBeforeGeneratedAs

      public boolean hasDataTypeBeforeGeneratedAs()
      Is an explicit column type required forgenerated as columns?
      Returns:
      true if an explicit type is required
    • createOptionalTableUpdateOperation

      public MutationOperation createOptionalTableUpdateOperation(EntityMutationTarget mutationTarget,OptionalTableUpdate optionalTableUpdate,SessionFactoryImplementor factory)
      Create aMutationOperation for a updating an optional table
    • canDisableConstraints

      public boolean canDisableConstraints()
      Is there some way to disable foreign key constraint checking while truncating tables? (If there's no way to do it, and if we can'tbatch truncate, we must drop and recreate the constraints instead.)
      Returns:
      true if there is some way to do it
      See Also:
    • getDisableConstraintsStatement

      public String getDisableConstraintsStatement()
      A SQL statement that temporarily disables foreign key constraint checking for all tables.
    • getEnableConstraintsStatement

      public String getEnableConstraintsStatement()
      A SQL statement that re-enables foreign key constraint checking for all tables.
    • getDisableConstraintStatement

      public String getDisableConstraintStatement(String tableName,String name)
      A SQL statement that temporarily disables checking of the given foreign key constraint.
      Parameters:
      tableName - the name of the table
      name - the name of the constraint
    • getEnableConstraintStatement

      public String getEnableConstraintStatement(String tableName,String name)
      A SQL statement that re-enables checking of the given foreign key constraint.
      Parameters:
      tableName - the name of the table
      name - the name of the constraint
    • canBatchTruncate

      public boolean canBatchTruncate()
      Does thetruncate table statement accept multiple tables?
      Returns:
      true if it does
    • getTruncateTableStatements

      public String[] getTruncateTableStatements(String[] tableNames)
      A SQL statement or statements that truncate the given tables.
      Parameters:
      tableNames - the names of the tables
    • getTruncateTableStatement

      public String getTruncateTableStatement(String tableName)
      A SQL statement that truncates the given table.
      Parameters:
      tableName - the name of the table
    • getNativeParameterMarkerStrategy

      public ParameterMarkerStrategy getNativeParameterMarkerStrategy()
      Support for native parameter markers.

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

      Returns:
      May returnnull to indicate that the JDBCstandard strategy should be used
    • supportsBatchUpdates

      public Boolean supportsBatchUpdates()
      Whether this Dialect supportsbatch updates.
      Returns:
      true indicates it does;false indicates it does not;null indicates it might and that database-metadata should be consulted.
      See Also:
    • supportsRefCursors

      public Boolean supportsRefCursors()
      Whether this Dialect supports the JDBCTypes.REF_CURSOR type.
      Returns:
      true indicates it does;false indicates it does not;null indicates it might and that database-metadata should be consulted
      See Also:
    • getDefaultOrdinalityColumnName

      public @NullableString getDefaultOrdinalityColumnName()
      Returns the default name of the ordinality column for a set-returning function if it supports that, otherwise returnsnull.
    • appendDatetimeFormat

      public void appendDatetimeFormat(SqlAppender appender,String format)
      Translate the given datetime format string from the pattern language defined by Java'sDateTimeFormatter to whatever pattern language is understood by the native datetime formatting function for this database (often theto_char() function).

      Since it's never possible to translate every pattern letter sequences understood byDateTimeFormatter, 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.

    • translateExtractField

      public String translateExtractField(TemporalUnit unit)
      Return the name used to identify the given field as an argument to theextract() function, or of this dialect'sequivalent function.

      This method does not need to handleTemporalUnit.NANOSECOND,TemporalUnit.NATIVE,TemporalUnit.OFFSET,TemporalUnit.DATE,TemporalUnit.TIME,TemporalUnit.WEEK_OF_YEAR, norTemporalUnit.WEEK_OF_MONTH, which are already desugared byExtractFunction.

    • translateDurationField

      public String translateDurationField(TemporalUnit unit)
      Return the name used to identify the given unit of duration as an argument to#timestampadd() or#timestampdiff(), or of this dialect'sequivalentfunctions.

      This method does not need to handleTemporalUnit.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, norTemporalUnit.WEEK_OF_MONTH, which are not units of duration.

    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender,TemporalAccessor temporalAccessor,TemporalType precision,TimeZone jdbcTimeZone)
      Append a datetime literal representing the givenjava.time value to the givenSqlAppender.
    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender,Date date,TemporalType precision,TimeZone jdbcTimeZone)
      Append a datetime literal representing the givenDate value to the givenSqlAppender.
    • appendDateTimeLiteral

      public void appendDateTimeLiteral(SqlAppender appender,Calendar calendar,TemporalType precision,TimeZone jdbcTimeZone)
      Append a datetime literal representing the givenCalendar value to the givenSqlAppender.
    • appendIntervalLiteral

      public void appendIntervalLiteral(SqlAppender appender,Duration literal)
      Append a literal SQLinterval representing the given JavaDuration.
    • appendIntervalLiteral

      public void appendIntervalLiteral(SqlAppender appender,TemporalAmount literal)
      Append a literal SQLinterval representing the given JavaTemporalAmount.
    • appendUUIDLiteral

      public void appendUUIDLiteral(SqlAppender appender,UUID literal)
      Append a literal SQLuuid representing the given JavaUUID.

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

    • supportsTemporalLiteralOffset

      public boolean supportsTemporalLiteralOffset()
      Does this dialect supports timezone offsets in temporal literals.
    • getTimeZoneSupport

      public TimeZoneSupport getTimeZoneSupport()
      How the dialect supports time zone types likeTypes.TIMESTAMP_WITH_TIMEZONE.
    • rowId

      public String rowId(String rowId)
      The name of arowid-like pseudo-column which acts as a high-performance row locator, or null if this dialect has no such pseudo-column.

      If therowid-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.

      Parameters:
      rowId - the name specified byRowId.value(), which is ignored ifgetRowIdColumnString(java.lang.String) is not overridden
    • rowIdSqlType

      public int rowIdSqlType()
      The JDBC type code of therowid-like pseudo-column which acts as a high-performance row locator.
      Returns:
      Types.ROWID by default
    • getRowIdColumnString

      public String getRowIdColumnString(String rowId)
      If this dialect requires that therowid column be declared explicitly, return the DDL column definition.
      Returns:
      the DDL column definition, ornull if therowid is an implicit pseudo-column
    • getDmlTargetColumnQualifierSupport

      public DmlTargetColumnQualifierSupport getDmlTargetColumnQualifierSupport()
      Get the minimumDmlTargetColumnQualifierSupport required by this dialect.
      Returns:
      the column qualifier support required by this dialect
    • getFunctionalDependencyAnalysisSupport

      public FunctionalDependencyAnalysisSupport getFunctionalDependencyAnalysisSupport()
      Get this dialect's level of support for primary key functional dependency analysis withinGROUP BY andORDER BY clauses.
    • getCheckConstraintString

      public String getCheckConstraintString(CheckConstraint checkConstraint)
      Render a SQL check condition forCheckConstraint
      Returns:
      a SQL expression representing theCheckConstraint
    • appendCheckConstraintOptions

      public String appendCheckConstraintOptions(CheckConstraint checkConstraint,String sqlCheckConstraint)
      Append theCheckConstraint options to SQL check sqlCheckConstraint
      Parameters:
      checkConstraint - an instance ofCheckConstraint
      sqlCheckConstraint - the SQL to append theCheckConstraint options
      Returns:
      a SQL expression
    • supportsTableOptions

      public boolean supportsTableOptions()
      Does this dialect support appending table options SQL fragment at the end of the SQL Table creation statement?
      Returns:
      true indicates it does;false indicates it does not;
    • supportsBindingNullSqlTypeForSetNull

      public boolean supportsBindingNullSqlTypeForSetNull()
      Does this dialect support bindingTypes.NULL forPreparedStatement.setNull(int, int)? if it does, then call ofPreparedStatement.getParameterMetaData() could be eliminated for better performance.
      Returns:
      true indicates it does;false indicates it does not;
      See Also:
    • supportsBindingNullForSetObject

      public boolean supportsBindingNullForSetObject()
      Does this dialect support bindingnull forPreparedStatement.setObject(int, Object)? if it does, then call ofPreparedStatement.getParameterMetaData() could be eliminated for better performance.
      Returns:
      true indicates it does;false indicates it does not;
      See Also:
    • supportsFilterClause

      public boolean supportsFilterClause()
      Whether the FILTER clause for aggregate functions is supported.
    • supportsRowConstructor

      public boolean supportsRowConstructor()
      Whether the SQL row constructor is supported.
    • supportsArrayConstructor

      public boolean supportsArrayConstructor()
      Whether the SQL array constructor is supported.
    • supportsDuplicateSelectItemsInQueryGroup

      public boolean supportsDuplicateSelectItemsInQueryGroup()
    • supportsIntersect

      public boolean supportsIntersect()
    • supportsJoinInMutationStatementSubquery

      public boolean supportsJoinInMutationStatementSubquery()
      If the dialect supports using joins in mutation statement subquery that could also use columns from the mutation target table
    • supportsJoinsInDelete

      public boolean supportsJoinsInDelete()
    • supportsNestedSubqueryCorrelation

      public boolean supportsNestedSubqueryCorrelation()
    • supportsRecursiveCycleClause

      public boolean supportsRecursiveCycleClause()
      Whether the SQL cycle clause is supported, which can be used for recursive CTEs.
    • supportsRecursiveCycleUsingClause

      public boolean supportsRecursiveCycleUsingClause()
      Whether the SQL cycle clause supports the using sub-clause.
    • supportsRecursiveSearchClause

      public boolean supportsRecursiveSearchClause()
      Whether the SQL search clause is supported, which can be used for recursive CTEs.
    • supportsSimpleQueryGrouping

      public boolean supportsSimpleQueryGrouping()
    • supportsRowValueConstructorSyntax

      public boolean supportsRowValueConstructorSyntax()
      Is this dialect known to support what ANSI-SQL terms "row value constructor" syntax; sometimes called tuple syntax.

      Basically, does it support syntax like... where (FIRST_NAME, LAST_NAME) = ('Steve', 'Ebersole') ...

      Returns:
      True if this SQL dialect is known to support "row value constructor" syntax; false otherwise.
    • supportsRowValueConstructorGtLtSyntax

      public boolean supportsRowValueConstructorGtLtSyntax()
      Is this dialect known to support what ANSI-SQL terms "row value constructor" syntax; sometimes called tuple syntax with<,>, and operators.

      Basically, does it support syntax like... where (FIRST_NAME, LAST_NAME) &lt; ('Steve', 'Ebersole') ...

      Returns:
      True if this SQL dialect is known to support "row value constructor" syntax with relational comparison operators; false otherwise.
    • supportsRowValueConstructorDistinctFromSyntax

      public boolean supportsRowValueConstructorDistinctFromSyntax()
      Is this dialect known to support what ANSI-SQL terms "row value constructor" syntax; sometimes called tuple syntax withis distinct from andis not distinct from operators.

      Basically, does it support syntax like... where (FIRST_NAME, LAST_NAME) is distinct from ('Steve', 'Ebersole') ...

      Returns:
      True if this SQL dialect is known to support "row value constructor" syntax with distinct from comparison operators; false otherwise.
    • supportsWithClause

      public boolean supportsWithClause()
      Whether the SQL with clause is supported.
    • supportsWithClauseInSubquery

      public boolean supportsWithClauseInSubquery()
      Whether the SQL with clause is supported within a subquery.
    • supportsNestedWithClause

      public boolean supportsNestedWithClause()
      Whether the SQL with clause is supported within a CTE.
    • supportsRowValueConstructorSyntaxInQuantifiedPredicates

      public boolean supportsRowValueConstructorSyntaxInQuantifiedPredicates()
      Is this dialect known to support what ANSI-SQL terms "row value constructor" syntax; sometimes called tuple syntax with quantified predicates.

      Basically, does it support syntax like... where (FIRST_NAME, LAST_NAME) = ALL (select ...) ...

      Returns:
      True if this SQL dialect is known to support "row value constructor" syntax with quantified predicates; false otherwise.
    • supportsRowValueConstructorSyntaxInInList

      public boolean supportsRowValueConstructorSyntaxInInList()
      If the dialect supportsrow values, does it offer such support in IN lists as well?

      For example,... where (FIRST_NAME, LAST_NAME) IN ( (?, ?), (?, ?) ) ...

      Returns:
      True if this SQL dialect is known to support "row value constructor" syntax in the IN list; false otherwise.
    • supportsRowValueConstructorSyntaxInInSubQuery

      public boolean supportsRowValueConstructorSyntaxInInSubQuery()
      If the dialect supportsrow values, does it offer such support in IN subqueries as well?

      For example,... where (FIRST_NAME, LAST_NAME) IN ( select ... ) ...

      Returns:
      True if this SQL dialect is known to support "row value constructor" syntax in the IN subqueries; false otherwise.