org.pentaho.di.core.database
Class DB2DatabaseMeta

java.lang.Object
  extended by org.pentaho.di.core.database.BaseDatabaseMeta
      extended by org.pentaho.di.core.database.DB2DatabaseMeta
All Implemented Interfaces:
Cloneable, DatabaseInterface

public class DB2DatabaseMeta
extends BaseDatabaseMeta
implements DatabaseInterface

Contains DB2 specific information through static final members

Since:
11-mrt-2005
Author:
Matt

Field Summary
 
Fields inherited from class org.pentaho.di.core.database.BaseDatabaseMeta
ATTRIBUTE_CLUSTER_DBNAME_PREFIX, ATTRIBUTE_CLUSTER_HOSTNAME_PREFIX, ATTRIBUTE_CLUSTER_PASSWORD_PREFIX, ATTRIBUTE_CLUSTER_PORT_PREFIX, ATTRIBUTE_CLUSTER_USERNAME_PREFIX, ATTRIBUTE_FORCE_IDENTIFIERS_TO_LOWERCASE, ATTRIBUTE_FORCE_IDENTIFIERS_TO_UPPERCASE, ATTRIBUTE_INITIAL_POOL_SIZE, ATTRIBUTE_IS_CLUSTERED, ATTRIBUTE_MAXIMUM_POOL_SIZE, ATTRIBUTE_MSSQL_DOUBLE_DECIMAL_SEPARATOR, ATTRIBUTE_POOLING_PARAMETER_PREFIX, ATTRIBUTE_PORT_NUMBER, ATTRIBUTE_PREFERRED_SCHEMA_NAME, ATTRIBUTE_PREFIX_EXTRA_OPTION, ATTRIBUTE_QUOTE_ALL_FIELDS, ATTRIBUTE_SQL_CONNECT, ATTRIBUTE_SUPPORTS_BOOLEAN_DATA_TYPE, ATTRIBUTE_USE_POOLING, ATTRIBUTE_USE_RESULT_STREAMING, AUTOINCREMENT_SQL_FOR_BATCH_ID, poolingParameters, SELECT_COUNT_STATEMENT, SEQUENCE_FOR_BATCH_ID
 
Constructor Summary
DB2DatabaseMeta()
           
 
Method Summary
 int[] getAccessTypeList()
          Get the list of possible access types for a database.
 String getAddColumnStatement(String tablename, ValueMetaInterface v, String tk, boolean use_autoinc, String pk, boolean semicolon)
          Generates the SQL statement to add a column to the specified table
 int getDefaultDatabasePort()
           
 String getDriverClass()
          Obtain the name of the JDBC driver class that we need to use!
 String getDropColumnStatement(String tablename, ValueMetaInterface v, String tk, boolean use_autoinc, String pk, boolean semicolon)
          Generates the SQL statement to drop a column from the specified table
 String getExtraOptionIndicator()
           
 String getFieldDefinition(ValueMetaInterface v, String tk, String pk, boolean use_autoinc, boolean add_fieldname, boolean add_cr)
          Describe a Value as a field in the database.
 int getMaxVARCHARLength()
          Get the maximum length of a text field (VARCHAR) for this database connection.
 String getModifyColumnStatement(String tablename, ValueMetaInterface v, String tk, boolean use_autoinc, String pk, boolean semicolon)
          Generates the SQL statement to modify a column in the specified table
 String[] getReservedWords()
           
 String getSQLCurrentSequenceValue(String sequenceName)
          Get the current value of a database sequence
 String getSQLInsertAutoIncUnknownDimensionRow(String schemaTable, String keyField, String versionField)
          Get the SQL to insert a new empty unknown record in a dimension.
 String getSQLLockTables(String[] tableNames)
           
 String getSQLNextSequenceValue(String sequenceName)
          Get the SQL to get the next value of a sequence.
 String getSQLSequenceExists(String sequenceName)
          Check if a sequence exists.
 String getSQLUnlockTables(String[] tableName)
           
 String getTruncateTableStatement(String tableName)
           
 String getURL(String hostname, String port, String databaseName)
           
 String[] getUsedLibraries()
           
 boolean isDisplaySizeTwiceThePrecision()
           
 boolean requiresCastToVariousForIsNull()
           
 boolean supportsBatchUpdates()
           
 boolean supportsGetBlob()
           
 boolean supportsNewLinesInSQL()
           
 boolean supportsSchemas()
           
 boolean supportsSequenceNoMaxValueOption()
           
 boolean supportsSequences()
           
 boolean supportsSetCharacterStream()
          See if this database supports the setCharacterStream() method on a PreparedStatement.
 
Methods inherited from class org.pentaho.di.core.database.BaseDatabaseMeta
addExtraOption, checkIndexExists, clone, generateColumnAlias, getAccessType, getAttributes, getBackwardsCompatibleSchemaTableCombination, getBackwardsCompatibleTable, getConnectionPoolingProperties, getConnectSQL, getDatabaseFactoryName, getDatabaseName, getDatabasePortNumberString, getDataTablespace, getDataTablespaceDDL, getEndQuote, getExtraOptions, getExtraOptionSeparator, getExtraOptionsHelpText, getExtraOptionValueSeparator, getFunctionAverage, getFunctionCount, getFunctionMaximum, getFunctionMinimum, getFunctionSum, getHostname, getIndexTablespace, getIndexTablespaceDDL, getInitialPoolSize, getLimitClause, getMaxColumnsInIndex, getMaximumPoolSize, getMaxTextFieldLength, getName, getNextBatchId, getNextBatchIdUsingAutoIncSQL, getNextBatchIdUsingLockTables, getNextBatchIdUsingSequence, getNotFoundTK, getObjectId, getPartitioningInformation, getPassword, getPluginId, getPluginName, getPreferredSchemaName, getSchemaTableCombination, getSelectCountStatement, getServername, getSQLColumnExists, getSQLListOfProcedures, getSQLListOfSchemas, getSQLListOfSequences, getSQLQueryFields, getSQLTableExists, getStartQuote, getSynonymTypes, getTablespaceDDL, getTableTypes, getUsername, getValueFromResultSet, getViewTypes, getXulOverlayFile, isChanged, isDefaultingToUppercase, isExplorable, isFetchSizeSupported, isForcingIdentifiersToLowerCase, isForcingIdentifiersToUpperCase, isMySQLVariant, isPartitioned, isQuoteAllFields, isRequiringTransactionsOnQueries, isStreamingResults, isSystemTable, isUsingConnectionPool, isUsingDoubleDecimalAsSchemaTableSeparator, needsPlaceHolder, needsToLockAllTables, parseStatements, quoteReservedWords, quoteSQLString, releaseSavepoint, requiresCreateTablePrimaryKeyAppend, setAccessType, setAttributes, setChanged, setConnectionPoolingProperties, setConnectSQL, setDatabaseName, setDatabasePortNumberString, setDataTablespace, setForcingIdentifiersToLowerCase, setForcingIdentifiersToUpperCase, setHostname, setIndexTablespace, setInitialPoolSize, setMaximumPoolSize, setName, setObjectId, setPartitioned, setPartitioningInformation, setPassword, setPluginId, setPluginName, setPreferredSchemaName, setQuoteAllFields, setServername, setStreamingResults, setSupportsBooleanDataType, setUsername, setUsingConnectionPool, setUsingDoubleDecimalAsSchemaTableSeparator, supportsAutoInc, supportsBitmapIndex, supportsBooleanDataType, supportsCatalogs, supportsEmptyTransactions, supportsErrorHandling, supportsErrorHandlingOnBatchUpdates, supportsFloatRoundingOnUpdate, supportsOptionsInURL, supportsPreparedStatementMetadataRetrieval, supportsRepository, supportsResultSetMetadataRetrievalOnly, supportsSetLong, supportsSetMaxRows, supportsSynonyms, supportsTimeStampToDateConversion, supportsTransactions, supportsViews, useSafePoints, useSchemaNameForTableList
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.pentaho.di.core.database.DatabaseInterface
addExtraOption, checkIndexExists, clone, generateColumnAlias, getAccessType, getAttributes, getConnectionPoolingProperties, getConnectSQL, getDatabaseFactoryName, getDatabaseName, getDatabasePortNumberString, getDataTablespace, getDataTablespaceDDL, getEndQuote, getExtraOptions, getExtraOptionSeparator, getExtraOptionsHelpText, getExtraOptionValueSeparator, getFunctionAverage, getFunctionCount, getFunctionMaximum, getFunctionMinimum, getFunctionSum, getHostname, getIndexTablespace, getIndexTablespaceDDL, getInitialPoolSize, getLimitClause, getMaxColumnsInIndex, getMaximumPoolSize, getMaxTextFieldLength, getName, getNextBatchId, getNotFoundTK, getObjectId, getPartitioningInformation, getPassword, getPluginId, getPluginName, getPreferredSchemaName, getSchemaTableCombination, getSelectCountStatement, getServername, getSQLColumnExists, getSQLListOfProcedures, getSQLListOfSchemas, getSQLListOfSequences, getSQLQueryFields, getSQLTableExists, getStartQuote, getSynonymTypes, getTableTypes, getUsername, getValueFromResultSet, getViewTypes, getXulOverlayFile, isChanged, isDefaultingToUppercase, isExplorable, isFetchSizeSupported, isForcingIdentifiersToLowerCase, isForcingIdentifiersToUpperCase, isMySQLVariant, isPartitioned, isQuoteAllFields, isRequiringTransactionsOnQueries, isStreamingResults, isSystemTable, isUsingConnectionPool, isUsingDoubleDecimalAsSchemaTableSeparator, needsPlaceHolder, needsToLockAllTables, parseStatements, quoteReservedWords, quoteSQLString, releaseSavepoint, requiresCreateTablePrimaryKeyAppend, setAccessType, setAttributes, setChanged, setConnectionPoolingProperties, setConnectSQL, setDatabaseName, setDatabasePortNumberString, setDataTablespace, setForcingIdentifiersToLowerCase, setForcingIdentifiersToUpperCase, setHostname, setIndexTablespace, setInitialPoolSize, setMaximumPoolSize, setName, setObjectId, setPartitioned, setPartitioningInformation, setPassword, setPluginId, setPluginName, setPreferredSchemaName, setQuoteAllFields, setServername, setStreamingResults, setSupportsBooleanDataType, setUsername, setUsingConnectionPool, setUsingDoubleDecimalAsSchemaTableSeparator, supportsAutoInc, supportsBitmapIndex, supportsBooleanDataType, supportsCatalogs, supportsEmptyTransactions, supportsErrorHandling, supportsErrorHandlingOnBatchUpdates, supportsFloatRoundingOnUpdate, supportsOptionsInURL, supportsPreparedStatementMetadataRetrieval, supportsRepository, supportsResultSetMetadataRetrievalOnly, supportsSetLong, supportsSetMaxRows, supportsSynonyms, supportsTimeStampToDateConversion, supportsTransactions, supportsViews, useSafePoints, useSchemaNameForTableList
 

Constructor Detail

DB2DatabaseMeta

public DB2DatabaseMeta()
Method Detail

getAccessTypeList

public int[] getAccessTypeList()
Description copied from interface: DatabaseInterface
Get the list of possible access types for a database.

Specified by:
getAccessTypeList in interface DatabaseInterface
Specified by:
getAccessTypeList in class BaseDatabaseMeta
Returns:
the list of possible access types for a database.

getDefaultDatabasePort

public int getDefaultDatabasePort()
Specified by:
getDefaultDatabasePort in interface DatabaseInterface
Overrides:
getDefaultDatabasePort in class BaseDatabaseMeta
Returns:
the default database port number

supportsSetCharacterStream

public boolean supportsSetCharacterStream()
Description copied from class: BaseDatabaseMeta
See if this database supports the setCharacterStream() method on a PreparedStatement.

Specified by:
supportsSetCharacterStream in interface DatabaseInterface
Overrides:
supportsSetCharacterStream in class BaseDatabaseMeta
Returns:
true if we can set a Stream on a field in a PreparedStatement. False if not.

getDriverClass

public String getDriverClass()
Description copied from interface: DatabaseInterface
Obtain the name of the JDBC driver class that we need to use!

Specified by:
getDriverClass in interface DatabaseInterface
Returns:
the name of the JDBC driver class for the specific database

getURL

public String getURL(String hostname,
                     String port,
                     String databaseName)
Specified by:
getURL in interface DatabaseInterface
Parameters:
hostname - the hostname
port - the port as a string
databaseName - the database name
Returns:
the URL to use for connecting to the database.

supportsSchemas

public boolean supportsSchemas()
Specified by:
supportsSchemas in interface DatabaseInterface
Overrides:
supportsSchemas in class BaseDatabaseMeta
Returns:
true if the database supports schemas, DB2 supports it (v7 and v8 for sure).

getTruncateTableStatement

public String getTruncateTableStatement(String tableName)
Specified by:
getTruncateTableStatement in interface DatabaseInterface
Overrides:
getTruncateTableStatement in class BaseDatabaseMeta
Parameters:
tableName - The table to be truncated.
Returns:
The SQL statement to truncate a table: remove all rows from it without a transaction

getAddColumnStatement

public String getAddColumnStatement(String tablename,
                                    ValueMetaInterface v,
                                    String tk,
                                    boolean use_autoinc,
                                    String pk,
                                    boolean semicolon)
Generates the SQL statement to add a column to the specified table

Specified by:
getAddColumnStatement in interface DatabaseInterface
Parameters:
tablename - The table to add
v - The column defined as a value
tk - the name of the technical key field
use_autoinc - whether or not this field uses auto increment
pk - the name of the primary key field
semicolon - whether or not to add a semi-colon behind the statement.
Returns:
the SQL statement to add a column to the specified table

getDropColumnStatement

public String getDropColumnStatement(String tablename,
                                     ValueMetaInterface v,
                                     String tk,
                                     boolean use_autoinc,
                                     String pk,
                                     boolean semicolon)
Generates the SQL statement to drop a column from the specified table

Specified by:
getDropColumnStatement in interface DatabaseInterface
Overrides:
getDropColumnStatement in class BaseDatabaseMeta
Parameters:
tablename - The table to add
v - The column defined as a value
tk - the name of the technical key field
use_autoinc - whether or not this field uses auto increment
pk - the name of the primary key field
semicolon - whether or not to add a semi-colon behind the statement.
Returns:
the SQL statement to drop a column from the specified table

getModifyColumnStatement

public String getModifyColumnStatement(String tablename,
                                       ValueMetaInterface v,
                                       String tk,
                                       boolean use_autoinc,
                                       String pk,
                                       boolean semicolon)
Generates the SQL statement to modify a column in the specified table

Specified by:
getModifyColumnStatement in interface DatabaseInterface
Parameters:
tablename - The table to add
v - The column defined as a value
tk - the name of the technical key field
use_autoinc - whether or not this field uses auto increment
pk - the name of the primary key field
semicolon - whether or not to add a semi-colon behind the statement.
Returns:
the SQL statement to modify a column in the specified table

getFieldDefinition

public String getFieldDefinition(ValueMetaInterface v,
                                 String tk,
                                 String pk,
                                 boolean use_autoinc,
                                 boolean add_fieldname,
                                 boolean add_cr)
Description copied from interface: DatabaseInterface
Describe a Value as a field in the database.

Specified by:
getFieldDefinition in interface DatabaseInterface
Parameters:
v - The value to describe
tk - The field that's going to be the technical key
pk - The field that's going to be the primary key
use_autoinc - Use autoincrement or not
add_fieldname - Add the fieldname to the definition or not
add_cr - Add a cariage return at the end of the definition or not.
Returns:
a value described as a field in this database.

getReservedWords

public String[] getReservedWords()
Specified by:
getReservedWords in interface DatabaseInterface
Overrides:
getReservedWords in class BaseDatabaseMeta
Returns:
an array of reserved words for the database type...

getSQLLockTables

public String getSQLLockTables(String[] tableNames)
Specified by:
getSQLLockTables in interface DatabaseInterface
Overrides:
getSQLLockTables in class BaseDatabaseMeta
Parameters:
tableNames - The names of the tables to lock
Returns:
The SQL command to lock database tables for write purposes. null is returned in case locking is not supported on the target database. null is the default value

getSQLUnlockTables

public String getSQLUnlockTables(String[] tableName)
Specified by:
getSQLUnlockTables in interface DatabaseInterface
Overrides:
getSQLUnlockTables in class BaseDatabaseMeta
Parameters:
tableName - The names of the tables to unlock
Returns:
The SQL command to unlock database tables. null is returned in case locking is not supported on the target database. null is the default value

getMaxVARCHARLength

public int getMaxVARCHARLength()
Get the maximum length of a text field (VARCHAR) for this database connection. If this size is exceeded use a CLOB.

Specified by:
getMaxVARCHARLength in interface DatabaseInterface
Overrides:
getMaxVARCHARLength in class BaseDatabaseMeta
Returns:
The maximum VARCHAR field length for this database type. (mostly identical to getMaxTextFieldLength() - CLOB_LENGTH)

supportsBatchUpdates

public boolean supportsBatchUpdates()
Specified by:
supportsBatchUpdates in interface DatabaseInterface
Overrides:
supportsBatchUpdates in class BaseDatabaseMeta
Returns:
true if the database JDBC driver supports batch updates For example Interbase doesn't support this!

supportsGetBlob

public boolean supportsGetBlob()
Specified by:
supportsGetBlob in interface DatabaseInterface
Overrides:
supportsGetBlob in class BaseDatabaseMeta
Returns:
false because the DB2 JDBC driver doesn't support getBlob on the resultset. We must use getBytes() to get the data.

getUsedLibraries

public String[] getUsedLibraries()
Specified by:
getUsedLibraries in interface DatabaseInterface
Returns:
the required libraries (in libext) for this database connection.

supportsSequences

public boolean supportsSequences()
Specified by:
supportsSequences in interface DatabaseInterface
Overrides:
supportsSequences in class BaseDatabaseMeta
Returns:
true if the database supports sequences

getSQLSequenceExists

public String getSQLSequenceExists(String sequenceName)
Check if a sequence exists.

Specified by:
getSQLSequenceExists in interface DatabaseInterface
Overrides:
getSQLSequenceExists in class BaseDatabaseMeta
Parameters:
sequenceName - The sequence to check
Returns:
The SQL to get the name of the sequence back from the databases data dictionary

getSQLCurrentSequenceValue

public String getSQLCurrentSequenceValue(String sequenceName)
Get the current value of a database sequence

Specified by:
getSQLCurrentSequenceValue in interface DatabaseInterface
Overrides:
getSQLCurrentSequenceValue in class BaseDatabaseMeta
Parameters:
sequenceName - The sequence to check
Returns:
The current value of a database sequence

getSQLNextSequenceValue

public String getSQLNextSequenceValue(String sequenceName)
Get the SQL to get the next value of a sequence. (Oracle only)

Specified by:
getSQLNextSequenceValue in interface DatabaseInterface
Overrides:
getSQLNextSequenceValue in class BaseDatabaseMeta
Parameters:
sequenceName - The sequence name
Returns:
the SQL to get the next value of a sequence. (Oracle only)

getExtraOptionIndicator

public String getExtraOptionIndicator()
Specified by:
getExtraOptionIndicator in interface DatabaseInterface
Overrides:
getExtraOptionIndicator in class BaseDatabaseMeta
Returns:
This indicator separates the normal URL from the options. DB2 is special in the sense that it requires a : instead of the usual ;.

supportsSequenceNoMaxValueOption

public boolean supportsSequenceNoMaxValueOption()
Specified by:
supportsSequenceNoMaxValueOption in interface DatabaseInterface
Overrides:
supportsSequenceNoMaxValueOption in class BaseDatabaseMeta
Returns:
true if the database supports the NOMAXVALUE sequence option. The default is false, AS/400 and DB2 support this.

requiresCastToVariousForIsNull

public boolean requiresCastToVariousForIsNull()
Specified by:
requiresCastToVariousForIsNull in interface DatabaseInterface
Overrides:
requiresCastToVariousForIsNull in class BaseDatabaseMeta
Returns:
true if the database requires you to cast a parameter to varchar before comparing to null. Only required for DB2 and Vertica

isDisplaySizeTwiceThePrecision

public boolean isDisplaySizeTwiceThePrecision()
Specified by:
isDisplaySizeTwiceThePrecision in interface DatabaseInterface
Overrides:
isDisplaySizeTwiceThePrecision in class BaseDatabaseMeta
Returns:
Handles the special case of DB2 where the display size returned is twice the precision. In that case, the length is the precision.

supportsNewLinesInSQL

public boolean supportsNewLinesInSQL()
Specified by:
supportsNewLinesInSQL in interface DatabaseInterface
Overrides:
supportsNewLinesInSQL in class BaseDatabaseMeta
Returns:
true if the database supports newlines in a SQL statements.

getSQLInsertAutoIncUnknownDimensionRow

public String getSQLInsertAutoIncUnknownDimensionRow(String schemaTable,
                                                     String keyField,
                                                     String versionField)
Get the SQL to insert a new empty unknown record in a dimension.

Specified by:
getSQLInsertAutoIncUnknownDimensionRow in interface DatabaseInterface
Overrides:
getSQLInsertAutoIncUnknownDimensionRow in class BaseDatabaseMeta
Parameters:
schemaTable - the schema-table name to insert into
keyField - The key field
versionField - the version field
Returns:
the SQL to insert the unknown record into the SCD.