Class SQLServerDialect
- java.lang.Object
-
- org.hibernate.dialect.Dialect
-
- org.hibernate.dialect.AbstractTransactSQLDialect
-
- org.hibernate.dialect.SQLServerDialect
-
- All Implemented Interfaces:
ConversionContext
- Direct Known Subclasses:
SQLServer2005Dialect
,SQLServer2008Dialect
,SQLServer2012Dialect
,SQLServer2016Dialect
public class SQLServerDialect extends AbstractTransactSQLDialect
A dialect for Microsoft SQL Server 2000 and above
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.hibernate.dialect.Dialect
Dialect.SizeStrategy, Dialect.SizeStrategyImpl
-
-
Field Summary
-
Fields inherited from class org.hibernate.dialect.Dialect
CLOSED_QUOTE, LEGACY_LOB_MERGE_STRATEGY, LOG_BASE2OF10, NEW_LOCATOR_LOB_MERGE_STRATEGY, QUOTE, STANDARD_DEFAULT_BATCH_LOAD_SIZING_STRATEGY, STREAM_XFER_LOB_MERGE_STRATEGY
-
-
Constructor Summary
Constructors Constructor Description SQLServerDialect()
SQLServerDialect(DatabaseVersion version)
SQLServerDialect(DialectResolutionInfo info)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
appendBinaryLiteral(SqlAppender appender, byte[] bytes)
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).void
appendDateTimeLiteral(SqlAppender appender, TemporalAccessor temporalAccessor, jakarta.persistence.TemporalType precision, TimeZone jdbcTimeZone)
void
appendDateTimeLiteral(SqlAppender appender, Calendar calendar, jakarta.persistence.TemporalType precision, TimeZone jdbcTimeZone)
void
appendDateTimeLiteral(SqlAppender appender, Date date, jakarta.persistence.TemporalType precision, TimeZone jdbcTimeZone)
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 the from clause.void
appendUUIDLiteral(SqlAppender appender, UUID literal)
IdentifierHelper
buildIdentifierHelper(IdentifierHelperBuilder builder, DatabaseMetaData dbMetaData)
Build the IdentifierHelper indicated by this Dialect for handling identifier conversions.SQLExceptionConversionDelegate
buildSQLExceptionConversionDelegate()
Build an instance of aSQLExceptionConversionDelegate
for interpreting dialect-specific error or SQLState codes.String
castPattern(CastType from, CastType to)
Obtain a pattern for the SQL equivalent to acast()
function call.protected String
castType(int sqlTypeCode)
char
closeQuote()
The character specific to this dialect used to close a quoted identifier.protected String
columnType(int sqlTypeCode)
void
contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry)
Allows the Dialect to contribute additional typesString
currentDate()
Translation of the HQL/JPQLcurrent_date
function, which maps to the Java typejava.sql.Date
, and of the HQLlocal_date
function which maps to the Java typejava.sql.LocalDate
.String
currentTime()
Translation of the HQL/JPQLcurrent_time
function, which maps to the Java typejava.sql.Time
which is a time with no time zone.String
currentTimestamp()
Translation of the HQL/JPQLcurrent_timestamp
function, which maps to the Java typejava.sql.Timestamp
which is a datetime with no time zone.String
currentTimestampWithTimeZone()
Translation of the HQLoffset_datetime
function, which maps to the Java typejava.time.OffsetDateTime
which is a datetime with a time zone.static Replacer
datetimeFormat(String format)
boolean
doesReadCommittedCauseWritersToBlockReaders()
For the underlying database, is READ_COMMITTED isolation implemented by forcing readers to wait for write locks to be released?boolean
doesRepeatableReadCauseReadersToBlockWriters()
For the underlying database, is REPEATABLE_READ isolation implemented by forcing writers to wait for read locks to be released?String
extractPattern(TemporalUnit unit)
Obtain a pattern for the SQL equivalent to anextract()
function call.String
generatedAs(String generatedAs)
String
getCreateTemporaryTableColumnAnnotation(int sqlTypeCode)
Annotation to be appended to the end of each COLUMN clause for temporary tables.String
getCurrentSchemaCommand()
Get the SQL command used to retrieve the current schema name.String
getCurrentTimestampSelectString()
The current_timestamp is more accurate, but only known to be supported in SQL Server 7.0 and later and Sybase not known to support it at alllong
getDefaultLobLength()
int
getDefaultTimestampPrecision()
SQL server supports up to 7 decimal digits of fractional second precision in a datetime2, but since its duration arithmetic functions try to fit durations into an int, which is impossible with such high precision, so default to generatingdatetime2(3)
columns.String[]
getDropSchemaCommand(String schemaName)
Get the SQL command used to drop the named schemalong
getFractionalSecondPrecisionInNanos()
SQL server supports up to 7 decimal digits of fractional second precision in a datetime2, but unfortunately its duration arithmetic functions have a nasty habit of overflowing.IdentityColumnSupport
getIdentityColumnSupport()
Get the appropriateIdentityColumnSupport
int
getInExpressionCountLimit()
Return the limit that the underlying database places on the number of elements in anIN
predicate.LimitHandler
getLimitHandler()
Returns aLimitHandler
that implements support forQuery.setMaxResults(int)
andQuery.setFirstResult(int)
for this dialect.int
getMaxIdentifierLength()
What is the maximum identifier length supported by the dialect?int
getMaxNVarcharLength()
The longest possible length of aTypes.NVARCHAR
-like column.int
getMaxVarcharLength()
The longest possible length of aTypes.VARCHAR
-like column.NameQualifierSupport
getNameQualifierSupport()
By default interpret this based on DatabaseMetaData.String
getNoColumnsInsertString()
The fragment used to insert a row without specifying any column values.String
getQueryHintString(String sql, String hints)
Apply a hint to the query.String
getQuerySequencesString()
Get the select command used retrieve the names of all sequences.Exporter<Sequence>
getSequenceExporter()
SequenceSupport
getSequenceSupport()
SqlAstTranslatorFactory
getSqlAstTranslatorFactory()
Return an SqlAstTranslatorFactory specific for the Dialect.TimeZoneSupport
getTimeZoneSupport()
How the Dialect supports time zone types likeTypes.TIMESTAMP_WITH_TIMEZONE
.boolean
hasDataTypeBeforeGeneratedAs()
void
initializeFunctionRegistry(QueryEngine queryEngine)
Initialize the given registry with any dialect-specific functions.char
openQuote()
The character specific to this dialect used to begin a quoted identifier.protected void
registerColumnTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry)
Register ANSI-standard column types using the length limits defined byDialect.getMaxVarcharLength()
,Dialect.getMaxNVarcharLength()
, andDialect.getMaxVarbinaryLength()
.protected void
registerDefaultKeywords()
boolean
supportsCircularCascadeDeleteConstraints()
Does this dialect support definition of cascade delete constraints which can cause circular chains?boolean
supportsFetchClause(FetchClauseType type)
Does this dialect support the given fetch clause type.boolean
supportsIfExistsBeforeConstraintName()
For dropping a constraint with an "alter table", can the phrase "if exists" be applied before the constraint name?boolean
supportsIfExistsBeforeTableName()
For dropping a table, can the phrase "if exists" be applied before the table name?boolean
supportsLateral()
Does this dialect support the SQL lateral keyword or a proprietary alternative?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...boolean
supportsNamedParameters(DatabaseMetaData databaseMetaData)
Override the DatabaseMetaData#supportsNamedParameters()boolean
supportsNonQueryWithCTE()
Does this dialect/database support non-query statements (e.g.boolean
supportsNoWait()
Does this dialect/database support NO_WAIT timeout.boolean
supportsNullPrecedence()
boolean
supportsOffsetInSubquery()
Does this dialect support offset in subqueries? Ex: select * from Table1 where col1 in (select col1 from Table2 order by col2 limit 1 offset 1)boolean
supportsResultSetPositionQueryMethodsOnForwardOnlyCursor()
Does this dialect support asking the result set its positioning information on forward only cursors.boolean
supportsSkipLocked()
Does this dialect/database support SKIP_LOCKED timeout.boolean
supportsValuesList()
Does this dialect/database support VALUES list (e.g.boolean
supportsWait()
Does this dialect/database support WAIT timeout.boolean
supportsWindowFunctions()
Does this dialect support window functions likerow_number() over (..)
?String
timestampaddPattern(TemporalUnit unit, jakarta.persistence.TemporalType temporalType, IntervalType intervalType)
Obtain a pattern for the SQL equivalent to atimestampadd()
function call.String
timestampdiffPattern(TemporalUnit unit, jakarta.persistence.TemporalType fromTemporalType, jakarta.persistence.TemporalType toTemporalType)
Obtain a pattern for the SQL equivalent to atimestampdiff()
function call.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's equivalent functions.String
translateExtractField(TemporalUnit unit)
Return the name used to identify the given field as an argument to theextract()
function, or of this dialect's equivalent function.-
Methods inherited from class org.hibernate.dialect.AbstractTransactSQLDialect
applyLocksToSql, getAddColumnString, getDefaultStatementBatchSize, getFallbackSqmInsertStrategy, getFallbackSqmMutationStrategy, getForUpdateString, getNullOrdering, getPreferredSqlTypeCodeForBoolean, getResultSet, getSelectGUIDString, getSupportedTemporaryTableKind, getTemporaryTableAfterUseAction, getTemporaryTableBeforeUseAction, getTemporaryTableCreateCommand, getWriteRowLockStrategy, isCurrentTimestampSelectStringCallable, qualifyIndexName, registerResultSetOutParameter, replaceLtrimRtrim, resolveSqlTypeDescriptor, supportsCurrentTimestampSelection, supportsExistsInSelect, supportsPartitionBy, supportsTupleDistinctCounts, trimPattern
-
Methods inherited from class org.hibernate.dialect.Dialect
addSqlHintOrComment, appendArrayLiteral, appendBooleanValueString, appendIntervalLiteral, appendLiteral, augmentPhysicalTableTypes, augmentRecognizedTableTypes, canCreateCatalog, canCreateSchema, checkVersion, currentLocalTime, currentLocalTimestamp, defaultScrollMode, dropConstraints, equivalentTypes, escapeComment, forceLobAsLastValue, getAddColumnSuffixString, getAddForeignKeyConstraintString, getAddForeignKeyConstraintString, getAddPrimaryKeyConstraintString, getAlterTableString, getArrayTypeName, getAuxiliaryDatabaseObjectExporter, getBooleanCheckCondition, getCallableStatementSupport, getCascadeConstraintsString, getCaseInsensitiveLike, getColumnAliasExtractor, getColumnComment, getCreateCatalogCommand, getCreateMultisetTableString, getCreateSchemaCommand, getCreateTableString, getDefaultBatchLoadSizingStrategy, getDefaultDecimalPrecision, getDefaultNonContextualLobCreation, getDefaultProperties, getDefaultUseGetGeneratedKeys, getDoublePrecision, getDropCatalogCommand, getDropForeignKeyString, getDropTableString, getEnumCheckCondition, getFloatPrecision, getForeignKeyExporter, getForUpdateNowaitString, getForUpdateNowaitString, getForUpdateSkipLockedString, getForUpdateSkipLockedString, getForUpdateString, getForUpdateString, getForUpdateString, getForUpdateString, getGroupBySelectItemReferenceStrategy, getHqlTranslator, getIndexExporter, getKeywords, getLobMergeStrategy, getLockingStrategy, getLockRowIdentifier, getLowercaseFunction, getMaxAliasLength, getMaxVarbinaryLength, getMinimumSupportedVersion, getNationalizationSupport, getNativeIdentifierGeneratorStrategy, getNullColumnString, getNullColumnString, getPreferredSqlTypeCodeForArray, getQueryHintString, getReadLockString, getReadLockString, getReadRowLockStrategy, getResultSet, getResultSet, getSchemaNameResolver, getSelectClauseNullString, getSequenceInformationExtractor, getSizeStrategy, getSqmTranslatorFactory, getTableComment, getTableExporter, getTableTypeString, getTemporaryTableCreateOptions, getTemporaryTableDdlTransactionHandling, getTemporaryTableDropCommand, getTemporaryTableExporter, getTemporaryTableTruncateCommand, getUniqueDelegate, getUniqueKeyExporter, getVersion, getViolatedConstraintNameExtractor, getWriteLockString, getWriteLockString, hasAlterTable, hasSelfReferentialForeignKeyBug, initDefaultProperties, inlineLiteral, isAnsiNullOn, isEmptyStringTreatedAsNull, isJdbcLogWarningsEnabledByDefault, isLockTimeoutParameterized, prependComment, quote, registerKeyword, registerKeywords, registerResultSetOutParameter, requiresFloatCastingOfIntegerDivision, requiresParensForTupleCounts, requiresParensForTupleDistinctCounts, resolveSqlTypeCode, resolveSqlTypeCode, resolveSqlTypeLength, supportsBindAsCallableArgument, supportsBitType, supportsCascadeDelete, supportsCaseInsensitiveLike, supportsColumnCheck, supportsCommentOn, supportsDistinctFromPredicate, supportsExpectedLobUsagePattern, supportsFractionalTimestampArithmetic, supportsIfExistsAfterAlterTable, supportsIfExistsAfterConstraintName, supportsIfExistsAfterTableName, supportsJdbcConnectionLobCreation, supportsLockTimeouts, supportsNoColumnsInsert, supportsOrderByInSubquery, supportsOrdinalSelectItemReference, supportsOuterJoinForUpdate, supportsParametersInInsertSelect, supportsStandardArrays, supportsSubqueryInSelect, supportsSubqueryOnMutatingTable, supportsSubselectAsInPredicateLHS, supportsTableCheck, supportsTemporalLiteralOffset, supportsTemporaryTablePrimaryKey, supportsTemporaryTables, supportsTruncateWithCast, supportsTupleCounts, supportsUnboundedLobLocatorMaterialization, supportsUnionAll, supportsUnionInSubquery, supportsValuesListForInsert, toBooleanValueString, toQuotedIdentifier, toString, transformSelectString, useFollowOnLocking, useInputStreamToInsertBlob
-
-
-
-
Constructor Detail
-
SQLServerDialect
public SQLServerDialect()
-
SQLServerDialect
public SQLServerDialect(DatabaseVersion version)
-
SQLServerDialect
public SQLServerDialect(DialectResolutionInfo info)
-
-
Method Detail
-
registerDefaultKeywords
protected void registerDefaultKeywords()
- Overrides:
registerDefaultKeywords
in classDialect
-
columnType
protected String columnType(int sqlTypeCode)
Description copied from class:Dialect
The 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 concrete
Dialect
s as an alternative toDialect.registerColumnTypes(TypeContributions, ServiceRegistry)
for simple registrations.- Overrides:
columnType
in classAbstractTransactSQLDialect
- Parameters:
sqlTypeCode
- a SQL type code- Returns:
- a column type name, with $l, $p, $s placeholders for length, precision, scale
- See Also:
SqlTypes
-
registerColumnTypes
protected void registerColumnTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry)
Description copied from class:Dialect
Register ANSI-standard column types using the length limits defined byDialect.getMaxVarcharLength()
,Dialect.getMaxNVarcharLength()
, andDialect.getMaxVarbinaryLength()
.This method is always called when a
Dialect
is instantiated.- Overrides:
registerColumnTypes
in classDialect
-
getMaxVarcharLength
public int getMaxVarcharLength()
Description copied from class:Dialect
The longest possible length of aTypes.VARCHAR
-like column. For longer column lengths, use some sort oftext
-like type for the column.- Overrides:
getMaxVarcharLength
in classDialect
-
getMaxNVarcharLength
public int getMaxNVarcharLength()
Description copied from class:Dialect
The longest possible length of aTypes.NVARCHAR
-like column. For longer column lengths, use some sort oftext
-like type for the column.- Overrides:
getMaxNVarcharLength
in classDialect
-
getTimeZoneSupport
public TimeZoneSupport getTimeZoneSupport()
Description copied from class:Dialect
How the Dialect supports time zone types likeTypes.TIMESTAMP_WITH_TIMEZONE
.- Overrides:
getTimeZoneSupport
in classDialect
-
getDefaultLobLength
public long getDefaultLobLength()
- Overrides:
getDefaultLobLength
in classDialect
-
getMaxIdentifierLength
public int getMaxIdentifierLength()
Description copied from class:Dialect
What is the maximum identifier length supported by the dialect?- Overrides:
getMaxIdentifierLength
in classDialect
- Returns:
- The maximum length.
-
contributeTypes
public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry)
Description copied from class:Dialect
Allows the Dialect to contribute additional types- Overrides:
contributeTypes
in classDialect
- Parameters:
typeContributions
- Callback to contribute the typesserviceRegistry
- The service registry
-
initializeFunctionRegistry
public void initializeFunctionRegistry(QueryEngine queryEngine)
Description copied from class:Dialect
Initialize the given registry with any dialect-specific functions.Support for certain SQL functions is required, and if the database does not support a required function, then the dialect must define a way to emulate it.
These required functions include the functions defined by the JPA query language specification:
- avg(arg) - aggregate function
- count([distinct ]arg) - aggregate function
- max(arg) - aggregate function
- min(arg) - aggregate function
- sum(arg) - aggregate function
- coalesce(arg0, arg1, ...)
- nullif(arg0, arg1)
- lower(arg)
- upper(arg)
- length(arg)
- concat(arg0, arg1, ...)
- locate(pattern, string[, start])
- substring(string, start[, length])
- trim([[spec ][character ]from] string)
- abs(arg)
- mod(arg0, arg1)
- sqrt(arg)
- current date
- current time
- current timestamp
- any(arg) - aggregate function
- every(arg) - aggregate function
- cast(arg as Type)
- extract(field from arg)
- ln(arg)
- exp(arg)
- power(arg0, arg1)
- floor(arg)
- ceiling(arg)
- position(pattern in string)
- substring(string from start[ for length])
- overlay(string placing replacement from start[ for length])
- local date
- local time
- local datetime
- offset datetime
- instant
- left(string, length)
- right(string, length)
- replace(string, pattern, replacement)
- pad(string with length spec[ character])
- log10(arg)
- sign(arg)
- sin(arg)
- cos(arg)
- tan(arg)
- asin(arg)
- acos(arg)
- atan(arg)
- atan2(arg0, arg1)
- round(arg0, arg1)
- least(arg0, arg1, ...)
- greatest(arg0, arg1, ...)
- format(datetime as pattern)
- collate(string as collation)
- str(arg) - synonym of cast(a as String)
- ifnull(arg0, arg1) - synonym of coalesce(a, b)
- second(arg) - synonym of extract(second from a)
- minute(arg) - synonym of extract(minute from a)
- hour(arg) - synonym of extract(hour from a)
- day(arg) - synonym of extract(day from a)
- month(arg) - synonym of extract(month from a)
- year(arg) - synonym of extract(year from a)
- Overrides:
initializeFunctionRegistry
in classAbstractTransactSQLDialect
-
getSqlAstTranslatorFactory
public SqlAstTranslatorFactory getSqlAstTranslatorFactory()
Description copied from class:Dialect
Return an SqlAstTranslatorFactory specific for the Dialect. Returnnull
to use Hibernate's standard translator.- Overrides:
getSqlAstTranslatorFactory
in classDialect
- See Also:
StandardSqlAstTranslatorFactory
,JdbcEnvironment.getSqlAstTranslatorFactory()
-
castPattern
public String castPattern(CastType from, CastType to)
Description copied from class:Dialect
Obtain a pattern for the SQL equivalent to acast()
function call. The resulting pattern must contain ?1 and ?2 placeholders for the arguments.- Overrides:
castPattern
in classDialect
- Parameters:
from
- aCastType
indicating the type of the value argumentto
- aCastType
indicating the type the value argument is cast to
-
currentTimestamp
public String currentTimestamp()
Description copied from class:Dialect
Translation of the HQL/JPQLcurrent_timestamp
function, which maps to the Java typejava.sql.Timestamp
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 support
localtimestamp
ortimestamp at local
.- Overrides:
currentTimestamp
in classDialect
-
buildIdentifierHelper
public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, DatabaseMetaData dbMetaData) throws SQLException
Description copied from class:Dialect
Build the IdentifierHelper indicated by this Dialect for handling identifier conversions. Returningnull
is allowed and indicates that Hibernate should fallback 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:IdentifierHelperBuilder.isGloballyQuoteIdentifiers()
IdentifierHelperBuilder.getUnquotedCaseStrategy()
- initialized to UPPERIdentifierHelperBuilder.getQuotedCaseStrategy()
- initialized to MIXED
- Call
IdentifierHelperBuilder.applyIdentifierCasing(DatabaseMetaData)
- Call
IdentifierHelperBuilder.applyReservedWords(DatabaseMetaData)
- Applies
AnsiSqlKeywords.sql2003()
as reserved words - Applies the {#link #sqlKeywords} collected here as reserved words
- Applies the Dialect's NameQualifierSupport, if it defines one
- Overrides:
buildIdentifierHelper
in classDialect
- Parameters:
builder
- A semi-configured IdentifierHelper builder.dbMetaData
- Access to the metadata returned from the driver if needed and if available. WARNING: may benull
- Returns:
- The IdentifierHelper instance to use, or
null
to indicate Hibernate should use its fallback path - Throws:
SQLException
- Accessing the DatabaseMetaData can throw it. Just re-throw and Hibernate will handle.- See Also:
Dialect.getNameQualifierSupport()
-
currentTime
public String currentTime()
Description copied from class:Dialect
Translation of the HQL/JPQLcurrent_time
function, which maps to the Java typejava.sql.Time
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 support
localtime
ortime at local
.- Overrides:
currentTime
in classDialect
-
currentDate
public String currentDate()
Description copied from class:Dialect
Translation of the HQL/JPQLcurrent_date
function, which maps to the Java typejava.sql.Date
, and of the HQLlocal_date
function which maps to the Java typejava.sql.LocalDate
.- Overrides:
currentDate
in classDialect
-
currentTimestampWithTimeZone
public String currentTimestampWithTimeZone()
Description copied from class:Dialect
Translation of the HQLoffset_datetime
function, which maps to the Java typejava.time.OffsetDateTime
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
.- Overrides:
currentTimestampWithTimeZone
in classDialect
-
getNoColumnsInsertString
public String getNoColumnsInsertString()
Description copied from class:Dialect
The fragment used to insert a row without specifying any column values. This is not possible on some databases.- Overrides:
getNoColumnsInsertString
in classDialect
- Returns:
- The appropriate empty values clause.
-
getLimitHandler
public LimitHandler getLimitHandler()
Description copied from class:Dialect
Returns aLimitHandler
that implements support forQuery.setMaxResults(int)
andQuery.setFirstResult(int)
for this dialect.- Overrides:
getLimitHandler
in classDialect
-
supportsValuesList
public boolean supportsValuesList()
Description copied from class:Dialect
Does this dialect/database support VALUES list (e.g. VALUES (1), (2), (3) )- Overrides:
supportsValuesList
in classDialect
- Returns:
true
if VALUES list are supported
-
closeQuote
public char closeQuote()
Description copied from class:Dialect
The character specific to this dialect used to close a quoted identifier.- Overrides:
closeQuote
in classDialect
- Returns:
- The dialect's specific close quote character.
-
getCurrentSchemaCommand
public String getCurrentSchemaCommand()
Description copied from class:Dialect
Get the SQL command used to retrieve the current schema name. Works in conjunction withDialect.getSchemaNameResolver()
, unless the return from there does not need this information. E.g., a custom impl might make use of the Java 1.7 addition of theConnection.getSchema()
method- Overrides:
getCurrentSchemaCommand
in classDialect
- Returns:
- The current schema retrieval SQL
-
supportsIfExistsBeforeTableName
public boolean supportsIfExistsBeforeTableName()
Description copied from class:Dialect
For dropping a table, can the phrase "if exists" be applied before the table name? NOTE : Only one or the other (or neither) of this andDialect.supportsIfExistsAfterTableName()
should return true- Overrides:
supportsIfExistsBeforeTableName
in classDialect
- Returns:
true
if the "if exists" can be applied before the table name
-
supportsIfExistsBeforeConstraintName
public boolean supportsIfExistsBeforeConstraintName()
Description copied from class:Dialect
For dropping a constraint with an "alter table", can the phrase "if exists" be applied before the constraint name? NOTE : Only one or the other (or neither) of this andDialect.supportsIfExistsAfterConstraintName()
should return true- Overrides:
supportsIfExistsBeforeConstraintName
in classDialect
- Returns:
true
if the "if exists" can be applied before the constraint name
-
openQuote
public char openQuote()
Description copied from class:Dialect
The character specific to this dialect used to begin a quoted identifier.
-
appendLockHint
public String appendLockHint(LockOptions lockOptions, String tableName)
Description copied from class:Dialect
Some dialects support an alternative means toSELECT FOR UPDATE
, whereby a "lock hint" is appended to the table name in the from clause. contributed by Helge Schulz- Overrides:
appendLockHint
in classAbstractTransactSQLDialect
- Parameters:
lockOptions
- The lock options to applytableName
- The name of the table to which to apply the lock hint.- Returns:
- The table with any required lock hints.
-
getCurrentTimestampSelectString
public String getCurrentTimestampSelectString()
The current_timestamp is more accurate, but only known to be supported in SQL Server 7.0 and later and Sybase not known to support it at all Retrieve the command used to retrieve the current timestamp from the database.- Overrides:
getCurrentTimestampSelectString
in classAbstractTransactSQLDialect
- Returns:
- The command.
-
supportsResultSetPositionQueryMethodsOnForwardOnlyCursor
public boolean supportsResultSetPositionQueryMethodsOnForwardOnlyCursor()
Description copied from class:Dialect
Does this dialect support asking the result set its positioning information on forward only cursors. Specifically, in the case of scrolling fetches, Hibernate needs to useResultSet.isAfterLast()
andResultSet.isBeforeFirst()
. Certain drivers do not allow access to these methods for forward only cursors. NOTE : this is highly driver dependent!- Overrides:
supportsResultSetPositionQueryMethodsOnForwardOnlyCursor
in classDialect
- Returns:
- True if methods like
ResultSet.isAfterLast()
andResultSet.isBeforeFirst()
are supported for forward only cursors; false otherwise.
-
supportsCircularCascadeDeleteConstraints
public boolean supportsCircularCascadeDeleteConstraints()
Description copied from class:Dialect
Does this dialect support definition of cascade delete constraints which can cause circular chains?- Overrides:
supportsCircularCascadeDeleteConstraints
in classDialect
- Returns:
- True if circular cascade delete constraints are supported; false otherwise.
-
supportsLobValueChangePropagation
public boolean supportsLobValueChangePropagation()
Description copied from class:Dialect
Does the dialect support propagating changes to LOB values back to the database? Talking about mutating the internal value of the locator as opposed to supplying a new locator instance... For BLOBs, the internal value might be changed by:Blob.setBinaryStream(long)
,Blob.setBytes(long, byte[])
,Blob.setBytes(long, byte[], int, int)
, orBlob.truncate(long)
. For CLOBs, the internal value might be changed by:Clob.setAsciiStream(long)
,Clob.setCharacterStream(long)
,Clob.setString(long, String)
,Clob.setString(long, String, int, int)
, orClob.truncate(long)
. NOTE : I do not know the correct answer currently for databases which (1) are not part of the cruise control process or (2) do notDialect.supportsExpectedLobUsagePattern()
.- Overrides:
supportsLobValueChangePropagation
in classDialect
- Returns:
- True if the changes are propagated back to the database; false otherwise.
-
doesReadCommittedCauseWritersToBlockReaders
public boolean doesReadCommittedCauseWritersToBlockReaders()
Description copied from class:Dialect
For the underlying database, is READ_COMMITTED isolation implemented by forcing readers to wait for write locks to be released?- Overrides:
doesReadCommittedCauseWritersToBlockReaders
in classAbstractTransactSQLDialect
- Returns:
- True if writers block readers to achieve READ_COMMITTED; false otherwise.
-
doesRepeatableReadCauseReadersToBlockWriters
public boolean doesRepeatableReadCauseReadersToBlockWriters()
Description copied from class:Dialect
For the underlying database, is REPEATABLE_READ isolation implemented by forcing writers to wait for read locks to be released?- Overrides:
doesRepeatableReadCauseReadersToBlockWriters
in classAbstractTransactSQLDialect
- Returns:
- True if readers block writers to achieve REPEATABLE_READ; false otherwise.
-
getInExpressionCountLimit
public int getInExpressionCountLimit()
Description copied from class:Dialect
Return the limit that the underlying database places on the number of elements in anIN
predicate. If the database defines no such limits, simply return zero or less-than-zero.- Overrides:
getInExpressionCountLimit
in classDialect
- Returns:
- int The limit, or zero-or-less to indicate no limit.
-
getIdentityColumnSupport
public IdentityColumnSupport getIdentityColumnSupport()
Description copied from class:Dialect
Get the appropriateIdentityColumnSupport
- Overrides:
getIdentityColumnSupport
in classAbstractTransactSQLDialect
- Returns:
- the IdentityColumnSupport
-
supportsNonQueryWithCTE
public boolean supportsNonQueryWithCTE()
Description copied from class:Dialect
Does this dialect/database support non-query statements (e.g. INSERT, UPDATE, DELETE) with CTE (Common Table Expressions)?- Overrides:
supportsNonQueryWithCTE
in classDialect
- Returns:
true
if non-query statements are supported with CTE
-
supportsSkipLocked
public boolean supportsSkipLocked()
Description copied from class:Dialect
Does this dialect/database support SKIP_LOCKED timeout.- Overrides:
supportsSkipLocked
in classDialect
- Returns:
true
if SKIP_LOCKED is supported
-
supportsNoWait
public boolean supportsNoWait()
Description copied from class:Dialect
Does this dialect/database support NO_WAIT timeout.- Overrides:
supportsNoWait
in classDialect
- Returns:
true
if NO_WAIT is supported
-
supportsWait
public boolean supportsWait()
Description copied from class:Dialect
Does this dialect/database support WAIT timeout.- Overrides:
supportsWait
in classDialect
- Returns:
true
if WAIT is supported
-
getSequenceSupport
public SequenceSupport getSequenceSupport()
- Overrides:
getSequenceSupport
in classDialect
-
getQuerySequencesString
public String getQuerySequencesString()
Description copied from class:Dialect
Get the select command used retrieve the names of all sequences.- Overrides:
getQuerySequencesString
in classDialect
- Returns:
- The select command; or null if sequences are not supported.
-
getQueryHintString
public String getQueryHintString(String sql, String hints)
Description copied from class:Dialect
Apply a hint to the query. The entire query is provided, allowing the Dialect full control over the placement and syntax of the hint. By default, ignore the hint and simply return the query.- Overrides:
getQueryHintString
in classDialect
- Parameters:
sql
- The query to which to apply the hint.hints
- The hints to apply- Returns:
- The modified SQL
-
supportsNullPrecedence
public boolean supportsNullPrecedence()
- Overrides:
supportsNullPrecedence
in classDialect
-
supportsOffsetInSubquery
public boolean supportsOffsetInSubquery()
Description copied from class:Dialect
Does this dialect support offset in subqueries? Ex: select * from Table1 where col1 in (select col1 from Table2 order by col2 limit 1 offset 1)- Overrides:
supportsOffsetInSubquery
in classDialect
- Returns:
- boolean
-
supportsWindowFunctions
public boolean supportsWindowFunctions()
Description copied from class:Dialect
Does this dialect support window functions likerow_number() over (..)
?- Overrides:
supportsWindowFunctions
in classDialect
- Returns:
true
if the underlying database supports window functions,false
otherwise. The default isfalse
.
-
supportsLateral
public boolean supportsLateral()
Description copied from class:Dialect
Does this dialect support the SQL lateral keyword or a proprietary alternative?- Overrides:
supportsLateral
in classDialect
- Returns:
true
if the underlying database supports lateral,false
otherwise. The default isfalse
.
-
supportsFetchClause
public boolean supportsFetchClause(FetchClauseType type)
Description copied from class:Dialect
Does this dialect support the given fetch clause type.- Overrides:
supportsFetchClause
in classDialect
- Parameters:
type
- The fetch clause type- Returns:
true
if the underlying database supports the given fetch clause type,false
otherwise. The default isfalse
.
-
buildSQLExceptionConversionDelegate
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate()
Description copied from class:Dialect
Build an instance of aSQLExceptionConversionDelegate
for interpreting dialect-specific error or SQLState 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:- a "static" delegate based on the JDBC 4 defined SQLException hierarchy;
- a delegate that interprets SQLState codes for either X/Open or SQL-2003 codes, depending on java.sql.DatabaseMetaData#getSQLStateType
- Overrides:
buildSQLExceptionConversionDelegate
in classDialect
- Returns:
- The SQLExceptionConversionDelegate for this dialect
-
getDefaultTimestampPrecision
public int getDefaultTimestampPrecision()
SQL server supports up to 7 decimal digits of fractional second precision in a datetime2, but since its duration arithmetic functions try to fit durations into an int, which is impossible with such high precision, so default to generatingdatetime2(3)
columns.- Overrides:
getDefaultTimestampPrecision
in classDialect
- Returns:
- the default precision, in decimal digits, of the fractional seconds field
-
getFractionalSecondPrecisionInNanos
public long getFractionalSecondPrecisionInNanos()
SQL server supports up to 7 decimal digits of fractional second precision in a datetime2, but unfortunately its duration arithmetic functions have a nasty habit of overflowing. So to give ourselves a little extra headroom, we will usemicrosecond
as the native unit of precision (but even then we have to use tricks when callingdateadd()
).- Overrides:
getFractionalSecondPrecisionInNanos
in classDialect
- Returns:
- the precision, specified as a quantity of nanoseconds
- See Also:
TemporalUnit.NATIVE
-
extractPattern
public String extractPattern(TemporalUnit unit)
Description copied from class:Dialect
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 handle
TemporalUnit.NANOSECOND
,TemporalUnit.NATIVE
,TemporalUnit.OFFSET
,TemporalUnit.DATE
,TemporalUnit.TIME
,TemporalUnit.WEEK_OF_YEAR
, orTemporalUnit.WEEK_OF_MONTH
, which are already desugared byExtractFunction
.- Overrides:
extractPattern
in classDialect
- Parameters:
unit
- the first argument
-
timestampaddPattern
public String timestampaddPattern(TemporalUnit unit, jakarta.persistence.TemporalType temporalType, IntervalType intervalType)
Description copied from class:Dialect
Obtain a pattern for the SQL equivalent to atimestampadd()
function call. The resulting pattern must contain ?1, ?2, and ?3 placeholders for the arguments.- Overrides:
timestampaddPattern
in classDialect
- Parameters:
unit
- The unit to add to the temporaltemporalType
- The type of the temporalintervalType
- The type of interval to add or null if it's not a native interval
-
timestampdiffPattern
public String timestampdiffPattern(TemporalUnit unit, jakarta.persistence.TemporalType fromTemporalType, jakarta.persistence.TemporalType toTemporalType)
Description copied from class:Dialect
Obtain a pattern for the SQL equivalent to atimestampdiff()
function call. The resulting pattern must contain ?1, ?2, and ?3 placeholders for the arguments.- Overrides:
timestampdiffPattern
in classDialect
- Parameters:
unit
- the first argumentfromTemporalType
- true if the first argument is a timestamp, false if a datetoTemporalType
- true if the second argument is
-
translateDurationField
public String translateDurationField(TemporalUnit unit)
Description copied from class:Dialect
Return the name used to identify the given unit of duration as an argument to#timestampadd()
or#timestampdiff()
, or of this dialect's equivalent functions.This method does not need to handle
TemporalUnit.NANOSECOND
,TemporalUnit.NATIVE
,TemporalUnit.OFFSET
,TemporalUnit.DAY_OF_WEEK
,TemporalUnit.DAY_OF_MONTH
,TemporalUnit.DAY_OF_YEAR
,TemporalUnit.DATE
,TemporalUnit.TIME
,TemporalUnit.TIMEZONE_HOUR
,TemporalUnit.TIMEZONE_MINUTE
,TemporalUnit.WEEK_OF_YEAR
, norTemporalUnit.WEEK_OF_MONTH
, which are not units of duration.- Overrides:
translateDurationField
in classDialect
-
translateExtractField
public String translateExtractField(TemporalUnit unit)
Description copied from class:Dialect
Return the name used to identify the given field as an argument to theextract()
function, or of this dialect's equivalent function.This method does not need to handle
TemporalUnit.NANOSECOND
,TemporalUnit.NATIVE
,TemporalUnit.OFFSET
,TemporalUnit.DATE
,TemporalUnit.TIME
,TemporalUnit.WEEK_OF_YEAR
, norTemporalUnit.WEEK_OF_MONTH
, which are already desugared byExtractFunction
.- Overrides:
translateExtractField
in classDialect
-
appendDatetimeFormat
public void appendDatetimeFormat(SqlAppender appender, String format)
Description copied from class:Dialect
Translate the given datetime format string from the pattern language defined by Java'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 all of the pattern letter sequences understood by
DateTimeFormatter
, only the following subset of pattern letters is accepted by Hibernate:- G: era
- y: year of era
- Y: year of week-based year
- M: month of year
- w: week of week-based year (ISO week number)
- W: week of month
- E: day of week (name)
- e: day of week (number)
- d: day of month
- D: day of year
- a: AM/PM
- H: hour of day (24 hour time)
- h: hour of AM/PM (12 hour time)
- m: minutes
- s: seconds
- z,Z,x: timezone offset
Appends a pattern accepted by the function that formats dates and times in this dialect to a SQL fragment that is being constructed.
- Overrides:
appendDatetimeFormat
in classDialect
-
appendBinaryLiteral
public void appendBinaryLiteral(SqlAppender appender, byte[] bytes)
- Overrides:
appendBinaryLiteral
in classAbstractTransactSQLDialect
-
appendUUIDLiteral
public void appendUUIDLiteral(SqlAppender appender, UUID literal)
- Overrides:
appendUUIDLiteral
in classDialect
-
appendDateTimeLiteral
public void appendDateTimeLiteral(SqlAppender appender, TemporalAccessor temporalAccessor, jakarta.persistence.TemporalType precision, TimeZone jdbcTimeZone)
- Overrides:
appendDateTimeLiteral
in classDialect
-
appendDateTimeLiteral
public void appendDateTimeLiteral(SqlAppender appender, Date date, jakarta.persistence.TemporalType precision, TimeZone jdbcTimeZone)
- Overrides:
appendDateTimeLiteral
in classDialect
-
appendDateTimeLiteral
public void appendDateTimeLiteral(SqlAppender appender, Calendar calendar, jakarta.persistence.TemporalType precision, TimeZone jdbcTimeZone)
- Overrides:
appendDateTimeLiteral
in classDialect
-
getCreateTemporaryTableColumnAnnotation
public String getCreateTemporaryTableColumnAnnotation(int sqlTypeCode)
Description copied from class:Dialect
Annotation to be appended to the end of each COLUMN clause for temporary tables.- Overrides:
getCreateTemporaryTableColumnAnnotation
in classDialect
- Parameters:
sqlTypeCode
- The SQL type code- Returns:
- The annotation to be appended (e.g. "COLLATE DATABASE_DEFAULT" in SQLServer SQL)
-
getDropSchemaCommand
public String[] getDropSchemaCommand(String schemaName)
Description copied from class:Dialect
Get the SQL command used to drop the named schema- Overrides:
getDropSchemaCommand
in classDialect
- Parameters:
schemaName
- The name of the schema to be dropped.- Returns:
- The drop commands
-
getNameQualifierSupport
public NameQualifierSupport getNameQualifierSupport()
Description copied from class:Dialect
By default interpret this based on DatabaseMetaData.- Overrides:
getNameQualifierSupport
in classDialect
- Returns:
- The NameQualifierSupport.
-
getSequenceExporter
public Exporter<Sequence> getSequenceExporter()
- Overrides:
getSequenceExporter
in classDialect
-
supportsNamedParameters
public boolean supportsNamedParameters(DatabaseMetaData databaseMetaData)
Description copied from class:Dialect
Override the DatabaseMetaData#supportsNamedParameters()- Overrides:
supportsNamedParameters
in classDialect
- Returns:
- boolean
-
generatedAs
public String generatedAs(String generatedAs)
- Overrides:
generatedAs
in classDialect
-
hasDataTypeBeforeGeneratedAs
public boolean hasDataTypeBeforeGeneratedAs()
- Overrides:
hasDataTypeBeforeGeneratedAs
in classDialect
-
-