/[Apache-SVN]/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/DatabaseMetaData.java
ViewVC logotype

Diff of /incubator/derby/code/trunk/java/client/org/apache/derby/client/am/DatabaseMetaData.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/DatabaseMetaData.java	2005/05/02 05:18:08	165584
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/DatabaseMetaData.java	2005/05/02 06:25:59	165585
@@ -37,2051 +37,2065 @@ import org.apache.derby.jdbc.ClientDataS
 //   Assign an ErrorKey, ResourceKey, and Resource for each throw statement.
 //   Save for future pass to avoid maintenance during development.
 
-public abstract class DatabaseMetaData implements java.sql.DatabaseMetaData
-{
-  //----------------------------- constants  -----------------------------------
-
-  private final static short SQL_BEST_ROWID = 1;
-  private final static short SQL_ROWVER = 2;
-
-  private final static short SQL_INDEX_UNIQUE = 0;
-  private final static short SQL_INDEX_ALL = 1;
-
-  //---------------------navigational members-----------------------------------
-
-  protected Agent agent_;
-  protected Connection connection_;
-
-  //-----------------------------state------------------------------------------
-
-  private final static int numberOfMetaDataInfoMethods__ = 108;
-  private Object[] metaDataInfoCache_ = new Object[numberOfMetaDataInfoMethods__];
-  private boolean metaDataInfoIsCached_ = false;
-
-  public ProductLevel productLevel_;
-
-  private ResultSet lastGetColumnPrivilegesResultSet_ = null;
-  private ResultSet lastGetColumnsResultSet_ = null;
-  private ResultSet lastGetForeignKeysResultSet_ = null;
-  private ResultSet lastGetPrimaryKeysResultSet_ = null;
-  private ResultSet lastGetProcedureColumnsResultSet_ = null;
-  private ResultSet lastGetProceduresResultSet_ = null;
-  private ResultSet lastGetSpecialColumnsResultSet_ = null;
-  private ResultSet lastGetStatisticsResultSet_ = null;
-  private ResultSet lastGetTablePrivilegesResultSet_ = null;
-  private ResultSet lastGetTablesResultSet_ = null;
-  private ResultSet lastGetUDTsResultSet_ = null;
-  private ResultSet lastGetTypeInfoResultSet_ = null;
-  private ResultSet lastGetAttrResultSet_ = null;
-  private ResultSet lastGetSuperTypesResultSet_ = null;
-  private ResultSet lastGetSuperTablesResultSet_ = null;
-
-  public boolean useServerXAState_ = true;
-
-  //---------------------constructors/finalizer---------------------------------
-
-  protected DatabaseMetaData (Agent agent, Connection connection, ProductLevel productLevel)
-  {
-    agent_ = agent;
-    connection_ = connection;
-    productLevel_ = productLevel;
-    computeFeatureSet_();
-    if( connection.isXAConnection() )
-    {
-      connection.xaHostVersion_ = productLevel_.versionLevel_;
-    }
-  }
-
-  // ---------------------------jdbc 1------------------------------------------
-
-  //----------------------------------------------------------------------
-  // First, a variety of minor information about the target database.
-
-  private final static int allProceduresAreCallable__ = 0;
-  public boolean allProceduresAreCallable () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (allProceduresAreCallable__);
-  }
-
-  private final static int allTablesAreSelectable__ = 1;
-  public boolean allTablesAreSelectable () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (allTablesAreSelectable__);
-  }
-
-  private final static int nullsAreSortedHigh__ = 2;
-  public boolean nullsAreSortedHigh () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (nullsAreSortedHigh__);
-  }
-
-  private final static int nullsAreSortedLow__ = 3;
-  public boolean nullsAreSortedLow () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (nullsAreSortedLow__);
-  }
-
-  private final static int nullsAreSortedAtStart__ = 4;
-  public boolean nullsAreSortedAtStart () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (nullsAreSortedAtStart__);
-  }
-
-  private final static int nullsAreSortedAtEnd__ = 5;
-  public boolean nullsAreSortedAtEnd () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (nullsAreSortedAtEnd__);
-  }
-
-  private final static int usesLocalFiles__ = 6;
-  public boolean usesLocalFiles () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (usesLocalFiles__);
-  }
-
-  private final static int usesLocalFilePerTable__ = 7;
-  public boolean usesLocalFilePerTable () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (usesLocalFilePerTable__);
-  }
-
-  private final static int storesUpperCaseIdentifiers__ = 8;
-  public boolean storesUpperCaseIdentifiers () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (storesUpperCaseIdentifiers__);
-  }
-
-
-  private final static int storesLowerCaseIdentifiers__ = 9;
-  public boolean storesLowerCaseIdentifiers () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (storesLowerCaseIdentifiers__);
-  }
-
-  private final static int storesMixedCaseIdentifiers__ = 10;
-  public boolean storesMixedCaseIdentifiers () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (storesMixedCaseIdentifiers__);
-  }
-
-  private final static int storesUpperCaseQuotedIdentifiers__ = 11;
-  public boolean storesUpperCaseQuotedIdentifiers () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (storesUpperCaseQuotedIdentifiers__);
-  }
-
-  private final static int storesLowerCaseQuotedIdentifiers__ = 12;
-  public boolean storesLowerCaseQuotedIdentifiers () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (storesLowerCaseQuotedIdentifiers__);
-  }
-
-  private final static int storesMixedCaseQuotedIdentifiers__ = 13;
-  public boolean storesMixedCaseQuotedIdentifiers () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (storesMixedCaseQuotedIdentifiers__);
-  }
-
-  private final static int getSQLKeywords__ = 14;
-  public String getSQLKeywords () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getSQLKeywords__);
-  }
-
-  private final static int getNumericFunctions__ = 15;
-  public String getNumericFunctions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getNumericFunctions__);
-  }
-
-  private final static int getStringFunctions__ = 16;
-  public String getStringFunctions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getStringFunctions__);
-  }
-
-  private final static int getSystemFunctions__ = 17;
-  public String getSystemFunctions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getSystemFunctions__);
-  }
-
-  private final static int getTimeDateFunctions__ = 18;
-  public String getTimeDateFunctions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getTimeDateFunctions__);
-  }
-
-  private final static int getSearchStringEscape__ = 19;
-  public String getSearchStringEscape () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getSearchStringEscape__);
-  }
-  private final static int getExtraNameCharacters__ = 20;
-  public String getExtraNameCharacters () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getExtraNameCharacters__);
-  }
-
-  private final static int supportsAlterTableWithAddColumn__ = 21;
-  public boolean supportsAlterTableWithAddColumn () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (supportsAlterTableWithAddColumn__);
-  }
-
-  private final static int supportsAlterTableWithDropColumn__ = 22;
-  public boolean supportsAlterTableWithDropColumn () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsAlterTableWithDropColumn__);
-  }
-
-  private final static int supportsConvert__ = 23;
-  public boolean supportsConvert () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsConvert__);
-  }
-
-  private final static int supportsConvertType__ = 24;
-  public boolean supportsConvert (int fromType, int toType) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean_supportsConvert (supportsConvertType__, fromType, toType);
-  }
-
-  private final static int supportsDifferentTableCorrelationNames__ = 25;
-  public boolean supportsDifferentTableCorrelationNames () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (supportsDifferentTableCorrelationNames__);
-  }
-
-  private final static int supportsExpressionsInOrderBy__ = 26;
-  public boolean supportsExpressionsInOrderBy () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsExpressionsInOrderBy__);
-  }
-
-  private final static int supportsOrderByUnrelated__ = 27;
-  public boolean supportsOrderByUnrelated () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsOrderByUnrelated__);
-  }
-
-  private final static int supportsGroupBy__ = 28;
-  public boolean supportsGroupBy () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsGroupBy__);
-  }
-
-  private final static int supportsGroupByUnrelated__ = 29;
-  public boolean supportsGroupByUnrelated () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsGroupByUnrelated__);
-  }
-
-  private final static int supportsGroupByBeyondSelect__ = 30;
-  public boolean supportsGroupByBeyondSelect () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsGroupByBeyondSelect__);
-  }
-
-  private final static int supportsMultipleResultSets__ = 31;
-  public boolean supportsMultipleResultSets () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsMultipleResultSets__);
-  }
-
-  private final static int supportsMultipleTransactions__ = 32;
-  public boolean supportsMultipleTransactions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsMultipleTransactions__);
-  }
-
-  private final static int supportsCoreSQLGrammar__ = 33;
-  public boolean supportsCoreSQLGrammar () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsCoreSQLGrammar__);
-  }
-
-  private final static int supportsExtendedSQLGrammar__ = 34;
-  public boolean supportsExtendedSQLGrammar () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsExtendedSQLGrammar__);
-  }
-
-  private final static int supportsANSI92IntermediateSQL__ = 35;
-  public boolean supportsANSI92IntermediateSQL () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsANSI92IntermediateSQL__);
-  }
-
-  private final static int supportsANSI92FullSQL__ = 36;
-  public boolean supportsANSI92FullSQL () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsANSI92FullSQL__);
-  }
-
-  private final static int supportsIntegrityEnhancementFacility__ = 37;
-  public boolean supportsIntegrityEnhancementFacility () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsIntegrityEnhancementFacility__);
-  }
-
-  private final static int supportsOuterJoins__ = 38;
-  public boolean supportsOuterJoins () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsOuterJoins__);
-  }
-
-  private final static int supportsFullOuterJoins__ = 39;
-  public boolean supportsFullOuterJoins () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsFullOuterJoins__);
-  }
-
-  private final static int supportsLimitedOuterJoins__ = 40;
-  public boolean supportsLimitedOuterJoins () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsLimitedOuterJoins__);
-  }
-
-  private final static int getSchemaTerm__ = 41;
-  public String getSchemaTerm () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getSchemaTerm__);
-  }
-
-  private final static int getProcedureTerm__ = 42;
-  public String getProcedureTerm () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getProcedureTerm__);
-  }
-
-  private final static int getCatalogTerm__ = 43;
-  public String getCatalogTerm () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getCatalogTerm__);
-  }
-
-  private final static int isCatalogAtStart__ = 44;
-  public boolean isCatalogAtStart () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (isCatalogAtStart__);
-  }
-
-  private final static int getCatalogSeparator__ = 45;
-  public String getCatalogSeparator () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoString (getCatalogSeparator__);
-  }
-
-  private final static int supportsSchemasInDataManipulation__ = 46;
-  public boolean supportsSchemasInDataManipulation () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsSchemasInDataManipulation__);
-  }
-
-  private final static int supportsSchemasInProcedureCalls__ = 47;
-  public boolean supportsSchemasInProcedureCalls () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsSchemasInProcedureCalls__);
-  }
-
-  private final static int supportsSchemasInTableDefinitions__ = 48;
-  public boolean supportsSchemasInTableDefinitions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsSchemasInTableDefinitions__);
-  }
-
-
-  private final static int supportsSchemasInIndexDefinitions__ = 49;
-  public boolean supportsSchemasInIndexDefinitions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsSchemasInIndexDefinitions__);
-  }
-
-  private final static int supportsSchemasInPrivilegeDefinitions__ = 50;
-  public boolean supportsSchemasInPrivilegeDefinitions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsSchemasInPrivilegeDefinitions__);
-  }
-
-  private final static int supportsCatalogsInDataManipulation__ = 51;
-  public boolean supportsCatalogsInDataManipulation () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsCatalogsInDataManipulation__);
-  }
-
-  private final static int supportsCatalogsInProcedureCalls__ = 52;
-  public boolean supportsCatalogsInProcedureCalls () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsCatalogsInProcedureCalls__);
-  }
-
-  private final static int supportsCatalogsInTableDefinitions__ = 53;
-  public boolean supportsCatalogsInTableDefinitions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsCatalogsInTableDefinitions__);
-  }
-
-  private final static int supportsCatalogsInIndexDefinitions__ = 54;
-  public boolean supportsCatalogsInIndexDefinitions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsCatalogsInIndexDefinitions__);
-  }
-
-  private final static int supportsCatalogsInPrivilegeDefinitions__ = 55;
-  public boolean supportsCatalogsInPrivilegeDefinitions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsCatalogsInPrivilegeDefinitions__);
-  }
-
-  private final static int supportsPositionedDelete__ = 56;
-  public boolean supportsPositionedDelete () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsPositionedDelete__);
-  }
-
-
-  private final static int supportsPositionedUpdate__ = 57;
-  public boolean supportsPositionedUpdate () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsPositionedUpdate__);
-  }
-
-  private final static int supportsSelectForUpdate__ = 58;
-  public boolean supportsSelectForUpdate () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsSelectForUpdate__);
-  }
-
-  private final static int supportsStoredProcedures__ = 59;
-  public boolean supportsStoredProcedures () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsStoredProcedures__);
-  }
-
-  private final static int supportsSubqueriesInComparisons__ = 60;
-  public boolean supportsSubqueriesInComparisons () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsSubqueriesInComparisons__);
-  }
-
-  private final static int supportsUnion__ = 61;
-  public boolean supportsUnion () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsUnion__);
-  }
-
-  private final static int supportsUnionAll__ = 62;
-  public boolean supportsUnionAll () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsUnionAll__);
-  }
-
-  private final static int supportsOpenCursorsAcrossCommit__ = 63;
-  public boolean supportsOpenCursorsAcrossCommit () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsOpenCursorsAcrossCommit__);
-  }
-
-  private final static int supportsOpenCursorsAcrossRollback__ = 64;
-  public boolean supportsOpenCursorsAcrossRollback () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsOpenCursorsAcrossRollback__);
-  }
-
-  private final static int supportsOpenStatementsAcrossCommit__ = 65;
-  public boolean supportsOpenStatementsAcrossCommit () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsOpenStatementsAcrossCommit__);
-  }
-
-
-  private final static int supportsOpenStatementsAcrossRollback__ = 66;
-  public boolean supportsOpenStatementsAcrossRollback () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsOpenStatementsAcrossRollback__);
-  }
-  //----------------------------------------------------------------------
-  // The following group of methods exposes various limitations
-  // based on the target database with the current driver.
-  // Unless otherwise specified, a result of zero means there is no
-  // limit, or the limit is not known.
-  private final static int getMaxBinaryLiteralLength__ = 67;
-  public int getMaxBinaryLiteralLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt (getMaxBinaryLiteralLength__);
-  }
-
-  private final static int getMaxCharLiteralLength__ = 68;
-  public int getMaxCharLiteralLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxCharLiteralLength__);
-  }
-  private final static int getMaxColumnNameLength__ = 69;
-
-  public int getMaxColumnNameLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxColumnNameLength__);
-  }
-
-  private final static int getMaxColumnsInGroupBy__ = 70;
-  public int getMaxColumnsInGroupBy () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxColumnsInGroupBy__);
-  }
-  private final static int getMaxColumnsInIndex__ = 71;
-  public int getMaxColumnsInIndex () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxColumnsInIndex__);
-  }
-  private final static int getMaxColumnsInOrderBy__ = 72;
-  public int getMaxColumnsInOrderBy () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxColumnsInOrderBy__);
-  }
-  private final static int getMaxColumnsInSelect__ = 73;
-  public int getMaxColumnsInSelect () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxColumnsInSelect__);
-  }
-  private final static int getMaxColumnsInTable__ = 74;
-  public int getMaxColumnsInTable () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxColumnsInTable__);
-  }
-
-  private final static int getMaxConnections__ = 75;
-  public int getMaxConnections () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxConnections__);
-  }
-  private final static int getMaxCursorNameLength__ = 76;
-  public int getMaxCursorNameLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxCursorNameLength__);
-  }
-  private final static int getMaxIndexLength__ = 77;
-  public int getMaxIndexLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxIndexLength__);
-  }
-  private final static int getMaxSchemaNameLength__ = 78;
-  public int getMaxSchemaNameLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxSchemaNameLength__);
-  }
-  private final static int getMaxProcedureNameLength__ = 79;
-  public int getMaxProcedureNameLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxProcedureNameLength__);
-  }
-  private final static int getMaxCatalogNameLength__ = 80;
-  public int getMaxCatalogNameLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxCatalogNameLength__);
-  }
-
-  private final static int getMaxRowSize__ = 81;
-  public int getMaxRowSize () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxRowSize__);
-  }
-  private final static int doesMaxRowSizeIncludeBlobs__ = 82;
-  public boolean doesMaxRowSizeIncludeBlobs () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(doesMaxRowSizeIncludeBlobs__);
-  }
-  private final static int getMaxStatementLength__ = 83;
-  public int getMaxStatementLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxStatementLength__);
-  }
-  private final static int getMaxStatements__ = 84;
-  public int getMaxStatements () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxStatements__);
-  }
-  private final static int getMaxTableNameLength__ = 85;
-  public int getMaxTableNameLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxTableNameLength__);
-  }
-  private final static int getMaxTablesInSelect__ = 86;
-  public int getMaxTablesInSelect () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxTablesInSelect__);
-  }
-  private final static int getMaxUserNameLength__ = 87;
-  public int getMaxUserNameLength () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getMaxUserNameLength__);
-  }
-
-  private final static int getDefaultTransactionIsolation__ = 88;
-  public int getDefaultTransactionIsolation () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt(getDefaultTransactionIsolation__);
-  }
-
-  private final static int supportsTransactions__ = 89;
-  public boolean supportsTransactions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsTransactions__);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all supported levels
-  private final static int supportsTransactionIsolationLevel__ = 90;
-  public boolean supportsTransactionIsolationLevel (int level) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (supportsTransactionIsolationLevel__, level);
-  }
-
-
-  private final static int supportsDataDefinitionAndDataManipulationTransactions__ = 91;
-  public boolean supportsDataDefinitionAndDataManipulationTransactions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsDataDefinitionAndDataManipulationTransactions__);
-  }
-
-  private final static int supportsDataManipulationTransactionsOnly__ = 92;
-  public boolean supportsDataManipulationTransactionsOnly () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(supportsDataManipulationTransactionsOnly__);
-  }
-  private final static int dataDefinitionCausesTransactionCommit__ = 93;
-  public boolean dataDefinitionCausesTransactionCommit () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(dataDefinitionCausesTransactionCommit__);
-  }
-
-  private final static int dataDefinitionIgnoredInTransactions__ = 94;
-  public boolean dataDefinitionIgnoredInTransactions () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean(dataDefinitionIgnoredInTransactions__);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported resultSet types
-  private final static int supportsResultSetType__ = 95;
-  public boolean supportsResultSetType (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (supportsResultSetType__, type);
-  }
-
-  private final static int supportsResultSetConcurrency__ = 96;
-  public boolean supportsResultSetConcurrency  (int type, int concurrency) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoInt_SupportsResultSetConcurrency (supportsResultSetConcurrency__, type, concurrency);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported result Set types
-  private final static int ownUpdatesAreVisible__ = 97;
-  public boolean ownUpdatesAreVisible (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (ownUpdatesAreVisible__, type);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported result Set types
-  private final static int ownDeletesAreVisible__ = 98;
-  public boolean ownDeletesAreVisible (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (ownDeletesAreVisible__, type);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list all the supported result Set types
-  private final static int ownInsertsAreVisible__ = 99;
-  public boolean ownInsertsAreVisible (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (ownInsertsAreVisible__, type);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported result Set types
-  private final static int othersUpdatesAreVisible__ = 100;
-  public boolean othersUpdatesAreVisible (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (othersUpdatesAreVisible__, type);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported result Set types
-  private final static int othersDeletesAreVisible__ = 101;
-  public boolean othersDeletesAreVisible (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (othersDeletesAreVisible__, type);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported result Set types
-  private final static int othersInsertsAreVisible__ = 102;
-  public boolean othersInsertsAreVisible (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (othersInsertsAreVisible__, type);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported result Set types
-  private final static int updatesAreDetected__ = 103;
-  public boolean updatesAreDetected (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (updatesAreDetected__, type);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported result Set types
-  private final static int deletesAreDetected__ = 104;
-  public boolean deletesAreDetected (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (deletesAreDetected__, type);
-  }
-
-  // Stored Procedure will return a String containing a
-  // comma seperated list of all the supported result Set types
-  private final static int insertsAreDetected__ = 105;
-  public boolean insertsAreDetected (int type) throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBooleanWithType (insertsAreDetected__, type);
-  }
-
-  private final static int supportsBatchUpdates__ = 106;
-  public boolean supportsBatchUpdates () throws SqlException
-  {
-    checkForClosedConnection();
-    return getMetaDataInfoBoolean (supportsBatchUpdates__);
-  }
-
-  public boolean supportsSavepoints () throws SqlException
-  {
-    checkForClosedConnection();
-    if (productLevel_.greaterThanOrEqualTo(5,2,0))
+public abstract class DatabaseMetaData implements java.sql.DatabaseMetaData {
+    //----------------------------- constants  -----------------------------------
+
+    private final static short SQL_BEST_ROWID = 1;
+    private final static short SQL_ROWVER = 2;
+
+    private final static short SQL_INDEX_UNIQUE = 0;
+    private final static short SQL_INDEX_ALL = 1;
+
+    //---------------------navigational members-----------------------------------
+
+    protected Agent agent_;
+    protected Connection connection_;
+
+    //-----------------------------state------------------------------------------
+
+    private final static int numberOfMetaDataInfoMethods__ = 108;
+    private Object[] metaDataInfoCache_ = new Object[numberOfMetaDataInfoMethods__];
+    private boolean metaDataInfoIsCached_ = false;
+
+    public ProductLevel productLevel_;
+
+    private ResultSet lastGetColumnPrivilegesResultSet_ = null;
+    private ResultSet lastGetColumnsResultSet_ = null;
+    private ResultSet lastGetForeignKeysResultSet_ = null;
+    private ResultSet lastGetPrimaryKeysResultSet_ = null;
+    private ResultSet lastGetProcedureColumnsResultSet_ = null;
+    private ResultSet lastGetProceduresResultSet_ = null;
+    private ResultSet lastGetSpecialColumnsResultSet_ = null;
+    private ResultSet lastGetStatisticsResultSet_ = null;
+    private ResultSet lastGetTablePrivilegesResultSet_ = null;
+    private ResultSet lastGetTablesResultSet_ = null;
+    private ResultSet lastGetUDTsResultSet_ = null;
+    private ResultSet lastGetTypeInfoResultSet_ = null;
+    private ResultSet lastGetAttrResultSet_ = null;
+    private ResultSet lastGetSuperTypesResultSet_ = null;
+    private ResultSet lastGetSuperTablesResultSet_ = null;
+
+    public boolean useServerXAState_ = true;
+
+    //---------------------constructors/finalizer---------------------------------
+
+    protected DatabaseMetaData(Agent agent, Connection connection, ProductLevel productLevel) {
+        agent_ = agent;
+        connection_ = connection;
+        productLevel_ = productLevel;
+        computeFeatureSet_();
+        if (connection.isXAConnection()) {
+            connection.xaHostVersion_ = productLevel_.versionLevel_;
+        }
+    }
+
+    // ---------------------------jdbc 1------------------------------------------
+
+    //----------------------------------------------------------------------
+    // First, a variety of minor information about the target database.
+
+    private final static int allProceduresAreCallable__ = 0;
+
+    public boolean allProceduresAreCallable() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(allProceduresAreCallable__);
+    }
+
+    private final static int allTablesAreSelectable__ = 1;
+
+    public boolean allTablesAreSelectable() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(allTablesAreSelectable__);
+    }
+
+    private final static int nullsAreSortedHigh__ = 2;
+
+    public boolean nullsAreSortedHigh() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(nullsAreSortedHigh__);
+    }
+
+    private final static int nullsAreSortedLow__ = 3;
+
+    public boolean nullsAreSortedLow() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(nullsAreSortedLow__);
+    }
+
+    private final static int nullsAreSortedAtStart__ = 4;
+
+    public boolean nullsAreSortedAtStart() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(nullsAreSortedAtStart__);
+    }
+
+    private final static int nullsAreSortedAtEnd__ = 5;
+
+    public boolean nullsAreSortedAtEnd() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(nullsAreSortedAtEnd__);
+    }
+
+    private final static int usesLocalFiles__ = 6;
+
+    public boolean usesLocalFiles() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(usesLocalFiles__);
+    }
+
+    private final static int usesLocalFilePerTable__ = 7;
+
+    public boolean usesLocalFilePerTable() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(usesLocalFilePerTable__);
+    }
+
+    private final static int storesUpperCaseIdentifiers__ = 8;
+
+    public boolean storesUpperCaseIdentifiers() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(storesUpperCaseIdentifiers__);
+    }
+
+
+    private final static int storesLowerCaseIdentifiers__ = 9;
+
+    public boolean storesLowerCaseIdentifiers() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(storesLowerCaseIdentifiers__);
+    }
+
+    private final static int storesMixedCaseIdentifiers__ = 10;
+
+    public boolean storesMixedCaseIdentifiers() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(storesMixedCaseIdentifiers__);
+    }
+
+    private final static int storesUpperCaseQuotedIdentifiers__ = 11;
+
+    public boolean storesUpperCaseQuotedIdentifiers() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(storesUpperCaseQuotedIdentifiers__);
+    }
+
+    private final static int storesLowerCaseQuotedIdentifiers__ = 12;
+
+    public boolean storesLowerCaseQuotedIdentifiers() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(storesLowerCaseQuotedIdentifiers__);
+    }
+
+    private final static int storesMixedCaseQuotedIdentifiers__ = 13;
+
+    public boolean storesMixedCaseQuotedIdentifiers() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(storesMixedCaseQuotedIdentifiers__);
+    }
+
+    private final static int getSQLKeywords__ = 14;
+
+    public String getSQLKeywords() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getSQLKeywords__);
+    }
+
+    private final static int getNumericFunctions__ = 15;
+
+    public String getNumericFunctions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getNumericFunctions__);
+    }
+
+    private final static int getStringFunctions__ = 16;
+
+    public String getStringFunctions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getStringFunctions__);
+    }
+
+    private final static int getSystemFunctions__ = 17;
+
+    public String getSystemFunctions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getSystemFunctions__);
+    }
+
+    private final static int getTimeDateFunctions__ = 18;
+
+    public String getTimeDateFunctions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getTimeDateFunctions__);
+    }
+
+    private final static int getSearchStringEscape__ = 19;
+
+    public String getSearchStringEscape() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getSearchStringEscape__);
+    }
+
+    private final static int getExtraNameCharacters__ = 20;
+
+    public String getExtraNameCharacters() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getExtraNameCharacters__);
+    }
+
+    private final static int supportsAlterTableWithAddColumn__ = 21;
+
+    public boolean supportsAlterTableWithAddColumn() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsAlterTableWithAddColumn__);
+    }
+
+    private final static int supportsAlterTableWithDropColumn__ = 22;
+
+    public boolean supportsAlterTableWithDropColumn() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsAlterTableWithDropColumn__);
+    }
+
+    private final static int supportsConvert__ = 23;
+
+    public boolean supportsConvert() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsConvert__);
+    }
+
+    private final static int supportsConvertType__ = 24;
+
+    public boolean supportsConvert(int fromType, int toType) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean_supportsConvert(supportsConvertType__, fromType, toType);
+    }
+
+    private final static int supportsDifferentTableCorrelationNames__ = 25;
+
+    public boolean supportsDifferentTableCorrelationNames() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsDifferentTableCorrelationNames__);
+    }
+
+    private final static int supportsExpressionsInOrderBy__ = 26;
+
+    public boolean supportsExpressionsInOrderBy() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsExpressionsInOrderBy__);
+    }
+
+    private final static int supportsOrderByUnrelated__ = 27;
+
+    public boolean supportsOrderByUnrelated() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsOrderByUnrelated__);
+    }
+
+    private final static int supportsGroupBy__ = 28;
+
+    public boolean supportsGroupBy() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsGroupBy__);
+    }
+
+    private final static int supportsGroupByUnrelated__ = 29;
+
+    public boolean supportsGroupByUnrelated() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsGroupByUnrelated__);
+    }
+
+    private final static int supportsGroupByBeyondSelect__ = 30;
+
+    public boolean supportsGroupByBeyondSelect() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsGroupByBeyondSelect__);
+    }
+
+    private final static int supportsMultipleResultSets__ = 31;
+
+    public boolean supportsMultipleResultSets() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsMultipleResultSets__);
+    }
+
+    private final static int supportsMultipleTransactions__ = 32;
+
+    public boolean supportsMultipleTransactions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsMultipleTransactions__);
+    }
+
+    private final static int supportsCoreSQLGrammar__ = 33;
+
+    public boolean supportsCoreSQLGrammar() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsCoreSQLGrammar__);
+    }
+
+    private final static int supportsExtendedSQLGrammar__ = 34;
+
+    public boolean supportsExtendedSQLGrammar() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsExtendedSQLGrammar__);
+    }
+
+    private final static int supportsANSI92IntermediateSQL__ = 35;
+
+    public boolean supportsANSI92IntermediateSQL() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsANSI92IntermediateSQL__);
+    }
+
+    private final static int supportsANSI92FullSQL__ = 36;
+
+    public boolean supportsANSI92FullSQL() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsANSI92FullSQL__);
+    }
+
+    private final static int supportsIntegrityEnhancementFacility__ = 37;
+
+    public boolean supportsIntegrityEnhancementFacility() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsIntegrityEnhancementFacility__);
+    }
+
+    private final static int supportsOuterJoins__ = 38;
+
+    public boolean supportsOuterJoins() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsOuterJoins__);
+    }
+
+    private final static int supportsFullOuterJoins__ = 39;
+
+    public boolean supportsFullOuterJoins() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsFullOuterJoins__);
+    }
+
+    private final static int supportsLimitedOuterJoins__ = 40;
+
+    public boolean supportsLimitedOuterJoins() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsLimitedOuterJoins__);
+    }
+
+    private final static int getSchemaTerm__ = 41;
+
+    public String getSchemaTerm() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getSchemaTerm__);
+    }
+
+    private final static int getProcedureTerm__ = 42;
+
+    public String getProcedureTerm() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getProcedureTerm__);
+    }
+
+    private final static int getCatalogTerm__ = 43;
+
+    public String getCatalogTerm() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getCatalogTerm__);
+    }
+
+    private final static int isCatalogAtStart__ = 44;
+
+    public boolean isCatalogAtStart() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(isCatalogAtStart__);
+    }
+
+    private final static int getCatalogSeparator__ = 45;
+
+    public String getCatalogSeparator() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoString(getCatalogSeparator__);
+    }
+
+    private final static int supportsSchemasInDataManipulation__ = 46;
+
+    public boolean supportsSchemasInDataManipulation() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsSchemasInDataManipulation__);
+    }
+
+    private final static int supportsSchemasInProcedureCalls__ = 47;
+
+    public boolean supportsSchemasInProcedureCalls() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsSchemasInProcedureCalls__);
+    }
+
+    private final static int supportsSchemasInTableDefinitions__ = 48;
+
+    public boolean supportsSchemasInTableDefinitions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsSchemasInTableDefinitions__);
+    }
+
+
+    private final static int supportsSchemasInIndexDefinitions__ = 49;
+
+    public boolean supportsSchemasInIndexDefinitions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsSchemasInIndexDefinitions__);
+    }
+
+    private final static int supportsSchemasInPrivilegeDefinitions__ = 50;
+
+    public boolean supportsSchemasInPrivilegeDefinitions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsSchemasInPrivilegeDefinitions__);
+    }
+
+    private final static int supportsCatalogsInDataManipulation__ = 51;
+
+    public boolean supportsCatalogsInDataManipulation() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsCatalogsInDataManipulation__);
+    }
+
+    private final static int supportsCatalogsInProcedureCalls__ = 52;
+
+    public boolean supportsCatalogsInProcedureCalls() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsCatalogsInProcedureCalls__);
+    }
+
+    private final static int supportsCatalogsInTableDefinitions__ = 53;
+
+    public boolean supportsCatalogsInTableDefinitions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsCatalogsInTableDefinitions__);
+    }
+
+    private final static int supportsCatalogsInIndexDefinitions__ = 54;
+
+    public boolean supportsCatalogsInIndexDefinitions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsCatalogsInIndexDefinitions__);
+    }
+
+    private final static int supportsCatalogsInPrivilegeDefinitions__ = 55;
+
+    public boolean supportsCatalogsInPrivilegeDefinitions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsCatalogsInPrivilegeDefinitions__);
+    }
+
+    private final static int supportsPositionedDelete__ = 56;
+
+    public boolean supportsPositionedDelete() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsPositionedDelete__);
+    }
+
+
+    private final static int supportsPositionedUpdate__ = 57;
+
+    public boolean supportsPositionedUpdate() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsPositionedUpdate__);
+    }
+
+    private final static int supportsSelectForUpdate__ = 58;
+
+    public boolean supportsSelectForUpdate() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsSelectForUpdate__);
+    }
+
+    private final static int supportsStoredProcedures__ = 59;
+
+    public boolean supportsStoredProcedures() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsStoredProcedures__);
+    }
+
+    private final static int supportsSubqueriesInComparisons__ = 60;
+
+    public boolean supportsSubqueriesInComparisons() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsSubqueriesInComparisons__);
+    }
+
+    private final static int supportsUnion__ = 61;
+
+    public boolean supportsUnion() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsUnion__);
+    }
+
+    private final static int supportsUnionAll__ = 62;
+
+    public boolean supportsUnionAll() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsUnionAll__);
+    }
+
+    private final static int supportsOpenCursorsAcrossCommit__ = 63;
+
+    public boolean supportsOpenCursorsAcrossCommit() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsOpenCursorsAcrossCommit__);
+    }
+
+    private final static int supportsOpenCursorsAcrossRollback__ = 64;
+
+    public boolean supportsOpenCursorsAcrossRollback() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsOpenCursorsAcrossRollback__);
+    }
+
+    private final static int supportsOpenStatementsAcrossCommit__ = 65;
+
+    public boolean supportsOpenStatementsAcrossCommit() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsOpenStatementsAcrossCommit__);
+    }
+
+
+    private final static int supportsOpenStatementsAcrossRollback__ = 66;
+
+    public boolean supportsOpenStatementsAcrossRollback() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsOpenStatementsAcrossRollback__);
+    }
+
+    //----------------------------------------------------------------------
+    // The following group of methods exposes various limitations
+    // based on the target database with the current driver.
+    // Unless otherwise specified, a result of zero means there is no
+    // limit, or the limit is not known.
+    private final static int getMaxBinaryLiteralLength__ = 67;
+
+    public int getMaxBinaryLiteralLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxBinaryLiteralLength__);
+    }
+
+    private final static int getMaxCharLiteralLength__ = 68;
+
+    public int getMaxCharLiteralLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxCharLiteralLength__);
+    }
+
+    private final static int getMaxColumnNameLength__ = 69;
+
+    public int getMaxColumnNameLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxColumnNameLength__);
+    }
+
+    private final static int getMaxColumnsInGroupBy__ = 70;
+
+    public int getMaxColumnsInGroupBy() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxColumnsInGroupBy__);
+    }
+
+    private final static int getMaxColumnsInIndex__ = 71;
+
+    public int getMaxColumnsInIndex() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxColumnsInIndex__);
+    }
+
+    private final static int getMaxColumnsInOrderBy__ = 72;
+
+    public int getMaxColumnsInOrderBy() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxColumnsInOrderBy__);
+    }
+
+    private final static int getMaxColumnsInSelect__ = 73;
+
+    public int getMaxColumnsInSelect() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxColumnsInSelect__);
+    }
+
+    private final static int getMaxColumnsInTable__ = 74;
+
+    public int getMaxColumnsInTable() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxColumnsInTable__);
+    }
+
+    private final static int getMaxConnections__ = 75;
+
+    public int getMaxConnections() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxConnections__);
+    }
+
+    private final static int getMaxCursorNameLength__ = 76;
+
+    public int getMaxCursorNameLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxCursorNameLength__);
+    }
+
+    private final static int getMaxIndexLength__ = 77;
+
+    public int getMaxIndexLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxIndexLength__);
+    }
+
+    private final static int getMaxSchemaNameLength__ = 78;
+
+    public int getMaxSchemaNameLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxSchemaNameLength__);
+    }
+
+    private final static int getMaxProcedureNameLength__ = 79;
+
+    public int getMaxProcedureNameLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxProcedureNameLength__);
+    }
+
+    private final static int getMaxCatalogNameLength__ = 80;
+
+    public int getMaxCatalogNameLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxCatalogNameLength__);
+    }
+
+    private final static int getMaxRowSize__ = 81;
+
+    public int getMaxRowSize() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxRowSize__);
+    }
+
+    private final static int doesMaxRowSizeIncludeBlobs__ = 82;
+
+    public boolean doesMaxRowSizeIncludeBlobs() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(doesMaxRowSizeIncludeBlobs__);
+    }
+
+    private final static int getMaxStatementLength__ = 83;
+
+    public int getMaxStatementLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxStatementLength__);
+    }
+
+    private final static int getMaxStatements__ = 84;
+
+    public int getMaxStatements() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxStatements__);
+    }
+
+    private final static int getMaxTableNameLength__ = 85;
+
+    public int getMaxTableNameLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxTableNameLength__);
+    }
+
+    private final static int getMaxTablesInSelect__ = 86;
+
+    public int getMaxTablesInSelect() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxTablesInSelect__);
+    }
+
+    private final static int getMaxUserNameLength__ = 87;
+
+    public int getMaxUserNameLength() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getMaxUserNameLength__);
+    }
+
+    private final static int getDefaultTransactionIsolation__ = 88;
+
+    public int getDefaultTransactionIsolation() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt(getDefaultTransactionIsolation__);
+    }
+
+    private final static int supportsTransactions__ = 89;
+
+    public boolean supportsTransactions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsTransactions__);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all supported levels
+    private final static int supportsTransactionIsolationLevel__ = 90;
+
+    public boolean supportsTransactionIsolationLevel(int level) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(supportsTransactionIsolationLevel__, level);
+    }
+
+
+    private final static int supportsDataDefinitionAndDataManipulationTransactions__ = 91;
+
+    public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsDataDefinitionAndDataManipulationTransactions__);
+    }
+
+    private final static int supportsDataManipulationTransactionsOnly__ = 92;
+
+    public boolean supportsDataManipulationTransactionsOnly() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsDataManipulationTransactionsOnly__);
+    }
+
+    private final static int dataDefinitionCausesTransactionCommit__ = 93;
+
+    public boolean dataDefinitionCausesTransactionCommit() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(dataDefinitionCausesTransactionCommit__);
+    }
+
+    private final static int dataDefinitionIgnoredInTransactions__ = 94;
+
+    public boolean dataDefinitionIgnoredInTransactions() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(dataDefinitionIgnoredInTransactions__);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported resultSet types
+    private final static int supportsResultSetType__ = 95;
+
+    public boolean supportsResultSetType(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(supportsResultSetType__, type);
+    }
+
+    private final static int supportsResultSetConcurrency__ = 96;
+
+    public boolean supportsResultSetConcurrency(int type, int concurrency) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoInt_SupportsResultSetConcurrency(supportsResultSetConcurrency__, type, concurrency);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported result Set types
+    private final static int ownUpdatesAreVisible__ = 97;
+
+    public boolean ownUpdatesAreVisible(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(ownUpdatesAreVisible__, type);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported result Set types
+    private final static int ownDeletesAreVisible__ = 98;
+
+    public boolean ownDeletesAreVisible(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(ownDeletesAreVisible__, type);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list all the supported result Set types
+    private final static int ownInsertsAreVisible__ = 99;
+
+    public boolean ownInsertsAreVisible(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(ownInsertsAreVisible__, type);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported result Set types
+    private final static int othersUpdatesAreVisible__ = 100;
+
+    public boolean othersUpdatesAreVisible(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(othersUpdatesAreVisible__, type);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported result Set types
+    private final static int othersDeletesAreVisible__ = 101;
+
+    public boolean othersDeletesAreVisible(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(othersDeletesAreVisible__, type);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported result Set types
+    private final static int othersInsertsAreVisible__ = 102;
+
+    public boolean othersInsertsAreVisible(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(othersInsertsAreVisible__, type);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported result Set types
+    private final static int updatesAreDetected__ = 103;
+
+    public boolean updatesAreDetected(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(updatesAreDetected__, type);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported result Set types
+    private final static int deletesAreDetected__ = 104;
+
+    public boolean deletesAreDetected(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(deletesAreDetected__, type);
+    }
+
+    // Stored Procedure will return a String containing a
+    // comma seperated list of all the supported result Set types
+    private final static int insertsAreDetected__ = 105;
+
+    public boolean insertsAreDetected(int type) throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBooleanWithType(insertsAreDetected__, type);
+    }
+
+    private final static int supportsBatchUpdates__ = 106;
+
+    public boolean supportsBatchUpdates() throws SqlException {
+        checkForClosedConnection();
+        return getMetaDataInfoBoolean(supportsBatchUpdates__);
+    }
+
+    public boolean supportsSavepoints() throws SqlException {
+        checkForClosedConnection();
+        if (productLevel_.greaterThanOrEqualTo(5, 2, 0)) {
+            return true;
+        }
+
+        return false;
+    }
+
+    // start tagging all abstract methods with an underscore like this !!
+    abstract public String getURL_() throws SqlException;
+
+    public String getURL() throws SqlException {
+        checkForClosedConnection();
+        return getURL_();
+    }
+
+    public String getUserName() throws SqlException {
+        checkForClosedConnection();
+        return connection_.user_;
+    }
+
+    public boolean isReadOnly() throws SqlException {
+        return false;
+    }
+
+    public String getDatabaseProductName() throws SqlException {
+        checkForClosedConnection();
+        return productLevel_.databaseProductName_;
+    }
+
+    public String getDatabaseProductVersion() throws SqlException {
+        checkForClosedConnection();
+        return productLevel_.databaseProductVersion_;
+
+    }
+
+    public String getDriverName() throws SqlException {
+        checkForClosedConnection();
+        return Configuration.dncDriverName;
+    }
+
+    public String getDriverVersion() throws SqlException {
+        checkForClosedConnection();
+        return Version.getDriverVersion();
+    }
+
+    // JDBC signature also does not throw SqlException, so we don't check for closed connection.
+    public int getDriverMajorVersion() {
+        return Version.getMajorVersion();
+    }
+
+    // JDBC signature also does not throw SqlException, so we don't check for closed connection.
+    public int getDriverMinorVersion() {
+        return Version.getMinorVersion();
+    }
+
+    //All JDBC Drivers must return false for this method. For this reason we choose
+    //to return FALSE
+    public boolean supportsMixedCaseIdentifiers() throws SqlException {
+        checkForClosedConnection();
+        return false;
+    }
+
+    public boolean supportsMixedCaseQuotedIdentifiers() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public String getIdentifierQuoteString() throws SqlException {
+        checkForClosedConnection();
+        return "\"";
+    }
+
+    public boolean supportsColumnAliasing() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean nullPlusNonNullIsNull() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsTableCorrelationNames() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsLikeEscapeClause() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsNonNullableColumns() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsMinimumSQLGrammar() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsANSI92EntryLevelSQL() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsSubqueriesInExists() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsSubqueriesInIns() throws SqlException {
+        checkForClosedConnection();
         return true;
+    }
+
+    public boolean supportsSubqueriesInQuantifieds() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsCorrelatedSubqueries() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+
+    //------------------------catalog query methods follow--------------------------------------------
+
+    // call stored procedure SQLProcedures
+    // SYSIBM.SQLProcedures(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              ProcName    varchar(128),
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getProcedures(String catalog,
+                                            String schemaPattern,
+                                            String procedureNamePattern) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getProcedures", catalog, schemaPattern, procedureNamePattern);
+            }
+            return getProceduresX(catalog, schemaPattern, procedureNamePattern);
+        }
+    }
+
 
-    return false;
-  }
+    private ResultSet getProceduresX(String catalog,
+                                     String schemaPattern,
+                                     String procedureNamePattern) throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLPROCEDURES(?,?,?,?)");
+
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schemaPattern);
+        cs.setStringX(3, procedureNamePattern);
+        cs.setStringX(4, getOptions());
+        lastGetProceduresResultSet_ = executeCatalogQuery(cs);
+        return lastGetProceduresResultSet_;
+    }
+
+
+    // call stored procedure SQLProcedureCols
+    // SYSIBM.SQLProcedureCols(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              ProcName    varchar(128),
+    //              ParamName   varchar(128),
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getProcedureColumns(String catalog,
+                                                  String schemaPattern,
+                                                  String procedureNamePattern,
+                                                  String columnNamePattern) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getProcedureColumns", catalog, schemaPattern, procedureNamePattern, columnNamePattern);
+            }
+            return getProcedureColumnsX(catalog, schemaPattern, procedureNamePattern, columnNamePattern);
+        }
+    }
 
-  // start tagging all abstract methods with an underscore like this !!
-  abstract public String getURL_ () throws SqlException;
-  public String getURL () throws SqlException
-  {
-    checkForClosedConnection();
-    return getURL_();
-  }
-
-  public String getUserName () throws SqlException
-  {
-    checkForClosedConnection();
-    return connection_.user_;
-  }
-
-  public boolean isReadOnly () throws SqlException
-  {
-    return false;
-  }
-
-  public String getDatabaseProductName () throws SqlException
-  {
-    checkForClosedConnection();
-    return productLevel_.databaseProductName_;
-  }
-
-  public String getDatabaseProductVersion () throws SqlException
-  {
-    checkForClosedConnection();
-    return productLevel_.databaseProductVersion_;
-
-  }
-
-  public String getDriverName () throws SqlException
-  {
-    checkForClosedConnection();
-    return Configuration.dncDriverName;
-  }
-
-  public String getDriverVersion () throws SqlException
-  {
-    checkForClosedConnection();
-    return Version.getDriverVersion();
-  }
-
-  // JDBC signature also does not throw SqlException, so we don't check for closed connection.
-  public int getDriverMajorVersion ()
-  {
-    return Version.getMajorVersion();
-  }
-
-  // JDBC signature also does not throw SqlException, so we don't check for closed connection.
-  public int getDriverMinorVersion ()
-  {
-    return Version.getMinorVersion();
-  }
-
-  //All JDBC Drivers must return false for this method. For this reason we choose
-  //to return FALSE
-  public boolean supportsMixedCaseIdentifiers () throws SqlException
-  {
-    checkForClosedConnection();
-    return false;
-  }
-
-  public boolean supportsMixedCaseQuotedIdentifiers () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public String getIdentifierQuoteString () throws SqlException
-  {
-    checkForClosedConnection();
-    return "\"";
-  }
-
-  public boolean supportsColumnAliasing () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean nullPlusNonNullIsNull () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsTableCorrelationNames () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsLikeEscapeClause () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsNonNullableColumns () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsMinimumSQLGrammar () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsANSI92EntryLevelSQL () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsSubqueriesInExists () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsSubqueriesInIns () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsSubqueriesInQuantifieds () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsCorrelatedSubqueries () throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-
-  //------------------------catalog query methods follow--------------------------------------------
-
-  // call stored procedure SQLProcedures
-  // SYSIBM.SQLProcedures(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              ProcName    varchar(128),
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getProcedures (String catalog,
+    private ResultSet getProcedureColumnsX(String catalog,
                                            String schemaPattern,
-                                           String procedureNamePattern) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getProcedures", catalog, schemaPattern, procedureNamePattern);
-      return getProceduresX (catalog, schemaPattern, procedureNamePattern);
-    }
-  }
-
-
-  private ResultSet getProceduresX (String catalog,
-                                    String schemaPattern,
-                                    String procedureNamePattern) throws SqlException
-  {
-    checkForClosedConnection();;
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLPROCEDURES(?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schemaPattern);
-    cs.setStringX (3, procedureNamePattern);
-    cs.setStringX (4, getOptions());
-    lastGetProceduresResultSet_ = executeCatalogQuery (cs);
-    return lastGetProceduresResultSet_;
-  }
-
-
-  // call stored procedure SQLProcedureCols
-  // SYSIBM.SQLProcedureCols(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              ProcName    varchar(128),
-  //              ParamName   varchar(128),
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getProcedureColumns (String catalog,
-                                                 String schemaPattern,
-                                                 String procedureNamePattern,
-                                                 String columnNamePattern) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getProcedureColumns", catalog, schemaPattern, procedureNamePattern, columnNamePattern);
-      return getProcedureColumnsX (catalog, schemaPattern, procedureNamePattern, columnNamePattern);
+                                           String procedureNamePattern,
+                                           String columnNamePattern) throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLPROCEDURECOLS(?,?,?,?,?)");
+
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schemaPattern);
+        cs.setStringX(3, procedureNamePattern);
+        cs.setStringX(4, columnNamePattern);
+        cs.setStringX(5, getOptions());
+        lastGetProcedureColumnsResultSet_ = executeCatalogQuery(cs);
+        return lastGetProcedureColumnsResultSet_;
     }
-  }
 
-  private ResultSet getProcedureColumnsX (String catalog,
-                                          String schemaPattern,
-                                          String procedureNamePattern,
-                                          String columnNamePattern) throws SqlException
-  {
-    checkForClosedConnection();;
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLPROCEDURECOLS(?,?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schemaPattern);
-    cs.setStringX (3, procedureNamePattern);
-    cs.setStringX (4, columnNamePattern);
-    cs.setStringX (5, getOptions());
-    lastGetProcedureColumnsResultSet_ = executeCatalogQuery (cs);
-    return lastGetProcedureColumnsResultSet_;
-  }
-
-
-  // call stored procedure SQLTables
-  // SYSIBM.SQLTables(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              TableName   varchar(128),
-  //              TaleType    varchar(4000),
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getTables (String catalog,
-                                       String schemaPattern,
-                                       String tableNamePattern,
-                                       String types[]) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getTables", catalog, schemaPattern, tableNamePattern, types);
-      return getTablesX (catalog, schemaPattern, tableNamePattern, types);
-    }
-  }
-
-  private ResultSet getTablesX (String catalog,
-                                String schemaPattern,
-                                String tableNamePattern,
-                                String types[]) throws SqlException
-  {
-    checkForClosedConnection();
-
-    PreparedStatement cs = prepareMetaDataQuery ("SYSIBM.SQLTABLES(?,?,?,?,?)");
-
-    if (catalog == null) cs.setNullX (1, java.sql.Types.VARCHAR);
-    else cs.setStringX (1, catalog);
-
-    if (schemaPattern == null) cs.setNullX (2, java.sql.Types.VARCHAR);
-    else cs.setStringX (2, schemaPattern);
-
-    if (tableNamePattern == null) cs.setNullX (3, java.sql.Types.VARCHAR);
-    else cs.setStringX (3, tableNamePattern);
-
-    String tableTypes = new String();
-    int i=0;
-    if (types == null)
-      cs.setNullX (4,java.sql.Types.VARCHAR);
-    else if (types.length == 1 && (types[0].trim()).equals("%"))
-      cs.setStringX (4, types[0]);
-    else {
-      while (i < types.length) {
-        if (i>0) tableTypes = tableTypes.concat (",");
-          tableTypes = tableTypes.concat ("'" + types[i] + "'");
-        i++;
-      }
-      cs.setStringX (4, tableTypes );
-    }
-    cs.setStringX (5, getOptions());
-    lastGetTablesResultSet_ = executeCatalogQuery (cs);
-    return lastGetTablesResultSet_;
-  }
-
-  // call stored procedure SQLTables
-  // SYSIBM.SQLTables(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              TableName   varchar(128),
-  //              TaleType    varchar(4000),
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getSchemas () throws SqlException
-  {
-    synchronized (connection_) {
-       if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getSchemas");
-       return getSchemasX();
-    }
-  }
-
-  private ResultSet getSchemasX () throws SqlException
-  {
-    checkForClosedConnection();;
-
-    PreparedStatement cs = prepareMetaDataQuery ("SYSIBM.SQLTABLES('', '', '', '', 'GETSCHEMAS=1')");
-    return (ResultSet) cs.executeQueryX();
-  }
-
-
-  // DERBY does not have the notion of a catalog, so we return a result set with no rows.
-  public java.sql.ResultSet getCatalogs () throws SqlException
-  {
-    synchronized (connection_) {
-        if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getCatalogs");
-        return getCatalogsX();
-    }
-  }
-
-  private ResultSet getCatalogsX () throws SqlException
-  {
-    checkForClosedConnection();
-
-    PreparedStatement cs = prepareMetaDataQuery ("SYSIBM.SQLTABLES('', '', '', '', 'GETCATALOGS=1')");
-    return (ResultSet) cs.executeQueryX();
-  }
-
-  // call stored procedure SQLTables
-  // SYSIBM.SQLTables(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              TableName   varchar(128),
-  //              TableType   varchar(4000),
-  //              Options     varchar(4000))
-  public java.sql.ResultSet getTableTypes () throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getTableTypes");
-      return getTableTypesX();
-    }
-  }
-
-  private ResultSet getTableTypesX () throws SqlException
-  {
-    checkForClosedConnection();;
-
-    PreparedStatement cs = null;
-    cs = prepareMetaDataQuery("SYSIBM.SQLTABLES(?,?,?,?,?)");
-
-    cs.setStringX (1, "");
-    cs.setStringX (2, "");
-    cs.setStringX (3, "");
-    cs.setStringX (4, "%");
-    int cursorHold;
-    if (connection_.resultSetHoldability_ == ClientDataSource.HOLD_CURSORS_OVER_COMMIT)
-       cursorHold = 1;
-    else
-       cursorHold = 0;
-    cs.setStringX (5, "DATATYPE='JDBC';GETTABLETYPES=1; CURSORHOLD="+cursorHold);
-    lastGetTablesResultSet_ = executeCatalogQuery (cs);
-    return lastGetTablesResultSet_;
-  }
-
-
-  // call stored procedure SQLColumns
-  // SYSIBM.SQLColumns(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              TableName   varchar(128),
-  //              ColumnName  varchar(128),
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getColumns (String catalog,
+
+    // call stored procedure SQLTables
+    // SYSIBM.SQLTables(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              TableName   varchar(128),
+    //              TaleType    varchar(4000),
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getTables(String catalog,
                                         String schemaPattern,
                                         String tableNamePattern,
-                                        String columnNamePattern) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getColumns", catalog, schemaPattern, tableNamePattern, columnNamePattern);
-      checkForClosedConnection();
-      return getColumnsX (catalog, schemaPattern, tableNamePattern, columnNamePattern);
+                                        String types[]) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getTables", catalog, schemaPattern, tableNamePattern, types);
+            }
+            return getTablesX(catalog, schemaPattern, tableNamePattern, types);
+        }
     }
-  }
 
-  private ResultSet getColumnsX (String catalog,
-                                          String schemaPattern,
-                                          String tableNamePattern,
-                                          String columnNamePattern) throws SqlException
-  {
-    checkForClosedConnection();
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLCOLUMNS(?,?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schemaPattern);
-    cs.setStringX (3, tableNamePattern);
-    cs.setStringX (4, columnNamePattern); //Always null  for JDBC
-    cs.setStringX (5, getOptions());
-    lastGetColumnsResultSet_ = executeCatalogQuery (cs);
-    return lastGetColumnsResultSet_;
-  }
-
-
-  // call stored procedure SQLColumnPrivileges
-  // SYSIBM.SQLColPrivileges(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              TableName   varchar(128),
-  //              ColumnName  varchar(128),
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getColumnPrivileges (String catalog,
-                                                 String schema,
-                                                 String table,
-                                                 String columnNamePattern) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getColumnPrivileges", catalog, schema, table, columnNamePattern);
-      return getColumnPrivilegesX (catalog, schema, table, columnNamePattern);
-    }
-  }
-
-  private ResultSet getColumnPrivilegesX (String catalog,
-                                          String schema,
-                                          String table,
-                                          String columnNamePattern) throws SqlException
-  {
-    checkForClosedConnection();
-    // check input params, table and columnNamePattern cannot be null
-    if ( table == null ) {
-      throw new SqlException (agent_.logWriter_,  "getColumnPrivileges(): null not allowed for table name" );
-    }
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLCOLPRIVILEGES(?,?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schema);
-    cs.setStringX (3, table);
-    cs.setStringX (4, columnNamePattern);
-    cs.setStringX (5, getOptions());
-    lastGetColumnPrivilegesResultSet_ = executeCatalogQuery (cs);
-    return lastGetColumnPrivilegesResultSet_;
-  }
-
-
-  // call stored procedure SQLTablePrivileges
-  // SYSIBM.SQLTablePrivileges(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              TableName   varchar(128),
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getTablePrivileges (String catalog,
-                                                String schemaPattern,
-                                                String tableNamePattern) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getTablePrivileges", catalog, schemaPattern, tableNamePattern);
-      return getTablePrivilegesX (catalog, schemaPattern, tableNamePattern);
+    private ResultSet getTablesX(String catalog,
+                                 String schemaPattern,
+                                 String tableNamePattern,
+                                 String types[]) throws SqlException {
+        checkForClosedConnection();
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLTABLES(?,?,?,?,?)");
+
+        if (catalog == null) {
+            cs.setNullX(1, java.sql.Types.VARCHAR);
+        } else {
+            cs.setStringX(1, catalog);
+        }
+
+        if (schemaPattern == null) {
+            cs.setNullX(2, java.sql.Types.VARCHAR);
+        } else {
+            cs.setStringX(2, schemaPattern);
+        }
+
+        if (tableNamePattern == null) {
+            cs.setNullX(3, java.sql.Types.VARCHAR);
+        } else {
+            cs.setStringX(3, tableNamePattern);
+        }
+
+        String tableTypes = new String();
+        int i = 0;
+        if (types == null) {
+            cs.setNullX(4, java.sql.Types.VARCHAR);
+        } else if (types.length == 1 && (types[0].trim()).equals("%")) {
+            cs.setStringX(4, types[0]);
+        } else {
+            while (i < types.length) {
+                if (i > 0) {
+                    tableTypes = tableTypes.concat(",");
+                }
+                tableTypes = tableTypes.concat("'" + types[i] + "'");
+                i++;
+            }
+            cs.setStringX(4, tableTypes);
+        }
+        cs.setStringX(5, getOptions());
+        lastGetTablesResultSet_ = executeCatalogQuery(cs);
+        return lastGetTablesResultSet_;
+    }
+
+    // call stored procedure SQLTables
+    // SYSIBM.SQLTables(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              TableName   varchar(128),
+    //              TaleType    varchar(4000),
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getSchemas() throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getSchemas");
+            }
+            return getSchemasX();
+        }
+    }
+
+    private ResultSet getSchemasX() throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLTABLES('', '', '', '', 'GETSCHEMAS=1')");
+        return (ResultSet) cs.executeQueryX();
+    }
+
+
+    // DERBY does not have the notion of a catalog, so we return a result set with no rows.
+    public java.sql.ResultSet getCatalogs() throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getCatalogs");
+            }
+            return getCatalogsX();
+        }
+    }
+
+    private ResultSet getCatalogsX() throws SqlException {
+        checkForClosedConnection();
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLTABLES('', '', '', '', 'GETCATALOGS=1')");
+        return (ResultSet) cs.executeQueryX();
+    }
+
+    // call stored procedure SQLTables
+    // SYSIBM.SQLTables(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              TableName   varchar(128),
+    //              TableType   varchar(4000),
+    //              Options     varchar(4000))
+    public java.sql.ResultSet getTableTypes() throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getTableTypes");
+            }
+            return getTableTypesX();
+        }
     }
-  }
 
-  private ResultSet getTablePrivilegesX (String catalog,
+    private ResultSet getTableTypesX() throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        PreparedStatement cs = null;
+        cs = prepareMetaDataQuery("SYSIBM.SQLTABLES(?,?,?,?,?)");
+
+        cs.setStringX(1, "");
+        cs.setStringX(2, "");
+        cs.setStringX(3, "");
+        cs.setStringX(4, "%");
+        int cursorHold;
+        if (connection_.resultSetHoldability_ == ClientDataSource.HOLD_CURSORS_OVER_COMMIT) {
+            cursorHold = 1;
+        } else {
+            cursorHold = 0;
+        }
+        cs.setStringX(5, "DATATYPE='JDBC';GETTABLETYPES=1; CURSORHOLD=" + cursorHold);
+        lastGetTablesResultSet_ = executeCatalogQuery(cs);
+        return lastGetTablesResultSet_;
+    }
+
+
+    // call stored procedure SQLColumns
+    // SYSIBM.SQLColumns(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              TableName   varchar(128),
+    //              ColumnName  varchar(128),
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getColumns(String catalog,
                                          String schemaPattern,
-                                         String tableNamePattern) throws SqlException
-  {
-    checkForClosedConnection();;
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLTABLEPRIVILEGES(?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schemaPattern);
-    cs.setStringX (3, tableNamePattern);
-    cs.setStringX (4, getOptions());
-    lastGetTablePrivilegesResultSet_ = executeCatalogQuery (cs);
-    return lastGetTablePrivilegesResultSet_;
-  }
-
-
-  // call stored procedure
-  // SYSIBM.SQLSPECIALCOLUMNS ( IN COLTYPE SMALLINT,
-  //                            IN CATALOG_NAME VARCHAR(128),
-  //                            IN SCHEMA_NAME  VARCHAR(128),
-  //                            IN TABLE_NAME   VARCHAR(128),
-  //                            IN SCOPE        SMALLINT,
-  //                            IN NULLABLE     SMALLINT,
-  //                            IN OPTIONS      VARCHAR(4000) )
-  //
-  public java.sql.ResultSet getBestRowIdentifier (String catalog,
+                                         String tableNamePattern,
+                                         String columnNamePattern) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getColumns", catalog, schemaPattern, tableNamePattern, columnNamePattern);
+            }
+            checkForClosedConnection();
+            return getColumnsX(catalog, schemaPattern, tableNamePattern, columnNamePattern);
+        }
+    }
+
+    private ResultSet getColumnsX(String catalog,
+                                  String schemaPattern,
+                                  String tableNamePattern,
+                                  String columnNamePattern) throws SqlException {
+        checkForClosedConnection();
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLCOLUMNS(?,?,?,?,?)");
+
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schemaPattern);
+        cs.setStringX(3, tableNamePattern);
+        cs.setStringX(4, columnNamePattern); //Always null  for JDBC
+        cs.setStringX(5, getOptions());
+        lastGetColumnsResultSet_ = executeCatalogQuery(cs);
+        return lastGetColumnsResultSet_;
+    }
+
+
+    // call stored procedure SQLColumnPrivileges
+    // SYSIBM.SQLColPrivileges(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              TableName   varchar(128),
+    //              ColumnName  varchar(128),
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getColumnPrivileges(String catalog,
                                                   String schema,
                                                   String table,
-                                                  int scope,
-                                                  boolean nullable) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getBestRowIdentifier", catalog, schema, table, scope, nullable);
-      return getBestRowIdentifierX (catalog, schema, table, scope, nullable);
+                                                  String columnNamePattern) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getColumnPrivileges", catalog, schema, table, columnNamePattern);
+            }
+            return getColumnPrivilegesX(catalog, schema, table, columnNamePattern);
+        }
     }
-  }
 
-  private ResultSet getBestRowIdentifierX (String catalog,
+    private ResultSet getColumnPrivilegesX(String catalog,
                                            String schema,
                                            String table,
-                                           int scope,
-                                           boolean nullable) throws SqlException
-  {
-    checkForClosedConnection();;
+                                           String columnNamePattern) throws SqlException {
+        checkForClosedConnection();
+        // check input params, table and columnNamePattern cannot be null
+        if (table == null) {
+            throw new SqlException(agent_.logWriter_, "getColumnPrivileges(): null not allowed for table name");
+        }
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLCOLPRIVILEGES(?,?,?,?,?)");
+
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schema);
+        cs.setStringX(3, table);
+        cs.setStringX(4, columnNamePattern);
+        cs.setStringX(5, getOptions());
+        lastGetColumnPrivilegesResultSet_ = executeCatalogQuery(cs);
+        return lastGetColumnPrivilegesResultSet_;
+    }
+
+
+    // call stored procedure SQLTablePrivileges
+    // SYSIBM.SQLTablePrivileges(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              TableName   varchar(128),
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getTablePrivileges(String catalog,
+                                                 String schemaPattern,
+                                                 String tableNamePattern) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getTablePrivileges", catalog, schemaPattern, tableNamePattern);
+            }
+            return getTablePrivilegesX(catalog, schemaPattern, tableNamePattern);
+        }
+    }
+
+    private ResultSet getTablePrivilegesX(String catalog,
+                                          String schemaPattern,
+                                          String tableNamePattern) throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLTABLEPRIVILEGES(?,?,?,?)");
+
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schemaPattern);
+        cs.setStringX(3, tableNamePattern);
+        cs.setStringX(4, getOptions());
+        lastGetTablePrivilegesResultSet_ = executeCatalogQuery(cs);
+        return lastGetTablePrivilegesResultSet_;
+    }
+
 
-    // check input params
+    // call stored procedure
+    // SYSIBM.SQLSPECIALCOLUMNS ( IN COLTYPE SMALLINT,
+    //                            IN CATALOG_NAME VARCHAR(128),
+    //                            IN SCHEMA_NAME  VARCHAR(128),
+    //                            IN TABLE_NAME   VARCHAR(128),
+    //                            IN SCOPE        SMALLINT,
+    //                            IN NULLABLE     SMALLINT,
+    //                            IN OPTIONS      VARCHAR(4000) )
     //
-    // validate input table, which can not be null
-    if (table == null) {
-      throw new SqlException (agent_.logWriter_,  "getBestRowIdentifier(): null not allowed for table name" );
-    }
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLSPECIALCOLUMNS(?,?,?,?,?,?,?)");
-
-    cs.setIntX (1, SQL_BEST_ROWID);
-    cs.setStringX (2, catalog);
-    cs.setStringX (3, schema);
-    cs.setStringX (4, table);
-    cs.setIntX (5, scope);
-    if (nullable)
-      cs.setShortX (6, (short) 1);
-    else
-      cs.setShortX (6, (short) 0);
-    cs.setStringX (7, getOptions());
-    lastGetSpecialColumnsResultSet_ = executeCatalogQuery (cs);
-    return lastGetSpecialColumnsResultSet_;
-  }
-
-
-  public java.sql.ResultSet getVersionColumns (String catalog,
-                                               String schema,
-                                               String table) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getVersionColumns", catalog, schema, table);
-      return getVersionColumnsX (catalog, schema, table);
-    }
-  }
-
-  private ResultSet getVersionColumnsX (String catalog,
-                                        String schema,
-                                        String table) throws SqlException
-  {
-    checkForClosedConnection();
-
-    // validate input table, which can not be null
-    if (table == null) {
-      throw new SqlException (agent_.logWriter_,  "getBestRowIdentifier(): null not allowed for table name" );
-    }
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLSPECIALCOLUMNS(?,?,?,?,?,?,?)");
-
-    cs.setIntX (1, SQL_ROWVER);
-    cs.setStringX (2, catalog);
-    cs.setStringX (3, schema);
-    cs.setStringX (4, table);
-    cs.setIntX (5, 0);
-    cs.setShortX (6, (short) 0);
-    cs.setStringX (7, getOptions());
-
-    lastGetSpecialColumnsResultSet_ = executeCatalogQuery (cs);
-    return lastGetSpecialColumnsResultSet_;
-  }
-
-  // call stored procedure SQLPrimaryKeys
-  // SYSIBM.SQLPrimaryKeys(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              TableName   varchar(128),
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getPrimaryKeys (String catalog,
+    public java.sql.ResultSet getBestRowIdentifier(String catalog,
+                                                   String schema,
+                                                   String table,
+                                                   int scope,
+                                                   boolean nullable) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getBestRowIdentifier", catalog, schema, table, scope, nullable);
+            }
+            return getBestRowIdentifierX(catalog, schema, table, scope, nullable);
+        }
+    }
+
+    private ResultSet getBestRowIdentifierX(String catalog,
                                             String schema,
-                                            String table) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getPrimaryKeys", catalog, schema, table);
-      return getPrimaryKeysX (catalog, schema, table);
-    }
-  }
-
-  private ResultSet getPrimaryKeysX (String catalog,
-                                     String schema,
-                                     String table) throws SqlException
-  {
-    checkForClosedConnection();;
-
-    // validate the input table name
-    if ( table == null ) {
-      throw new SqlException (agent_.logWriter_,  "getIndexInfo(): null not allowed for table name" );
-    }
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLPRIMARYKEYS(?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schema);
-    cs.setStringX (3, table);
-    cs.setStringX (4, getOptions());
-    lastGetPrimaryKeysResultSet_ = executeCatalogQuery (cs);
-    return lastGetPrimaryKeysResultSet_;
-  }
-
-
-  // call storlastGetPrimaryKeysResultSet_ed procedure SQLForeignKeys
-  // SYSIBM.SQLForeignKeys(
-  //              PKCatalogName varchar(128),
-  //              PKSchemaName  varchar(128),
-  //              PKTableName   varchar(128),
-  //              FKCatalogName varchar(128),
-  //              FKSchemaName  varchar(128),
-  //              FKTableName   varchar(128),
-  //              Options       varchar(4000))
-  //
-  public java.sql.ResultSet getImportedKeys (String catalog,
-                                             String schema,
-                                             String table) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getImportedKeys", catalog, schema, table);
-      return getImportedKeysX (catalog, schema, table);
+                                            String table,
+                                            int scope,
+                                            boolean nullable) throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        // check input params
+        //
+        // validate input table, which can not be null
+        if (table == null) {
+            throw new SqlException(agent_.logWriter_, "getBestRowIdentifier(): null not allowed for table name");
+        }
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLSPECIALCOLUMNS(?,?,?,?,?,?,?)");
+
+        cs.setIntX(1, SQL_BEST_ROWID);
+        cs.setStringX(2, catalog);
+        cs.setStringX(3, schema);
+        cs.setStringX(4, table);
+        cs.setIntX(5, scope);
+        if (nullable) {
+            cs.setShortX(6, (short) 1);
+        } else {
+            cs.setShortX(6, (short) 0);
+        }
+        cs.setStringX(7, getOptions());
+        lastGetSpecialColumnsResultSet_ = executeCatalogQuery(cs);
+        return lastGetSpecialColumnsResultSet_;
     }
-  }
 
-  private ResultSet getImportedKeysX (String catalog,
-                                      String schema,
-                                      String table) throws SqlException
-  {
-    checkForClosedConnection();
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLFOREIGNKEYS(?,?,?,?,?,?,?)");
-
-    cs.setStringX (1, "");
-    cs.setStringX (2, null);
-    cs.setStringX (3, "");
-    cs.setStringX (4, catalog);
-    cs.setStringX (5, schema);
-    cs.setStringX (6, table);
-    // We're passing the keyword EXPORTEDKEY, but this support may not be in the GA version of SPs.
-    // As a workaround in getCrossReference(), we'll just "select * where 0=1" when primaryTable==""
-    if (connection_.resultSetHoldability_ == ClientDataSource.HOLD_CURSORS_OVER_COMMIT)
-      cs.setStringX (7, "DATATYPE='JDBC';IMPORTEDKEY=1; CURSORHOLD=1" );
-    else
-      cs.setStringX (7, "DATATYPE='JDBC';IMPORTEDKEY=1; CURSORHOLD=0" );
-    lastGetForeignKeysResultSet_ = executeCatalogQuery (cs);
-    return lastGetForeignKeysResultSet_;
-  }
-
-  // call stored procedure SQLForeignKeys
-  // SYSIBM.SQLForeignKeys(
-  //              PKCatalogName varchar(128),
-  //              PKSchemaName  varchar(128),
-  //              PKTableName   varchar(128),
-  //              FKCatalogName varchar(128),
-  //              FKSchemaName  varchar(128),
-  //              FKTableName   varchar(128),
-  //              Options       varchar(4000))
-  //
-  public java.sql.ResultSet getExportedKeys (String catalog,
+
+    public java.sql.ResultSet getVersionColumns(String catalog,
+                                                String schema,
+                                                String table) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getVersionColumns", catalog, schema, table);
+            }
+            return getVersionColumnsX(catalog, schema, table);
+        }
+    }
+
+    private ResultSet getVersionColumnsX(String catalog,
+                                         String schema,
+                                         String table) throws SqlException {
+        checkForClosedConnection();
+
+        // validate input table, which can not be null
+        if (table == null) {
+            throw new SqlException(agent_.logWriter_, "getBestRowIdentifier(): null not allowed for table name");
+        }
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLSPECIALCOLUMNS(?,?,?,?,?,?,?)");
+
+        cs.setIntX(1, SQL_ROWVER);
+        cs.setStringX(2, catalog);
+        cs.setStringX(3, schema);
+        cs.setStringX(4, table);
+        cs.setIntX(5, 0);
+        cs.setShortX(6, (short) 0);
+        cs.setStringX(7, getOptions());
+
+        lastGetSpecialColumnsResultSet_ = executeCatalogQuery(cs);
+        return lastGetSpecialColumnsResultSet_;
+    }
+
+    // call stored procedure SQLPrimaryKeys
+    // SYSIBM.SQLPrimaryKeys(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              TableName   varchar(128),
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getPrimaryKeys(String catalog,
                                              String schema,
-                                             String table) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getExportedKeys", catalog, schema, table);
-      return getExportedKeysX (catalog, schema, table);
+                                             String table) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getPrimaryKeys", catalog, schema, table);
+            }
+            return getPrimaryKeysX(catalog, schema, table);
+        }
     }
-  }
 
-  private ResultSet getExportedKeysX (String catalog,
+    private ResultSet getPrimaryKeysX(String catalog,
                                       String schema,
-                                      String table) throws SqlException
-  {
-    checkForClosedConnection();;
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLFOREIGNKEYS(?,?,?,?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schema);
-    cs.setStringX (3, table);
-    cs.setStringX (4, "");
-    cs.setStringX (5, null);
-    cs.setStringX (6, "");
-    // We're passing the keyword EXPORTEDKEY, but this support may not be in the GA version of SPs.
-    // As a workaround in getCrossReference(), we'll just "select * where 0=1" when foreignTable==""
-    if (connection_.resultSetHoldability_ == ClientDataSource.HOLD_CURSORS_OVER_COMMIT)
-      cs.setStringX (7, "DATATYPE='JDBC';EXPORTEDKEY=1; CURSORHOLD=1" );
-    else
-      cs.setStringX (7, "DATATYPE='JDBC';EXPORTEDKEY=1; CURSORHOLD=0" );
-    lastGetForeignKeysResultSet_ = executeCatalogQuery (cs);
-    return lastGetForeignKeysResultSet_;
-  }
-
-  // call stored procedure SQLForeignKeys
-  // SYSIBM.SQLForeignKeys(
-  //              PKCatalogName varchar(128),
-  //              PKSchemaName  varchar(128),
-  //              PKTableName   varchar(128),
-  //              FKCatalogName varchar(128),
-  //              FKSchemaName  varchar(128),
-  //              FKTableName   varchar(128),
-  //              Options       varchar(4000))
-  //
-  public java.sql.ResultSet getCrossReference (String primaryCatalog,
-                                               String primarySchema,
-                                               String primaryTable,
-                                               String foreignCatalog,
-                                               String foreignSchema,
-                                               String foreignTable) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getCrossReference", primaryCatalog, primarySchema, primaryTable, foreignCatalog, foreignSchema, foreignTable);
-      return getCrossReferenceX (primaryCatalog, primarySchema, primaryTable,
-                                   foreignCatalog, foreignSchema, foreignTable);
-    }
-  }
-
-
-  private ResultSet getCrossReferenceX (String primaryCatalog,
-                                        String primarySchema,
-                                        String primaryTable,
-                                        String foreignCatalog,
-                                        String foreignSchema,
-                                        String foreignTable) throws SqlException
-  {
-    checkForClosedConnection();;
-
-    // check input params, primaryTable and foreignTable cannot be null
-    if ( primaryTable == null ) {
-      throw new SqlException (agent_.logWriter_,  "getCrossReference(): null not allowed for primary table name" );
-    }
-
-    if ( foreignTable == null ) {
-      throw new SqlException (agent_.logWriter_,  "getCrossReference(): null not allowed for foreign table name" );
-    }
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLFOREIGNKEYS(?,?,?,?,?,?,?)");
-
-    cs.setStringX (1, primaryCatalog);
-    cs.setStringX (2, primarySchema);
-    cs.setStringX (3, primaryTable);
-    cs.setStringX (4, foreignCatalog);
-    cs.setStringX (5, foreignSchema);
-    cs.setStringX (6, foreignTable);
-    cs.setStringX (7, getOptions());
-    lastGetForeignKeysResultSet_ = executeCatalogQuery (cs);
-    return lastGetForeignKeysResultSet_;
-  }
-
-  // call stored procedure SQLGetTypeInfo
-  // SYSIBM.SQLGetTypeInfo (IN DATATYPE SMALLINT,
-  //                        IN Options VARCHAR(4000))
-  //
-  //
-  public java.sql.ResultSet getTypeInfo () throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getTypeInfo");
-      return getTypeInfoX();
-    }
-  }
-
-  private ResultSet getTypeInfoX () throws SqlException
-  {
-    checkForClosedConnection();;
-
-    // check if the last call's resultset is closed or not.
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLGETTYPEINFO(?,?)");
-
-    cs.setShortX (1, (short)0);
-    cs.setStringX (2, getOptions());
-    lastGetTypeInfoResultSet_ = executeCatalogQuery (cs);
-    return lastGetTypeInfoResultSet_;
-  }
-
-
-  // call stored procedure SQLStatistics
-  // SYSIBM.SQLStatistics(
-  //              CatalogName varchar(128),
-  //              SchemaName  varchar(128),
-  //              TableName   varchar(128),
-  //              Unique      Smallint,
-  //              Reserved    Smallint,
-  //              Options     varchar(4000))
-  //
-  public java.sql.ResultSet getIndexInfo (String catalog,
-                                          String schema,
-                                          String table,
-                                          boolean unique,
-                                          boolean approximate) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getIndexInfo", catalog, schema, table, unique, approximate);
-      return getIndexInfoX (catalog, schema, table, unique, approximate);
-    }
-  }
-
-  private ResultSet getIndexInfoX (String catalog,
-                                   String schema,
-                                   String table,
-                                   boolean unique,
-                                   boolean approximate) throws SqlException
-  {
-    checkForClosedConnection();
-
-    // validate the input table name
-    if ( table == null ) {
-      throw new SqlException (agent_.logWriter_,  "getIndexInfo(): null not allowed for table name" );
-    }
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLSTATISTICS(?,?,?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schema);
-    cs.setStringX (3, table);
-
-    if (unique) cs.setShortX (4, SQL_INDEX_UNIQUE);
-    else cs.setShortX (4, SQL_INDEX_ALL);
-
-    if (approximate) cs.setShortX (5,(short) 1);
-    else cs.setShortX (5, (short)0);
-
-    cs.setStringX (6, getOptions());
-    lastGetStatisticsResultSet_ = executeCatalogQuery (cs);
-    return lastGetStatisticsResultSet_;
-  }
+                                      String table) throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        // validate the input table name
+        if (table == null) {
+            throw new SqlException(agent_.logWriter_, "getIndexInfo(): null not allowed for table name");
+        }
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLPRIMARYKEYS(?,?,?,?)");
 
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schema);
+        cs.setStringX(3, table);
+        cs.setStringX(4, getOptions());
+        lastGetPrimaryKeysResultSet_ = executeCatalogQuery(cs);
+        return lastGetPrimaryKeysResultSet_;
+    }
 
-  //--------------------------JDBC 2.0-----------------------------
 
-  public java.sql.ResultSet getUDTs (String catalog,
-                                     String schemaPattern,
-                                     String typeNamePattern,
-                                     int[] types) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getUDTs", catalog, schemaPattern, typeNamePattern, types);
-      return getUDTsX (catalog, schemaPattern, typeNamePattern, types);
-    }
-  }
-
-  private ResultSet getUDTsX (String catalog,
-                              String schemaPattern,
-                              String typeNamePattern,
-                              int[] types) throws SqlException
-  {
-    checkForClosedConnection();;
-
-    PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLUDTS(?,?,?,?,?)");
-
-    cs.setStringX (1, catalog);
-    cs.setStringX (2, schemaPattern);
-    cs.setStringX (3, typeNamePattern);
-    int i = 0;
-    String udtTypes = new String();
-    while (types != null && i < types.length) {
-      if (i>0) udtTypes = udtTypes.concat (",");
-      udtTypes = udtTypes.concat (String.valueOf (types[i]));
-      i++;
-    }
-    cs.setStringX (4, udtTypes);
-    cs.setStringX (5, getOptions());
-    lastGetUDTsResultSet_ = executeCatalogQuery (cs);
-    return lastGetUDTsResultSet_;
-  }
-
-
-  // helper method for the catalog queries only
-  private String getOptions ()
-  {
-    int cursorHold;
-    if (connection_.resultSetHoldability_ == ClientDataSource.HOLD_CURSORS_OVER_COMMIT)
-       cursorHold = 1;
-    else
-       cursorHold = 0;
-      return "DATATYPE='JDBC';DYNAMIC=0;REPORTPUBLICPRIVILEGES=1;CURSORHOLD=" + cursorHold;
-
-  }
-
-  // Derby uses a PreparedStatement argument rather than a callable statement
-  private ResultSet executeCatalogQuery (PreparedStatement cs) throws SqlException
-  {
-    try {
-      return cs.executeQueryX();
-    }
-    catch (SqlException e) {
-      if (e.getErrorCode() == -440 ) {
-        SqlException newException = new SqlException (agent_.logWriter_,
-        "The required stored procedure is not installed on the server.");
-        newException.setNextException (e);
-        throw newException;
-      }
-      else if (e.getErrorCode() == -444 ) {
-        SqlException newException = new SqlException (agent_.logWriter_,
-        "The load module name for the stored procedure on the server is not found. ");
-        newException.setNextException (e);
-        throw newException;
-      }
-      else
-        throw e;
-    }
-  }
-
-  public java.sql.Connection getConnection () throws SqlException
-  {
-    checkForClosedConnection();
-    return connection_;
-  }
+    // call storlastGetPrimaryKeysResultSet_ed procedure SQLForeignKeys
+    // SYSIBM.SQLForeignKeys(
+    //              PKCatalogName varchar(128),
+    //              PKSchemaName  varchar(128),
+    //              PKTableName   varchar(128),
+    //              FKCatalogName varchar(128),
+    //              FKSchemaName  varchar(128),
+    //              FKTableName   varchar(128),
+    //              Options       varchar(4000))
+    //
+    public java.sql.ResultSet getImportedKeys(String catalog,
+                                              String schema,
+                                              String table) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getImportedKeys", catalog, schema, table);
+            }
+            return getImportedKeysX(catalog, schema, table);
+        }
+    }
+
+    private ResultSet getImportedKeysX(String catalog,
+                                       String schema,
+                                       String table) throws SqlException {
+        checkForClosedConnection();
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLFOREIGNKEYS(?,?,?,?,?,?,?)");
+
+        cs.setStringX(1, "");
+        cs.setStringX(2, null);
+        cs.setStringX(3, "");
+        cs.setStringX(4, catalog);
+        cs.setStringX(5, schema);
+        cs.setStringX(6, table);
+        // We're passing the keyword EXPORTEDKEY, but this support may not be in the GA version of SPs.
+        // As a workaround in getCrossReference(), we'll just "select * where 0=1" when primaryTable==""
+        if (connection_.resultSetHoldability_ == ClientDataSource.HOLD_CURSORS_OVER_COMMIT) {
+            cs.setStringX(7, "DATATYPE='JDBC';IMPORTEDKEY=1; CURSORHOLD=1");
+        } else {
+            cs.setStringX(7, "DATATYPE='JDBC';IMPORTEDKEY=1; CURSORHOLD=0");
+        }
+        lastGetForeignKeysResultSet_ = executeCatalogQuery(cs);
+        return lastGetForeignKeysResultSet_;
+    }
+
+    // call stored procedure SQLForeignKeys
+    // SYSIBM.SQLForeignKeys(
+    //              PKCatalogName varchar(128),
+    //              PKSchemaName  varchar(128),
+    //              PKTableName   varchar(128),
+    //              FKCatalogName varchar(128),
+    //              FKSchemaName  varchar(128),
+    //              FKTableName   varchar(128),
+    //              Options       varchar(4000))
+    //
+    public java.sql.ResultSet getExportedKeys(String catalog,
+                                              String schema,
+                                              String table) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getExportedKeys", catalog, schema, table);
+            }
+            return getExportedKeysX(catalog, schema, table);
+        }
+    }
+
+    private ResultSet getExportedKeysX(String catalog,
+                                       String schema,
+                                       String table) throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLFOREIGNKEYS(?,?,?,?,?,?,?)");
+
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schema);
+        cs.setStringX(3, table);
+        cs.setStringX(4, "");
+        cs.setStringX(5, null);
+        cs.setStringX(6, "");
+        // We're passing the keyword EXPORTEDKEY, but this support may not be in the GA version of SPs.
+        // As a workaround in getCrossReference(), we'll just "select * where 0=1" when foreignTable==""
+        if (connection_.resultSetHoldability_ == ClientDataSource.HOLD_CURSORS_OVER_COMMIT) {
+            cs.setStringX(7, "DATATYPE='JDBC';EXPORTEDKEY=1; CURSORHOLD=1");
+        } else {
+            cs.setStringX(7, "DATATYPE='JDBC';EXPORTEDKEY=1; CURSORHOLD=0");
+        }
+        lastGetForeignKeysResultSet_ = executeCatalogQuery(cs);
+        return lastGetForeignKeysResultSet_;
+    }
+
+    // call stored procedure SQLForeignKeys
+    // SYSIBM.SQLForeignKeys(
+    //              PKCatalogName varchar(128),
+    //              PKSchemaName  varchar(128),
+    //              PKTableName   varchar(128),
+    //              FKCatalogName varchar(128),
+    //              FKSchemaName  varchar(128),
+    //              FKTableName   varchar(128),
+    //              Options       varchar(4000))
+    //
+    public java.sql.ResultSet getCrossReference(String primaryCatalog,
+                                                String primarySchema,
+                                                String primaryTable,
+                                                String foreignCatalog,
+                                                String foreignSchema,
+                                                String foreignTable) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getCrossReference", primaryCatalog, primarySchema, primaryTable, foreignCatalog, foreignSchema, foreignTable);
+            }
+            return getCrossReferenceX(primaryCatalog, primarySchema, primaryTable,
+                    foreignCatalog, foreignSchema, foreignTable);
+        }
+    }
+
+
+    private ResultSet getCrossReferenceX(String primaryCatalog,
+                                         String primarySchema,
+                                         String primaryTable,
+                                         String foreignCatalog,
+                                         String foreignSchema,
+                                         String foreignTable) throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        // check input params, primaryTable and foreignTable cannot be null
+        if (primaryTable == null) {
+            throw new SqlException(agent_.logWriter_, "getCrossReference(): null not allowed for primary table name");
+        }
+
+        if (foreignTable == null) {
+            throw new SqlException(agent_.logWriter_, "getCrossReference(): null not allowed for foreign table name");
+        }
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLFOREIGNKEYS(?,?,?,?,?,?,?)");
+
+        cs.setStringX(1, primaryCatalog);
+        cs.setStringX(2, primarySchema);
+        cs.setStringX(3, primaryTable);
+        cs.setStringX(4, foreignCatalog);
+        cs.setStringX(5, foreignSchema);
+        cs.setStringX(6, foreignTable);
+        cs.setStringX(7, getOptions());
+        lastGetForeignKeysResultSet_ = executeCatalogQuery(cs);
+        return lastGetForeignKeysResultSet_;
+    }
+
+    // call stored procedure SQLGetTypeInfo
+    // SYSIBM.SQLGetTypeInfo (IN DATATYPE SMALLINT,
+    //                        IN Options VARCHAR(4000))
+    //
+    //
+    public java.sql.ResultSet getTypeInfo() throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getTypeInfo");
+            }
+            return getTypeInfoX();
+        }
+    }
+
+    private ResultSet getTypeInfoX() throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        // check if the last call's resultset is closed or not.
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLGETTYPEINFO(?,?)");
+
+        cs.setShortX(1, (short) 0);
+        cs.setStringX(2, getOptions());
+        lastGetTypeInfoResultSet_ = executeCatalogQuery(cs);
+        return lastGetTypeInfoResultSet_;
+    }
+
+
+    // call stored procedure SQLStatistics
+    // SYSIBM.SQLStatistics(
+    //              CatalogName varchar(128),
+    //              SchemaName  varchar(128),
+    //              TableName   varchar(128),
+    //              Unique      Smallint,
+    //              Reserved    Smallint,
+    //              Options     varchar(4000))
+    //
+    public java.sql.ResultSet getIndexInfo(String catalog,
+                                           String schema,
+                                           String table,
+                                           boolean unique,
+                                           boolean approximate) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getIndexInfo", catalog, schema, table, unique, approximate);
+            }
+            return getIndexInfoX(catalog, schema, table, unique, approximate);
+        }
+    }
+
+    private ResultSet getIndexInfoX(String catalog,
+                                    String schema,
+                                    String table,
+                                    boolean unique,
+                                    boolean approximate) throws SqlException {
+        checkForClosedConnection();
+
+        // validate the input table name
+        if (table == null) {
+            throw new SqlException(agent_.logWriter_, "getIndexInfo(): null not allowed for table name");
+        }
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLSTATISTICS(?,?,?,?,?,?)");
+
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schema);
+        cs.setStringX(3, table);
+
+        if (unique) {
+            cs.setShortX(4, SQL_INDEX_UNIQUE);
+        } else {
+            cs.setShortX(4, SQL_INDEX_ALL);
+        }
+
+        if (approximate) {
+            cs.setShortX(5, (short) 1);
+        } else {
+            cs.setShortX(5, (short) 0);
+        }
+
+        cs.setStringX(6, getOptions());
+        lastGetStatisticsResultSet_ = executeCatalogQuery(cs);
+        return lastGetStatisticsResultSet_;
+    }
+
+
+    //--------------------------JDBC 2.0-----------------------------
+
+    public java.sql.ResultSet getUDTs(String catalog,
+                                      String schemaPattern,
+                                      String typeNamePattern,
+                                      int[] types) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getUDTs", catalog, schemaPattern, typeNamePattern, types);
+            }
+            return getUDTsX(catalog, schemaPattern, typeNamePattern, types);
+        }
+    }
+
+    private ResultSet getUDTsX(String catalog,
+                               String schemaPattern,
+                               String typeNamePattern,
+                               int[] types) throws SqlException {
+        checkForClosedConnection();
+        ;
+
+        PreparedStatement cs = prepareMetaDataQuery("SYSIBM.SQLUDTS(?,?,?,?,?)");
+
+        cs.setStringX(1, catalog);
+        cs.setStringX(2, schemaPattern);
+        cs.setStringX(3, typeNamePattern);
+        int i = 0;
+        String udtTypes = new String();
+        while (types != null && i < types.length) {
+            if (i > 0) {
+                udtTypes = udtTypes.concat(",");
+            }
+            udtTypes = udtTypes.concat(String.valueOf(types[i]));
+            i++;
+        }
+        cs.setStringX(4, udtTypes);
+        cs.setStringX(5, getOptions());
+        lastGetUDTsResultSet_ = executeCatalogQuery(cs);
+        return lastGetUDTsResultSet_;
+    }
+
+
+    // helper method for the catalog queries only
+    private String getOptions() {
+        int cursorHold;
+        if (connection_.resultSetHoldability_ == ClientDataSource.HOLD_CURSORS_OVER_COMMIT) {
+            cursorHold = 1;
+        } else {
+            cursorHold = 0;
+        }
+        return "DATATYPE='JDBC';DYNAMIC=0;REPORTPUBLICPRIVILEGES=1;CURSORHOLD=" + cursorHold;
+
+    }
+
+    // Derby uses a PreparedStatement argument rather than a callable statement
+    private ResultSet executeCatalogQuery(PreparedStatement cs) throws SqlException {
+        try {
+            return cs.executeQueryX();
+        } catch (SqlException e) {
+            if (e.getErrorCode() == -440) {
+                SqlException newException = new SqlException(agent_.logWriter_,
+                        "The required stored procedure is not installed on the server.");
+                newException.setNextException(e);
+                throw newException;
+            } else if (e.getErrorCode() == -444) {
+                SqlException newException = new SqlException(agent_.logWriter_,
+                        "The load module name for the stored procedure on the server is not found. ");
+                newException.setNextException(e);
+                throw newException;
+            } else {
+                throw e;
+            }
+        }
+    }
+
+    public java.sql.Connection getConnection() throws SqlException {
+        checkForClosedConnection();
+        return connection_;
+    }
 
     // ------------------- JDBC 3.0 -------------------------
 
-  public boolean supportsNamedParameters() throws SqlException
-  {
-    checkForClosedConnection();
-    return false;
-  }
-
-  public boolean supportsMultipleOpenResults() throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public boolean supportsGetGeneratedKeys() throws SqlException
-  {
-    checkForClosedConnection();
-    return false;
-  }
+    public boolean supportsNamedParameters() throws SqlException {
+        checkForClosedConnection();
+        return false;
+    }
+
+    public boolean supportsMultipleOpenResults() throws SqlException {
+        checkForClosedConnection();
+        return true;
+    }
+
+    public boolean supportsGetGeneratedKeys() throws SqlException {
+        checkForClosedConnection();
+        return false;
+    }
+
+    public java.sql.ResultSet getSuperTypes(String catalog,
+                                            String schemaPattern,
+                                            String typeNamePattern) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getSuperTypes", catalog, schemaPattern, typeNamePattern);
+            }
+            return getSuperTypesX();
+        }
+    }
+
+    private ResultSet getSuperTypesX() throws SqlException {
+        checkForClosedConnection();
+        String sql = "SELECT CAST(NULL AS VARCHAR(128)) AS TYPE_CAT," +
+                "CAST(NULL AS VARCHAR(128)) AS TYPE_SCHEM," +
+                "VARCHAR('', 128) AS TYPE_NAME," +
+                "CAST(NULL AS VARCHAR(128)) AS SUPERTYPE_CAT," +
+                "CAST(NULL AS VARCHAR(128)) AS SUPERTYPE_SCHEM," +
+                "VARCHAR('', 128) AS SUPERTYPE_NAME " +
+                "FROM SYSIBM.SYSDUMMY1 WHERE 1=0 WITH UR ";
+        PreparedStatement ps = connection_.prepareDynamicCatalogQuery(sql);
+        lastGetSuperTypesResultSet_ = ps.executeQueryX();
+        return lastGetSuperTypesResultSet_;
+    }
+
+    public java.sql.ResultSet getSuperTables(String catalog,
+                                             String schemaPattern,
+                                             String tableNamePattern) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getSuperTables", catalog, schemaPattern, tableNamePattern);
+            }
+            return getSuperTablesX();
+        }
+    }
+
+    private ResultSet getSuperTablesX() throws SqlException {
+        checkForClosedConnection();
+        java.lang.String sql = "SELECT CAST(NULL AS VARCHAR(128)) AS TABLE_CAT," +
+                "CAST(NULL AS VARCHAR(128)) AS TABLE_SCHEM," +
+                "VARCHAR('', 128) AS TABLE_NAME," +
+                "VARCHAR('', 128) AS SUPERTABLE_NAME FROM SYSIBM.SYSDUMMY1 " +
+                "WHERE 1=0 WITH UR";
+        PreparedStatement ps = connection_.prepareDynamicCatalogQuery(sql);
+        lastGetSuperTablesResultSet_ = ps.executeQueryX();
+        return lastGetSuperTablesResultSet_;
+    }
 
-  public java.sql.ResultSet getSuperTypes (String catalog,
-                                           String schemaPattern,
-                                           String typeNamePattern) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getSuperTypes", catalog, schemaPattern, typeNamePattern);
-      return getSuperTypesX ();
-    }
-  }
-
-  private ResultSet getSuperTypesX () throws SqlException
-  {
-    checkForClosedConnection();
-    String sql = "SELECT CAST(NULL AS VARCHAR(128)) AS TYPE_CAT," +
-                 "CAST(NULL AS VARCHAR(128)) AS TYPE_SCHEM," +
-                 "VARCHAR('', 128) AS TYPE_NAME," +
-                 "CAST(NULL AS VARCHAR(128)) AS SUPERTYPE_CAT," +
-                 "CAST(NULL AS VARCHAR(128)) AS SUPERTYPE_SCHEM," +
-                 "VARCHAR('', 128) AS SUPERTYPE_NAME "+
-                 "FROM SYSIBM.SYSDUMMY1 WHERE 1=0 WITH UR " ;
-    PreparedStatement ps = connection_.prepareDynamicCatalogQuery (sql);
-    lastGetSuperTypesResultSet_ = ps.executeQueryX();
-    return lastGetSuperTypesResultSet_;
-  }
 
-  public java.sql.ResultSet getSuperTables (String catalog,
+    public java.sql.ResultSet getAttributes(String catalog,
                                             String schemaPattern,
-                                            String tableNamePattern) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getSuperTables", catalog, schemaPattern, tableNamePattern);
-      return getSuperTablesX ();
-    }
-  }
-
-  private ResultSet getSuperTablesX () throws SqlException
-  {
-    checkForClosedConnection();
-    java.lang.String sql = "SELECT CAST(NULL AS VARCHAR(128)) AS TABLE_CAT," +
-                           "CAST(NULL AS VARCHAR(128)) AS TABLE_SCHEM," +
-                           "VARCHAR('', 128) AS TABLE_NAME," +
-                           "VARCHAR('', 128) AS SUPERTABLE_NAME FROM SYSIBM.SYSDUMMY1 "+
-                           "WHERE 1=0 WITH UR";
-    PreparedStatement ps = connection_.prepareDynamicCatalogQuery (sql);
-    lastGetSuperTablesResultSet_ = ps.executeQueryX();
-    return lastGetSuperTablesResultSet_;
-  }
+                                            String typeNamePattern,
+                                            String attributeNamePattern) throws SqlException {
+        synchronized (connection_) {
+            if (agent_.loggingEnabled()) {
+                agent_.logWriter_.traceEntry(this, "getAttributes", catalog, schemaPattern, typeNamePattern, attributeNamePattern);
+            }
+            return getAttributesX();
+        }
+    }
 
+    private ResultSet getAttributesX() throws SqlException {
+        checkForClosedConnection();
+        java.lang.String sql = "SELECT CAST(NULL AS VARCHAR(128)) AS TYPE_CAT," +
+                "CAST(NULL AS VARCHAR(128)) AS TYPE_SCHEM," +
+                "VARCHAR('', 128) AS TYPE_NAME," +
+                "VARCHAR('',128) AS ATTR_NAME," +
+                "SMALLINT(0) AS DATA_TYPE," +
+                "VARCHAR('',129) AS ATTR_TYPE_NAME," +
+                "0 AS ATTR_SIZE," +
+                "0 AS DECIMAL_DIGITS," +
+                "0 AS NUM_PREC_RADIX," +
+                "2 AS NULLABLE," +
+                "CAST(NULL AS VARCHAR(254)) AS REMARKS," +
+                "CAST(NULL AS VARCHAR(128)) AS ATTR_DEF," +
+                "0 AS SQL_DATA_TYPE," +
+                "0 AS SQL_DATETIME_SUB," +
+                "0 AS CHAR_OCTET_LENGTH," +
+                "0 AS ORDINAL_POSITION," +
+                "VARCHAR('',128) AS IS_NULLABLE," +
+                "CAST(NULL AS VARCHAR(128)) AS SCOPE_CATALOG," +
+                "CAST(NULL AS VARCHAR(128)) AS SCOPE_SCHEMA," +
+                "CAST(NULL AS VARCHAR(128)) AS SCOPE_TABLE," +
+                "CAST(NULL AS SMALLINT) AS SOURCE_DATA_TYPE " +
+                "FROM SYSIBM.SYSDUMMY1 WHERE 1=0 WITH UR";
+        PreparedStatement ps = connection_.prepareDynamicCatalogQuery(sql);
+        lastGetAttrResultSet_ = ps.executeQueryX();
+        return lastGetAttrResultSet_;
+    }
 
-  public java.sql.ResultSet getAttributes (String catalog,
-                                           String schemaPattern,
-                                           String typeNamePattern,
-                                           String attributeNamePattern) throws SqlException
-  {
-    synchronized (connection_) {
-      if (agent_.loggingEnabled()) agent_.logWriter_.traceEntry (this, "getAttributes", catalog, schemaPattern, typeNamePattern, attributeNamePattern);
-      return getAttributesX ();
-    }
-  }
-
-  private ResultSet getAttributesX () throws SqlException
-  {
-    checkForClosedConnection();
-    java.lang.String sql = "SELECT CAST(NULL AS VARCHAR(128)) AS TYPE_CAT," +
-                           "CAST(NULL AS VARCHAR(128)) AS TYPE_SCHEM," +
-                           "VARCHAR('', 128) AS TYPE_NAME," +
-                           "VARCHAR('',128) AS ATTR_NAME," +
-                           "SMALLINT(0) AS DATA_TYPE," +
-                           "VARCHAR('',129) AS ATTR_TYPE_NAME,"+
-                           "0 AS ATTR_SIZE," +
-                           "0 AS DECIMAL_DIGITS," +
-                           "0 AS NUM_PREC_RADIX,"+
-                           "2 AS NULLABLE," +
-                           "CAST(NULL AS VARCHAR(254)) AS REMARKS,"+
-                           "CAST(NULL AS VARCHAR(128)) AS ATTR_DEF,"+
-                           "0 AS SQL_DATA_TYPE," +
-                           "0 AS SQL_DATETIME_SUB," +
-                           "0 AS CHAR_OCTET_LENGTH," +
-                           "0 AS ORDINAL_POSITION," +
-                           "VARCHAR('',128) AS IS_NULLABLE,"+
-                           "CAST(NULL AS VARCHAR(128)) AS SCOPE_CATALOG," +
-                           "CAST(NULL AS VARCHAR(128)) AS SCOPE_SCHEMA,"+
-                           "CAST(NULL AS VARCHAR(128)) AS SCOPE_TABLE," +
-                           "CAST(NULL AS SMALLINT) AS SOURCE_DATA_TYPE " +
-                           "FROM SYSIBM.SYSDUMMY1 WHERE 1=0 WITH UR" ;
-    PreparedStatement ps = connection_.prepareDynamicCatalogQuery (sql);
-    lastGetAttrResultSet_ = ps.executeQueryX();
-    return lastGetAttrResultSet_;
-  }
-
-  public boolean supportsResultSetHoldability (int holdability) throws SqlException
-  {
-    checkForClosedConnection();
-    return true;
-  }
-
-  public int getResultSetHoldability() throws SqlException
-  {
-    checkForClosedConnection();
-    return java.sql.ResultSet.HOLD_CURSORS_OVER_COMMIT;
-  }
-
-  public int getDatabaseMajorVersion() throws SqlException
-  {
-    checkForClosedConnection();
-    return productLevel_.versionLevel_;
-  }
-
-  public int getDatabaseMinorVersion() throws SqlException
-  {
-    checkForClosedConnection();
-    return productLevel_.releaseLevel_;
-  }
-
-  public int getJDBCMajorVersion() throws SqlException
-  {
-    checkForClosedConnection();
-    return 3;
-  }
-
-  public int getJDBCMinorVersion() throws SqlException
-  {
-    checkForClosedConnection();
-    return 0;
-  }
-
-  public int getSQLStateType() throws SqlException
-  {
-    checkForClosedConnection();
-    return sqlStateSQL99;
-  }
-
-  public boolean locatorsUpdateCopy() throws SqlException
-  {
-    checkForClosedConnection();
-    return false;
-  }
-
-  public boolean supportsStatementPooling() throws SqlException
-  {
-    checkForClosedConnection();
-    return false;
-  }
-
-  //--------------------Abstract material layer call-down methods-----------------
-
-  // Compute feature set based on release
-  abstract protected void computeFeatureSet_ ();
-
-  //------------helper methods for meta data info call methods------------------
-
-
-  private boolean getMetaDataInfoBoolean (int infoCallIndex) throws SqlException
-  {
-    if (metaDataInfoIsCached_) return ((Integer) metaDataInfoCache_[infoCallIndex]).intValue() != 0;
-    metaDataInfoCall ();
-    return ((Integer) metaDataInfoCache_[infoCallIndex]).intValue() != 0;
-  }
-
-  private int getMetaDataInfoInt (int infoCallIndex) throws SqlException
-  {
-    if (metaDataInfoIsCached_) return ((Integer) metaDataInfoCache_[infoCallIndex]).intValue();
-    metaDataInfoCall ();
-    return ((Integer) metaDataInfoCache_[infoCallIndex]).intValue();
-  }
-
-  private String getMetaDataInfoString (int infoCallIndex) throws SqlException
-  {
-    if (metaDataInfoIsCached_) return (String) metaDataInfoCache_[infoCallIndex];
-    metaDataInfoCall ();
-    return (String) metaDataInfoCache_[infoCallIndex];
-  }
-  private boolean getMetaDataInfoBooleanWithType (int infoCallIndex, int type)throws SqlException
-  {
-    // Stored Procedure will return a String containing a
-    // comma seperated list of all the supported result Set types
-    // not throwing any exception right now even if the the type is wrong as per the spec
-    String returnedFromSP = null;
-    if (metaDataInfoIsCached_)
-      returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
-    else {
-      metaDataInfoCall ();
-      returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
-    }
-    java.util.StringTokenizer st = new java.util.StringTokenizer (returnedFromSP, ",");
-    while (st.hasMoreTokens()) {
-      if ((new Integer( st.nextToken())).intValue() == type )
+    public boolean supportsResultSetHoldability(int holdability) throws SqlException {
+        checkForClosedConnection();
         return true;
     }
-    return false;
-  }
 
-  private boolean getMetaDataInfoInt_SupportsResultSetConcurrency (int infoCallIndex, int type, int concurrency) throws SqlException
-  {
-    // The stored procured will return a String containg a list of concurrency and list of resultSet types which support
-    // a perticular concurrency
-    // For eg. if the database supports concurrency CONCUR_READ_ONLY(1007) in ResultSet type TYPE_FORWARD_ONLY(1003),
-    // TYPE_SCROLL_INSENSITIVE(1004), TYPE_SCROLL_SENSITIVE(1005) and
-    // supports concurrency CONCUR_UPDATBLE(1008) in resultSet TYPE_SCROLL_SENSITIVE(1005)
-    // then stored procedure will return a string "1007,1003,1004,1005;1008,1005"
-    // see how concurrency and supported result set types are seperated by ";"
-    String returnedFromSP = null;
-    if (metaDataInfoIsCached_)
-      returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
-    else {
-      metaDataInfoCall ();
-      returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
-    }
-    java.util.StringTokenizer st = new java.util.StringTokenizer(returnedFromSP,";");
-    while (st.hasMoreTokens()) {
-      java.util.StringTokenizer stForType = new java.util.StringTokenizer(st.nextToken(),",");
-      if ((new Integer( stForType.nextToken())).intValue() == concurrency ) {
+    public int getResultSetHoldability() throws SqlException {
+        checkForClosedConnection();
+        return java.sql.ResultSet.HOLD_CURSORS_OVER_COMMIT;
+    }
+
+    public int getDatabaseMajorVersion() throws SqlException {
+        checkForClosedConnection();
+        return productLevel_.versionLevel_;
+    }
+
+    public int getDatabaseMinorVersion() throws SqlException {
+        checkForClosedConnection();
+        return productLevel_.releaseLevel_;
+    }
+
+    public int getJDBCMajorVersion() throws SqlException {
+        checkForClosedConnection();
+        return 3;
+    }
+
+    public int getJDBCMinorVersion() throws SqlException {
+        checkForClosedConnection();
+        return 0;
+    }
+
+    public int getSQLStateType() throws SqlException {
+        checkForClosedConnection();
+        return sqlStateSQL99;
+    }
+
+    public boolean locatorsUpdateCopy() throws SqlException {
+        checkForClosedConnection();
+        return false;
+    }
+
+    public boolean supportsStatementPooling() throws SqlException {
+        checkForClosedConnection();
+        return false;
+    }
+
+    //--------------------Abstract material layer call-down methods-----------------
+
+    // Compute feature set based on release
+    abstract protected void computeFeatureSet_();
+
+    //------------helper methods for meta data info call methods------------------
+
+
+    private boolean getMetaDataInfoBoolean(int infoCallIndex) throws SqlException {
+        if (metaDataInfoIsCached_) {
+            return ((Integer) metaDataInfoCache_[infoCallIndex]).intValue() != 0;
+        }
+        metaDataInfoCall();
+        return ((Integer) metaDataInfoCache_[infoCallIndex]).intValue() != 0;
+    }
+
+    private int getMetaDataInfoInt(int infoCallIndex) throws SqlException {
+        if (metaDataInfoIsCached_) {
+            return ((Integer) metaDataInfoCache_[infoCallIndex]).intValue();
+        }
+        metaDataInfoCall();
+        return ((Integer) metaDataInfoCache_[infoCallIndex]).intValue();
+    }
+
+    private String getMetaDataInfoString(int infoCallIndex) throws SqlException {
+        if (metaDataInfoIsCached_) {
+            return (String) metaDataInfoCache_[infoCallIndex];
+        }
+        metaDataInfoCall();
+        return (String) metaDataInfoCache_[infoCallIndex];
+    }
+
+    private boolean getMetaDataInfoBooleanWithType(int infoCallIndex, int type) throws SqlException {
+        // Stored Procedure will return a String containing a
+        // comma seperated list of all the supported result Set types
+        // not throwing any exception right now even if the the type is wrong as per the spec
+        String returnedFromSP = null;
+        if (metaDataInfoIsCached_) {
+            returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
+        } else {
+            metaDataInfoCall();
+            returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
+        }
+        java.util.StringTokenizer st = new java.util.StringTokenizer(returnedFromSP, ",");
+        while (st.hasMoreTokens()) {
+            if ((new Integer(st.nextToken())).intValue() == type) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean getMetaDataInfoInt_SupportsResultSetConcurrency(int infoCallIndex, int type, int concurrency) throws SqlException {
+        // The stored procured will return a String containg a list of concurrency and list of resultSet types which support
+        // a perticular concurrency
+        // For eg. if the database supports concurrency CONCUR_READ_ONLY(1007) in ResultSet type TYPE_FORWARD_ONLY(1003),
+        // TYPE_SCROLL_INSENSITIVE(1004), TYPE_SCROLL_SENSITIVE(1005) and
+        // supports concurrency CONCUR_UPDATBLE(1008) in resultSet TYPE_SCROLL_SENSITIVE(1005)
+        // then stored procedure will return a string "1007,1003,1004,1005;1008,1005"
+        // see how concurrency and supported result set types are seperated by ";"
+        String returnedFromSP = null;
+        if (metaDataInfoIsCached_) {
+            returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
+        } else {
+            metaDataInfoCall();
+            returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
+        }
+        java.util.StringTokenizer st = new java.util.StringTokenizer(returnedFromSP, ";");
         while (st.hasMoreTokens()) {
-          if ((new Integer( st.nextToken())).intValue() == type ) return true;
+            java.util.StringTokenizer stForType = new java.util.StringTokenizer(st.nextToken(), ",");
+            if ((new Integer(stForType.nextToken())).intValue() == concurrency) {
+                while (st.hasMoreTokens()) {
+                    if ((new Integer(st.nextToken())).intValue() == type) {
+                        return true;
+                    }
+                }
+                return false;
+            }
         }
         return false;
-      }
     }
-    return false;
-  }
-  private boolean getMetaDataInfoBoolean_supportsConvert (int infoCallIndex, int fromType, int toType) throws SqlException
-  {
-    // The Stored procedure will return a String contain a list of all the valid conversions it support
-    // For eg. If the database conversion from char(1) to date(91), time(92) and
-    // Decimal(3) to char(1) ,double(8)
-    // then StoredProcedure string will return "1,91,92;3,1,8"
-    // see how fromTypes are seperated by ";"
-    String returnedFromSP = null;
-    if (metaDataInfoIsCached_)
-      returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
-    else {
-      metaDataInfoCall ();
-      returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
-    }
-    java.util.StringTokenizer st = new java.util.StringTokenizer(returnedFromSP,";");
-    while (st.hasMoreTokens()) {
-      java.util.StringTokenizer stForType = new java.util.StringTokenizer(st.nextToken(),",");
-      if ((new Integer( stForType.nextToken())).intValue() == fromType ) {
+
+    private boolean getMetaDataInfoBoolean_supportsConvert(int infoCallIndex, int fromType, int toType) throws SqlException {
+        // The Stored procedure will return a String contain a list of all the valid conversions it support
+        // For eg. If the database conversion from char(1) to date(91), time(92) and
+        // Decimal(3) to char(1) ,double(8)
+        // then StoredProcedure string will return "1,91,92;3,1,8"
+        // see how fromTypes are seperated by ";"
+        String returnedFromSP = null;
+        if (metaDataInfoIsCached_) {
+            returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
+        } else {
+            metaDataInfoCall();
+            returnedFromSP = (String) metaDataInfoCache_[infoCallIndex];
+        }
+        java.util.StringTokenizer st = new java.util.StringTokenizer(returnedFromSP, ";");
         while (st.hasMoreTokens()) {
-          if ((new Integer( st.nextToken())).intValue() == toType ) return true;
+            java.util.StringTokenizer stForType = new java.util.StringTokenizer(st.nextToken(), ",");
+            if ((new Integer(stForType.nextToken())).intValue() == fromType) {
+                while (st.hasMoreTokens()) {
+                    if ((new Integer(st.nextToken())).intValue() == toType) {
+                        return true;
+                    }
+                }
+                return false;
+            }
         }
         return false;
-      }
     }
-    return false;
-  }
 
-  // We synchronize at this level so that we don't have to synchronize all
-  // the meta data info methods.  If we just return hardwired answers we don't
-  // need to synchronize at the higher level.
-  private void metaDataInfoCall () throws SqlException
-  {
-    synchronized (connection_) {
-      ResultSet rs;
-
-      // These remote calls return a result set containing a single row.
-      // Each column in the row corresponds to a particular get meta data info
-      // method.
-      PreparedStatement ps = prepareMetaDataQuery("SYSIBM.MetaData()");
-      rs = (ResultSet) ps.executeQueryX();
-      rs.nextX();
-      int ColumnCount = ((ColumnMetaData) rs.getMetaDataX()).getColumnCount();
-      for (int infoCallIndex = 0;
-        (infoCallIndex < ColumnCount && infoCallIndex < metaDataInfoCache_.length);
-        infoCallIndex++) {
-        metaDataInfoCache_[infoCallIndex] = rs.getObjectX(infoCallIndex + 1);
-      }
-      metaDataInfoIsCached_ = true;
-      rs.closeX();
-    }
-  }
-
-
-  //----------------------------helper methods----------------------------------
-
-
-  private PreparedStatement prepareMetaDataQuery (String cmd)  throws SqlException
-  {
-    PreparedStatement ps;
-
-    ps = (org.apache.derby.client.am.PreparedStatement)
-  	connection_.prepareStatementX ( "CALL " + cmd,
-                                       java.sql.ResultSet.TYPE_FORWARD_ONLY,
-                                       java.sql.ResultSet.CONCUR_READ_ONLY,
-                                       connection_.resultSetHoldability_,
-                                       java.sql.Statement.NO_GENERATED_KEYS,
-                                       null );
-    return ps;
-  }
-
-  private void checkForClosedConnection () throws SqlException
-  {
-    if (connection_.isClosedX()) {
-      agent_.checkForDeferredExceptions();
-      throw new SqlException (agent_.logWriter_, "DatabaseMetaData method called after connection was closed");
+    // We synchronize at this level so that we don't have to synchronize all
+    // the meta data info methods.  If we just return hardwired answers we don't
+    // need to synchronize at the higher level.
+    private void metaDataInfoCall() throws SqlException {
+        synchronized (connection_) {
+            ResultSet rs;
+
+            // These remote calls return a result set containing a single row.
+            // Each column in the row corresponds to a particular get meta data info
+            // method.
+            PreparedStatement ps = prepareMetaDataQuery("SYSIBM.MetaData()");
+            rs = (ResultSet) ps.executeQueryX();
+            rs.nextX();
+            int ColumnCount = ((ColumnMetaData) rs.getMetaDataX()).getColumnCount();
+            for (int infoCallIndex = 0;
+                 (infoCallIndex < ColumnCount && infoCallIndex < metaDataInfoCache_.length);
+                 infoCallIndex++) {
+                metaDataInfoCache_[infoCallIndex] = rs.getObjectX(infoCallIndex + 1);
+            }
+            metaDataInfoIsCached_ = true;
+            rs.closeX();
+        }
     }
-    else {
-      agent_.checkForDeferredExceptions();
+
+
+    //----------------------------helper methods----------------------------------
+
+
+    private PreparedStatement prepareMetaDataQuery(String cmd) throws SqlException {
+        PreparedStatement ps;
+
+        ps = (org.apache.derby.client.am.PreparedStatement)
+                connection_.prepareStatementX("CALL " + cmd,
+                        java.sql.ResultSet.TYPE_FORWARD_ONLY,
+                        java.sql.ResultSet.CONCUR_READ_ONLY,
+                        connection_.resultSetHoldability_,
+                        java.sql.Statement.NO_GENERATED_KEYS,
+                        null);
+        return ps;
+    }
+
+    private void checkForClosedConnection() throws SqlException {
+        if (connection_.isClosedX()) {
+            agent_.checkForDeferredExceptions();
+            throw new SqlException(agent_.logWriter_, "DatabaseMetaData method called after connection was closed");
+        } else {
+            agent_.checkForDeferredExceptions();
+        }
     }
-  }
 }

 

infrastructure at apache.org
ViewVC Help
Powered by ViewVC 1.1.26