text: //
  //  Generated by the J2ObjC translator.  DO NOT EDIT!
  //  source: android/libcore/luni/src/main/java/java/sql/DatabaseMetaData.java
  //
  
  #ifndef _JavaSqlDatabaseMetaData_H_
  #define _JavaSqlDatabaseMetaData_H_
  
  #include "J2ObjC_header.h"
  #include "java/sql/Wrapper.h"
  
  @class IOSIntArray;
  @class IOSObjectArray;
  @class JavaSqlRowIdLifetimeEnum;
  @protocol JavaSqlConnection;
  @protocol JavaSqlResultSet;
  
  #define JavaSqlDatabaseMetaData_attributeNoNulls 0
  #define JavaSqlDatabaseMetaData_attributeNullable 1
  #define JavaSqlDatabaseMetaData_attributeNullableUnknown 2
  #define JavaSqlDatabaseMetaData_bestRowNotPseudo 1
  #define JavaSqlDatabaseMetaData_bestRowPseudo 2
  #define JavaSqlDatabaseMetaData_bestRowSession 2
  #define JavaSqlDatabaseMetaData_bestRowTemporary 0
  #define JavaSqlDatabaseMetaData_bestRowTransaction 1
  #define JavaSqlDatabaseMetaData_bestRowUnknown 0
  #define JavaSqlDatabaseMetaData_columnNoNulls 0
  #define JavaSqlDatabaseMetaData_columnNullable 1
  #define JavaSqlDatabaseMetaData_columnNullableUnknown 2
  #define JavaSqlDatabaseMetaData_importedKeyCascade 0
  #define JavaSqlDatabaseMetaData_importedKeyInitiallyDeferred 5
  #define JavaSqlDatabaseMetaData_importedKeyInitiallyImmediate 6
  #define JavaSqlDatabaseMetaData_importedKeyNoAction 3
  #define JavaSqlDatabaseMetaData_importedKeyNotDeferrable 7
  #define JavaSqlDatabaseMetaData_importedKeyRestrict 1
  #define JavaSqlDatabaseMetaData_importedKeySetDefault 4
  #define JavaSqlDatabaseMetaData_importedKeySetNull 2
  #define JavaSqlDatabaseMetaData_procedureColumnIn 1
  #define JavaSqlDatabaseMetaData_procedureColumnInOut 2
  #define JavaSqlDatabaseMetaData_procedureColumnOut 4
  #define JavaSqlDatabaseMetaData_procedureColumnResult 3
  #define JavaSqlDatabaseMetaData_procedureColumnReturn 5
  #define JavaSqlDatabaseMetaData_procedureColumnUnknown 0
  #define JavaSqlDatabaseMetaData_procedureNoNulls 0
  #define JavaSqlDatabaseMetaData_procedureNoResult 1
  #define JavaSqlDatabaseMetaData_procedureNullable 1
  #define JavaSqlDatabaseMetaData_procedureNullableUnknown 2
  #define JavaSqlDatabaseMetaData_procedureResultUnknown 0
  #define JavaSqlDatabaseMetaData_procedureReturnsResult 2
  #define JavaSqlDatabaseMetaData_sqlStateSQL99 2
  #define JavaSqlDatabaseMetaData_sqlStateXOpen 1
  #define JavaSqlDatabaseMetaData_tableIndexClustered 1
  #define JavaSqlDatabaseMetaData_tableIndexHashed 2
  #define JavaSqlDatabaseMetaData_tableIndexOther 3
  #define JavaSqlDatabaseMetaData_tableIndexStatistic 0
  #define JavaSqlDatabaseMetaData_typeNoNulls 0
  #define JavaSqlDatabaseMetaData_typeNullable 1
  #define JavaSqlDatabaseMetaData_typeNullableUnknown 2
  #define JavaSqlDatabaseMetaData_typePredBasic 2
  #define JavaSqlDatabaseMetaData_typePredChar 1
  #define JavaSqlDatabaseMetaData_typePredNone 0
  #define JavaSqlDatabaseMetaData_typeSearchable 3
  #define JavaSqlDatabaseMetaData_versionColumnNotPseudo 1
  #define JavaSqlDatabaseMetaData_versionColumnPseudo 2
  #define JavaSqlDatabaseMetaData_versionColumnUnknown 0
  #define JavaSqlDatabaseMetaData_sqlStateSQL 2
  #define JavaSqlDatabaseMetaData_functionColumnIn 1
  #define JavaSqlDatabaseMetaData_functionColumnInOut 2
  #define JavaSqlDatabaseMetaData_functionColumnOut 3
  #define JavaSqlDatabaseMetaData_functionReturn 4
  #define JavaSqlDatabaseMetaData_functionColumnUnknown 0
  #define JavaSqlDatabaseMetaData_functionColumnResult 5
  #define JavaSqlDatabaseMetaData_functionNoNulls 0
  #define JavaSqlDatabaseMetaData_functionNullable 1
  #define JavaSqlDatabaseMetaData_functionNullableUnknown 2
  #define JavaSqlDatabaseMetaData_functionResultUnknown 0
  #define JavaSqlDatabaseMetaData_functionNoTable 1
  #define JavaSqlDatabaseMetaData_functionReturnsTable 2
  
  /*!
   @brief An interface which provides comprehensive information about the database
   management system and its supported features.
   <p>
   This interface is implemented by JDBC driver vendors in order to provide
   information about the underlying database capabilities in association with
   the JDBC driver.
   <p>
   Some of the methods in this interface take string parameters which are
   patterns. Within these string patterns, <code>'%'</code> and <code>'_'</code>
   characters have special meanings. <code>'%'</code> means
   "match any substring of 0 or more characters". <code>'_'</code> means
   "match any character". Only metadata entries that match the pattern are
   returned. If such a search pattern string is set to <code>null</code>, that
   argument's criteria are dropped from the search.
   */
  @protocol JavaSqlDatabaseMetaData < JavaSqlWrapper, NSObject, JavaObject >
  
  /*!
   @brief Returns whether all procedures returned by <code>getProcedures</code> can be
   called by the current user.
   @return <code>true</code> if all procedures can be called by the current user,
   <code>false</code> otherwise.
   @throws SQLException
   if there is a database error.
   */
  - (jboolean)allProceduresAreCallable;
  
  /*!
   @brief Returns whether all the tables returned by <code>getTables</code> can be used
   by the current user in a <code>SELECT</code> statement.
   @return <code>true</code> if all the tables can be used,<code>false</code>
   otherwise.
   @throws SQLException
   if there is a database error.
   */
  - (jboolean)allTablesAreSelectable;
  
  /*!
   @brief Returns whether a data definition statement in a transaction forces a <code>commit</code>
    of the transaction.
   @return <code>true</code> if the statement forces a commit, <code>false</code>
   otherwise.
   @throws SQLException
   if there is a database error.
   */
  - (jboolean)dataDefinitionCausesTransactionCommit;
  
  /*!
   @brief Returns whether the database ignores data definition statements within a
   transaction.
   @return <code>true</code> if the database ignores a data definition statement,
   <code>false</code> otherwise.
   @throws SQLException
   if there is a database error.
   */
  - (jboolean)dataDefinitionIgnoredInTransactions;
  
  /*!
   @brief Returns whether a visible row delete can be detected by calling
   <code>ResultSet.rowDeleted</code>.
   @param type
   the type of the <code>ResultSet</code> involved: <code>ResultSet.TYPE_FORWARD_ONLY</code>
   , <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
   , or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   @return <code>true</code> if the visible row delete can be detected, <code>false</code>
    otherwise.
   @throws SQLException
   if there is a database error.
   */
  - (jboolean)deletesAreDetectedWithInt:(jint)type;
  
  /*!
   @brief Returns whether the return value of <code>getMaxRowSize</code> includes the
   SQL data types <code>LONGVARCHAR</code> and <code>LONGVARBINARY</code>.
   @return <code>true</code> if the return value includes <code>LONGVARBINARY</code>
   and <code>LONGVARCHAR</code>, otherwise <code>false</code>.
   @throws SQLException
   if there is a database error.
   */
  - (jboolean)doesMaxRowSizeIncludeBlobs;
  
  /*!
   @brief Returns a <code>ResultSet</code> describing a subset of the attributes of a
   specified SQL User Defined Type (UDT) for a specified schema and catalog.
   The subset is determined by restricting to those attributes whose
   name matches the <code>attributeNamePattern</code> and whose type name
   matches the <code>typeNamePattern</code>. Each row of the <code>ResultSet</code>
   describes one attribute, and the rows are ordered by the columns <code>TYPE_SCHEM</code>,
   <code>TYPE_NAME</code> and <code>ORDINAL_POSITION</code>. Inherited attributes
   are not included.
   <p>
   The columns of the returned <code>ResultSet</code> object have the following
   names and meanings:
   <ol>
   <li><code>TYPE_CAT</code> - String - the type catalog name (possibly <code>null</code>
   )</li>
   <li><code>TYPE_SCHEM</code> - String - the type schema name (possibly <code>null</code>
   )</li>
   <li><code>TYPE_NAME</code> - String - the type name</li>
   <li><code>ATTR_NAME</code> - String - the attribute name</li>
   <li><code>DATA_TYPE</code> - int - the attribute type as defined in <code>java.sql.Types</code>
   </li>
   <li><code>ATTR_TYPE_NAME</code> - String - the attribute type name. This
   depends on the data source. For a <code>UDT</code> the name is fully
   qualified. For a <code>REF</code> it is both fully qualified and represents
   the target type of the reference.</li>
   <li><code>ATTR_SIZE</code> - int - the column size. When referring to char and
   date types this value is the maximum number of characters. When referring
   to numeric types is is the precision.</li>
   <li><code>DECIMAL_DIGITS</code> - int - how many fractional digits are
   supported</li>
   <li><code>NUM_PREC_RADIX</code> - int - numeric values radix</li>
   <li><code>NULLABLE</code> - int - whether <code>NULL</code> is permitted:
   <ul>
   <li>DatabaseMetaData.attributeNoNulls - <code>NULL</code> values not permitted</li>
   <li>DatabaseMetaData.attributeNullable - <code>NULL</code> values definitely
   permitted</li>
   <li>DatabaseMetaData.attributeNullableUnknown - unknown</li>
   </ul>
   </li>
   <li><code>REMARKS</code> - String - a comment describing the attribute
   (possibly <code>null</code>)</li>
   <li>ATTR_DEF - String - Default value for the attribute (possibly <code>null</code>
   )</li>
   <li><code>SQL_DATA_TYPE</code> - int - not used</li>
   <li>SQL_DATETIME_SUB - int - not used</li>
   <li>CHAR_OCTET_LENGTH - int - for <code>CHAR</code> types, the max number of
   bytes in the column</li>
   <li>ORDINAL_POSITION - int - The index of the column in the table (where
   the count starts from 1, not 0)</li>
   <li>IS_NULLABLE - String - <code>"NO"</code> = the column does not allow <code>NULL</code>
   s, <code>"YES"</code> = the column allows <code>NULL</code>s, "" = status unknown</li>
   <li><code>SCOPE_CATALOG</code> - String - if the <code>DATA_TYPE</code> is <code>REF</code>,
   this gives the catalog of the table corresponding to the attribute's scope.
   NULL if the <code>DATA_TYPE</code> is not REF.</li>
   <li><code>SCOPE_SCHEMA</code> - String - if the <code>DATA_TYPE</code> is <code>REF</code>,
   this gives the schema of the table corresponding to the attribute's scope.
   NULL if the <code>DATA_TYPE</code> is not REF.</li>
   <li><code>SCOPE_TABLE</code> - String - if the <code>DATA_TYPE</code> is <code>REF</code>,
   this gives the name of the table corresponding to the attribute's scope.
   NULL if the <code>DATA_TYPE</code> is not REF.</li>
   <li><code>SOURCE_DATA_TYPE</code> - String - The source type for a user
   generated REF type or for a Distinct type. (<code>NULL</code> if <code>DATA_TYPE</code>
    is not DISTINCT or a user generated REF)</li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schemaPattern
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by a schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param typeNamePattern
   a type name. This pattern must match the type name stored in
   the database.
   @param attributeNamePattern
   an Attribute name. This pattern must match the attribute name as stored in
   the database.
   @return a <code>ResultSet</code>, where each row is an attribute description.
   @throws SQLException
   if there is a database error.
   */
  - (id<JavaSqlResultSet>)getAttributesWithNSString:(NSString *)catalog
                                       withNSString:(NSString *)schemaPattern
                                       withNSString:(NSString *)typeNamePattern
                                       withNSString:(NSString *)attributeNamePattern;
  
  /*!
   @brief Returns a list of a table's optimal set of columns that uniquely
   identify the rows.
   The results are ordered by <code>SCOPE</code> (see below).
   <p>
   The results are returned as a table, with one entry for each column, as
   follows:
   <ol>
   <li><code>SCOPE</code> - short - the <code>SCOPE</code> of the result, as follows:
   <ul>
   <li><code>DatabaseMetaData.bestRowTemporary</code> - the result is very temporary,
   only valid while on the current row</li>
   <li><code>DatabaseMetaData.bestRowTransaction</code> - the result is good for remainder of
   current transaction</li>
   <li><code>DatabaseMetaData.bestRowSession</code> - the result is good for remainder of
   database session</li>
   </ul>
   </li>
   <li><code>COLUMN_NAME</code> - String - the column name</li>
   <li><code>DATA_TYPE</code> - int - the Type of the data, as defined in <code>java.sql.Types</code>
   </li>
   <li><code>TYPE_NAME</code> - String - the Name of the type - database dependent.
   For UDT types the name is fully qualified</li>
   <li><code>COLUMN_SIZE</code> - int - the precision of the data in the column</li>
   <li><code>BUFFER_LENGTH</code> - int - not used</li>
   <li><code>DECIMAL_DIGITS</code> - short - number of fractional digits</li>
   <li><code>PSEUDO_COLUMN</code> - short - whether this is a pseudo column (e.g.
   an Oracle <code>ROWID</code>):
   <ul>
   <li><code>DatabaseMetaData.bestRowUnknown</code> - it is not known whether this is
   a pseudo column</li>
   <li><code>DatabaseMetaData.bestRowNotPseudo</code> - the column is not pseudo</li>
   <li><code>DatabaseMetaData.bestRowPseudo</code> - the column is a pseudo column</li>
   </ul>
   </li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schema
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param table
   the table name. This must match the name of the table as
   declared in the database.
   @param scope
   the <code>SCOPE</code> of interest, values as defined above.
   @param nullable
   <code>true</code> = include columns that are nullable, <code>false</code>
    = do not include nullable columns.
   @return a <code>ResultSet</code> where each row is a description of a column
   and the complete set of rows is the optimal set for this table.
   @throws SQLException
   if there is a database error.
   */
  - (id<JavaSqlResultSet>)getBestRowIdentifierWithNSString:(NSString *)catalog
                                              withNSString:(NSString *)schema
                                              withNSString:(NSString *)table
                                                   withInt:(jint)scope
                                               withBoolean:(jboolean)nullable;
  
  /*!
   @brief Returns the set of catalog names available in this database.
   The set is
   returned ordered by catalog name.
   @return a <code>ResultSet</code> containing the catalog names, with each row
   containing one catalog name (as a <code>String</code>) in the
   single column named <code>TABLE_CAT</code>.
   @throws SQLException
   if there is a database error.
   */
  - (id<JavaSqlResultSet>)getCatalogs;
  
  /*!
   @brief Returns the separator that this database uses between a catalog name and
   table name.
   @return a String containing the separator.
   @throws SQLException
   if there is a database error.
   */
  - (NSString *)getCatalogSeparator;
  
  /*!
   @brief Returns the term that the database vendor prefers term for "catalog".
   @return a String with the vendor's term for "catalog".
   @throws SQLException
   if there is a database error.
   */
  - (NSString *)getCatalogTerm;
  
  /*!
   @brief Returns a description of access rights for a table's columns.
   Only access
   rights matching the criteria for the column name are returned.
   <p>
   The description is returned as a <code>ResultSet</code> with rows of data for
   each access right, with columns as follows:
   <ol>
   <li><code>TABLE_CAT</code> - String - the catalog name (possibly <code>null</code>)</li>
   <li><code>TABLE_SCHEM</code> - String - the schema name (possibly <code>null</code>)</li>
   <li><code>TABLE_NAME</code> - String - the table name</li>
   <li><code>COLUMN_NAME</code> - String - the Column name</li>
   <li><code>GRANTOR</code> - String - the grantor of access (possibly <code>null</code>
   )</li>
   <li><code>PRIVILEGE</code> - String - Access right - one of SELECT, INSERT,
   UPDATE, REFERENCES,...</li>
   <li><code>IS_GRANTABLE</code> - String - <code>"YES"</code> implies that the
   receiver can grant access to others, <code>"NO"</code> if the receiver cannot
   grant access to others, <code>null</code> if unknown.</li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schema
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param table
   the table name. This must match the name of the table as
   declared in the database.
   @param columnNamePattern
   the column name. This must match the name of a column in the
   table in the database.
   @return a <code>ResultSet</code> containing the access rights, one row for
   each privilege description.
   @throws SQLException
   if there is a database error.
   */
  - (id<JavaSqlResultSet>)getColumnPrivilegesWithNSString:(NSString *)catalog
                                             withNSString:(NSString *)schema
                                             withNSString:(NSString *)table
                                             withNSString:(NSString *)columnNamePattern;
  
  /*!
   @brief Returns a description of table columns available in a specified catalog.
   Only descriptions meeting the specified catalog, schema, table, and column
   names are returned.
   <p>
   The descriptions are returned as a <code>ResultSet</code> conforming to the
   following data layout, with one row per table column:
   <ol>
   <li><code>TABLE_CAT</code> - String - the catalog name (possibly <code>null</code>)</li>
   <li><code>TABLE_SCHEM</code> - String - the schema name (possibly <code>null</code>)</li>
   <li><code>TABLE_NAME</code> - String - the table name</li>
   <li><code>COLUMN_NAME</code> - String - the column name</li>
   <li><code>DATA_TYPE</code> - int - the SQL type as specified in <code>java.sql.Types</code>
   </li>
   <li><code>TYPE_NAME</code> - String - the name of the data type, (database-dependent,
   UDT names are fully qualified)</li>
   <li><code>COLUMN_SIZE</code> - int - the column size (the precision for numeric
   types, max characters for <code>char</code> and <code>date</code> types)</li>
   <li><code>BUFFER_LENGTH</code> - int - Not used</li>
   <li><code>DECIMAL_DIGITS</code> - int - maximum number of fractional digits</li>
   <li><code>NUM_PREC_RADIX</code> - int - the radix for numerical types</li>
   <li><code>NULLABLE</code> - int - whether the column allows <code>null</code>s:
   <ul>
   <li>DatabaseMetaData.columnNoNulls = may not allow <code>NULL</code>s</li>
   <li>DatabaseMetaData.columnNullable = does allow <code>NULL</code>s</li>
   <li>DatabaseMetaData.columnNullableUnknown = unknown <code>NULL</code> status</li>
   </ul>
   </li>
   <li><code>REMARKS</code> - String - A description of the column (possibly
   <code>null</code>)</li>
   <li><code>COLUMN_DEF</code> - String - Default value for the column (possibly
   <code>null</code>)</li>
   <li><code>SQL_DATA_TYPE</code> - int - not used</li>
   <li><code>SQL_DATETIME_SUB</code> - int - not used</li>
   <li><code>CHAR_OCTET_LENGTH</code> - int - maximum number of bytes in the
   <code>char</code> type columns</li>
   <li><code>ORDINAL_POSITION</code> - int - the column index in the table (1 based)</li>
   <li><code>IS_NULLABLE</code> - String - <code>"NO"</code> = column does not allow
   NULLs, <code>"YES"</code> = column allows NULLs, "" = <code>NULL</code> status
   unknown</li>
   <li><code>SCOPE_CATALOG</code> - String - if the <code>DATA_TYPE</code> is <code>REF</code>,
   this gives the catalog of the table corresponding to the attribute's scope.
   NULL if the <code>DATA_TYPE</code> is not REF.</li>
   <li><code>SCOPE_SCHEMA</code> - String - if the <code>DATA_TYPE</code> is <code>REF</code>,
   this gives the schema of the table corresponding to the attribute's scope.
   NULL if the <code>DATA_TYPE</code> is not REF.</li>
   <li><code>SCOPE_TABLE</code> - String - if the <code>DATA_TYPE</code> is <code>REF</code>,
   this gives the name of the table corresponding to the attribute's scope.
   NULL if the <code>DATA_TYPE</code> is not REF.</li>
   <li><code>SOURCE_DATA_TYPE</code> - String - The source type for a user
   generated REF type or for a Distinct type. (<code>NULL</code> if <code>DATA_TYPE</code>
    is not DISTINCT or a user generated REF)</li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schemaPattern
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param tableNamePattern
   the table name. This must match the name of the table as
   declared in the database.
   @param columnNamePattern
   the column name. This must match the name of a column in the
   table in the database.
   @return the descriptions as a <code>ResultSet</code> with rows in the form
   defined above.
   @throws SQLException
   if there is a database error.
   */
  - (id<JavaSqlResultSet>)getColumnsWithNSString:(NSString *)catalog
                                    withNSString:(NSString *)schemaPattern
                                    withNSString:(NSString *)tableNamePattern
                                    withNSString:(NSString *)columnNamePattern;
  
  /*!
   @brief Returns the database connection that created this metadata.
   @return the connection to the database.
   @throws SQLException
   if there is a database error.
   */
  - (id<JavaSqlConnection>)getConnection;
  
  /*!
   @brief Returns a list of foreign key columns in a given foreign key table that
   reference the primary key columns of a supplied primary key table.
   This
   describes how one table imports the key of another table. It would be
   expected to return a single foreign key - primary key pair in most cases.
   <p>
   The descriptions are returned as a <code>ResultSet</code> with one row for
   each foreign key, with the following layout:
   <ol>
   <li><code>PKTABLE_CAT</code> - String - from the primary key table : Catalog
   (possibly <code>null</code>)</li>
   <li><code>PKTABLE_SCHEM</code> - String - from the primary key table : Schema
   (possibly <code>null</code>)</li>
   <li><code>PKTABLE_NAME</code> - String - from the primary key table : name</li>
   <li><code>PKCOLUMN_NAME</code> - String - from the primary key column : name</li>
   <li><code>FKTABLE_CAT</code> - String - from the foreign key table : the
   catalog name being exported (possibly <code>null</code>)</li>
   <li><code>FKTABLE_SCHEM</code> - String - from the foreign key table : the schema name
   being exported (possibly <code>null</code>)</li>
   <li><code>FKTABLE_NAME</code> - String - from the foreign key table : the name being
   exported</li>
   <li><code>FKCOLUMN_NAME</code> - String - from the foreign key column : the name being
   exported</li>
   <li><code>KEY_SEQ</code> - short - the sequence number (in the foreign key)</li>
   <li><code>UPDATE_RULE</code> - short - a value giving the rule for how to treat the corresponding foreign key when a primary
   key is updated:
   <ul>
   <li><code>DatabaseMetaData.importedKeyNoAction</code> - don't allow the
   primary key to be updated if it is imported as a foreign key</li>
   <li><code>DatabaseMetaData.importedKeyCascade</code> - change the imported key to
   match the updated primary key</li>
   <li><code>DatabaseMetaData.importedKeySetNull</code> - set the imported key to
   <code>null</code></li>
   <li><code>DatabaseMetaData.importedKeySetDefault</code> - set the imported key
   to its default value</li>
   <li><code>DatabaseMetaData.importedKeyRestrict</code> - same as <code>importedKeyNoAction</code>
   </li>
   </ul>
   </li>
   <li><code>DELETE_RULE</code> - short - a value giving the rule for how to treat the foreign key when the corresponding primary
   key is deleted:
   <ul>
   <li><code>DatabaseMetaData.importedKeyNoAction</code> - don't allow the
   primary key to be deleted if it is imported as a foreign key</li>
   <li><code>DatabaseMetaData.importedKeyCascade</code> - delete those rows that
   import a deleted key</li>
   <li><code>DatabaseMetaData.importedKeySetNull</code> - set the imported key to
   <code>null</code></li>
   <li><code>DatabaseMetaData.importedKeySetDefault</code> - set the imported key
   to its default value</li>
   <li><code>DatabaseMetaData.importedKeyRestrict</code> - same as
   importedKeyNoAction</li>
   </ul>
   </li>
   <li><code>FK_NAME</code> - String - the foreign key name (possibly <code>null</code>)</li>
   <li><code>PK_NAME</code> - String - the primary key name (possibly <code>null</code>)</li>
   <li><code>DEFERRABILITY</code> - short - whether foreign key constraints can be
   deferred until commit (see the SQL92 specification for definitions):
   <ul>
   <li><code>DatabaseMetaData.importedKeyInitiallyDeferred</code></li>
   <li><code>DatabaseMetaData.importedKeyInitiallyImmediate</code></li>
   <li><code>DatabaseMetaData.importedKeyNotDeferrable</code></li>
   </ul>
   </li>
   </ol>
   @param primaryCatalog
   a catalog name for the primary key table. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param primarySchema
   a schema name for the primary key table. <code>null</code> is used to imply no narrowing of
   the search by schema name. Otherwise, the name must match a
   schema name in the database, with "" used to retrieve those
   without a schema name.
   @param primaryTable
   the name of the table which exports the key. It must match the
   name of the table in the database.
   @param foreignCatalog
   a catalog name for the foreign key table. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param foreignSchema
   a schema name for the foreign key table. <code>null</code> is used to imply no narrowing of
   the search by schema name. Otherwise, the name must match a
   schema name in the database, with "" used to retrieve those
   without a schema name.
   @param foreignTable
   the name of the table importing the key. It must match the
   name of the table in the database.
   @return a <code>ResultSet</code> containing rows with the descriptions of the
   foreign keys laid out according to the format defined above.
   @throws SQLException
   if there is a database error.
   */
  - (id<JavaSqlResultSet>)getCrossReferenceWithNSString:(NSString *)primaryCatalog
                                           withNSString:(NSString *)primarySchema
                                           withNSString:(NSString *)primaryTable
                                           withNSString:(NSString *)foreignCatalog
                                           withNSString:(NSString *)foreignSchema
                                           withNSString:(NSString *)foreignTable;
  
  /*!
   @brief Returns the major version number of the database software.
   @return the major version number of the database software.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getDatabaseMajorVersion;
  
  /*!
   @brief Returns the minor version number of the database software.
   @return the minor version number of the database software.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getDatabaseMinorVersion;
  
  /*!
   @brief Returns the name of the database software.
   @return a <code>String</code> with the name of the database software.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getDatabaseProductName;
  
  /*!
   @brief Returns the version number of this database software.
   @return a <code>String</code> with the version number of the database
   software.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getDatabaseProductVersion;
  
  /*!
   @brief Returns the default transaction isolation level for this database.
   @return the default transaction isolation level. One of the following values:
   <ul>
   <li><code>TRANSACTION_NONE</code></li>
   <li><code>TRANSACTION_READ_COMMITTED</code></li>
   <li><code>TRANSACTION_READ_UNCOMMITTED</code></li>
   <li><code>TRANSACTION_REPEATABLE_READ</code></li>
   <li><code>TRANSACTION_SERIALIZABLE</code></li>
   </ul>
   @throws SQLException
   a database error occurred.
   */
  - (jint)getDefaultTransactionIsolation;
  
  /*!
   @brief Returns the JDBC driver's major version number.
   @return the driver's major version number.
   */
  - (jint)getDriverMajorVersion;
  
  /*!
   @brief Returns the JDBC driver's minor version number.
   @return the driver's minor version number.
   */
  - (jint)getDriverMinorVersion;
  
  /*!
   @brief Returns the name of this JDBC driver.
   @return a <code>String</code> containing the name of the JDBC driver
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getDriverName;
  
  /*!
   @brief Returns the version number of this JDBC driver.
   @return a <code>String</code> containing the complete version number of the
   JDBC driver.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getDriverVersion;
  
  /*!
   @brief Returns a list of the foreign key columns that reference the primary key
   columns of a specified table (the foreign keys exported by a table).
   <p>
   The list is returned as a <code>ResultSet</code> with a row for each of the
   foreign key columns, ordered by <code>FKTABLE_CAT</code>, <code>FKTABLE_SCHEM</code>
   , <code>FKTABLE_NAME</code>, and <code>KEY_SEQ</code>, with the
   format for each row being:
   <ol>
   <li><code>PKTABLE_CAT</code> - String - from the primary key table : the catalog (possibly
   <code>null</code>)</li>
   <li><code>PKTABLE_SCHEM</code> - String - from the primary key table : the schema (possibly
   <code>null</code>)</li>
   <li><code>PKTABLE_NAME</code> - String - from the primary key table : the name</li>
   <li><code>PKCOLUMN_NAME</code> - String - from the primary key column : the name</li>
   <li><code>FKTABLE_CAT</code> - String - from the foreign key table : the catalog name being
   exported (possibly <code>null</code>)</li>
   <li><code>FKTABLE_SCHEM</code> - String - from the foreign key table : the schema name
   being exported (possibly <code>null</code>)</li>
   <li><code>FKTABLE_NAME</code> - String - from the foreign key table : the name being
   exported</li>
   <li><code>FKCOLUMN_NAME</code> - String - from the foreign key column : the name being
   exported</li>
   <li><code>KEY_SEQ</code> - short - the sequence number (in the foreign key)</li>
   <li><code>UPDATE_RULE</code> - short - a value giving the rule for how to treat the foreign key when the corresponding primary
   key is updated:
   <ul>
   <li><code>DatabaseMetaData.importedKeyNoAction</code> - don't allow the
   primary key to be updated if it is imported as a foreign key</li>
   <li><code>DatabaseMetaData.importedKeyCascade</code> - change the imported key to
   match the primary key update</li>
   <li><code>DatabaseMetaData.importedKeySetNull</code> - set the imported key to
   <code>null</code></li>
   <li><code>DatabaseMetaData.importedKeySetDefault</code> - set the imported key
   to its default value</li>
   <li><code>DatabaseMetaData.importedKeyRestrict</code> - same as
   importedKeyNoAction</li>
   </ul>
   </li>
   <li><code>DELETE_RULE</code> - short - how to treat the foreign key when the corresponding primary
   key is deleted:
   <ul>
   <li><code>DatabaseMetaData.importedKeyNoAction</code> - don't allow the
   primary key to be deleted if it is imported as a foreign key</li>
   <li><code>DatabaseMetaData.importedKeyCascade</code> - the deletion should
   also delete rows that import a deleted key</li>
   <li><code>DatabaseMetaData.importedKeySetNull</code> - the deletion sets the
   imported key to <code>null</code></li>
   <li><code>DatabaseMetaData.importedKeySetDefault</code> - the deletion sets the
   imported key to its default value</li>
   <li><code>DatabaseMetaData.importedKeyRestrict</code> - same as
   importedKeyNoAction</li>
   </ul>
   </li>
   <li><code>FK_NAME</code> - String - the foreign key name (possibly <code>null</code>)</li>
   <li><code>PK_NAME</code> - String - the primary key name (possibly <code>null</code>)</li>
   <li><code>DEFERRABILITY</code> - short - defines whether the foreign key
   constraints can be deferred until commit (see the SQL92 specification for
   definitions):
   <ul>
   <li><code>DatabaseMetaData.importedKeyInitiallyDeferred</code></li>
   <li><code>DatabaseMetaData.importedKeyInitiallyImmediate</code></li>
   <li><code>DatabaseMetaData.importedKeyNotDeferrable</code></li>
   </ul>
   </li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schema
   a schema name. <code>null</code> is used to imply no narrowing of
   the search by schema name. Otherwise, the name must match a
   schema name in the database, with "" used to retrieve those
   without a schema name.
   @param table
   a table name, which must match the name of a table in the
   database
   @return a <code>ResultSet</code> containing a row for each of the foreign key
   columns, as defined above
   @throws SQLException
   a database error occurred
   */
  - (id<JavaSqlResultSet>)getExportedKeysWithNSString:(NSString *)catalog
                                         withNSString:(NSString *)schema
                                         withNSString:(NSString *)table;
  
  /*!
   @brief Returns a string of characters that may be used in unquoted identifier
   names.
   The characters <code>a-z</code>, <code>A-Z</code>, <code>0-9</code> and <code>_</code>
   are always permitted.
   @return a String containing all the additional permitted characters.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getExtraNameCharacters;
  
  /*!
   @brief Returns the string used to quote SQL identifiers.
   Returns " " (space) if
   identifier quoting not supported.
   @return the String used to quote SQL identifiers.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getIdentifierQuoteString;
  
  /*!
   @brief Returns a list columns in a table that are both primary keys and
   referenced by the table's foreign key columns (that is, the primary keys
   imported by a table).
   <p>
   The list returned is a <code>ResultSet</code> with a row entry for each
   primary key column, ordered by <code>PKTABLE_CAT</code>, <code>PKTABLE_SCHEM</code>,
   <code>PKTABLE_NAME</code>, and <code>KEY_SEQ</code>, with the following format:
   <ol>
   <li><code>PKTABLE_CAT</code> - String - primary key catalog name being
   imported (possibly <code>null</code>)</li>
   <li><code>PKTABLE_SCHEM</code> - String - primary key schema name being
   imported (possibly <code>null</code>)</li>
   <li><code>PKTABLE_NAME</code> - String - primary key table name being imported
   </li>
   <li><code>PKCOLUMN_NAME</code> - String - primary key column name being
   imported</li>
   <li><code>FKTABLE_CAT</code> - String - foreign key table catalog name
   (possibly <code>null</code>)</li>
   <li><code>FKTABLE_SCHEM</code> - String - foreign key table schema name
   (possibly <code>null</code>)</li>
   <li><code>FKTABLE_NAME</code> - String - foreign key table name</li>
   <li><code>FKCOLUMN_NAME</code> - String - foreign key column name</li>
   <li><code>KEY_SEQ</code> - short - sequence number (in the foreign key)</li>
   <li><code>UPDATE_RULE</code> - short - how to treat the foreign key when the corresponding primary
   key is updated:
   <ul>
   <li><code>DatabaseMetaData.importedKeyNoAction</code> - don't allow any update of
   the primary key if it is imported as a foreign key</li>
   <li><code>DatabaseMetaData.importedKeyCascade</code> - change imported key to
   match the primary key update</li>
   <li><code>DatabaseMetaData.importedKeySetNull</code> - set the imported key to
   <code>null</code></li>
   <li><code>DatabaseMetaData.importedKeySetDefault</code> - set the imported key
   to its default value</li>
   <li><code>DatabaseMetaData.importedKeyRestrict</code> - same as
   importedKeyNoAction</li>
   </ul>
   </li>
   <li><code>DELETE_RULE</code> - short - how to treat the foreign key when the corresponding primary
   key is deleted:
   <ul>
   <li><code>DatabaseMetaData.importedKeyNoAction</code> - don't allow the primary key to be deleted
   if it is imported as a foreign key</li>
   <li><code>DatabaseMetaData.importedKeyCascade</code> - delete those rows that
   import a deleted key</li>
   <li><code>DatabaseMetaData.importedKeySetNull</code> - set the imported key to
   <code>null</code></li>
   <li><code>DatabaseMetaData.importedKeySetDefault</code> - set the imported key
   to its default value</li>
   <li><code>DatabaseMetaData.importedKeyRestrict</code> - same as <code>importedKeyNoAction</code>
   </li>
   </ul>
   </li>
   <li><code>FK_NAME</code> - String - foreign key name (possibly <code>null</code>)</li>
   <li><code>PK_NAME</code> - String - primary key name (possibly <code>null</code>)</li>
   <li><code>DEFERRABILITY</code> - short - defines whether foreign key
   constraints can be deferred until commit (see SQL92 specification for
   definitions):
   <ul>
   <li><code>DatabaseMetaData.importedKeyInitiallyDeferred</code></li>
   <li><code>DatabaseMetaData.importedKeyInitiallyImmediate</code></li>
   <li><code>DatabaseMetaData.importedKeyNotDeferrable</code></li>
   </ul>
   </li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schema
   a schema name. <code>null</code> is used to imply no narrowing of
   the search by schema name. Otherwise, the name must match a
   schema name in the database, with "" used to retrieve those
   without a schema name.
   @param table
   a table name, which must match the name of a table in the
   database.
   @return a <code>ResultSet</code> containing the list of primary key columns as
   rows in the format defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getImportedKeysWithNSString:(NSString *)catalog
                                         withNSString:(NSString *)schema
                                         withNSString:(NSString *)table;
  
  /*!
   @brief Returns a list of indices and statistics for a specified table.
   <p>
   The list is returned as a <code>ResultSet</code>, with one row for each index
   or statistic. The list is ordered by <code>NON_UNIQUE</code>, <code>TYPE</code>,
   <code>INDEX_NAME</code>, and <code>ORDINAL_POSITION</code>. Each row has the
   following format:
   <ol>
   <li><code>TABLE_CAT</code> - String - table catalog name (possibly <code>null</code>
   )</li>
   <li><code>TABLE_SCHEM</code> - String - table schema name (possibly <code>null</code>
   )</li>
   <li><code>TABLE_NAME</code> - String - The table name</li>
   <li><code>NON_UNIQUE</code> - boolean - <code>true</code> when index values can be
   non-unique. Must be <code>false</code> when the TYPE is tableIndexStatistic</li>
   <li><code>INDEX_QUALIFIER</code> - String : index catalog name. <code>null</code>
   when the TYPE is 'tableIndexStatistic'</li>
   <li><code>INDEX_NAME</code> - String : index name. <code>null</code> when TYPE is
   'tableIndexStatistic'</li>
   <li><code>TYPE</code> - short - the index type. One of:
   <ul>
   <li><code>DatabaseMetaData.tableIndexStatistic</code> - table statistics
   returned with Index descriptions</li>
   <li><code>DatabaseMetaData.tableIndexClustered</code> - a clustered Index</li>
   <li><code>DatabaseMetaData.tableIndexHashed</code> - a hashed Index</li>
   <li><code>DatabaseMetaData.tableIndexOther</code> - other style of Index</li>
   </ul>
   </li>
   <li><code>ORDINAL_POSITION</code> - short - column sequence within Index. 0
   when TYPE is tableIndexStatistic</li>
   <li><code>COLUMN_NAME</code> - String - the column name. <code>null</code> when
   TYPE is tableIndexStatistic</li>
   <li><code>ASC_OR_DESC</code> - String - column sort sequence. <code>null</code> if
   sequencing not supported or TYPE is tableIndexStatistic; otherwise "A"
   means sort ascending and "D" means sort descending.</li>
   <li><code>CARDINALITY</code> - int - Number of unique values in the Index. If
   TYPE is tableIndexStatistic, this is number of rows in the table.</li>
   <li><code>PAGES</code> - int - Number of pages for current Index. If TYPE is
   tableIndexStatistic, this is number of pages used for the table.</li>
   <li><code>FILTER_CONDITION</code> - String - Filter condition. (possibly null)
   </li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schema
   a schema name. <code>null</code> is used to imply no narrowing of
   the search by schema name. Otherwise, the name must match a
   schema name in the database, with "" used to retrieve those
   without a schema name.
   @param table
   a table name, which must match the name of a table in the
   database.
   @param unique
   <code>true</code> means only return indices for unique values,
   <code>false</code> implies that they can be returned even if not
   unique.
   @param approximate
   <code>true</code> implies that the list can contain approximate or
   "out of data" values, <code>false</code> implies that all values
   must be precisely accurate
   @return a <code>ResultSet</code> containing the list of indices and statistics
   for the table, in the format defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getIndexInfoWithNSString:(NSString *)catalog
                                      withNSString:(NSString *)schema
                                      withNSString:(NSString *)table
                                       withBoolean:(jboolean)unique
                                       withBoolean:(jboolean)approximate;
  
  /*!
   @brief Returns this driver's major JDBC version number.
   @return the major JDBC version number.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getJDBCMajorVersion;
  
  /*!
   @brief Returns the minor JDBC version number for this driver.
   @return the Minor JDBC Version Number.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getJDBCMinorVersion;
  
  /*!
   @brief Get the maximum number of hex characters in an in-line binary literal for
   this database.
   @return the maximum number of hex characters in an in-line binary
   literal. If the number is unlimited then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxBinaryLiteralLength;
  
  /*!
   @brief Returns the maximum size of a catalog name in this database.
   @return the maximum size in characters for a catalog name. If the limit
   is unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxCatalogNameLength;
  
  /*!
   @brief Returns the maximum size for a character literal in this database.
   @return the maximum size in characters for a character literal. If the
   limit is unknown, or the value is unlimited, then the result is
   zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxCharLiteralLength;
  
  /*!
   @brief Returns the maximum size for a Column name for this database.
   @return the maximum number of characters for a Column name. If the limit
   is unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxColumnNameLength;
  
  /*!
   @brief Get the maximum number of columns in a <code>GROUP BY</code> clause for this
   database.
   @return the maximum number of columns in a <code>GROUP BY</code> clause. If
   the limit is unknown, or the value is unlimited, then the result
   is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxColumnsInGroupBy;
  
  /*!
   @brief Returns the maximum number of columns in an Index for this database.
   @return the maximum number of columns in an Index. If the limit is
   unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxColumnsInIndex;
  
  /*!
   @brief Returns the maximum number of columns in an <code>ORDER BY</code> clause for
   this database.
   @return the maximum number of columns in an <code>ORDER BY</code> clause. If
   the limit is unknown, or the value is unlimited, then the result
   is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxColumnsInOrderBy;
  
  /*!
   @brief Returns the maximum number of columns in a <code>SELECT</code> list for this
   database.
   @return the maximum number of columns in a <code>SELECT</code> list. If the
   limit is unknown, or the value is unlimited, then the result is
   zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxColumnsInSelect;
  
  /*!
   @brief Returns the maximum number of columns in a table for this database.
   @return the maximum number of columns in a table. If the limit is
   unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxColumnsInTable;
  
  /*!
   @brief Returns the database's maximum number of concurrent connections.
   @return the maximum number of connections. If the limit is unknown, or
   the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxConnections;
  
  /*!
   @brief Returns the maximum length of a cursor name for this database.
   @return the maximum number of characters in a cursor name. If the limit
   is unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxCursorNameLength;
  
  /*!
   @brief Returns the maximum length in bytes for an Index for this database.
   This
   covers all the parts of a composite index.
   @return the maximum length in bytes for an Index. If the limit is
   unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxIndexLength;
  
  /*!
   @brief Returns the maximum number of characters for a procedure name in this
   database.
   @return the maximum number of character for a procedure name. If the
   limit is unknown, or the value is unlimited, then the result is
   zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxProcedureNameLength;
  
  /*!
   @brief Returns the maximum number of bytes within a single row for this
   database.
   @return the maximum number of bytes for a single row. If the limit is
   unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxRowSize;
  
  /*!
   @brief Returns the maximum number of characters in a schema name for this
   database.
   @return the maximum number of characters in a schema name. If the limit
   is unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxSchemaNameLength;
  
  /*!
   @brief Returns the maximum number of characters in an SQL statement for this
   database.
   @return the maximum number of characters in an SQL statement. If the
   limit is unknown, or the value is unlimited, then the result is
   zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxStatementLength;
  
  /*!
   @brief Get the maximum number of simultaneously open active statements for this
   database.
   @return the maximum number of open active statements. If the limit is
   unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxStatements;
  
  /*!
   @brief Returns the maximum size for a table name in the database.
   @return the maximum size in characters for a table name. If the limit is
   unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxTableNameLength;
  
  /*!
   @brief Returns the maximum number of tables permitted in a <code>SELECT</code>
   statement for the database.
   @return the maximum number of tables permitted in a <code>SELECT</code>
   statement. If the limit is unknown, or the value is unlimited,
   then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxTablesInSelect;
  
  /*!
   @brief Returns the maximum number of characters in a user name for the database.
   @return the maximum number of characters in a user name. If the limit is
   unknown, or the value is unlimited, then the result is zero.
   @throws SQLException
   a database error occurred.
   */
  - (jint)getMaxUserNameLength;
  
  /*!
   @brief Returns a list of the math functions available with this database.
   These
   are used in the JDBC function escape clause and are the Open Group CLI
   math function names.
   @return a String which contains the list of math functions as a comma
   separated list.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getNumericFunctions;
  
  /*!
   @brief Returns a list of the primary key columns of a specified table.
   <p>
   The list is returned as a <code>ResultSet</code> with one row for each primary
   key column, ordered by <code>COLUMN_NAME</code>, with each row having the
   structure as follows:
   <ol>
   <li><code>TABLE_CAT</code> - String - table catalog name (possibly null)</li>
   <li><code>TABLE_SCHEM</code> - String - table schema name (possibly null)</li>
   <li><code>TABLE_NAME</code> - String - The table name</li>
   <li><code>COLUMN_NAME</code> - String - The column name</li>
   <li><code>KEY_SEQ</code> - short - the sequence number for this column in the
   primary key</li>
   <li><code>PK_NAME</code> - String - the primary key name (possibly null)</li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with the empty string used
   to retrieve those without a catalog name.
   @param schema
   a schema name. <code>null</code> is used to imply no narrowing of
   the search by schema name. Otherwise, the name must match a
   schema name in the database, with the empty string used to
   retrieve those without a schema name.
   @param table
   the name of a table, which must match the name of a table in
   the database.
   @return a <code>ResultSet</code> containing the list of keys in the format
   defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getPrimaryKeysWithNSString:(NSString *)catalog
                                        withNSString:(NSString *)schema
                                        withNSString:(NSString *)table;
  
  /*!
   @brief Returns a list of parameter and result columns for the stored procedures
   belonging to a specified catalog.
   <p>
   The list is returned as a <code>ResultSet</code> with one row for each
   parameter or result column. The data is ordered by <code>PROCEDURE_SCHEM</code>
    and <code>PROCEDURE_NAME</code>, while for each procedure,
   the return value (if any) is first, followed by the parameters in the
   order they appear in the stored procedure call, followed by <code>ResultSet</code>
    columns in column number order. Each row has the following
   structure:
   <ol>
   <li><code>PROCEDURE_CAT</code> - String - the procedure catalog name</li>
   <li><code>PROCEDURE_SCHEM</code> - String - the procedure schema name
   (possibly null)</li>
   <li><code>PROCEDURE_NAME</code> - String - the procedure name</li>
   <li><code>COLUMN_NAME</code> - String - the name of the column</li>
   <li><code>COLUMN_TYPE</code> - short - the kind of column or parameter, as
   follows:
   <ul>
   <li><code>DatabaseMetaData.procedureColumnUnknown</code> - type unknown</li>
   <li><code>DatabaseMetaData.procedureColumnIn</code> - an <code>IN</code> parameter</li>
   <li><code>DatabaseMetaData.procedureColumnInOut</code> - an <code>INOUT</code>
   parameter</li>
   <li><code>DatabaseMetaData.procedureColumnOut</code> - an <code>OUT</code>
   parameter</li>
   <li><code>DatabaseMetaData.procedureColumnReturn</code> - a return value</li>
   <li><code>DatabaseMetaData.procedureReturnsResult</code> - a result column in
   a result set</li>
   </ul>
   </li>
   <li><code>DATA_TYPE</code> - int - the SQL type of the data, as in <code>java.sql.Types</code>
   </li>
   <li><code>TYPE_NAME</code> - String - the SQL type name, for a UDT it is fully
   qualified</li>
   <li><code>PRECISION</code> - int - the precision</li>
   <li><code>LENGTH</code> - int - the length of the data in bytes</li>
   <li><code>SCALE</code> - short - the scale for numeric types</li>
   <li><code>RADIX</code> - short - the Radix for numeric data (typically 2 or
   10)</li>
   <li><code>NULLABLE</code> - short - can the data contain <code>null</code>:
   <ul>
   <li><code>DatabaseMetaData.procedureNoNulls</code> - <code>NULL</code>s not
   permitted</li>
   <li><code>DatabaseMetaData.procedureNullable</code> - <code>NULL</code>s are
   permitted</li>
   <li><code>DatabaseMetaData.procedureNullableUnknown</code> - <code>NULL</code>
   status unknown</li>
   </ul>
   </li>
   <li><code>REMARKS</code> - String - an explanatory comment about the data item
   </li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schemaPattern
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param procedureNamePattern
   a pattern that must match the name of the procedure stored in
   the database.
   @param columnNamePattern
   a column name pattern. The name must match the column name
   stored in the database.
   @return a <code>ResultSet</code> with the list of parameter and result columns
   in the format defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getProcedureColumnsWithNSString:(NSString *)catalog
                                             withNSString:(NSString *)schemaPattern
                                             withNSString:(NSString *)procedureNamePattern
                                             withNSString:(NSString *)columnNamePattern;
  
  /*!
   @brief Returns a list of the stored procedures available in a specified catalog.
   <p>
   The list is returned as a <code>ResultSet</code> with one row for each stored
   procedure, ordered by PROCEDURE_SCHEM and PROCEDURE_NAME, with the data
   in each row as follows:
   <ol>
   <li><code>PROCEDURE_CAT</code> - String : the procedure catalog name</li>
   <li><code>PROCEDURE_SCHEM</code> - String : the procedure schema name
   (possibly <code>null</code>)</li>
   <li><code>PROCEDURE_NAME</code> - String : the procedure name</li>
   <li><code>Reserved</code></li>
   <li><code>Reserved</code></li>
   <li><code>Reserved</code></li>
   <li><code>REMARKS</code> - String - information about the procedure</li>
   <li><code>PROCEDURE_TYPE</code> - short : one of:
   <ul>
   <li><code>DatabaseMetaData.procedureResultUnknown</code> - procedure may
   return a result</li>
   <li><code>DatabaseMetaData.procedureNoResult</code> - procedure does not
   return a result</li>
   <li><code>DatabaseMetaData.procedureReturnsResult</code> - procedure
   definitely returns a result</li>
   </ul>
   </li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schemaPattern
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param procedureNamePattern
   a procedure name pattern, which must match the procedure name
   stored in the database.
   @return a <code>ResultSet</code> where each row is a description of a stored
   procedure in the format defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getProceduresWithNSString:(NSString *)catalog
                                       withNSString:(NSString *)schemaPattern
                                       withNSString:(NSString *)procedureNamePattern;
  
  /*!
   @brief Returns the database vendor's preferred name for "procedure".
   @return a String with the vendor's preferred name for "procedure".
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getProcedureTerm;
  
  /*!
   @brief Returns the result set's default holdability.
   @return one of <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>
   .
   @throws SQLException
   a database error occurred.
   */
  - (jint)getResultSetHoldability;
  
  /*!
   @brief Returns a list of the schema names in the database.
   The list is returned
   as a <code>ResultSet</code>, ordered by the schema name, with one row per
   schema in the following format:
   <ol>
   <li><code>TABLE_SCHEM</code> - String - the schema name</li> <li><code>TABLE_CATALOG</code>
    - String - the catalog name (possibly <code>null</code>) </li>
   </ol>
   @return a <code>ResultSet</code> with one row for each schema in the format
   defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getSchemas;
  
  /*!
   @brief Returns the database vendor's preferred term for "schema".
   @return a String which is the vendor's preferred term for schema.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getSchemaTerm;
  
  /*!
   @brief Returns the string that is used to escape wildcard characters.
   This
   string is used to escape the <code>'_'</code> and <code>'%'</code> wildcard
   characters in catalog search pattern strings. <code>'_'</code> is used to represent any single
   character while <code>'%'</code> is used for a sequence of zero or more
   characters.
   @return a String used to escape the wildcard characters.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getSearchStringEscape;
  
  /*!
   @brief Returns a list of all the SQL keywords that are NOT also SQL92 keywords
   for the database.
   @return a String containing the list of SQL keywords in a comma separated
   format.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getSQLKeywords;
  
  /*!
   @brief States the type of <code>SQLState</code> value returned by <code>SQLException.getSQLState</code>
   .
   This can either be the X/Open (now known as
   Open Group) SQL CLI form or the SQL99 form.
   @return an integer, which is either <code>DatabaseMetaData.sqlStateSQL99</code>
    or <code>DatabaseMetaData.sqlStateXOpen</code>
   .
   @throws SQLException
   a database error occurred.
   */
  - (jint)getSQLStateType;
  
  /*!
   @brief Returns a list of string functions available with the database.
   These
   functions are used in JDBC function escape clause and follow the Open
   Group CLI string function names definition.
   @return a String containing the list of string functions in comma
   separated format.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getStringFunctions;
  
  /*!
   @brief Returns a listing of the hierarchies of tables in a specified schema in
   the database.
   <p>
   The listing only contains entries for tables that have a super table.
   Super tables and corresponding subtables must be defined in the same catalog and schema. The
   list is returned as a <code>ResultSet</code>, with one row for each table that
   has a super table, in the following format:
   <ol>
   <li><code>TABLE_CAT</code> - String - table catalog name (possibly <code>null</code>
   )</li>
   <li><code>TABLE_SCHEM</code> - String - Table schema name (possibly <code>null</code>
   )</li>
   <li><code>TABLE_NAME</code> - String - The table name</li>
   <li>SUPER<code>TABLE_NAME</code> - String - The super table name</li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schemaPattern
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param tableNamePattern
   a table name, which should match the table name as stored in
   the database. it may be a fully qualified name. If it is fully
   qualified the catalog name and schema name parameters are
   ignored.
   @return a <code>ResultSet</code> with one row for each table which has a super
   table, in the format defined above. An empty <code>ResultSet</code> is
   returned if the database does not support table hierarchies.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getSuperTablesWithNSString:(NSString *)catalog
                                        withNSString:(NSString *)schemaPattern
                                        withNSString:(NSString *)tableNamePattern;
  
  /*!
   @brief Returns the User Defined Type (UDT) hierarchies for a given schema.
   Only
   the immediate parent/child relationship is described. If a UDT does not
   have a direct supertype, it is not listed.
   <p>
   The listing is returned as a <code>ResultSet</code> where there is one row for
   a specific UDT which describes its supertype, with the data organized in
   columns as follows:
   <ol>
   <li><code>TYPE_CAT</code> - String - the UDT catalog name (possibly <code>null</code>
   )</li>
   <li><code>TYPE_SCHEM</code> - String - the UDT schema name (possibly <code>null</code>
   )</li>
   <li><code>TYPE_NAME</code> - String - the UDT type name</li>
   <li>SUPER<code>TYPE_CAT</code> - String - direct supertype's catalog name
   (possibly <code>null</code>)</li>
   <li>SUPER<code>TYPE_SCHEM</code> - String - direct supertype's schema name
   (possibly <code>null</code>)</li>
   <li>SUPER<code>TYPE_NAME</code> - String - direct supertype's name</li>
   </ol>
   @param catalog
   the catalog name. "" means get the UDTs without a catalog.
   <code>null</code> means don't use the catalog name to restrict the
   search.
   @param schemaPattern
   the Schema pattern name. "" means get the UDT's without a
   schema.
   @param typeNamePattern
   the UDT name pattern. This may be a fully qualified name. When
   a fully qualified name is specified, the catalog name and
   schema name parameters are ignored.
   @return a <code>ResultSet</code> in which each row gives information about a
   particular UDT in the format defined above. An empty ResultSet is
   returned for a database that does not support type hierarchies.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getSuperTypesWithNSString:(NSString *)catalog
                                       withNSString:(NSString *)schemaPattern
                                       withNSString:(NSString *)typeNamePattern;
  
  /*!
   @brief Returns a list of system functions available with the database.
   These are
   names used in the JDBC function escape clause and are Open Group CLI
   function names.
   @return a String containing the list of system functions in a comma
   separated format.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getSystemFunctions;
  
  /*!
   @brief Returns a description of access rights for each table present in a
   catalog.
   Table privileges can apply to one or more columns in the table -
   but are not guaranteed to apply to all columns.
   <p>
   The privileges are returned as a <code>ResultSet</code>, with one row for each
   privilege, ordered by <code>TABLE_SCHEM</code>, <code>TABLE_NAME</code>, <code>PRIVILEGE</code>
   , and each row has data as defined in the following column
   definitions:
   <ol>
   <li><code>TABLE_CAT</code> - String - table catalog name (possibly <code>null</code>
   )</li>
   <li><code>TABLE_SCHEM</code> - String - Table schema name (possibly <code>null</code>
   )</li>
   <li><code>TABLE_NAME</code> - String - The table name</li>
   <li>GRANTOR - String - who granted the access</li>
   <li>GRANTEE - String - who received the access grant</li>
   <li>PRIVILEGE - String - the type of access granted - one of SELECT,
   INSERT, UPDATE, REFERENCES,...</li>
   <li>IS_GRANTABLE - String - <code>"YES"</code> implies the grantee can grant
   access to others, <code>"NO"</code> implies guarantee cannot grant access to
   others, <code>null</code> means this status is unknown</li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schemaPattern
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param tableNamePattern
   a Table Name, which should match the table name as stored in
   the database.
   @return a <code>ResultSet</code> containing a list with one row for each table
   in the format defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getTablePrivilegesWithNSString:(NSString *)catalog
                                            withNSString:(NSString *)schemaPattern
                                            withNSString:(NSString *)tableNamePattern;
  
  /*!
   @brief Returns a description of the tables in a specified catalog.
   <p>
   The descriptions are returned as rows in a <code>ResultSet</code>, one row for
   each Table. The ResultSet is ordered by <code>TABLE_TYPE</code>, <code>TABLE_SCHEM</code>
    and <code>TABLE_NAME</code>. Each row in the ResultSet consists
   of a series of columns as follows:
   <ol>
   <li><code>TABLE_CAT</code> - String - table catalog name (possibly <code>null</code>
   )</li>
   <li><code>TABLE_SCHEM</code> - String - Table schema name (possibly <code>null</code>
   )</li>
   <li><code>TABLE_NAME</code> - String - The table name</li>
   <li><code>TABLE_TYPE</code> - String - Typical names include "TABLE", "VIEW",
   "SYSTEM TABLE", "ALIAS", "SYNONYM", "GLOBAL TEMPORARY"</li>
   <li><code>REMARKS</code> - String - A comment describing the table</li>
   <li><code>TYPE_CAT</code> - String - the 'Types' catalog(possibly <code>null</code>
   )</li>
   <li><code>TYPE_SCHEM</code> - String - the 'Types' schema(possibly <code>null</code>
   )</li>
   <li><code>TYPE_NAME</code> - String - the 'Types' name (possibly <code>null</code>)
   </li>
   <li><code>SELF_REFERENCING_COL_NAME</code> - String - the name of a designated
   identifier column in a typed table (possibly <code>null</code>)</li>
   <li>REF_GENERATION - String - one of the following values : "SYSTEM" |
   "USER" | "DERIVED" - specifies how values in the <code>SELF_REFERENCING_COL_NAME</code>
    are created (possibly <code>null</code>)</li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schemaPattern
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search by schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param tableNamePattern
   a table name, which should match the table name as stored in
   the database.
   @param types
   a list of table types to include in the list. <code>null</code>
   implies list all types.
   @return a <code>ResultSet</code> with one row per table in the format defined
   above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getTablesWithNSString:(NSString *)catalog
                                   withNSString:(NSString *)schemaPattern
                                   withNSString:(NSString *)tableNamePattern
                              withNSStringArray:(IOSObjectArray *)types;
  
  /*!
   @brief Returns a list of table types supported by the database.
   <p>
   The list is returned as a <code>ResultSet</code> with one row per table type,
   ordered by the table type. The information in the <code>ResultSet</code> is
   structured into a single column per row, as follows:
   <ol>
   <li><code>TABLE_TYPE</code> - String - the table type. Typical names include
   <code>"TABLE"</code>, <code>"VIEW"</code>, "<code>SYSTEM TABLE"</code>, <code>"ALIAS"</code>,
   <code>"SYNONYM"</code>, <code>"GLOBAL TEMPORARY"</code></li>
   </ol>
   @return a <code>ResultSet</code> with one row per table type in the format
   defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getTableTypes;
  
  /*!
   @brief Returns a list of time and date functions available for the database.
   @return a string containing a comma separated list of the time and date
   functions.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getTimeDateFunctions;
  
  /*!
   @brief Get a list of the standard SQL types supported by this database.
   The list
   is returned as a <code>ResultSet</code>, with one row for each type, ordered
   by the <code>DATA_TYPE</code> value, where the data in each row is structured
   into the following columns:
   <ol>
   <li><code>TYPE_NAME</code> - String : the type name</li>
   <li><code>DATA_TYPE</code> - int : the SQL data type value as defined in
   <code>java.sql.Types</code></li>
   <li><code>PRECISION</code> - int - the maximum precision of the type</li>
   <li><code>LITERAL_PREFIX</code> - String : the prefix to be used when quoting
   a literal value (possibly <code>null</code>)</li>
   <li><code>LITERAL_SUFFIX</code> - String : the suffix to be used when quoting
   a literal value (possibly <code>null</code>)</li>
   <li><code>CREATE_PARAMS</code> - String : params used when creating the type
   (possibly <code>null</code>)</li>
   <li><code>NULLABLE</code> - short : shows if the value is nullable:
   <ul>
   <li><code>DatabaseMetaData.typeNoNulls</code> : <code>NULL</code>s not permitted</li>
   <li><code>DatabaseMetaData.typeNullable</code> : <code>NULL</code>s are permitted</li>
   <li><code>DatabaseMetaData.typeNullableUnknown</code> : <code>NULL</code> status
   unknown</li>
   </ul>
   </li>
   <li><code>CASE_SENSITIVE</code> - boolean : true if the type is case sensitive
   </li>
   <li><code>SEARCHABLE</code> - short : how this type can be used with <code>WHERE</code>
   clauses:
   <ul>
   <li><code>DatabaseMetaData.typePredNone</code> - <code>WHERE</code> clauses cannot be used</li>
   <li><code>DatabaseMetaData.typePredChar</code> - support for <code>WHERE...LIKE</code>
    only</li>
   <li><code>DatabaseMetaData.typePredBasic</code> - support except for <code>WHERE...LIKE</code>
   </li>
   <li><code>DatabaseMetaData.typeSearchable</code> - support for all <code>WHERE</code>
    clauses</li>
   </ul>
   </li>
   <li><code>UNSIGNED_ATTRIBUTE</code> - boolean - the type is unsigned or not</li>
   <li><code>FIXED_PREC_SCALE</code> - boolean - fixed precision = it can be used
   as a money value</li>
   <li><code>AUTO_INCREMENT</code> - boolean - can be used as an auto-increment
   value</li>
   <li><code>LOCAL_TYPE_NAME</code> - String - a localized version of the type
   name (possibly <code>null</code>)</li>
   <li><code>MINIMUM_SCALE</code> - short - the minimum scale supported</li>
   <li><code>MAXIMUM_SCALE</code> - short - the maximum scale supported</li>
   <li><code>SQL_DATA_TYPE</code> - int - not used</li>
   <li><code>SQL_DATETIME_SUB</code> - int - not used</li>
   <li><code>NUM_PREC_RADIX</code> - int - number radix (typically 2 or 10)</li>
   </ol>
   @return a <code>ResultSet</code> which is structured as described above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getTypeInfo;
  
  /*!
   @brief Returns a description of the User Defined Types (UDTs) defined in a given
   schema, which includes the types <code>DISTINCT</code>, <code>STRUCT</code> and
   <code>JAVA_OBJECT</code>.
   <p>
   The types matching the supplied the specified catalog, schema, type name
   and type are returned as rows in a <code>ResultSet</code> with columns of
   information as follows:
   <ol>
   <li><code>TABLE_CAT</code> - String - catalog name (possibly <code>null</code>)</li>
   <li><code>TABLE_SCHEM</code> - String - schema name (possibly <code>null</code>)</li>
   <li><code>TABLE_NAME</code> - String - The table name</li>
   <li><code>CLASS_NAME</code> - String - The Java class name</li>
   <li><code>DATA_TYPE</code> - int - The SQL type as specified in <code>java.sql.Types</code>
   . One of DISTINCT, STRUCT, and JAVA_OBJECT</li>
   <li><code>REMARKS</code> - String - A comment which describes the type</li>
   <li><code>BASE_TYPE</code> - short - A type code. For a DISTINCT type, the
   source type. For a structured type this is the type that implements the
   user generated reference type of the <code>SELF_REFERENCING_COLUMN</code>.
   This is defined in <code>java.sql.Types</code>, and will be <code>null</code> if
   the <code>DATA_TYPE</code> does not match these criteria.</li>
   </ol>
   <p>
   If the driver does not support UDTs, the <code>ResultSet</code> is empty.
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search by catalog name. Otherwise, the name must match a
   catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schemaPattern
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search using schema name. Otherwise, the name
   must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param typeNamePattern
   a type name pattern, which should match a type name as stored in the
   database. It may be fully qualified.
   @param types
   a list of the UDT types to include in the list - one of
   <code>DISTINCT</code>, <code>STRUCT</code> or <code>JAVA_OBJECT</code>.
   @return a <code>ResultSet</code> in the format described above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getUDTsWithNSString:(NSString *)catalog
                                 withNSString:(NSString *)schemaPattern
                                 withNSString:(NSString *)typeNamePattern
                                 withIntArray:(IOSIntArray *)types;
  
  /*!
   @brief Returns the URL for this database.
   @return the URL for the database. <code>null</code> if it cannot be generated.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getURL;
  
  /*!
   @brief Determine the user name as known by the database.
   @return the user name.
   @throws SQLException
   a database error occurred.
   */
  - (NSString *)getUserName;
  
  /*!
   @brief Returns which of a table's columns are automatically updated when any
   value in a row is updated.
   <p>
   The result is laid-out in the following columns:
   <ol>
   <li><code>SCOPE</code> - short - not used</li>
   <li><code>COLUMN_NAME</code> - String - Column name</li>
   <li><code>DATA_TYPE</code> - int - The SQL data type, as defined in <code>java.sql.Types</code>
   </li>
   <li><code>TYPE_NAME</code> - String - The SQL type name, data source dependent
   </li>
   <li><code>COLUMN_SIZE</code> - int - Precision for numeric types</li>
   <li><code>BUFFER_LENGTH</code> - int - Length of a column value in bytes</li>
   <li><code>DECIMAL_DIGITS</code> - short - Number of digits after the decimal
   point</li>
   <li><code>PSEUDO_COLUMN</code> - short - If this is a pseudo-column (for
   example, an Oracle <code>ROWID</code>):
   <ul>
   <li><code>DatabaseMetaData.bestRowUnknown</code> - don't know whether this is
   a pseudo column</li>
   <li><code>DatabaseMetaData.bestRowNotPseudo</code> - column is not pseudo</li>
   <li><code>DatabaseMetaData.bestRowPseudo</code> - column is a pseudo column</li>
   </ul>
   </li>
   </ol>
   @param catalog
   a catalog name. <code>null</code> is used to imply no narrowing of
   the search using catalog name. Otherwise, the name must match
   a catalog name held in the database, with "" used to retrieve
   those without a catalog name.
   @param schema
   a schema name pattern. <code>null</code> is used to imply no
   narrowing of the search using schema names. Otherwise, the
   name must match a schema name in the database, with "" used to
   retrieve those without a schema name.
   @param table
   a table name. It must match the name of a table in the
   database.
   @return a <code>ResultSet</code> containing the descriptions, one row for each
   column, in the format defined above.
   @throws SQLException
   a database error occurred.
   */
  - (id<JavaSqlResultSet>)getVersionColumnsWithNSString:(NSString *)catalog
                                           withNSString:(NSString *)schema
                                           withNSString:(NSString *)table;
  
  /*!
   @brief Determines whether a visible row insert can be detected by calling <code>ResultSet.rowInserted</code>
   .
   @param type
   the <code>ResultSet</code> type. This may be one of <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
    or <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
    or <code>ResultSet.TYPE_FORWARD_ONLY</code>
   ,
   @return <code>true</code> if <code>ResultSet.rowInserted</code> detects a visible
   row insert otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)insertsAreDetectedWithInt:(jint)type;
  
  /*!
   @brief Determine whether a fully qualified table name is prefixed or suffixed to
   a fully qualified table name.
   @return <code>true</code> if the catalog appears at the start of a fully
   qualified table name, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)isCatalogAtStart;
  
  /*!
   @brief Determines whether the database is in read-only mode.
   @return <code>true</code> if the database is in read-only mode, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)isReadOnly;
  
  /*!
   @brief Determines whether updates are made to a copy of, or directly on, Large Objects
   (<code>LOB</code>s).
   @return <code>true</code> if updates are made to a copy of the Large Object,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)locatorsUpdateCopy;
  
  /*!
   @brief Determines whether the database handles concatenations between <code>NULL</code> and
   non-<code>NULL</code> values by producing a <code>NULL</code> output.
   @return <code>true</code> if <code>NULL</code> to non-<code>NULL</code> concatenations
   produce a <code>NULL</code> result, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)nullPlusNonNullIsNull;
  
  /*!
   @brief Determines whether <code>NULL</code> values are always sorted to the end of sorted
   results regardless of requested sort order.
   This means that they will
   appear at the end of sorted lists whatever other non-<code>NULL</code> values
   may be present.
   @return <code>true</code> if <code>NULL</code> values are sorted at the end,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)nullsAreSortedAtEnd;
  
  /*!
   @brief Determines whether <code>NULL</code> values are always sorted at the start of the
   sorted list, irrespective of the sort order.
   This means that they appear
   at the start of sorted lists, whatever other values may be present.
   @return <code>true</code> if <code>NULL</code> values are sorted at the start,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)nullsAreSortedAtStart;
  
  /*!
   @brief Determines whether <code>NULL</code> values are sorted high - i.e. they are sorted
   as if they are higher than any other values.
   @return <code>true</code> if <code>NULL</code> values are sorted high, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)nullsAreSortedHigh;
  
  /*!
   @brief Determines whether <code>NULL</code> values are sorted low - i.e. they are sorted as
   if they are lower than any other values.
   @return <code>true</code> if <code>NULL</code> values are sorted low, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)nullsAreSortedLow;
  
  /*!
   @brief Determines whether deletes made by others are visible, for a specified <code>ResultSet</code>
    type.
   @param type
   the type of the <code>ResultSet</code>. It may be either <code>ResultSet.TYPE_FORWARD_ONLY</code>
    or <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
   , or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   )
   @return <code>true</code> if others' deletes are visible, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)othersDeletesAreVisibleWithInt:(jint)type;
  
  /*!
   @brief Determines whether inserts made by others are visible, for a specified <code>ResultSet</code>
    type.
   @param type
   the type of the <code>ResultSet</code>. May be <code>ResultSet.TYPE_FORWARD_ONLY</code>
   , or <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
   , or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   @return <code>true</code> if others' inserts are visible, otherwise <code>false</code>
   .
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)othersInsertsAreVisibleWithInt:(jint)type;
  
  /*!
   @brief Determines whether updates made by others are visible, for a specified <code>ResultSet</code>
    type.
   @param type
   the type of the <code>ResultSet</code>. May be <code>ResultSet.TYPE_FORWARD_ONLY</code>
   , or <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
   , or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   @return <code>true</code> if others' inserts are visible, otherwise <code>false</code>
   .
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)othersUpdatesAreVisibleWithInt:(jint)type;
  
  /*!
   @brief Determines whether a <code>ResultSet</code> can see its own deletes, for a
   specified <code>ResultSet</code> type.
   @param type
   the type of the <code>ResultSet</code>: <code>ResultSet.TYPE_FORWARD_ONLY</code>
   , <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
   , or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   @return <code>true</code> if the deletes are seen by the <code>ResultSet</code>
    itself, otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)ownDeletesAreVisibleWithInt:(jint)type;
  
  /*!
   @brief Determines whether a <code>ResultSet</code> can see its own inserts, for a
   specified <code>ResultSet</code> type.
   @param type
   the type of the <code>ResultSet</code>: <code>ResultSet.TYPE_FORWARD_ONLY</code>
   , <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
   , or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   @return <code>true</code> if the inserts are seen by the <code>ResultSet</code>
    itself, otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)ownInsertsAreVisibleWithInt:(jint)type;
  
  /*!
   @brief Determines whether a <code>ResultSet</code> can see its own updates, for a
   specified <code>ResultSet</code> type.
   @param type
   the type of the <code>ResultSet</code>: <code>ResultSet.TYPE_FORWARD_ONLY</code>
   , <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
   , or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   @return <code>true</code> if the updates are seen by the <code>ResultSet</code>
    itself, otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)ownUpdatesAreVisibleWithInt:(jint)type;
  
  /*!
   @brief Determines whether the database treats SQL identifiers that are in mixed
   case (and unquoted) as case insensitive.
   If <code>true</code> then the
   database stores them in lower case.
   @return <code>true</code> if unquoted SQL identifiers are stored in lower
   case, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)storesLowerCaseIdentifiers;
  
  /*!
   @brief Determines whether the database considers mixed case quoted SQL
   identifiers as case insensitive and stores them in lower case.
   @return <code>true</code> if quoted SQL identifiers are stored in lower case,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)storesLowerCaseQuotedIdentifiers;
  
  /*!
   @brief Determines whether the database considers mixed case unquoted SQL
   identifiers as case insensitive and stores them in mixed case.
   @return <code>true</code> if unquoted SQL identifiers as stored in mixed case,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)storesMixedCaseIdentifiers;
  
  /*!
   @brief Determines whether the database considers identifiers as case insensitive
   if they are mixed case quoted SQL.
   The database stores them in mixed
   case.
   @return <code>true</code> if quoted SQL identifiers are stored in mixed case,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)storesMixedCaseQuotedIdentifiers;
  
  /*!
   @brief Determines whether the database considers mixed case unquoted SQL
   identifiers as case insensitive and stores them in upper case.
   @return <code>true</code> if unquoted SQL identifiers are stored in upper
   case, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)storesUpperCaseIdentifiers;
  
  /*!
   @brief Determines whether the database considers mixed case quoted SQL
   identifiers as case insensitive and stores them in upper case.
   @return <code>true</code> if quoted SQL identifiers are stored in upper case,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)storesUpperCaseQuotedIdentifiers;
  
  /*!
   @brief Determines whether the database supports <code>ALTER TABLE</code> operation with
   <code>ADD COLUMN</code>.
   @return <code>true</code> if <code>ALTER TABLE</code> with <code>ADD COLUMN</code> is
   supported, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsAlterTableWithAddColumn;
  
  /*!
   @brief Determines whether the database supports <code>ALTER TABLE</code> operation with
   <code>DROP COLUMN</code>.
   @return <code>true</code> if <code>ALTER TABLE</code> with <code>DROP COLUMN</code> is
   supported, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsAlterTableWithDropColumn;
  
  /*!
   @brief Determines whether the database supports the ANSI92 entry level SQL grammar.
   @return <code>true</code> if the ANSI92 entry level SQL grammar is supported,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsANSI92EntryLevelSQL;
  
  /*!
   @brief Determines whether the database supports the ANSI92 full SQL grammar.
   @return <code>true</code> if the ANSI92 full SQL grammar is supported, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsANSI92FullSQL;
  
  /*!
   @brief Determines whether the database supports the ANSI92 intermediate SQL Grammar.
   @return <code>true</code> if the ANSI92 intermediate SQL grammar is supported,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsANSI92IntermediateSQL;
  
  /*!
   @brief Determines whether the database supports batch updates.
   @return <code>true</code> if batch updates are supported, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsBatchUpdates;
  
  /*!
   @brief Determines whether catalog names may be used in data manipulation
   statements.
   @return <code>true</code> if catalog names can be used in data manipulation
   statements, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsCatalogsInDataManipulation;
  
  /*!
   @brief Determines whether catalog names can be used in index definition statements.
   @return <code>true</code> if catalog names can be used in index definition
   statements, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsCatalogsInIndexDefinitions;
  
  /*!
   @brief Determines whether catalog names can be used in privilege definition
   statements.
   @return <code>true</code> if catalog names can be used in privilege definition
   statements, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsCatalogsInPrivilegeDefinitions;
  
  /*!
   @brief Determines whether catalog names can be used in procedure call statements.
   @return <code>true</code> if catalog names can be used in procedure call
   statements.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsCatalogsInProcedureCalls;
  
  /*!
   @brief Determines whether catalog names may be used in table definition statements.
   @return <code>true</code> if catalog names can be used in definition
   statements, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsCatalogsInTableDefinitions;
  
  /*!
   @brief Determines whether the database supports column aliasing.
   <p>
   If aliasing is supported, then the SQL AS clause is used to provide names
   for computed columns and provide alias names for columns.
   @return <code>true</code> if column aliasing is supported, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsColumnAliasing;
  
  /*!
   @brief Determines whether the database supports the <code>CONVERT</code> operation between
   SQL types.
   @return <code>true</code> if the <code>CONVERT</code> operation is supported,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsConvert;
  
  /*!
   @brief Determines whether the database supports <code>CONVERT</code> operation for two
   supplied SQL types.
   @param fromType
   the Type to convert from, as defined by <code>java.sql.Types</code>
   @param toType
   the Type to convert to, as defined by <code>java.sql.Types</code>
   @return <code>true</code> if the <code>CONVERT</code> operation is supported for
   these types, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsConvertWithInt:(jint)fromType
                             withInt:(jint)toType;
  
  /*!
   @brief Determines whether the database supports the Core SQL Grammar for ODBC.
   @return <code>true</code> if the Core SQL Grammar is supported, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsCoreSQLGrammar;
  
  /*!
   @brief Determines whether the database supports correlated sub-queries.
   @return <code>true</code> if the database does support correlated sub-queries
   and <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsCorrelatedSubqueries;
  
  /*!
   @brief Determines whether the database allows both data definition and data
   manipulation statements inside a transaction.
   @return <code>true</code> if both types of statement are permitted, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsDataDefinitionAndDataManipulationTransactions;
  
  /*!
   @brief Determines whether the database only allows data manipulation statements inside
   a transaction.
   @return <code>true</code> if data manipulation statements are permitted only within a transaction,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsDataManipulationTransactionsOnly;
  
  /*!
   @brief Determines whether table correlation names are required to be different from
   the names of the tables, when they are supported.
   @return <code>true</code> if correlation names must be different from table
   names, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsDifferentTableCorrelationNames;
  
  /*!
   @brief Determines whether expressions in <code>ORDER BY</code> lists are supported.
   @return <code>true</code> if expressions in <code>ORDER BY</code> lists are
   supported.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsExpressionsInOrderBy;
  
  /*!
   @brief Determines whether the Extended SQL Grammar for ODBC is supported.
   @return <code>true</code> if the Extended SQL Grammar is supported, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsExtendedSQLGrammar;
  
  /*!
   @brief Determines whether the database supports full nested outer joins.
   @return <code>true</code> if full nested outer joins are supported, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsFullOuterJoins;
  
  /*!
   @brief Determines whether auto generated keys can be returned when a statement
   executes.
   @return <code>true</code> if auto generated keys can be returned, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsGetGeneratedKeys;
  
  /*!
   @brief Determines whether the database supports <code>GROUP BY</code> clauses.
   @return <code>true</code> if the <code>GROUP BY</code> clause is supported, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsGroupBy;
  
  /*!
   @brief Determines whether the database supports using a column name in a <code>GROUP
   BY</code>
    clause not included in the <code>SELECT</code> statement as long as all of
   the columns in the <code>SELECT</code> statement are used in the <code>GROUP
   BY</code>
    clause.
   @return <code>true</code> if <code>GROUP BY</code> clauses can use column names in
   this way, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsGroupByBeyondSelect;
  
  /*!
   @brief Determines whether the database supports using a column name in a <code>GROUP
   BY</code>
    clause that is not in the <code>SELECT</code> statement.
   @return <code>true</code> if <code>GROUP BY</code> clause can use a column name not
   in the <code>SELECT</code> statement, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsGroupByUnrelated;
  
  /*!
   @brief Determines whether the database supports SQL Integrity Enhancement
   Facility.
   @return <code>true</code> if the Integrity Enhancement Facility is supported,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsIntegrityEnhancementFacility;
  
  /*!
   @brief Determines whether the database supports a <code>LIKE</code> escape clause.
   @return <code>true</code> if LIKE escape clause is supported, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsLikeEscapeClause;
  
  /*!
   @brief Determines whether the database provides limited support for outer join
   operations.
   @return <code>true</code> if there is limited support for outer join
   operations, <code>false</code> otherwise. This will be <code>true</code> if
   <code>supportsFullOuterJoins</code> returns <code>true</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsLimitedOuterJoins;
  
  /*!
   @brief Determines whether the database supports Minimum SQL Grammar for ODBC.
   @return <code>true</code> if the Minimum SQL Grammar is supported, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsMinimumSQLGrammar;
  
  /*!
   @brief Determines whether the database treats mixed case unquoted SQL identifiers as
   case sensitive storing them in mixed case.
   @return <code>true</code> if unquoted SQL identifiers are stored in mixed
   case, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsMixedCaseIdentifiers;
  
  /*!
   @brief Determines whether the database considers mixed case quoted SQL
   identifiers as case sensitive, storing them in mixed case.
   @return <code>true</code> if quoted SQL identifiers are stored in mixed case,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsMixedCaseQuotedIdentifiers;
  
  /*!
   @brief Determines whether it is possible for a single <code>CallableStatement</code> to
   return multiple <code>ResultSet</code>s simultaneously.
   @return <code>true</code> if a single <code>CallableStatement</code> can return
   multiple <code>ResultSet</code>s simultaneously, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsMultipleOpenResults;
  
  /*!
   @brief Determines whether retrieving multiple <code>ResultSet</code>s from a single
   call to the <code>execute</code> method is supported.
   @return <code>true</code> if multiple <code>ResultSet</code>s can be retrieved,
   <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsMultipleResultSets;
  
  /*!
   @brief Determines whether multiple simultaneous transactions on
   different connections are supported.
   @return <code>true</code> if multiple open transactions are supported, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsMultipleTransactions;
  
  /*!
   @brief Determines whether callable statements with named parameters is supported.
   @return <code>true</code> if named parameters can be used with callable
   statements, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsNamedParameters;
  
  /*!
   @brief Determines whether columns in the database can be defined as non-nullable.
   @return <code>true</code> if columns can be defined non-nullable, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsNonNullableColumns;
  
  /*!
   @brief Determines whether keeping cursors open across commit operations is
   supported.
   @return <code>true</code> if cursors can be kept open across commit
   operations, <code>false</code> if they might get closed.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsOpenCursorsAcrossCommit;
  
  /*!
   @brief Determines whether the database can keep cursors open across rollback
   operations.
   @return <code>true</code> if cursors can be kept open across rollback
   operations, <code>false</code> if they might get closed.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsOpenCursorsAcrossRollback;
  
  /*!
   @brief Determines whether keeping statements open across commit operations is
   supported.
   @return <code>true</code> if statements can be kept open, <code>false</code> if
   they might not.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsOpenStatementsAcrossCommit;
  
  /*!
   @brief Determines whether keeping statements open across rollback operations is
   supported.
   @return <code>true</code> if statements can be kept open, <code>false</code> if
   they might not.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsOpenStatementsAcrossRollback;
  
  /*!
   @brief Determines whether using a column in an <code>ORDER BY</code> clause that is
   not in the <code>SELECT</code> statement is supported.
   @return <code>true</code> if it is possible to <code>ORDER</code> using a column
   not in the <code>SELECT</code>, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsOrderByUnrelated;
  
  /*!
   @brief Determines whether outer join operations are supported.
   @return <code>true</code> if outer join operations are supported, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsOuterJoins;
  
  /*!
   @brief Determines whether positioned <code>DELETE</code> statements are supported.
   @return <code>true</code> if the database supports positioned <code>DELETE</code>
   statements.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsPositionedDelete;
  
  /*!
   @brief Determines whether positioned <code>UPDATE</code> statements are supported.
   @return <code>true</code> if the database supports positioned <code>UPDATE</code>
   statements, <code>false</code> otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsPositionedUpdate;
  
  /*!
   @brief Determines whether there is support for a given concurrency style for the
   given <code>ResultSet</code>.
   @param type
   the <code>ResultSet</code> type, as defined in <code>java.sql.ResultSet</code>
   :
   <ul>
   <li><code>ResultSet.TYPE_FORWARD_ONLY</code></li>
   <li><code>ResultSet.TYPE_SCROLL_INSENSITIVE</code></li>
   <li><code>ResultSet.TYPE_SCROLL_SENSITIVE</code></li>
   </ul>
   @param concurrency
   a concurrency type, which may be one of <code>ResultSet.CONCUR_READ_ONLY</code>
    or <code>ResultSet.CONCUR_UPDATABLE</code>
   .
   @return <code>true</code> if that concurrency and <code>ResultSet</code> type
   pairing is supported otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsResultSetConcurrencyWithInt:(jint)type
                                          withInt:(jint)concurrency;
  
  /*!
   @brief Determines whether the supplied <code>ResultSet</code> holdability mode is
   supported.
   @param holdability
   as specified in <code>java.sql.ResultSet</code>: <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code>
    or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>
   @return <code>true</code> if the given ResultSet holdability is supported and
   if it isn't then <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsResultSetHoldabilityWithInt:(jint)holdability;
  
  /*!
   @brief Determines whether the supplied <code>ResultSet</code> type is supported.
   @param type
   the <code>ResultSet</code> type as defined in <code>java.sql.ResultSet</code>
   : <code>ResultSet.TYPE_FORWARD_ONLY</code>,
   <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   @return <code>true</code> if the <code>ResultSet</code> type is supported, <code>false</code>
    otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsResultSetTypeWithInt:(jint)type;
  
  /*!
   @brief Determines whether savepoints for transactions are supported.
   @return <code>true</code> if savepoints are supported, <code>false</code>
   otherwise.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSavepoints;
  
  /*!
   @brief Determines whether a schema name may be used in a data manipulation
   statement.
   @return <code>true</code> if a schema name can be used in a data manipulation,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSchemasInDataManipulation;
  
  /*!
   @brief Determines whether a schema name may be used in an index definition
   statement.
   @return <code>true</code> if a schema name can be used in an index definition,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSchemasInIndexDefinitions;
  
  /*!
   @brief Determines whether a database schema name can be used in a privilege
   definition statement.
   @return <code>true</code> if a database schema name may be used in a privilege
   definition, otherwise <code>false</code>
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSchemasInPrivilegeDefinitions;
  
  /*!
   @brief Determines whether a procedure call statement may be contain in a schema name.
   @return <code>true</code> if a schema name can be used in a procedure call,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSchemasInProcedureCalls;
  
  /*!
   @brief Determines whether a schema name can be used in a table definition statement.
   @return <code>true</code> if a schema name can be used in a table definition,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSchemasInTableDefinitions;
  
  /*!
   @brief Determines whether the <code>SELECT FOR UPDATE</code> statement is supported.
   @return <code>true</code> if <code>SELECT FOR UPDATE</code> statements are
   supported, otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSelectForUpdate;
  
  /*!
   @brief Determines whether statement pooling is supported.
   @return <code>true</code> of the database does support statement pooling,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsStatementPooling;
  
  /*!
   @brief Determines whether stored procedure calls using the stored procedure
   escape syntax is supported.
   @return <code>true</code> if stored procedure calls using the stored procedure
   escape syntax are supported, otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsStoredProcedures;
  
  /*!
   @brief Determines whether subqueries in comparison expressions are supported.
   @return <code>true</code> if subqueries are supported in comparison
   expressions.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSubqueriesInComparisons;
  
  /*!
   @brief Determines whether subqueries in <code>EXISTS</code> expressions are supported.
   @return <code>true</code> if subqueries are supported in <code>EXISTS</code>
   expressions, otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSubqueriesInExists;
  
  /*!
   @brief Determines whether subqueries in <code>IN</code> statements are supported.
   @return <code>true</code> if subqueries are supported in <code>IN</code> statements,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSubqueriesInIns;
  
  /*!
   @brief Determines whether subqueries in quantified expressions are supported.
   @return <code>true</code> if subqueries are supported, otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsSubqueriesInQuantifieds;
  
  /*!
   @brief Determines whether the database has table correlation names support.
   @return <code>true</code> if table correlation names are supported, otherwise
   <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsTableCorrelationNames;
  
  /*!
   @brief Determines whether a specified transaction isolation level is supported.
   @param level
   the transaction isolation level, as specified in <code>java.sql.Connection</code>
   : <code>TRANSACTION_NONE</code>, <code>TRANSACTION_READ_COMMITTED</code>
   , <code>TRANSACTION_READ_UNCOMMITTED</code>
   , <code>TRANSACTION_REPEATABLE_READ</code>
   , <code>TRANSACTION_SERIALIZABLE</code>
   @return <code>true</code> if the specific isolation level is supported,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsTransactionIsolationLevelWithInt:(jint)level;
  
  /*!
   @brief Determines whether transactions are supported.
   <p>
   If transactions are not supported, then the <code>commit</code> method does
   nothing and the transaction isolation level is always <code>TRANSACTION_NONE</code>
   .
   @return <code>true</code> if transactions are supported, otherwise <code>false</code>
   .
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsTransactions;
  
  /*!
   @brief Determines whether the <code>SQL UNION</code> operation is supported.
   @return <code>true</code> of the database does support <code>UNION</code>, otherwise
   <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsUnion;
  
  /*!
   @brief Determines whether the <code>SQL UNION ALL</code> operation is supported.
   @return <code>true</code> if the database does support <code>UNION ALL</code>,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)supportsUnionAll;
  
  /*!
   @brief Determines whether the method <code>ResultSet.rowUpdated</code> can detect a visible
   row update for the specified <code>ResultSet</code> type.
   @param type
   <code>ResultSet</code> type: <code>ResultSet.TYPE_FORWARD_ONLY</code>,
   <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
   @return <code>true</code> detecting changes is possible, otherwise <code>false</code>
   .
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)updatesAreDetectedWithInt:(jint)type;
  
  /*!
   @brief Determines whether this database uses a file for each table.
   @return <code>true</code> if the database uses one file for each table,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)usesLocalFilePerTable;
  
  /*!
   @brief Determines whether this database uses a local file to store tables.
   @return <code>true</code> if the database stores tables in a local file,
   otherwise <code>false</code>.
   @throws SQLException
   a database error occurred.
   */
  - (jboolean)usesLocalFiles;
  
  /*!
   @brief Determine if a SQLException while autoCommit is true indicates that all
   open ResultSets are closed, even ones that are holdable
   @return true if all open ResultSets are closed
   @throws SQLException
   if any error occurs
   */
  - (jboolean)autoCommitFailureClosesAllResultSets;
  
  /*!
   @brief Returns a list of the client info properties of the driver.
   @return a list of the client info
   @throws SQLException
   if any error occurs
   */
  - (id<JavaSqlResultSet>)getClientInfoProperties;
  
  /*!
   @brief Returns a description according to the given catalog's system or user
   function parameters and return type.
   @param catalog
   the given catalong
   @param schemaPattern
   the schema pattern
   @param functionNamePattern
   the function name pattern
   @param columnNamePattern
   the column name pattern
   @return a description of user functions
   @throws SQLException
   if any error occurs
   */
  - (id<JavaSqlResultSet>)getFunctionColumnsWithNSString:(NSString *)catalog
                                            withNSString:(NSString *)schemaPattern
                                            withNSString:(NSString *)functionNamePattern
                                            withNSString:(NSString *)columnNamePattern;
  
  /*!
   @brief Returns a description of the system and user functions available
   according to the given catalog.
   @param catalog
   the given catalog
   @param schemaPattern
   the schema pattern
   @param functionNamePattern
   the function name pattern
   @return user functions
   @throws SQLException
   if any error occurs
   */
  - (id<JavaSqlResultSet>)getFunctionsWithNSString:(NSString *)catalog
                                      withNSString:(NSString *)schemaPattern
                                      withNSString:(NSString *)functionNamePattern;
  
  /*!
   @brief Returns the lifetime for which a RowId object remains valid if this data
   source supports the SQL ROWID type
   @return the time of a RowId object that remains valid.
   @throws SQLException
   if any error occurs
   */
  - (JavaSqlRowIdLifetimeEnum *)getRowIdLifetime;
  
  /*!
   @brief Returns the schema names ordered by TABLE_CATALOG and TABLE_SCHEMA.
   @param catalog
   the catalog
   @param schemaPattern
   the schema pattern
   @return the schema names
   @throws SQLException
   if any error occurs
   */
  - (id<JavaSqlResultSet>)getSchemasWithNSString:(NSString *)catalog
                                    withNSString:(NSString *)schemaPattern;
  
  /*!
   @brief Determine if this database supports invoking user-defined or vendor
   functions using the stored procedure escape syntax.
   @return true if this database supports invoking user-defined or vendor
   functions using the stored procedure escape syntax.
   @throws SQLException
   if any error occurs
   */
  - (jboolean)supportsStoredFunctionsUsingCallSyntax;
  
  @end
  
  J2OBJC_EMPTY_STATIC_INIT(JavaSqlDatabaseMetaData)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, attributeNoNulls, jshort)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, attributeNullable, jshort)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, attributeNullableUnknown, jshort)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, bestRowNotPseudo, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, bestRowPseudo, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, bestRowSession, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, bestRowTemporary, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, bestRowTransaction, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, bestRowUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, columnNoNulls, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, columnNullable, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, columnNullableUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, importedKeyCascade, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, importedKeyInitiallyDeferred, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, importedKeyInitiallyImmediate, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, importedKeyNoAction, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, importedKeyNotDeferrable, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, importedKeyRestrict, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, importedKeySetDefault, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, importedKeySetNull, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureColumnIn, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureColumnInOut, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureColumnOut, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureColumnResult, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureColumnReturn, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureColumnUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureNoNulls, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureNoResult, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureNullable, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureNullableUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureResultUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, procedureReturnsResult, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, sqlStateSQL99, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, sqlStateXOpen, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, tableIndexClustered, jshort)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, tableIndexHashed, jshort)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, tableIndexOther, jshort)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, tableIndexStatistic, jshort)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, typeNoNulls, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, typeNullable, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, typeNullableUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, typePredBasic, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, typePredChar, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, typePredNone, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, typeSearchable, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, versionColumnNotPseudo, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, versionColumnPseudo, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, versionColumnUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, sqlStateSQL, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionColumnIn, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionColumnInOut, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionColumnOut, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionReturn, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionColumnUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionColumnResult, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionNoNulls, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionNullable, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionNullableUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionResultUnknown, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionNoTable, jint)
  
  J2OBJC_STATIC_FIELD_GETTER(JavaSqlDatabaseMetaData, functionReturnsTable, jint)
  
  J2OBJC_TYPE_LITERAL_HEADER(JavaSqlDatabaseMetaData)
  
  #endif // _JavaSqlDatabaseMetaData_H_
  