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.