org.apache.openjpa.jdbc.sql
Class FirebirdDictionary
java.lang.Object
org.apache.openjpa.jdbc.sql.DBDictionary
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.
Fields inherited from class org.apache.openjpa.jdbc.sql.DBDictionary |
_proxyManager, 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, datePrecision, dateTypeName, DECI, decimalTypeName, defaultSchemaName, delimitedCase, disableAlterSeqenceIncrementBy, distinctCountColumnSeparator, distinctTypeName, doubleTypeName, driverVendor, dropTableSQL, fixedSizeTypeNames, fixedSizeTypeNameSet, floatTypeName, forUpdateClause, fullResultCollectionInOrderByRelation, getStringVal, inClauseLimit, initializationSQL, innerJoinClause, integerTypeName, invalidColumnWordSet, isJDBC3, isJDBC4, 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, 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, supportsXMLColumn, systemSchemas, systemSchemaSet, systemTables, systemTableSet, tableForUpdateClause, tableLengthIncludesSchema, tableTypes, timestampTypeName, timeTypeName, tinyintTypeName, toLowerCaseFunction, toUpperCaseFunction, trailingDelimiter, trimBothFunction, trimLeadingFunction, trimSchemaName, trimStringColumns, trimTrailingFunction, typeModifierSet, UNLIMITED, useGetBestRowIdentifierForPrimaryKeys, useGetBytesForBlobs, useGetObjectForBlobs, useGetStringForClobs, useJDBC4SetBinaryStream, useNativeSequenceCache, useSchemaName, useSetBytesForBlobs, useSetStringForClobs, useWildCardForCount, validationSQL, varbinaryTypeName, varcharTypeName, VENDOR_DATADIRECT, VENDOR_OTHER, xmlTypeEncoding, xmlTypeName |
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 String |
appendSize(Column col,
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. |
void |
connectedConfiguration(Connection conn)
Determine Firebird version and configure itself accordingly. |
protected int |
determineFirebirdVersion(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 String |
getColumnNameForMetadata(String columnName)
Return % if columnName is null ,
otherwise delegate to super implementation. |
String[] |
getCreateSequenceSQL(Sequence seq)
Return either
CREATE SEQUENCE <sequence name> or
CREATE GENERATOR <sequence name> . |
String[] |
getDropColumnSQL(Column column)
Return
ALTER TABLE <table name> DROP <col name> . |
String[] |
getDropSequenceSQL(Sequence seq)
On Firebird 1.5 return
DROP GENERATOR <sequence name> . |
String |
getPlaceholderValueString(Column col)
Return <value> AS <type> . |
protected String |
getSequencesSQL(DBIdentifier schemaName,
DBIdentifier sequenceName)
|
protected String |
getSequencesSQL(String schemaName,
String sequenceName)
Return Firebird-specific statement to select the list of sequences. |
protected String |
getTableNameForMetadata(DBIdentifier tableName)
Returns the table name that will be used for obtaining information
from DatabaseMetaData . |
protected String |
getTableNameForMetadata(String tableName)
Return % if tableName is null ,
otherwise delegate to super implementation. |
void |
indexOf(SQLBuffer buf,
FilterValue str,
FilterValue find,
FilterValue start)
On Firebird 2.1 return POSITION(<find>, <str> [, <start>]). |
protected int |
matchErrorState(Map<Integer,Set<String>> errorStates,
SQLException ex)
Use error code as SQL state returned by Firebird is ambiguous. |
protected Sequence |
newSequence(ResultSet sequenceMeta)
Call super implementation and trim sequence name. |
void |
substring(SQLBuffer buf,
FilterValue str,
FilterValue start,
FilterValue length)
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, applyRange, assertSupport, calculateValue, canOuterJoin, closeDataSource, combineForeignKey, comment, comparison, configureNamingRules, convertSchemaCase, convertSchemaCase, copy, copy, createIndexIfNecessary, createIndexIfNecessary, decorate, deleteStream, delimitAll, endConfiguration, 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, getColumns, getColumns, getConversionKey, getCreateIndexSQL, getCreateTableSQL, 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, getGenKeySeqName, getIdentifierConcatenator, getIdentifierDelimiter, getIdentifierRule, getIdentifierRules, getIdentityColumnName, getImportedKeys, getImportedKeys, getImportedKeys, getImportedKeys, getIndexInfo, getIndexInfo, getInt, getInvalidColumnWordSet, getIsNotNullSQL, getIsNullSQL, getJDBCType, getJDBCType, getJDBCType, getKey, getLeadingDelimiter, getLOBStream, getLocale, getLog, getLong, getMajorVersion, getMarkerForInsertUpdate, getMillisecondBehavior, getMinorVersion, 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, isImplicitJoin, isSelect, isSystemIndex, isSystemIndex, isSystemSequence, isSystemSequence, isSystemSequence, isSystemTable, isSystemTable, isUsingLimit, isUsingOffset, isUsingOrderBy, isUsingRange, makeNameValid, makeNameValid, makeNameValid, makeNameValid, mathFunction, needsToCreateIndex, needsToCreateIndex, newColumn, newForeignKey, newIndex, newPrimaryKey, newStoreException, newTable, prepareStatement, putBytes, putChars, putString, refSchemaComponents, serialize, setArray, setAsciiStream, setBatchLimit, setBigDecimal, setBigInteger, setBinaryStream, setBlob, setBlobObject, setBoolean, setBooleanRepresentation, setByte, setBytes, setCalendar, setChar, setCharacterStream, setClob, setClobString, setConfiguration, setDate, setDate, setDateMillisecondBehavior, setDefaultSchemaName, setDelimitedCase, setDelimitIdentifiers, setDouble, setFloat, setInt, setJoinSyntax, setLeadingDelimiter, setLocale, setLong, setMajorVersion, setMinorVersion, setNull, setNumber, setObject, 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, toSQL92Join, toTraditionalJoin, toUpdate, updateBlob, updateClob, validateBatchProcess, validateDBSpecificBatchProcess, versionEqualOrEarlierThan, versionEqualOrLaterThan, versionLaterThan |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
firebirdVersion
public int firebirdVersion
indexedVarcharMaxSizeFB15
public int indexedVarcharMaxSizeFB15
rangeSyntax
public String rangeSyntax
maxRowNumberInRange
protected long maxRowNumberInRange
alterSequenceSQLFB15
protected String alterSequenceSQLFB15
alterSequenceSQLFB20
protected String alterSequenceSQLFB20
createSequenceSQLFB15
protected String createSequenceSQLFB15
createSequenceSQLFB20
protected String createSequenceSQLFB20
dropSequenceSQLFB15
protected String dropSequenceSQLFB15
alterSequenceSQL
protected String alterSequenceSQL
createSequenceSQL
protected 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 String RANGE_SYNTAX_FIRST_SKIP
- See Also:
- Constant Field Values
RANGE_SYNTAX_ROWS
public static final String RANGE_SYNTAX_ROWS
- See Also:
- Constant Field Values
FirebirdDictionary
public FirebirdDictionary()
connectedConfiguration
public void connectedConfiguration(Connection conn)
throws SQLException
- Determine Firebird version and configure itself accordingly.
- Overrides:
connectedConfiguration
in class DBDictionary
- Throws:
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(Connection con)
throws 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:
SQLException
determineRangeSyntax
protected void determineRangeSyntax()
- Determine range syntax to be used depending on Firebird version.
User can override range syntax.
getPlaceholderValueString
public String getPlaceholderValueString(Column col)
- Return
<value> AS <type>
.
- Overrides:
getPlaceholderValueString
in class DBDictionary
getTableNameForMetadata
protected String getTableNameForMetadata(String tableName)
- Return
%
if tableName
is null
,
otherwise delegate to super implementation.
- Overrides:
getTableNameForMetadata
in class DBDictionary
getTableNameForMetadata
protected 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 String getColumnNameForMetadata(String columnName)
- Return
%
if columnName
is null
,
otherwise delegate to super implementation.
- Overrides:
getColumnNameForMetadata
in class DBDictionary
getDropColumnSQL
public String[] getDropColumnSQL(Column column)
- Return
ALTER TABLE <table name> DROP <col name>
.
- Overrides:
getDropColumnSQL
in class DBDictionary
getCreateSequenceSQL
public 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 String getSequencesSQL(String schemaName,
String sequenceName)
- Return Firebird-specific statement to select the list of sequences.
- Overrides:
getSequencesSQL
in class DBDictionary
getSequencesSQL
protected String getSequencesSQL(DBIdentifier schemaName,
DBIdentifier sequenceName)
- Overrides:
getSequencesSQL
in class DBDictionary
newSequence
protected Sequence newSequence(ResultSet sequenceMeta)
throws 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:
SQLException
getDropSequenceSQL
public 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)
- On Firebird 2.1 return
POSITION(<find>, <str> [, <start>]).
On older versions throw UnsupportedException
- no suitable function exists.
- Overrides:
indexOf
in class DBDictionary
- 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
substring
public void substring(SQLBuffer buf,
FilterValue str,
FilterValue start,
FilterValue length)
- 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 length
.
- Overrides:
substring
in class DBDictionary
- Parameters:
buf
- the SQL buffer to write the substring invocation tostr
- a query value representing the target stringstart
- a query value representing the start indexlength
- a query value representing the length of substring, or null for none
appendSize
protected String appendSize(Column col,
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(Map<Integer,Set<String>> errorStates,
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
.
Copyright © 2006–2015 Apache Software Foundation. All rights reserved.