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 getSequenceNextValString(String sequenceName)
          Generate the appropriate select statement to to retrieve the next value of a sequence.
 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 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 supportsSequences()
          Does this dialect support sequences?
 boolean supportsUnboundedLobLocatorMaterialization()
          Is it supported to materialize a LOB locator outside the transaction in which it was created?

Again, part of the trickiness here is the fact that this is largely driver dependent.

 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, isCurrentTimestampSelectStringCallable, main, registerResultSetOutParameter, requiresCastingOfParametersInSelectClause, supportsCurrentTimestampSelection, supportsEmptyInList, supportsIdentityColumns, supportsNotNullUnique, supportsOuterJoinForUpdate, supportsParametersInInsertSelect, supportsPooledSequences, supportsResultSetPositionQueryMethodsOnForwardOnlyCursor, supportsTemporaryTables, supportsTupleDistinctCounts, supportsUnionAll, useMaxForLimit
 
Methods inherited from class org.hibernate.dialect.Dialect
addTypeOverride, appendIdentitySelectToInsert, appendLockHint, applyLocksToSql, areStringComparisonsCaseInsensitive, bindLimitParametersFirst, bindLimitParametersInReverseOrder, buildSQLExceptionConverter, closeQuote, createOuterJoinFragment, doesRepeatableReadCauseReadersToBlockWriters, dropTemporaryTableAfterUse, forceLimitUsage, forUpdateOfColumns, getAddForeignKeyConstraintString, getAddPrimaryKeyConstraintString, getCascadeConstraintsString, getCastTypeName, getColumnAliasExtractor, 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, getTypeOverrides, getViolatedConstraintNameExtracter, hasAlterTable, hasDataTypeInIdentityColumn, hasSelfReferentialForeignKeyBug, isLockTimeoutParameterized, openQuote, performTemporaryTableDDLInIsolation, qualifyIndexName, quote, registerColumnType, registerColumnType, registerFunction, registerHibernateType, registerHibernateType, registerKeyword, replaceResultVariableInOrderByClauseWithPosition, supportsBindAsCallableArgument, supportsCascadeDelete, supportsCircularCascadeDeleteConstraints, supportsColumnCheck, supportsExistsInSelect, supportsExpectedLobUsagePattern, supportsIfExistsAfterTableName, supportsIfExistsBeforeTableName, supportsInsertSelectIdentity, supportsLockTimeouts, supportsRowValueConstructorSyntax, supportsRowValueConstructorSyntaxInInList, supportsSubqueryOnMutatingTable, supportsSubselectAsInPredicateLHS, supportsTableCheck, supportsTupleCounts, 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 DB2Dialect
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.

getSequenceNextValString

public String getSequenceNextValString(String sequenceName)
Description copied from class: Dialect
Generate the appropriate select statement to to retrieve the next value of a sequence.

This should be a "stand alone" select statement.

Overrides:
getSequenceNextValString in class DB2Dialect
Parameters:
sequenceName - the name of the sequence
Returns:
String The "nextval" select string.

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 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), 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 propagated back to the database; false otherwise.

supportsUnboundedLobLocatorMaterialization

public boolean supportsUnboundedLobLocatorMaterialization()
Description copied from class: Dialect
Is it supported to materialize a LOB locator outside the transaction in which it was created?

Again, part of the trickiness here is the fact that this is largely driver dependent.

NOTE: all database I have tested which Dialect.supportsExpectedLobUsagePattern() also support the ability to materialize a LOB outside the owning transaction...

Overrides:
supportsUnboundedLobLocatorMaterialization in class Dialect
Returns:
True if unbounded materialization is supported; false otherwise.


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