Package org.apache.openjpa.jdbc.sql
Class SybaseDictionary
- java.lang.Object
-
- org.apache.openjpa.jdbc.sql.DBDictionary
-
- org.apache.openjpa.jdbc.sql.AbstractSQLServerDictionary
-
- org.apache.openjpa.jdbc.sql.SybaseDictionary
-
- All Implemented Interfaces:
JoinSyntaxes,Configurable,IdentifierConfiguration,ConnectionDecorator,LoggingConnectionDecorator.SQLWarningHandler
public class SybaseDictionary extends AbstractSQLServerDictionary
Dictionary for Sybase. The main point of interest is that by default, every table that is created will have a unique column named "UNQ_INDEX" of the "IDENTITY" type. OpenJPA will not ever utilize this column. However, due to internal Sybase restrictions, this column is required in order to support pessimistic (datastore) locking, since Sybase requires that any tables in a "SELECT ... FOR UPDATE" clause have a unique index that is not included in the list of columns, as described in the Sybase documentation. This behavior can be surpressed by setting the dictionary propertyCreateIdentityColumn=false. The name of the unique column can be changed by setting the propertyIdentityColumnName=COLUMN_NAME. A good Sybase type reference is can be found here.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classSybaseDictionary.SybaseConnectionConnection wrapper to cache theConnection.getCatalog()result, which takes a very long time with the Sybase Connection (and which we frequently invoke).-
Nested classes/interfaces inherited from class org.apache.openjpa.jdbc.sql.DBDictionary
DBDictionary.DateMillisecondBehaviors, DBDictionary.SerializedData
-
-
Field Summary
Fields Modifier and Type Field Description booleancreateIdentityColumnIf true, then whenever theschematoolcreates a table, it will append an additional IDENTITY column to the table's creation SQL.StringidentityColumnNameIfcreateIdentityColumnis true, then theidentityColumnNamewill be the name of the additional unique column that will be created.booleanignoreNumericTruncationIf true, Sybase will ignore numeric truncation on insert or update operations.static StringNUMERIC_TRUNCATION_OFF_SQLstatic StringRIGHT_TRUNCATION_ON_SQL-
Fields inherited from class org.apache.openjpa.jdbc.sql.DBDictionary
_procs, _proxyManager, allowQueryTimeoutOnFindUpdate, allowsAliasInBulkClause, arrayTypeName, autoAssignClause, autoAssignTypeName, batchLimit, bigintTypeName, binaryTypeName, bitLengthFunction, bitTypeName, blobBufferSize, blobTypeName, booleanRepresentation, booleanTypeName, castFunction, catalogSeparator, CENTI, characterColumnSize, charTypeName, clobBufferSize, clobTypeName, closePoolSQL, concatenateDelimiter, concatenateFunction, conf, connected, CONS_NAME_AFTER, CONS_NAME_BEFORE, CONS_NAME_MID, constraintNameMode, createPrimaryKeys, crossJoinClause, currentDateFunction, currentTimeFunction, currentTimestampFunction, databaseProductName, databaseProductVersion, dateFractionDigits, datePrecision, dateTypeName, DECI, decimalTypeName, defaultSchemaName, delimitedCase, disableAlterSeqenceIncrementBy, disableSchemaFactoryColumnTypeErrors, distinctCountColumnSeparator, distinctTypeName, doubleTypeName, driverVendor, dropTableSQL, extractDateTimeFieldFunction, fixedSizeTypeNames, fixedSizeTypeNameSet, floatTypeName, forUpdateClause, fractionalTypeNameSet, fullResultCollectionInOrderByRelation, getStringVal, inClauseLimit, indexPhysicalForeignKeys, initializationSQL, innerJoinClause, integerTypeName, invalidColumnWordSet, isJDBC3, isJDBC4, javaObjectTypeName, javaToDbColumnNameProcessing, joinSyntax, lastGeneratedKeyQuery, leadingDelimiter, log, longVarbinaryTypeName, longVarcharTypeName, maxAutoAssignNameLength, maxColumnNameLength, maxConstraintNameLength, maxEmbeddedBlobSize, maxEmbeddedClobSize, maxIndexesPerTable, maxIndexNameLength, maxTableNameLength, MICRO, MILLI, NAME_ANY, NAME_SEQUENCE, NAME_TABLE, nameConcatenator, NANO, nativeSequenceType, nextSequenceQuery, NO_BATCH, nullTypeName, numericTypeName, otherTypeName, outerJoinClause, platform, RANGE_POST_DISTINCT, RANGE_POST_LOCK, RANGE_POST_SELECT, RANGE_PRE_DISTINCT, rangePosition, realTypeName, refTypeName, reportsSuccessNoInfoOnBatchUpdates, requiresAliasForSubselect, requiresAutoCommitForMetaData, requiresCastForComparisons, requiresCastForMathFunctions, requiresConditionForCrossJoin, requiresSearchStringEscapeForLike, requiresTargetForDelete, reservedWords, reservedWordSet, roundTimeToMillisec, SCHEMA_CASE_LOWER, SCHEMA_CASE_PRESERVE, SCHEMA_CASE_UPPER, schemaCase, searchStringEscape, SEC, selectWords, selectWordSet, sequenceNameSQL, sequenceSchemaSQL, sequenceSQL, setStringRightTruncationOn, simulateLocking, smallintTypeName, sqlStateCodes, storageLimitationsFatal, storeCharsAsNumbers, storeLargeNumbersAsStrings, stringLengthFunction, structTypeName, substringFunctionName, supportsAlterTableWithAddColumn, supportsAlterTableWithDropColumn, supportsAutoAssign, supportsCascadeDeleteAction, supportsCascadeUpdateAction, supportsCaseConversionForLob, supportsComments, supportsCorrelatedSubselect, supportsDefaultDeleteAction, supportsDefaultUpdateAction, supportsDeferredConstraints, supportsDelimitedIdentifiers, supportsForeignKeys, supportsForeignKeysComposite, supportsGeneralCaseExpression, supportsGetGeneratedKeys, supportsHaving, supportsLockingWithDistinctClause, supportsLockingWithInnerJoin, supportsLockingWithMultipleTables, supportsLockingWithOrderClause, supportsLockingWithOuterJoin, supportsLockingWithSelectRange, supportsModOperator, supportsMultipleNontransactionalResultSets, supportsNullDeleteAction, supportsNullTableForGetColumns, supportsNullTableForGetImportedKeys, supportsNullTableForGetIndexInfo, supportsNullTableForGetPrimaryKeys, supportsNullUniqueColumn, supportsNullUpdateAction, supportsParameterInSelect, supportsQueryTimeout, supportsRestrictDeleteAction, supportsRestrictUpdateAction, supportsSchemaForGetColumns, supportsSchemaForGetTables, supportsSelectEndIndex, supportsSelectForUpdate, supportsSelectFromFinalTable, supportsSelectStartIndex, supportsSimpleCaseExpression, supportsSubselect, supportsUniqueConstraints, supportsUuidType, supportsXMLColumn, systemSchemas, systemSchemaSet, systemTables, systemTableSet, tableForUpdateClause, tableLengthIncludesSchema, tableTypes, timestampTypeName, timestampWithZoneTypeName, timeTypeName, timeWithZoneTypeName, tinyintTypeName, toLowerCaseFunction, toUpperCaseFunction, trailingDelimiter, trimBothFunction, trimLeadingFunction, trimSchemaName, trimStringColumns, trimTrailingFunction, typeModifierSet, UNLIMITED, useGetBestRowIdentifierForPrimaryKeys, useGetBytesForBlobs, useGetObjectForBlobs, useGetStringForClobs, useJDBC4SetBinaryStream, useNativeSequenceCache, useSchemaName, useSetBytesForBlobs, useSetStringForClobs, useWildCardForCount, uuidTypeName, validationSQL, varbinaryTypeName, varcharTypeName, VENDOR_DATADIRECT, VENDOR_OTHER, xmlTypeEncoding, xmlTypeName
-
Fields inherited from interface org.apache.openjpa.jdbc.sql.JoinSyntaxes
SYNTAX_DATABASE, SYNTAX_SQL92, SYNTAX_TRADITIONAL
-
-
Constructor Summary
Constructors Constructor Description SybaseDictionary()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Connectiondecorate(Connection conn)Decorate the given connection if needed.voidendConfiguration()Invoked upon completion of bean property configuration for this object.protected booleangetBooleanFromResultSet(ResultSet rs, String jdbcName, String sybaseName)Helper method obtains a boolean value from a given column in a ResultSet.String[]getCreateTableSQL(Table table)Return a series of SQL statements to create the given table, complete with columns.protected StringgetDeclareColumnSQL(Column col, boolean alter)Return the declaration SQL for the given column.String[]getDropColumnSQL(Column column)Return a series of SQL statements to drop the given column from its table.StringgetIdentityColumnName()StringgetIsNotNullSQL(String colAlias, int colType)StringgetIsNullSQL(String colAlias, int colType)intgetJDBCType(int metaTypeCode, boolean lob)protected StringgetStringFromResultSet(ResultSet rs, String jdbcName, String sybaseName)Helper method obtains a string value from a given column in a ResultSet.voidindexOf(SQLBuffer buf, FilterValue str, FilterValue find, FilterValue start)Invoke this database's indexOf function.booleanisFatalException(int subtype, SQLException ex)Determine if the given SQL Exception is fatal or recoverable (such as a timeout).protected IndexnewIndex(ResultSet idxMeta)Create a new index from the information in the index metadata.protected PrimaryKeynewPrimaryKey(ResultSet pkMeta)Create a new primary key from the information in the schema metadata.voidrefSchemaComponents(Table table)Increment the reference count of any table components that this dictionary adds that are not used by mappings.voidsetBigInteger(PreparedStatement stmnt, int idx, BigInteger val, Column col)Set the given value as a parameter to the statement.-
Methods inherited from class org.apache.openjpa.jdbc.sql.AbstractSQLServerDictionary
appendSelectRange, getColumns, getFullName, setNull, substring
-
Methods inherited from class org.apache.openjpa.jdbc.sql.DBDictionary
addCastAsType, addErrorCode, appendCast, appendLength, appendNumericCast, appendSelect, appendSize, appendUpdates, appendXmlComparison, applyRange, assertSupport, calculateValue, canOuterJoin, closeDataSource, combineForeignKey, comment, comparison, configureNamingRules, connectedConfiguration, convertSchemaCase, convertSchemaCase, copy, copy, createIndexIfNecessary, createIndexIfNecessary, deleteStream, delimitAll, executeQuery, fromDBName, getAddColumnSQL, getAddForeignKeySQL, getAddPrimaryKeySQL, getAlterSequenceSQL, getArray, getAsciiStream, getBatchFetchSize, getBatchLimit, getBatchUpdateCount, getBigDecimal, getBigInteger, getBinaryStream, getBlob, getBlobObject, getBoolean, getBooleanRepresentation, getByte, getBytes, getCalendar, getCastFunction, getCastFunction, getCatalogNameForMetadata, getCatalogNameForMetadata, getChar, getCharacterStream, getClob, getClobString, getColumnDBName, getColumnIdentifier, getColumnNameForMetadata, getColumnNameForMetadata, getColumns, getConversionKey, getCreateIndexSQL, getCreateSequenceSQL, getCreateTableSQL, getDate, getDate, getDateFractionDigits, getDefaultIdentifierRule, getDefaultSchemaName, getDeleteTableContentsSQL, getDeleteTargets, getDelimitedCase, getDelimitIdentifiers, getDouble, getDropForeignKeySQL, getDropIndexSQL, getDropPrimaryKeySQL, getDropSequenceSQL, getDropTableSQL, getFloat, getForeignKeyConstraintSQL, getForUpdateClause, getFrom, getFromSelect, getFullIdentifier, getFullName, getFullName, getGeneratedKey, getGeneratedKeySequenceName, getGenKeySeqName, getIdentifierConcatenator, getIdentifierDelimiter, getIdentifierRule, getIdentifierRules, getImportedKeys, getImportedKeys, getImportedKeys, getImportedKeys, getIndexInfo, getIndexInfo, getInt, getInvalidColumnWordSet, getJDBCType, getJDBCType, getKey, getLeadingDelimiter, getLOBStream, getLocalDate, getLocalDateTime, getLocale, getLocalTime, getLog, getLong, getMajorVersion, getMarkerForInsertUpdate, getMillisecondBehavior, getMinorVersion, getNamingUtil, getNumber, getObject, getOffsetDateTime, getOffsetTime, getPlaceholderValueString, getPreferredType, getPrimaryKeyConstraintSQL, getPrimaryKeys, getPrimaryKeys, getPrimaryKeysFromBestRowIdentifier, getPrimaryKeysFromBestRowIdentifier, getPrimaryKeysFromGetPrimaryKeys, getPrimaryKeysFromGetPrimaryKeys, getRef, getSchemaCase, getSchemaNameForMetadata, getSchemaNameForMetadata, getSelectOperation, getSelects, getSelectTableAliases, getSequence, getSequences, getSequences, getSequencesSQL, getSequencesSQL, getShort, getStoredProcedure, getString, getSupportsDelimitedIdentifiers, getSupportsXMLColumn, getTableNameForMetadata, getTableNameForMetadata, getTables, getTables, getTime, getTimestamp, getTrailingDelimiter, getTrimSchemaName, getTypeName, getTypeName, getUniqueConstraintSQL, getValidColumnName, getValidColumnName, getValidColumnName, getValidColumnName, getValidForeignKeyName, getValidForeignKeyName, getValidIndexName, getValidIndexName, getValidPrimaryKeyName, getValidSequenceName, getValidSequenceName, getValidTableName, getValidTableName, getValidUniqueName, getValidUniqueName, getVersionColumn, getVersionColumn, getWhere, getXMLTypeEncoding, handleWarning, insertBlobForStreamingLoad, insertClobForStreamingLoad, insertSize, isImplicitJoin, isSelect, isSystemIndex, isSystemIndex, isSystemSequence, isSystemSequence, isSystemSequence, isSystemTable, isSystemTable, isUsingLimit, isUsingOffset, isUsingOrderBy, isUsingRange, makeNameValid, makeNameValid, makeNameValid, makeNameValid, matchErrorState, mathFunction, needsToCreateIndex, needsToCreateIndex, newColumn, newForeignKey, newSequence, newStoreException, newTable, prepareStatement, processDBColumnName, putBytes, putChars, putString, serialize, setArray, setAsciiStream, setBatchLimit, setBigDecimal, setBinaryStream, setBlob, setBlobObject, setBoolean, setBooleanRepresentation, setByte, setBytes, setCalendar, setChar, setCharacterStream, setClob, setClobString, setConfiguration, setDate, setDate, setDateMillisecondBehavior, setDefaultSchemaName, setDelimitedCase, setDelimitIdentifiers, setDouble, setFloat, setInt, setJoinSyntax, setLeadingDelimiter, setLocalDate, setLocalDateTime, setLocale, setLocalTime, setLong, setMajorVersion, setMinorVersion, setNumber, setObject, setOffsetDateTime, setOffsetTime, setQueryTimeout, setRef, setShort, setStatementQueryTimeout, setString, setSupportsDelimitedIdentifiers, setSupportsXMLColumn, setTime, setTimeouts, setTimeouts, setTimestamp, setTrailingDelimiter, setTrimSchemaName, setTyped, setUnknown, setUnknown, setXMLTypeEncoding, shorten, startConfiguration, storageWarning, supportsDeferredForeignKeyConstraints, supportsDeferredUniqueConstraints, supportsDeleteAction, supportsIsolationForUpdate, supportsLocking, supportsRandomAccessResultSet, supportsUpdateAction, toBulkOperation, toDBName, toDBName, toDelete, toNativeJoin, toOperation, toOperation, toSelect, toSelect, toSelect, toSelect, toSelect, toSelectCount, toSnakeCase, toSQL92Join, toTraditionalJoin, toUpdate, updateBlob, updateClob, validateBatchProcess, validateDBSpecificBatchProcess, versionEqualOrEarlierThan, versionEqualOrLaterThan, versionLaterThan
-
-
-
-
Field Detail
-
RIGHT_TRUNCATION_ON_SQL
public static String RIGHT_TRUNCATION_ON_SQL
-
NUMERIC_TRUNCATION_OFF_SQL
public static String NUMERIC_TRUNCATION_OFF_SQL
-
createIdentityColumn
public boolean createIdentityColumn
If true, then whenever theschematoolcreates a table, it will append an additional IDENTITY column to the table's creation SQL. This is so Sybase will be able to performSELECT...FOR UPDATEstatements.
-
identityColumnName
public String identityColumnName
IfcreateIdentityColumnis true, then theidentityColumnNamewill be the name of the additional unique column that will be created.
-
ignoreNumericTruncation
public boolean ignoreNumericTruncation
If true, Sybase will ignore numeric truncation on insert or update operations. Otherwise, the operation will fail. The default value, false is in accordance with SQL92.
-
-
Method Detail
-
getJDBCType
public int getJDBCType(int metaTypeCode, boolean lob)Description copied from class:DBDictionary- Overrides:
getJDBCTypein classDBDictionary
-
setBigInteger
public void setBigInteger(PreparedStatement stmnt, int idx, BigInteger val, Column col) throws SQLException
Description copied from class:DBDictionarySet the given value as a parameter to the statement.- Overrides:
setBigIntegerin classDBDictionary- Throws:
SQLException
-
getCreateTableSQL
public String[] getCreateTableSQL(Table table)
Description copied from class:DBDictionaryReturn a series of SQL statements to create the given table, complete with columns. Indexes and constraints will be created separately.- Overrides:
getCreateTableSQLin classDBDictionary
-
getDeclareColumnSQL
protected String getDeclareColumnSQL(Column col, boolean alter)
Description copied from class:DBDictionaryReturn the declaration SQL for the given column. This method is used for each column from withinDBDictionary.getCreateTableSQL(org.apache.openjpa.jdbc.schema.Table, org.apache.openjpa.jdbc.schema.SchemaGroup)andDBDictionary.getAddColumnSQL(org.apache.openjpa.jdbc.schema.Column).- Overrides:
getDeclareColumnSQLin classDBDictionary
-
getDropColumnSQL
public String[] getDropColumnSQL(Column column)
Description copied from class:DBDictionaryReturn a series of SQL statements to drop the given column from its table. Return an empty array if operation not supported. ReturnsALTER TABLE <table name> DROP COLUMN <col name>by default.- Overrides:
getDropColumnSQLin classDBDictionary
-
refSchemaComponents
public void refSchemaComponents(Table table)
Description copied from class:DBDictionaryIncrement the reference count of any table components that this dictionary adds that are not used by mappings. Does nothing by default.- Overrides:
refSchemaComponentsin classDBDictionary
-
endConfiguration
public void endConfiguration()
Description copied from interface:ConfigurableInvoked upon completion of bean property configuration for this object.- Specified by:
endConfigurationin interfaceConfigurable- Overrides:
endConfigurationin classDBDictionary
-
decorate
public Connection decorate(Connection conn) throws SQLException
Description copied from class:DBDictionaryDecorate the given connection if needed. Some databases require special handling for JDBC bugs. This implementation issues anyDBDictionary.initializationSQLthat has been set for the dictionary but does not decorate the connection.- Specified by:
decoratein interfaceConnectionDecorator- Overrides:
decoratein classDBDictionary- Throws:
SQLException
-
getStringFromResultSet
protected String getStringFromResultSet(ResultSet rs, String jdbcName, String sybaseName) throws SQLException
Helper method obtains a string value from a given column in a ResultSet. Strings provided are column names, jdbcName will be tried first if an SQLException occurs we'll try the sybase name.- Throws:
SQLException
-
getBooleanFromResultSet
protected boolean getBooleanFromResultSet(ResultSet rs, String jdbcName, String sybaseName) throws SQLException
Helper method obtains a boolean value from a given column in a ResultSet. Strings provided are column names, jdbcName will be tried first if an SQLException occurs we'll try the sybase name.- Throws:
SQLException
-
newPrimaryKey
protected PrimaryKey newPrimaryKey(ResultSet pkMeta) throws SQLException
Create a new primary key from the information in the schema metadata.- Overrides:
newPrimaryKeyin classDBDictionary- Throws:
SQLException
-
newIndex
protected Index newIndex(ResultSet idxMeta) throws SQLException
Create a new index from the information in the index metadata.- Overrides:
newIndexin classDBDictionary- Throws:
SQLException
-
isFatalException
public boolean isFatalException(int subtype, SQLException ex)Description copied from class:DBDictionaryDetermine if the given SQL Exception is fatal or recoverable (such as a timeout). This implementation always returns true (i.e. all exceptions are fatal). The current dictionary implementation can overwrite this method to mark certain exception conditions as recoverable error.- Overrides:
isFatalExceptionin classDBDictionary- Parameters:
subtype- A constant indicating the category of error as defined inStoreException.ex- original SQL Exception as raised by the database driver.- Returns:
- false if the error is fatal.
-
getIsNullSQL
public String getIsNullSQL(String colAlias, int colType)
- Overrides:
getIsNullSQLin classDBDictionary
-
getIsNotNullSQL
public String getIsNotNullSQL(String colAlias, int colType)
- Overrides:
getIsNotNullSQLin classDBDictionary
-
getIdentityColumnName
public String getIdentityColumnName()
- Overrides:
getIdentityColumnNamein classDBDictionary
-
indexOf
public void indexOf(SQLBuffer buf, FilterValue str, FilterValue find, FilterValue start)
Description copied from class:DBDictionaryInvoke this database's indexOf function.- Overrides:
indexOfin classDBDictionary- Parameters:
buf- the SQL buffer to write the indexOf invocation tostr- a query value representing the target stringfind- a query value representing the search stringstart- a query value representing the start index, or null to start at the beginning
-
-