org.apache.openjpa.jdbc.sql
Class FirebirdDictionary

java.lang.Object
  extended by org.apache.openjpa.jdbc.sql.DBDictionary
      extended by org.apache.openjpa.jdbc.sql.FirebirdDictionary
All Implemented Interfaces:
JoinSyntaxes, Configurable, IdentifierConfiguration, ConnectionDecorator, LoggingConnectionDecorator.SQLWarningHandler

public class FirebirdDictionary
extends DBDictionary

Dictionary for Firebird. Supports Firebird versions 1.5, 2.0 and 2.1.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.openjpa.jdbc.sql.DBDictionary
DBDictionary.SerializedData
 
Field Summary
protected  java.lang.String alterSequenceSQL
           
protected  java.lang.String alterSequenceSQLFB15
           
protected  java.lang.String alterSequenceSQLFB20
           
protected  java.lang.String createSequenceSQL
           
protected  java.lang.String createSequenceSQLFB15
           
protected  java.lang.String createSequenceSQLFB20
           
protected  java.lang.String dropSequenceSQLFB15
           
static int FB_VERSION_15
           
static int FB_VERSION_20
           
static int FB_VERSION_21
           
 int firebirdVersion
           
 int indexedVarcharMaxSizeFB15
           
protected  long maxRowNumberInRange
           
protected  java.lang.String nextSequenceQueryFB15
           
protected  java.lang.String nextSequenceQueryFB20
           
static java.lang.String RANGE_SYNTAX_FIRST_SKIP
           
static java.lang.String RANGE_SYNTAX_ROWS
           
 java.lang.String rangeSyntax
           
 
Fields inherited from class org.apache.openjpa.jdbc.sql.DBDictionary
allowsAliasInBulkClause, arrayTypeName, autoAssignClause, autoAssignTypeName, batchLimit, bigintTypeName, binaryTypeName, bitLengthFunction, bitTypeName, blobBufferSize, blobTypeName, 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, datePrecision, dateTypeName, DECI, decimalTypeName, delimitedCase, distinctCountColumnSeparator, distinctTypeName, doubleTypeName, driverVendor, dropTableSQL, fixedSizeTypeNames, fixedSizeTypeNameSet, floatTypeName, forUpdateClause, getStringVal, inClauseLimit, initializationSQL, innerJoinClause, integerTypeName, invalidColumnWordSet, isJDBC3, javaObjectTypeName, 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, 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, supportsNullUpdateAction, supportsParameterInSelect, supportsQueryTimeout, supportsRestrictDeleteAction, supportsRestrictUpdateAction, supportsSchemaForGetColumns, supportsSchemaForGetTables, supportsSelectEndIndex, supportsSelectForUpdate, supportsSelectFromFinalTable, supportsSelectStartIndex, supportsSimpleCaseExpression, supportsSubselect, supportsUniqueConstraints, supportsXMLColumn, systemSchemas, systemSchemaSet, systemTables, systemTableSet, tableForUpdateClause, tableTypes, timestampTypeName, timeTypeName, tinyintTypeName, toLowerCaseFunction, toUpperCaseFunction, trailingDelimiter, trimBothFunction, trimLeadingFunction, trimSchemaName, trimTrailingFunction, typeModifierSet, UNLIMITED, useGetBestRowIdentifierForPrimaryKeys, useGetBytesForBlobs, useGetObjectForBlobs, useGetStringForClobs, useSchemaName, useSetBytesForBlobs, useSetStringForClobs, useWildCardForCount, 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
FirebirdDictionary()
           
 
Method Summary
protected  void appendSelectRange(SQLBuffer buf, long start, long end, boolean subselect)
          Use either FIRST <p> SKIP <q> or ROWS <m> TO <n> syntax.
protected  java.lang.String appendSize(Column col, java.lang.String typeName)
          On Firebird 1.5 reduce the size of indexed VARCHAR column to 252 or a value specified by user.
 void connectedConfiguration(java.sql.Connection conn)
          Determine Firebird version and configure itself accordingly.
protected  int determineFirebirdVersion(java.sql.Connection con)
          Determine Firebird version either by using JDBC 3 methods or, if they are not available, by parsing the value returned by DatabaseMetaData.getDatabaseProductVersion().
protected  void determineRangeSyntax()
          Determine range syntax to be used depending on Firebird version.
protected  java.lang.String getColumnNameForMetadata(java.lang.String columnName)
          Return % if columnName is null, otherwise delegate to super implementation.
 java.lang.String[] getCreateSequenceSQL(Sequence seq)
          Return either CREATE SEQUENCE <sequence name> or CREATE GENERATOR <sequence name>.
 java.lang.String[] getDropColumnSQL(Column column)
          Return ALTER TABLE <table name> DROP <col name>.
 java.lang.String[] getDropSequenceSQL(Sequence seq)
          On Firebird 1.5 return DROP GENERATOR <sequence name>.
 java.lang.String getPlaceholderValueString(Column col)
          Return <value> AS <type>.
protected  java.lang.String getSequencesSQL(DBIdentifier schemaName, DBIdentifier sequenceName)
           
protected  java.lang.String getSequencesSQL(java.lang.String schemaName, java.lang.String sequenceName)
          Return Firebird-specific statement to select the list of sequences.
protected  java.lang.String getTableNameForMetadata(DBIdentifier tableName)
          Returns the table name that will be used for obtaining information from DatabaseMetaData.
protected  java.lang.String getTableNameForMetadata(java.lang.String tableName)
          Return % if tableName is null, otherwise delegate to super implementation.
 void indexOf(SQLBuffer buf, FilterValue str, FilterValue find, FilterValue start)
          Throw UnsupportedException.
protected  int matchErrorState(java.util.Map<java.lang.Integer,java.util.Set<java.lang.String>> errorStates, java.sql.SQLException ex)
          Use error code as SQL state returned by Firebird is ambiguous.
protected  Sequence newSequence(java.sql.ResultSet sequenceMeta)
          Call super implementation and trim sequence name.
 void substring(SQLBuffer buf, FilterValue str, FilterValue start, FilterValue end)
          Use SUBSTRING(<col name> FROM <m> FOR <n>).
 
Methods inherited from class org.apache.openjpa.jdbc.sql.DBDictionary
addCastAsType, addErrorCode, appendCast, appendLength, appendNumericCast, appendSelect, appendUpdates, appendXmlComparison, assertSupport, calculateValue, canOuterJoin, closeDataSource, combineForeignKey, comment, comparison, configureNamingRules, convertSchemaCase, convertSchemaCase, copy, copy, createIndexIfNecessary, createIndexIfNecessary, decorate, deleteStream, delimitAll, endConfiguration, executeQuery, fromDBName, getAddColumnSQL, getAddForeignKeySQL, getAddPrimaryKeySQL, getArray, getAsciiStream, getBatchFetchSize, getBatchLimit, getBatchUpdateCount, getBigDecimal, getBigInteger, getBinaryStream, getBlob, getBlobObject, getBoolean, getByte, getBytes, getCalendar, getCastFunction, getCastFunction, getCatalogNameForMetadata, getCatalogNameForMetadata, getChar, getCharacterStream, getClob, getClobString, getColumnDBName, getColumnIdentifier, getColumnNameForMetadata, getColumns, getColumns, getConversionKey, getCreateIndexSQL, getCreateTableSQL, getDate, getDate, getDeclareColumnSQL, getDefaultIdentifierRule, getDefaultSchemaName, getDeleteTableContentsSQL, getDeleteTargets, getDelimitedCase, getDelimitIdentifiers, getDouble, getDropForeignKeySQL, getDropIndexSQL, getDropPrimaryKeySQL, getDropTableSQL, getFloat, getForeignKeyConstraintSQL, getForUpdateClause, getFrom, getFromSelect, getFullIdentifier, getFullName, getFullName, getFullName, getGeneratedKey, getGeneratedKeySequenceName, getIdentifierConcatenator, getIdentifierDelimiter, getIdentifierRule, getIdentifierRules, getImportedKeys, getImportedKeys, getImportedKeys, getImportedKeys, getIndexInfo, getIndexInfo, getInt, getInvalidColumnWordSet, getJDBCType, getJDBCType, getJDBCType, getKey, getLeadingDelimiter, getLOBStream, getLocale, getLog, getLong, getNamingUtil, getNumber, getObject, getPreferredType, getPrimaryKeyConstraintSQL, getPrimaryKeys, getPrimaryKeys, getPrimaryKeysFromBestRowIdentifier, getPrimaryKeysFromBestRowIdentifier, getPrimaryKeysFromGetPrimaryKeys, getPrimaryKeysFromGetPrimaryKeys, getRef, getSchemaCase, getSchemaNameForMetadata, getSchemaNameForMetadata, getSelectOperation, getSelects, getSelectTableAliases, getSequence, getSequences, getSequences, getShort, getString, getSupportsDelimitedIdentifiers, getSupportsXMLColumn, 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, isFatalException, isSelect, isSystemIndex, isSystemIndex, isSystemSequence, isSystemSequence, isSystemTable, isSystemTable, makeNameValid, makeNameValid, makeNameValid, makeNameValid, mathFunction, needsToCreateIndex, newColumn, newForeignKey, newIndex, newPrimaryKey, newStoreException, newTable, prepareStatement, putBytes, putChars, putString, refSchemaComponents, serialize, setArray, setAsciiStream, setBatchLimit, setBigDecimal, setBigInteger, setBinaryStream, setBlob, setBlobObject, setBoolean, setByte, setBytes, setCalendar, setChar, setCharacterStream, setClob, setClobString, setConfiguration, setDate, setDate, setDefaultSchemaName, setDelimitedCase, setDelimitIdentifiers, setDouble, setFloat, setInt, setJoinSyntax, setLeadingDelimiter, setLocale, setLong, setNull, setNumber, setObject, setQueryTimeout, setRef, setShort, setStatementQueryTimeout, setString, setSupportsDelimitedIdentifiers, setSupportsXMLColumn, setTime, setTimeouts, setTimeouts, setTimestamp, setTrailingDelimiter, setTrimSchemaName, setTyped, 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, toSQL92Join, toTraditionalJoin, toUpdate, updateBlob, updateClob, validateBatchProcess, validateDBSpecificBatchProcess
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

firebirdVersion

public int firebirdVersion

indexedVarcharMaxSizeFB15

public int indexedVarcharMaxSizeFB15

rangeSyntax

public java.lang.String rangeSyntax

maxRowNumberInRange

protected long maxRowNumberInRange

alterSequenceSQLFB15

protected java.lang.String alterSequenceSQLFB15

alterSequenceSQLFB20

protected java.lang.String alterSequenceSQLFB20

createSequenceSQLFB15

protected java.lang.String createSequenceSQLFB15

createSequenceSQLFB20

protected java.lang.String createSequenceSQLFB20

dropSequenceSQLFB15

protected java.lang.String dropSequenceSQLFB15

nextSequenceQueryFB15

protected java.lang.String nextSequenceQueryFB15

nextSequenceQueryFB20

protected java.lang.String nextSequenceQueryFB20

alterSequenceSQL

protected java.lang.String alterSequenceSQL

createSequenceSQL

protected java.lang.String createSequenceSQL

FB_VERSION_15

public static final int FB_VERSION_15
See Also:
Constant Field Values

FB_VERSION_20

public static final int FB_VERSION_20
See Also:
Constant Field Values

FB_VERSION_21

public static final int FB_VERSION_21
See Also:
Constant Field Values

RANGE_SYNTAX_FIRST_SKIP

public static final java.lang.String RANGE_SYNTAX_FIRST_SKIP
See Also:
Constant Field Values

RANGE_SYNTAX_ROWS

public static final java.lang.String RANGE_SYNTAX_ROWS
See Also:
Constant Field Values
Constructor Detail

FirebirdDictionary

public FirebirdDictionary()
Method Detail

connectedConfiguration

public void connectedConfiguration(java.sql.Connection conn)
                            throws java.sql.SQLException
Determine Firebird version and configure itself accordingly.

Overrides:
connectedConfiguration in class DBDictionary
Throws:
java.sql.SQLException

appendSelectRange

protected void appendSelectRange(SQLBuffer buf,
                                 long start,
                                 long end,
                                 boolean subselect)
Use either FIRST <p> SKIP <q> or ROWS <m> TO <n> syntax. If ROWS variant is used and end equals Long.MAX_VALUE, a constant is used as <n> value.

Overrides:
appendSelectRange in class DBDictionary

determineFirebirdVersion

protected int determineFirebirdVersion(java.sql.Connection con)
                                throws java.sql.SQLException
Determine Firebird version either by using JDBC 3 methods or, if they are not available, by parsing the value returned by DatabaseMetaData.getDatabaseProductVersion(). User can override Firebird version.

Throws:
java.sql.SQLException

determineRangeSyntax

protected void determineRangeSyntax()
Determine range syntax to be used depending on Firebird version. User can override range syntax.


getPlaceholderValueString

public java.lang.String getPlaceholderValueString(Column col)
Return <value> AS <type>.

Overrides:
getPlaceholderValueString in class DBDictionary

getTableNameForMetadata

protected java.lang.String getTableNameForMetadata(java.lang.String tableName)
Return % if tableName is null, otherwise delegate to super implementation.

Overrides:
getTableNameForMetadata in class DBDictionary

getTableNameForMetadata

protected java.lang.String getTableNameForMetadata(DBIdentifier tableName)
Description copied from class: DBDictionary
Returns the table name that will be used for obtaining information from DatabaseMetaData.

Overrides:
getTableNameForMetadata in class DBDictionary

getColumnNameForMetadata

protected java.lang.String getColumnNameForMetadata(java.lang.String columnName)
Return % if columnName is null, otherwise delegate to super implementation.

Overrides:
getColumnNameForMetadata in class DBDictionary

getDropColumnSQL

public java.lang.String[] getDropColumnSQL(Column column)
Return ALTER TABLE <table name> DROP <col name>.

Overrides:
getDropColumnSQL in class DBDictionary

getCreateSequenceSQL

public java.lang.String[] getCreateSequenceSQL(Sequence seq)
Return either CREATE SEQUENCE <sequence name> or CREATE GENERATOR <sequence name>. If initial value of sequence is set, return also an appropriate ALTER statement.

Overrides:
getCreateSequenceSQL in class DBDictionary

getSequencesSQL

protected java.lang.String getSequencesSQL(java.lang.String schemaName,
                                           java.lang.String sequenceName)
Return Firebird-specific statement to select the list of sequences.

Overrides:
getSequencesSQL in class DBDictionary

getSequencesSQL

protected java.lang.String getSequencesSQL(DBIdentifier schemaName,
                                           DBIdentifier sequenceName)
Overrides:
getSequencesSQL in class DBDictionary

newSequence

protected Sequence newSequence(java.sql.ResultSet sequenceMeta)
                        throws java.sql.SQLException
Call super implementation and trim sequence name. This is because of trailing spaces problem: RDB$GENERATORS.RDB$GENERATOR_NAME is CHAR(31) and using RTRIM UDF function on Firebird 1.5 surprisingly returns a string right-padded with spaces up to the length of 255.

Overrides:
newSequence in class DBDictionary
Throws:
java.sql.SQLException

getDropSequenceSQL

public java.lang.String[] getDropSequenceSQL(Sequence seq)
On Firebird 1.5 return DROP GENERATOR <sequence name>. On Firebird 2.0 and later delegate to the super implementation.

Overrides:
getDropSequenceSQL in class DBDictionary

indexOf

public void indexOf(SQLBuffer buf,
                    FilterValue str,
                    FilterValue find,
                    FilterValue start)
Throw UnsupportedException. Firebird in version earlier than 2.1 has no suitable function. Firebird 2.1 has the POSITION function but using it here results in errors like "data type unknown" or "expression evaluation not supported".

Overrides:
indexOf in class DBDictionary
Parameters:
buf - the SQL buffer to write the indexOf invocation to
str - a query value representing the target string
find - a query value representing the search string
start - a query value representing the start index, or null to start at the beginning

substring

public void substring(SQLBuffer buf,
                      FilterValue str,
                      FilterValue start,
                      FilterValue end)
Use SUBSTRING(<col name> FROM <m> FOR <n>). Parameters are inlined because neither parameter binding nor expressions are accepted by Firebird here. As a result, an UnsupportedException is thrown when something else than a constant is used in start or end.

Overrides:
substring in class DBDictionary
Parameters:
buf - the SQL buffer to write the substring invocation to
str - a query value representing the target string
start - a query value representing the start index
end - a query value representing the end index, or null for none

appendSize

protected java.lang.String appendSize(Column col,
                                      java.lang.String typeName)
On Firebird 1.5 reduce the size of indexed VARCHAR column to 252 or a value specified by user. 252 is the maximum Firebird 1.5 can handle for one-column indexes. On Firebird 2.0 and later delegate to the super implementation.

Overrides:
appendSize in class DBDictionary

matchErrorState

protected int matchErrorState(java.util.Map<java.lang.Integer,java.util.Set<java.lang.String>> errorStates,
                              java.sql.SQLException ex)
Use error code as SQL state returned by Firebird is ambiguous.

Overrides:
matchErrorState in class DBDictionary
Parameters:
errorStates - classification of SQL error states by their specific nature. The keys of the map represent one of the constants defined in StoreException. The value corresponding to a key represent the set of SQL Error States representing specific category of database error. This supplied map is sourced from sql-error-state-codes.xml and filtered the error states for the current database.
ex - original SQL Exception as raised by the database driver.
Returns:
A constant indicating the category of error as defined in StoreException.