org.hibernate.dialect
Class SQLAnywhere10Dialect

java.lang.Object
  extended by org.hibernate.dialect.Dialect
      extended by org.hibernate.dialect.SQLAnywhere10Dialect
Direct Known Subclasses:
SQLAnywhere11Dialect

public class SQLAnywhere10Dialect
extends org.hibernate.dialect.Dialect

SQL Dialect for SQL Anywhere 10 - for the Hibernate 3.2 distribution (Tested on SQL Anywhere 10.0.1)

Author:
Glenn Paulley, Sybase iAnywhere

Field Summary
 
Fields inherited from class org.hibernate.dialect.Dialect
CLOSED_QUOTE, DEFAULT_BATCH_SIZE, NO_BATCH, QUOTE
 
Constructor Summary
SQLAnywhere10Dialect()
           
 
Method Summary
 java.lang.String appendIdentitySelectToInsert(java.lang.String insertSQL)
           
 java.lang.String appendLockHint(org.hibernate.LockMode mode, java.lang.String tableName)
           
 java.lang.String applyLocksToSql(java.lang.String sql, java.util.Map aliasedLockModes, java.util.Map keyColumnNames)
           
 boolean areStringComparisonsCaseInsensitive()
           
 boolean bindLimitParametersFirst()
           
 boolean bindLimitParametersInReverseOrder()
           
 char closeQuote()
           
 boolean doesReadCommittedCauseWritersToBlockReaders()
           
 boolean doesRepeatableReadCauseReadersToBlockWriters()
           
 boolean dropConstraints()
           
 boolean forUpdateOfColumns()
           
 java.lang.String getAddColumnString()
           
 java.lang.String getColumnComment(java.lang.String comment)
           
 java.lang.String getCreateTemporaryTablePostfix()
           
 java.lang.String getCreateTemporaryTableString()
           
 java.lang.String getCurrentTimestampSelectString()
           
 java.lang.String getCurrentTimestampSQLFunctionName()
           
 java.lang.String getDropForeignKeyString()
           
 java.lang.String getForReadOnlyString()
           
 java.lang.String getForUpdateByLockString()
           
 java.lang.String getForUpdateNoWaitString()
           
 java.lang.String getForUpdateString(org.hibernate.LockMode lockMode)
          SQL Anywhere 10 supports READ, WRITE, and INTENT row locks.
 java.lang.String getForUpdateString(java.lang.String aliases)
           
 java.lang.String getIdentityColumnString()
           
 java.lang.String getIdentitySelectString()
           
 java.lang.String getLimitString(java.lang.String sql, boolean hasOffset)
           
 java.lang.String getLimitString(java.lang.String querySelect, int offset, int limit)
           
 java.lang.String getNoColumnsInsertString()
          SQL Anywhere currently supports only "VALUES (DEFAULT)", not the ANSI standard "DEFAULT VALUES".
 java.lang.String getNullColumnString()
           
 java.sql.ResultSet getResultSet(java.sql.CallableStatement ps)
           
 java.lang.String getSelectGUIDString()
           
 java.lang.String getTableComment(java.lang.String comment)
           
 boolean isCurrentTimestampSelectStringCallable()
           
 char openQuote()
           
 java.lang.Boolean performTemporaryTableDDLInIsolation()
           
 boolean qualifyIndexName()
           
 int registerResultSetOutParameter(java.sql.CallableStatement statement, int col)
           
 boolean supportsCommentOn()
           
 boolean supportsCurrentTimestampSelection()
          Quoted identifiers are controlled through the QUOTED_IDENTIFIER connection option.
 boolean supportsEmptyInList()
           
 boolean supportsExistsInSelect()
           
 boolean supportsIdentityColumns()
           
 boolean supportsInsertSelectIdentity()
           
 boolean supportsLimit()
          SQL Anywhere Version 10 and up support both TOP N and START AT clauses
 boolean supportsLimitOffset()
           
 boolean supportsOuterJoinForUpdate()
           
 boolean supportsResultSetPositionQueryMethodsOnForwardOnlyCursor()
           
 boolean supportsTemporaryTables()
           
 boolean supportsUnionAll()
           
 boolean supportsVariableLimit()
           
 
Methods inherited from class org.hibernate.dialect.Dialect
applyLocksToSql, buildSQLExceptionConverter, convertToFirstRowValue, createCaseFragment, createOuterJoinFragment, dropTemporaryTableAfterUse, forceLimitUsage, generateTemporaryTableName, getAddForeignKeyConstraintString, getAddPrimaryKeyConstraintString, getCascadeConstraintsString, getCastTypeName, getCreateMultisetTableString, getCreateSequenceStrings, getCreateSequenceStrings, getCreateTableString, getCrossJoinSeparator, getDefaultProperties, getDialect, getDialect, getDropSequenceStrings, getDropTemporaryTableString, getForUpdateNowaitString, getForUpdateNowaitString, getForUpdateString, getForUpdateString, getForUpdateString, getFunctions, getHibernateTypeName, getHibernateTypeName, getIdentityColumnString, getIdentityInsertString, getIdentitySelectString, getKeywords, getLockingStrategy, getLowercaseFunction, getMaxAliasLength, getNativeIdentifierGeneratorClass, getQuerySequencesString, getReadLockString, getSelectClauseNullString, getSelectSequenceNextValString, getSequenceNextValString, getTableTypeString, getTypeName, getTypeName, getViolatedConstraintNameExtracter, getWriteLockString, hasAlterTable, hasDataTypeInIdentityColumn, hasSelfReferentialForeignKeyBug, isLockTimeoutParameterized, quote, requiresCastingOfParametersInSelectClause, supportsBindAsCallableArgument, supportsCascadeDelete, supportsCircularCascadeDeleteConstraints, supportsColumnCheck, supportsExpectedLobUsagePattern, supportsIfExistsAfterTableName, supportsIfExistsBeforeTableName, supportsLobValueChangePropogation, supportsLockTimeouts, supportsNotNullUnique, supportsParametersInInsertSelect, supportsPooledSequences, supportsRowValueConstructorSyntax, supportsRowValueConstructorSyntaxInInList, supportsSequences, supportsSubqueryOnMutatingTable, supportsSubselectAsInPredicateLHS, supportsTableCheck, supportsUnboundedLobLocatorMaterialization, supportsUnique, supportsUniqueConstraintInCreateAlterTable, toBooleanValueString, toString, transformSelectString, useInputStreamToInsertBlob, useMaxForLimit
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

SQLAnywhere10Dialect

public SQLAnywhere10Dialect()
Method Detail

supportsIdentityColumns

public boolean supportsIdentityColumns()
Overrides:
supportsIdentityColumns in class org.hibernate.dialect.Dialect

getIdentitySelectString

public java.lang.String getIdentitySelectString()
Overrides:
getIdentitySelectString in class org.hibernate.dialect.Dialect

getIdentityColumnString

public java.lang.String getIdentityColumnString()
Overrides:
getIdentityColumnString in class org.hibernate.dialect.Dialect

supportsInsertSelectIdentity

public boolean supportsInsertSelectIdentity()
Overrides:
supportsInsertSelectIdentity in class org.hibernate.dialect.Dialect

appendIdentitySelectToInsert

public java.lang.String appendIdentitySelectToInsert(java.lang.String insertSQL)
Overrides:
appendIdentitySelectToInsert in class org.hibernate.dialect.Dialect

getSelectGUIDString

public java.lang.String getSelectGUIDString()
Overrides:
getSelectGUIDString in class org.hibernate.dialect.Dialect

supportsLimit

public boolean supportsLimit()
SQL Anywhere Version 10 and up support both TOP N and START AT clauses

Overrides:
supportsLimit in class org.hibernate.dialect.Dialect

supportsLimitOffset

public boolean supportsLimitOffset()
Overrides:
supportsLimitOffset in class org.hibernate.dialect.Dialect

supportsVariableLimit

public boolean supportsVariableLimit()
Overrides:
supportsVariableLimit in class org.hibernate.dialect.Dialect

bindLimitParametersInReverseOrder

public boolean bindLimitParametersInReverseOrder()
Overrides:
bindLimitParametersInReverseOrder in class org.hibernate.dialect.Dialect

bindLimitParametersFirst

public boolean bindLimitParametersFirst()
Overrides:
bindLimitParametersFirst in class org.hibernate.dialect.Dialect

getLimitString

public java.lang.String getLimitString(java.lang.String sql,
                                       boolean hasOffset)
Overrides:
getLimitString in class org.hibernate.dialect.Dialect

getLimitString

public java.lang.String getLimitString(java.lang.String querySelect,
                                       int offset,
                                       int limit)
                                throws java.lang.UnsupportedOperationException
Overrides:
getLimitString in class org.hibernate.dialect.Dialect
Throws:
java.lang.UnsupportedOperationException

getForUpdateString

public java.lang.String getForUpdateString(org.hibernate.LockMode lockMode)
SQL Anywhere 10 supports READ, WRITE, and INTENT row locks. INTENT locks are sufficient to ensure that other concurrent connections cannot modify a row (though other connections can still read that row). SQL Anywhere also supports 3 modes of snapshot isolation (multi-version concurrency control (MVCC).

SQL Anywhere's FOR UPDATE clause supports FOR UPDATE BY [ LOCK | VALUES ] FOR UPDATE OF ( COLUMN LIST ) though they cannot be specified at the same time. BY LOCK is the syntax that acquires INTENT locks. FOR UPDATE BY VALUES forces the use of the KEYSET cursor, which returns a warning to the application when a row in the cursor has been subsequently modified by another connection, and an error if the row has been deleted.

SQL Anywhere does not support the FOR UPDATE NOWAIT syntax of Oracle on a statement-by-statement basis. However, the identical functionality is provided by setting the connection option BLOCKING to "OFF", or setting an appropriate timeout period through the connection option BLOCKING_TIMEOUT.

Overrides:
getForUpdateString in class org.hibernate.dialect.Dialect

forUpdateOfColumns

public boolean forUpdateOfColumns()
Overrides:
forUpdateOfColumns in class org.hibernate.dialect.Dialect

supportsOuterJoinForUpdate

public boolean supportsOuterJoinForUpdate()
Overrides:
supportsOuterJoinForUpdate in class org.hibernate.dialect.Dialect

getForReadOnlyString

public java.lang.String getForReadOnlyString()

getForUpdateByLockString

public java.lang.String getForUpdateByLockString()

getForUpdateNoWaitString

public java.lang.String getForUpdateNoWaitString()

getForUpdateString

public java.lang.String getForUpdateString(java.lang.String aliases)
Overrides:
getForUpdateString in class org.hibernate.dialect.Dialect

doesReadCommittedCauseWritersToBlockReaders

public boolean doesReadCommittedCauseWritersToBlockReaders()
Overrides:
doesReadCommittedCauseWritersToBlockReaders in class org.hibernate.dialect.Dialect

doesRepeatableReadCauseReadersToBlockWriters

public boolean doesRepeatableReadCauseReadersToBlockWriters()
Overrides:
doesRepeatableReadCauseReadersToBlockWriters in class org.hibernate.dialect.Dialect

appendLockHint

public java.lang.String appendLockHint(org.hibernate.LockMode mode,
                                       java.lang.String tableName)
Overrides:
appendLockHint in class org.hibernate.dialect.Dialect

applyLocksToSql

public java.lang.String applyLocksToSql(java.lang.String sql,
                                        java.util.Map aliasedLockModes,
                                        java.util.Map keyColumnNames)

supportsCurrentTimestampSelection

public boolean supportsCurrentTimestampSelection()
Quoted identifiers are controlled through the QUOTED_IDENTIFIER connection option.

Overrides:
supportsCurrentTimestampSelection in class org.hibernate.dialect.Dialect

getCurrentTimestampSQLFunctionName

public java.lang.String getCurrentTimestampSQLFunctionName()
Overrides:
getCurrentTimestampSQLFunctionName in class org.hibernate.dialect.Dialect

isCurrentTimestampSelectStringCallable

public boolean isCurrentTimestampSelectStringCallable()
Overrides:
isCurrentTimestampSelectStringCallable in class org.hibernate.dialect.Dialect

getCurrentTimestampSelectString

public java.lang.String getCurrentTimestampSelectString()
Overrides:
getCurrentTimestampSelectString in class org.hibernate.dialect.Dialect

closeQuote

public char closeQuote()
Overrides:
closeQuote in class org.hibernate.dialect.Dialect

openQuote

public char openQuote()
Overrides:
openQuote in class org.hibernate.dialect.Dialect

supportsEmptyInList

public boolean supportsEmptyInList()
Overrides:
supportsEmptyInList in class org.hibernate.dialect.Dialect

supportsResultSetPositionQueryMethodsOnForwardOnlyCursor

public boolean supportsResultSetPositionQueryMethodsOnForwardOnlyCursor()
Overrides:
supportsResultSetPositionQueryMethodsOnForwardOnlyCursor in class org.hibernate.dialect.Dialect

supportsExistsInSelect

public boolean supportsExistsInSelect()
Overrides:
supportsExistsInSelect in class org.hibernate.dialect.Dialect

areStringComparisonsCaseInsensitive

public boolean areStringComparisonsCaseInsensitive()
Overrides:
areStringComparisonsCaseInsensitive in class org.hibernate.dialect.Dialect

dropConstraints

public boolean dropConstraints()
Overrides:
dropConstraints in class org.hibernate.dialect.Dialect

getAddColumnString

public java.lang.String getAddColumnString()
Overrides:
getAddColumnString in class org.hibernate.dialect.Dialect

getNullColumnString

public java.lang.String getNullColumnString()
Overrides:
getNullColumnString in class org.hibernate.dialect.Dialect

qualifyIndexName

public boolean qualifyIndexName()
Overrides:
qualifyIndexName in class org.hibernate.dialect.Dialect

getDropForeignKeyString

public java.lang.String getDropForeignKeyString()
Overrides:
getDropForeignKeyString in class org.hibernate.dialect.Dialect

supportsCommentOn

public boolean supportsCommentOn()
Overrides:
supportsCommentOn in class org.hibernate.dialect.Dialect

getTableComment

public java.lang.String getTableComment(java.lang.String comment)
Overrides:
getTableComment in class org.hibernate.dialect.Dialect

getColumnComment

public java.lang.String getColumnComment(java.lang.String comment)
Overrides:
getColumnComment in class org.hibernate.dialect.Dialect

getNoColumnsInsertString

public java.lang.String getNoColumnsInsertString()
SQL Anywhere currently supports only "VALUES (DEFAULT)", not the ANSI standard "DEFAULT VALUES". This latter syntax will be supported in the SQL Anywhere 11.0.1 release. For the moment, "VALUES (DEFAULT)" works only for a single-column table.

Overrides:
getNoColumnsInsertString in class org.hibernate.dialect.Dialect

supportsTemporaryTables

public boolean supportsTemporaryTables()
Overrides:
supportsTemporaryTables in class org.hibernate.dialect.Dialect

getCreateTemporaryTableString

public java.lang.String getCreateTemporaryTableString()
Overrides:
getCreateTemporaryTableString in class org.hibernate.dialect.Dialect

getCreateTemporaryTablePostfix

public java.lang.String getCreateTemporaryTablePostfix()
Overrides:
getCreateTemporaryTablePostfix in class org.hibernate.dialect.Dialect

performTemporaryTableDDLInIsolation

public java.lang.Boolean performTemporaryTableDDLInIsolation()
Overrides:
performTemporaryTableDDLInIsolation in class org.hibernate.dialect.Dialect

registerResultSetOutParameter

public int registerResultSetOutParameter(java.sql.CallableStatement statement,
                                         int col)
                                  throws java.sql.SQLException
Overrides:
registerResultSetOutParameter in class org.hibernate.dialect.Dialect
Throws:
java.sql.SQLException

getResultSet

public java.sql.ResultSet getResultSet(java.sql.CallableStatement ps)
                                throws java.sql.SQLException
Overrides:
getResultSet in class org.hibernate.dialect.Dialect
Throws:
java.sql.SQLException

supportsUnionAll

public boolean supportsUnionAll()
Overrides:
supportsUnionAll in class org.hibernate.dialect.Dialect