org.hibernate.dialect
Class SQLServerDialect
java.lang.Object
org.hibernate.dialect.Dialect
org.hibernate.dialect.SybaseDialect
org.hibernate.dialect.SQLServerDialect
public class SQLServerDialect
- extends SybaseDialect
A dialect for Microsoft SQL Server 2000 and 2005
- Author:
- Gavin King
Method Summary |
java.lang.String |
appendIdentitySelectToInsert(java.lang.String insertSQL)
Use insert table(...) values(...) select SCOPE_IDENTITY() |
java.lang.String |
appendLockHint(LockMode mode,
java.lang.String tableName)
Some dialects support an alternative means to SELECT FOR UPDATE,
whereby a "lock hint" is appends to the table name in the from clause. |
boolean |
areStringComparisonsCaseInsensitive()
Are string comparisons implicitly case insensitive. |
char |
closeQuote()
The character specific to this dialect used to close a quoted identifier. |
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? |
java.lang.String |
getCurrentTimestampSelectString()
Retrieve the command used to retrieve the current timestammp from the
database. |
java.lang.String |
getLimitString(java.lang.String querySelect,
int offset,
int limit)
Given a limit and an offset, apply the limit clause to the query. |
java.lang.String |
getNoColumnsInsertString()
The fragment used to insert a row without specifying any column values. |
java.lang.String |
getSelectGUIDString()
Get the command used to select a GUID from the underlying database. |
char |
openQuote()
The character specific to this dialect used to begin a quoted identifier. |
boolean |
supportsCircularCascadeDeleteConstraints()
Does this dialect support definition of cascade delete constraints
which can cause circular chains? |
boolean |
supportsLimit()
Does this dialect support some form of limiting query results
via a SQL clause? |
boolean |
supportsLimitOffset()
Does this dialect's LIMIT support (if any) additionally
support specifying an offset? |
boolean |
supportsLobValueChangePropogation()
Does the dialect support propogating 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 |
supportsResultSetPositionQueryMethodsOnForwardOnlyCursor()
Does this dialect support asking the result set its positioning
information on forward only cursors. |
boolean |
supportsVariableLimit()
Does this dialect support bind variables (i.e., prepared statememnt
parameters) for its limit/offset? |
boolean |
useMaxForLimit()
Does the LIMIT clause take a "maximum" row number instead
of a total number of returned rows?
This is easiest understood via an example. |
Methods inherited from class org.hibernate.dialect.SybaseDialect |
applyLocksToSql, dropTemporaryTableAfterUse, generateTemporaryTableName, getAddColumnString, getForUpdateString, getIdentityColumnString, getIdentitySelectString, getNullColumnString, getResultSet, isCurrentTimestampSelectStringCallable, qualifyIndexName, registerResultSetOutParameter, supportsCurrentTimestampSelection, supportsEmptyInList, supportsExistsInSelect, supportsIdentityColumns, supportsInsertSelectIdentity, supportsTemporaryTables |
Methods inherited from class org.hibernate.dialect.Dialect |
bindLimitParametersFirst, bindLimitParametersInReverseOrder, buildSQLExceptionConverter, createCaseFragment, createOuterJoinFragment, dropConstraints, forUpdateOfColumns, getAddForeignKeyConstraintString, getAddPrimaryKeyConstraintString, getCascadeConstraintsString, getCastTypeName, getColumnComment, getCreateMultisetTableString, getCreateSequenceString, getCreateSequenceString, getCreateSequenceStrings, getCreateSequenceStrings, getCreateTableString, getCreateTemporaryTablePostfix, getCreateTemporaryTableString, getCurrentTimestampSQLFunctionName, getDefaultProperties, getDialect, getDialect, getDropForeignKeyString, getDropSequenceString, getDropSequenceStrings, getForUpdateNowaitString, getForUpdateNowaitString, getForUpdateString, getForUpdateString, getFunctions, getHibernateTypeName, getHibernateTypeName, getIdentityColumnString, getIdentityInsertString, getIdentitySelectString, getKeywords, getLimitString, getLockingStrategy, getLowercaseFunction, getMaxAliasLength, getNativeIdentifierGeneratorClass, getQuerySequencesString, getSelectClauseNullString, getSelectSequenceNextValString, getSequenceNextValString, getTableComment, getTableTypeString, getTypeName, getTypeName, getViolatedConstraintNameExtracter, hasAlterTable, hasDataTypeInIdentityColumn, hasSelfReferentialForeignKeyBug, performTemporaryTableDDLInIsolation, quote, registerColumnType, registerColumnType, registerFunction, registerHibernateType, registerHibernateType, registerKeyword, supportsBindAsCallableArgument, supportsCascadeDelete, supportsColumnCheck, supportsCommentOn, supportsExpectedLobUsagePattern, supportsIfExistsAfterTableName, supportsIfExistsBeforeTableName, supportsNotNullUnique, supportsOuterJoinForUpdate, supportsParametersInInsertSelect, supportsPooledSequences, supportsRowValueConstructorSyntax, supportsRowValueConstructorSyntaxInInList, supportsSequences, supportsSubqueryOnMutatingTable, supportsSubselectAsInPredicateLHS, supportsTableCheck, supportsUnboundedLobLocatorMaterialization, supportsUnionAll, supportsUnique, supportsUniqueConstraintInCreateAlterTable, toBooleanValueString, toString, transformSelectString, useInputStreamToInsertBlob |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
SQLServerDialect
public SQLServerDialect()
getNoColumnsInsertString
public java.lang.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 class Dialect
- Returns:
- The appropriate empty values clause.
getLimitString
public java.lang.String getLimitString(java.lang.String querySelect,
int offset,
int limit)
- Description copied from class:
Dialect
- Given a limit and an offset, apply the limit clause to the query.
- Overrides:
getLimitString
in class Dialect
- Parameters:
querySelect
- The query to which to apply the limit.offset
- The offset of the limitlimit
- The limit of the limit ;)
- Returns:
- The modified query statement with the limit applied.
appendIdentitySelectToInsert
public java.lang.String appendIdentitySelectToInsert(java.lang.String insertSQL)
- Use insert table(...) values(...) select SCOPE_IDENTITY()
- Overrides:
appendIdentitySelectToInsert
in class SybaseDialect
- Parameters:
insertSQL
- The insert command
- Returns:
- The insert command with any necessary identity select
clause attached.
supportsLimit
public boolean supportsLimit()
- Description copied from class:
Dialect
- Does this dialect support some form of limiting query results
via a SQL clause?
- Overrides:
supportsLimit
in class Dialect
- Returns:
- True if this dialect supports some form of LIMIT.
useMaxForLimit
public boolean useMaxForLimit()
- Description copied from class:
Dialect
- Does the LIMIT clause take a "maximum" row number instead
of a total number of returned rows?
This is easiest understood via an example. Consider you have a table
with 20 rows, but you only want to retrieve rows number 11 through 20.
Generally, a limit with offset would say that the offset = 11 and the
limit = 10 (we only want 10 rows at a time); this is specifying the
total number of returned rows. Some dialects require that we instead
specify offset = 11 and limit = 20, where 20 is the "last" row we want
relative to offset (i.e. total number of rows = 20 - 11 = 9)
So essentially, is limit relative from offset? Or is limit absolute?
- Overrides:
useMaxForLimit
in class Dialect
- Returns:
- True if limit is relative from offset; false otherwise.
supportsLimitOffset
public boolean supportsLimitOffset()
- Description copied from class:
Dialect
- Does this dialect's LIMIT support (if any) additionally
support specifying an offset?
- Overrides:
supportsLimitOffset
in class Dialect
- Returns:
- True if the dialect supports an offset within the limit support.
supportsVariableLimit
public boolean supportsVariableLimit()
- Description copied from class:
Dialect
- Does this dialect support bind variables (i.e., prepared statememnt
parameters) for its limit/offset?
- Overrides:
supportsVariableLimit
in class Dialect
- Returns:
- True if bind variables can be used; false otherwise.
closeQuote
public char closeQuote()
- Description copied from class:
Dialect
- The character specific to this dialect used to close a quoted identifier.
- Overrides:
closeQuote
in class Dialect
- Returns:
- The dialect's specific close quote character.
openQuote
public char openQuote()
- Description copied from class:
Dialect
- The character specific to this dialect used to begin a quoted identifier.
- Overrides:
openQuote
in class Dialect
- Returns:
- The dialect's specific open quote character.
appendLockHint
public java.lang.String appendLockHint(LockMode mode,
java.lang.String tableName)
- Description copied from class:
Dialect
- Some dialects support an alternative means to SELECT FOR UPDATE,
whereby a "lock hint" is appends to the table name in the from clause.
contributed by Helge Schulz
- Overrides:
appendLockHint
in class SybaseDialect
- Parameters:
mode
- The lock mode to applytableName
- The name of the table to which to apply the lock hint.
- Returns:
- The table with any required lock hints.
getSelectGUIDString
public java.lang.String getSelectGUIDString()
- Description copied from class:
Dialect
- Get the command used to select a GUID from the underlying database.
Optional operation.
- Overrides:
getSelectGUIDString
in class Dialect
- Returns:
- The appropriate command.
getCurrentTimestampSelectString
public java.lang.String getCurrentTimestampSelectString()
- Description copied from class:
Dialect
- Retrieve the command used to retrieve the current timestammp from the
database.
- Overrides:
getCurrentTimestampSelectString
in class SybaseDialect
- Returns:
- The command.
areStringComparisonsCaseInsensitive
public boolean areStringComparisonsCaseInsensitive()
- Description copied from class:
Dialect
- Are string comparisons implicitly case insensitive.
In other words, does [where 'XYZ' = 'xyz'] resolve to true?
- Overrides:
areStringComparisonsCaseInsensitive
in class Dialect
- Returns:
- True if comparisons are case insensitive.
supportsResultSetPositionQueryMethodsOnForwardOnlyCursor
public boolean supportsResultSetPositionQueryMethodsOnForwardOnlyCursor()
- Description copied from class:
Dialect
- Does this dialect support asking the result set its positioning
information on forward only cursors. Specifically, in the case of
scrolling fetches, Hibernate needs to use
ResultSet.isAfterLast()
and
ResultSet.isBeforeFirst()
. Certain drivers do not
allow access to these methods for forward only cursors.
NOTE : this is highly driver dependent!
- Overrides:
supportsResultSetPositionQueryMethodsOnForwardOnlyCursor
in class Dialect
- Returns:
- True if methods like
ResultSet.isAfterLast()
and
ResultSet.isBeforeFirst()
are supported for forward
only cursors; false otherwise.
supportsCircularCascadeDeleteConstraints
public boolean supportsCircularCascadeDeleteConstraints()
- Description copied from class:
Dialect
- Does this dialect support definition of cascade delete constraints
which can cause circular chains?
- Overrides:
supportsCircularCascadeDeleteConstraints
in class Dialect
- Returns:
- True if circular cascade delete constraints are supported; false
otherwise.
supportsLobValueChangePropogation
public boolean supportsLobValueChangePropogation()
- Description copied from class:
Dialect
- Does the dialect support propogating 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)
,
or Blob.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)
,
or Clob.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 not Dialect.supportsExpectedLobUsagePattern()
.
- Overrides:
supportsLobValueChangePropogation
in class Dialect
- Returns:
- True if the changes are propogated back to the
database; false otherwise.
doesReadCommittedCauseWritersToBlockReaders
public boolean doesReadCommittedCauseWritersToBlockReaders()
- Description copied from class:
Dialect
- For the underlying database, is READ_COMMITTED isolation implemented by
forcing readers to wait for write locks to be released?
- Overrides:
doesReadCommittedCauseWritersToBlockReaders
in class SybaseDialect
- Returns:
- True if writers block readers to achieve READ_COMMITTED; false otherwise.
doesRepeatableReadCauseReadersToBlockWriters
public boolean doesRepeatableReadCauseReadersToBlockWriters()
- Description copied from class:
Dialect
- For the underlying database, is REPEATABLE_READ isolation implemented by
forcing writers to wait for read locks to be released?
- Overrides:
doesRepeatableReadCauseReadersToBlockWriters
in class SybaseDialect
- Returns:
- True if readers block writers to achieve REPEATABLE_READ; false otherwise.
Copyright © 2008 Hibernate.org. All Rights Reserved.