Class 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
  • Constructor Details

    • DerbyDialect

      public DerbyDialect()
  • Method Details

    • 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:
    • 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.