org.hibernate.dialect
Class DerbyDialect

java.lang.Object
  extended by org.hibernate.dialect.Dialect
      extended by org.hibernate.dialect.DB2Dialect
          extended by org.hibernate.dialect.DerbyDialect

public class DerbyDialect
extends DB2Dialect

Hibernate Dialect for Cloudscape 10 - aka Derby. This implements both an override for the identity column generator as well as for the case statement issue documented at: http://www.jroller.com/comments/kenlars99/Weblog/cloudscape_soon_to_be_derby

Author:
Simon Johnston

Field Summary
 
Fields inherited from class org.hibernate.dialect.Dialect
CLOSED_QUOTE, DEFAULT_BATCH_SIZE, NO_BATCH, QUOTE
 
Constructor Summary
DerbyDialect()
           
 
Method Summary
 CaseFragment createCaseFragment()
          Return the case statement modified for Cloudscape.
 boolean dropConstraints()
          Do we need to drop constraints before dropping tables in this dialect?
 String getCrossJoinSeparator()
          Get the separator to use for defining cross joins when translating HQL queries.
 String getForUpdateString()
          Get the string to append to SELECT statements to acquire locks for this dialect.
 String getLimitString(String query, int offset, int limit)
          Given a limit and an offset, apply the limit clause to the query.
 String getQuerySequencesString()
          Get the select command used retrieve the names of all sequences.
 String getReadLockString(int timeout)
          Get the string to append to SELECT statements to acquire WRITE locks for this dialect.
 String getWriteLockString(int timeout)
          Get the string to append to SELECT statements to acquire WRITE locks for this dialect.
 boolean supportsCommentOn()
           
 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 supportsSequences()
          Does this dialect support sequences?
 boolean supportsVariableLimit()
          Does this dialect support bind variables (i.e., prepared statement parameters) for its limit/offset?
 
Methods inherited from class org.hibernate.dialect.DB2Dialect
convertToFirstRowValue, doesReadCommittedCauseWritersToBlockReaders, generateTemporaryTableName, getAddColumnString, getCreateSequenceString, getCreateTemporaryTablePostfix, getCreateTemporaryTableString, getCurrentTimestampSelectString, getDropSequenceString, getIdentityColumnString, getIdentityInsertString, getIdentitySelectString, getLimitString, getLowercaseFunction, getResultSet, getSelectClauseNullString, getSequenceNextValString, isCurrentTimestampSelectStringCallable, main, registerResultSetOutParameter, requiresCastingOfParametersInSelectClause, supportsCurrentTimestampSelection, supportsEmptyInList, supportsIdentityColumns, supportsNotNullUnique, supportsOuterJoinForUpdate, supportsParametersInInsertSelect, supportsPooledSequences, supportsResultSetPositionQueryMethodsOnForwardOnlyCursor, supportsTemporaryTables, supportsTupleDistinctCounts, supportsUnionAll, useMaxForLimit
 
Methods inherited from class org.hibernate.dialect.Dialect
appendIdentitySelectToInsert, appendLockHint, applyLocksToSql, areStringComparisonsCaseInsensitive, bindLimitParametersFirst, bindLimitParametersInReverseOrder, buildSQLExceptionConverter, closeQuote, createOuterJoinFragment, doesRepeatableReadCauseReadersToBlockWriters, dropTemporaryTableAfterUse, forceLimitUsage, forUpdateOfColumns, getAddForeignKeyConstraintString, getAddPrimaryKeyConstraintString, getCascadeConstraintsString, getCastTypeName, getColumnComment, getCreateMultisetTableString, getCreateSequenceString, getCreateSequenceStrings, getCreateSequenceStrings, getCreateTableString, getCurrentTimestampSQLFunctionName, getDefaultProperties, getDialect, getDialect, getDropForeignKeyString, getDropSequenceStrings, getDropTemporaryTableString, getForUpdateNowaitString, getForUpdateNowaitString, getForUpdateString, getForUpdateString, getForUpdateString, getForUpdateString, getFunctions, getHibernateTypeName, getHibernateTypeName, getIdentityColumnString, getIdentitySelectString, getKeywords, getLockingStrategy, getMaxAliasLength, getNativeIdentifierGeneratorClass, getNoColumnsInsertString, getNullColumnString, getSelectGUIDString, getSelectSequenceNextValString, getTableComment, getTableTypeString, getTypeName, getTypeName, getViolatedConstraintNameExtracter, hasAlterTable, hasDataTypeInIdentityColumn, hasSelfReferentialForeignKeyBug, isLockTimeoutParameterized, openQuote, performTemporaryTableDDLInIsolation, qualifyIndexName, quote, registerColumnType, registerColumnType, registerFunction, registerHibernateType, registerHibernateType, registerKeyword, supportsBindAsCallableArgument, supportsCascadeDelete, supportsCircularCascadeDeleteConstraints, supportsColumnCheck, supportsExistsInSelect, supportsExpectedLobUsagePattern, supportsIfExistsAfterTableName, supportsIfExistsBeforeTableName, supportsInsertSelectIdentity, supportsLockTimeouts, supportsRowValueConstructorSyntax, supportsRowValueConstructorSyntaxInInList, supportsSubqueryOnMutatingTable, supportsSubselectAsInPredicateLHS, supportsTableCheck, supportsTupleCounts, supportsUnboundedLobLocatorMaterialization, supportsUnique, supportsUniqueConstraintInCreateAlterTable, toBooleanValueString, toString, transformSelectString, useInputStreamToInsertBlob
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

DerbyDialect

public DerbyDialect()
Method Detail

getCrossJoinSeparator

public String getCrossJoinSeparator()
Description copied from class: Dialect
Get the separator to use for defining cross joins when translating HQL queries.

Typically this will be either [ cross join ] or [, ]

Note that the spaces are important!

Overrides:
getCrossJoinSeparator in class Dialect
Returns:

createCaseFragment

public CaseFragment createCaseFragment()
Return the case statement modified for Cloudscape.

Overrides:
createCaseFragment in class Dialect
Returns:
This dialect's CaseFragment strategy.

dropConstraints

public boolean dropConstraints()
Description copied from class: Dialect
Do we need to drop constraints before dropping tables in this dialect?

Overrides:
dropConstraints in class DB2Dialect
Returns:
True if constraints must be dropped prior to dropping the table; false otherwise.

supportsSequences

public boolean supportsSequences()
Description copied from class: Dialect
Does this dialect support sequences?

Overrides:
supportsSequences in class DB2Dialect
Returns:
True if sequences supported; false otherwise.

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 DB2Dialect
Returns:
True if this dialect supports some form of LIMIT.

supportsCommentOn

public boolean supportsCommentOn()
Overrides:
supportsCommentOn in class DB2Dialect

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.

getForUpdateString

public String getForUpdateString()
Description copied from class: Dialect
Get the string to append to SELECT statements to acquire locks for this dialect.

Overrides:
getForUpdateString in class DB2Dialect
Returns:
The appropriate FOR UPDATE clause string.

getWriteLockString

public String getWriteLockString(int timeout)
Description copied from class: Dialect
Get the string to append to SELECT statements to acquire WRITE locks for this dialect. Location of the of the returned string is treated the same as getForUpdateString.

Overrides:
getWriteLockString in class Dialect
Parameters:
timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
Returns:
The appropriate LOCK clause string.

getReadLockString

public String getReadLockString(int timeout)
Description copied from class: Dialect
Get the string to append to SELECT statements to acquire WRITE locks for this dialect. Location of the of the returned string is treated the same as getForUpdateString.

Overrides:
getReadLockString in class Dialect
Parameters:
timeout - in milliseconds, -1 for indefinite wait and 0 for no wait.
Returns:
The appropriate LOCK clause string.

getLimitString

public String getLimitString(String query,
                             int offset,
                             int limit)
Given a limit and an offset, apply the limit clause to the query.

From Derby 10.5 Docs:

 Query
 [ORDER BY clause]
 [result offset clause]
 [fetch first clause]
 [FOR UPDATE clause]
 [WITH {RR|RS|CS|UR}]
 

Overrides:
getLimitString in class Dialect
Parameters:
query - The query to which to apply the limit.
offset - The offset of the limit
limit - The limit of the limit ;)
Returns:
The modified query statement with the limit applied.

supportsVariableLimit

public boolean supportsVariableLimit()
Description copied from class: Dialect
Does this dialect support bind variables (i.e., prepared statement parameters) for its limit/offset?

Overrides:
supportsVariableLimit in class Dialect
Returns:
True if bind variables can be used; false otherwise.

getQuerySequencesString

public String getQuerySequencesString()
Description copied from class: Dialect
Get the select command used retrieve the names of all sequences.

Overrides:
getQuerySequencesString in class DB2Dialect
Returns:
The select command; or null if sequences are not supported.
See Also:
SchemaUpdate

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 DB2Dialect
Returns:
True if the changes are propogated back to the database; false otherwise.


Copyright © 2001-2010 Red Hat, Inc. All Rights Reserved.