package org.okip.service.dbc.api;



/*
   Copyright (c) 2002 Massachusetts Institute of Technology

   This work, including any software, documents, or other related items
   (the "Work"), is being provided by the copyright holder(s) subject to
   the terms of the MIT OKI(TM) API Definition License. By obtaining,
   using and/or copying this Work, you agree that you have read,
   understand, and will comply with the following terms and conditions of
   the MIT OKI(TM) API Definition License:

   You may use, copy, and distribute unmodified versions of this Work for
   any purpose, without fee or royalty, provided that you include the
   following on ALL copies of the Work that you make or distribute:

    *  The full text of the MIT OKI(TM) API Definition License in a
       location viewable to users of the redistributed Work.

    *  Any pre-existing intellectual property disclaimers, notices, or
       terms and conditions. If none exist, a short notice similar to the
       following should be used within the body of any redistributed
       Work: "Copyright (c) 2002 Massachusetts Institute of Technology. All
       Rights Reserved."

   You may modify or create Derivatives of this Work only for your
   internal purposes. You shall not distribute or transfer any such
   Derivative of this Work to any location or any other third party. For
   purposes of this license, "Derivative" shall mean any derivative of
   the Work as defined in the United States Copyright Act of 1976, such
   as a translation or modification.

   THIS WORK PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE WORK
   OR THE USE OR OTHER DEALINGS IN THE WORK.

   The name and trademarks of copyright holder(s) and/or MIT may NOT be
   used in advertising or publicity pertaining to the Work without
   specific, written prior permission. Title to copyright in the Work and
   any associated documentation will at all times remain with the
   copyright holders.

*/

/*
 * $Source: /cvs/oki/tech/src/org/okip/service/dbc/api/DatabaseMetaData.java,v $
 */

/**
 * Comprehensive information about the database as a whole.
 *
 * @see{java.sql.DatabaseMetaData}
 *
 * <p>
 * Licensed under the {@link org.okip.service.ApiLicense MIT OKI&#153; API Definition License}.
 *
 * @version $Name:  $ / $Revision: 1.5 $ / $Date: 2002/07/29 18:42:42 $
 */
public interface DatabaseMetaData
extends java.io.Serializable {

  /**
   * Retrieves whether the current user can
   * call all the procedures returned by
   * the method getProcedures.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean allProceduresAreCallable()
  throws DbcException;

  /**
   * Retrieves whether the current user can
   * use all the tables returned by the method
   * getTables in a SELECT statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean allTablesAreSelectable()
  throws DbcException;

  /**
   * Retrieves whether a data definition statement
   * within a transaction forces the transaction
   * to commit.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean dataDefinitionCausesTransactionCommit()
  throws DbcException;

  /**
   * Retrieves whether this database ignores
   * a data definition statement within a
   * transaction.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean dataDefinitionIgnoredInTransactions()
  throws DbcException;

  /**
   * Retrieves whether or not a visible row
   * delete can be detected by calling the
   * method ResultSet.rowDeleted.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean deletesAreDetected(int type)
  throws DbcException;

  /**
   * Retrieves whether the return value for
   * the method getMaxRowSize includes the
   * SQL data types LONGVARCHAR and LONGVARBINARY.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean doesMaxRowSizeIncludeBlobs()
  throws DbcException;

  /**
   * Retrieves a description of the given
   * attribute of the given type for a
   * user-defined type (UDT) that is available
   * in the given schema and catalog.
   *
   * @param catalog
   * @param schemaPattern
   * @param typeNamePattern
   * @param attributeNamePattern
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getAttributes(String catalog, String schemaPattern,
                          String typeNamePattern, String attributeNamePattern)
  throws DbcException;

  /**
   * Retrieves a description of a table's
   * optimal set of columns that uniquely
   * identifies a row.
   *
   * @param catalog
   * @param schema
   * @param table
   * @param scope
   * @param nullable
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getBestRowIdentifier(String catalog, String schema, String table,
                                 int scope, boolean nullable)
  throws DbcException;

  /**
   * Retrieves the catalog names available
   * in this database.
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getCatalogs()
  throws DbcException;

  /**
   * Retrieves the String that this database
   * uses as the separator between a catalog
   * and table name.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getCatalogSeparator()
  throws DbcException;

  /**
   * Retrieves the database vendor's preferred
   * term for "catalog".
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getCatalogTerm()
  throws DbcException;

  /**
   * Retrieves a description of the access
   * rights for a table's columns.
   *
   * @param catalog
   * @param schema
   * @param table
   * @param columnNamePattern
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getColumnPrivileges(String catalog, String schema, String table,
                                String columnNamePattern)
  throws DbcException;

  /**
   * Retrieves a description of table columns
   * available in the specified catalog.
   *
   * @param catalog
   * @param schemaPattern
   * @param tableNamePattern
   * @param columnNamePattern
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getColumns(String catalog, String schemaPattern,
                       String tableNamePattern, String columnNamePattern)
  throws DbcException;

  /**
   * Retrieves the connection that produced
   * this metadata object.
   *
   * @return Connection
   *
   * @throws DbcException
   *
   */
  Connection getConnection()
  throws DbcException;

  /**
   * Retrieves a description of the foreign
   * key columns in the given foreign key
   * table that reference the primary key
   * columns of the given primary key table
   * (describe how one table imports
   * another's key).
   *
   * @param primaryCatalog
   * @param primarySchema
   * @param primaryTable
   * @param foreignCatalog
   * @param foreignSchema
   * @param foreignTable
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getCrossReference(String primaryCatalog, String primarySchema,
                              String primaryTable, String foreignCatalog,
                              String foreignSchema, String foreignTable)
  throws DbcException;

  /**
   * Retrieves the major version number
   * of the underlying database.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getDatabaseMajorVersion()
  throws DbcException;

  /**
   * Retrieves the minor version number
   * of the underlying database.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getDatabaseMinorVersion()
  throws DbcException;

  /**
   * Retrieves the name of this database
   * product.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getDatabaseProductName()
  throws DbcException;

  /**
   * Retrieves the version number of
   * this database product.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getDatabaseProductVersion()
  throws DbcException;

  /**
   * Retrieves this database's default
   * transaction isolation level.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getDefaultTransactionIsolation()
  throws DbcException;

  /**
   * Retrieves this JDBC driver's major
   * version number.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getDriverMajorVersion()
  throws DbcException;

  /**
   * Retrieves this JDBC driver's minor
   * version number.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getDriverMinorVersion()
  throws DbcException;

  /**
   * Retrieves the name of this JDBC driver.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getDriverName()
  throws DbcException;

  /**
   * Retrieves the version number of this
   * JDBC driver as a String.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getDriverVersion()
  throws DbcException;

  /**
   * Retrieves a description of the
   * foreign key columns that reference
   * the given table's primary key columns
   * (the foreign keys exported by a table).
   *
   * @param catalog
   * @param schema
   * @param table
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getExportedKeys(String catalog, String schema, String table)
  throws DbcException;

  /**
   * Retrieves all the "extra" characters
   * that can be used in unquoted identifier
   * names (those beyond a-z, A-Z, 0-9 and _).
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getExtraNameCharacters()
  throws DbcException;

  /**
   * Retrieves the string used to quote
   * SQL identifiers.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getIdentifierQuoteString()
  throws DbcException;

  /**
   * Retrieves a description of the primary
   * key columns that are referenced by a
   * table's foreign key columns (the primary
   * keys imported by a table).
   *
   * @param catalog
   * @param schema
   * @param table
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getImportedKeys(String catalog, String schema, String table)
  throws DbcException;

  /**
   * Retrieves a description of the given
   * table's indices and statistics.
   *
   * @param catalog
   * @param schema
   * @param table
   * @param unique
   * @param approximate
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getIndexInfo(String catalog, String schema, String table,
                         boolean unique, boolean approximate)
  throws DbcException;

  /**
   * Retrieves the major JDBC version
   * number for this driver.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getJDBCMajorVersion()
  throws DbcException;

  /**
   * Retrieves the minor JDBC version
   * number for this driver.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getJDBCMinorVersion()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * hex characters this database allows
   * in an inline binary literal.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxBinaryLiteralLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters that this database allows
   * in a catalog name.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxCatalogNameLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters this database allows
   * for a character literal.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxCharLiteralLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters this database allows
   * for a column name.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxColumnNameLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * columns this database allows in
   * a GROUP BY clause.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxColumnsInGroupBy()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * columns this database allows in
   * an index.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxColumnsInIndex()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * columns this database allows in
   * an ORDER BY clause.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxColumnsInOrderBy()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * columns this database allows in
   * a SELECT list.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxColumnsInSelect()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * columns this database allows in
   * a table.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxColumnsInTable()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * concurrent connections to this
   * database that are possible.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxConnections()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters that this database
   * allows in a cursor name.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxCursorNameLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * bytes this database allows for an
   * index, including all of the parts
   * of the index.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxIndexLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters that this database allows
   * in a procedure name.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxProcedureNameLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * bytes this database allows in a
   * single row.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxRowSize()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters that this database
   * allows in a schema name.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxSchemaNameLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters this database allows
   * in an SQL statement.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxStatementLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * active statements to this database
   * that can be open at the same time.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxStatements()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters this database allows
   * in a table name.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxTableNameLength()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * tables this database allows in a
   * SELECT statement.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxTablesInSelect()
  throws DbcException;

  /**
   * Retrieves the maximum number of
   * characters this database allows
   * in a user name.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getMaxUserNameLength()
  throws DbcException;

  /**
   * Retrieves a comma-separated list
   * of math functions available with
   * this database.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getNumericFunctions()
  throws DbcException;

  /**
   * Retrieves a description of the
   * given table's primary key columns.
   *
   * @param catalog
   * @param schema
   * @param table
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getPrimaryKeys(String catalog, String schema, String table)
  throws DbcException;

  /**
   * Retrieves a description of the
   * given catalog's stored procedure
   * parameter and result columns.
   *
   * @param catalog
   * @param schemaPattern
   * @param procedureNamePattern
   * @param columnNamePattern
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getProcedureColumns(String catalog, String schemaPattern,
                                String procedureNamePattern,
                                String columnNamePattern)
  throws DbcException;

  /**
   * Retrieves a description of the
   * stored procedures available
   * in the given catalog.
   *
   * @param catalog
   * @param schemaPattern
   * @param procedureNamePattern
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getProcedures(String catalog, String schemaPattern,
                          String procedureNamePattern)
  throws DbcException;

  /**
   * Retrieves the database vendor's
   * preferred term for "procedure".
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getProcedureTerm()
  throws DbcException;

  /**
   * Retrieves the default holdability
   * of this ResultSet object.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getResultSetHoldability()
  throws DbcException;

  /**
   * Retrieves the schema names
   * available in this database.
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getSchemas()
  throws DbcException;

  /**
   * Retrieves the database vendor's
   * preferred term for "schema".
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getSchemaTerm()
  throws DbcException;

  /**
   * Retrieves the string that can be
   * used to escape wildcard characters.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getSearchStringEscape()
  throws DbcException;

  /**
   * Retrieves a comma-separated list of
   * all of this database's SQL keywords
   * that are NOT also SQL92 keywords.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getSQLKeywords()
  throws DbcException;

  /**
   * Indicates whether the SQLSTATEs
   * returned by SQLException.getSQLState
   * is X/Open (now known as Open Group)
   * SQL CLI or SQL99.
   *
   * @return int
   *
   * @throws DbcException
   *
   */
  int getSQLStateType()
  throws DbcException;

  /**
   * Retrieves a comma-separated list
   * of string functions available with
   * this database.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getStringFunctions()
  throws DbcException;

  /**
   * Retrieves a description of the table
   * hierarchies defined in a particular
   * schema in this database.
   *
   * @param catalog
   * @param schemaPattern
   * @param tableNamePattern
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getSuperTables(String catalog, String schemaPattern,
                           String tableNamePattern)
  throws DbcException;

  /**
   * Retrieves a description of the
   * user-defined type (UDT) hierarchies
   * defined in a particular schema in
   * this database.
   *
   * @param catalog
   * @param schemaPattern
   * @param typeNamePattern
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getSuperTypes(String catalog, String schemaPattern,
                          String typeNamePattern)
  throws DbcException;

  /**
   * Retrieves a comma-separated list
   * of system functions available with
   * this database.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getSystemFunctions()
  throws DbcException;

  /**
   * Retrieves a description of the
   * access rights for each table
   * available in a catalog.
   *
   * @param catalog
   * @param schemaPattern
   * @param tableNamePattern
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getTablePrivileges(String catalog, String schemaPattern,
                               String tableNamePattern)
  throws DbcException;

  /**
   * Retrieves a description of the
   * tables available in the given catalog.
   *
   * @param catalog
   * @param schemaPattern
   * @param tableNamePattern
   * @param types
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getTables(String catalog, String schemaPattern,
                      String tableNamePattern, String[] types)
  throws DbcException;

  /**
   * Retrieves the table types
   * available in this database.
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getTableTypes()
  throws DbcException;

  /**
   * Retrieves a comma-separated list
   * of the time and date functions
   * available with this database.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getTimeDateFunctions()
  throws DbcException;

  /**
   * Retrieves a description of all
   * the standard SQL types supported
   * by this database.
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getTypeInfo()
  throws DbcException;

  /**
   * Retrieves a description of the
   * user-defined types (UDTs) defined
   * in a particular schema.
   *
   * @param catalog
   * @param schemaPattern
   * @param typeNamePattern
   * @param types
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getUDTs(String catalog, String schemaPattern,
                    String typeNamePattern, int[] types)
  throws DbcException;

  /**
   * Retrieves the URL for this DBMS.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getURL()
  throws DbcException;

  /**
   * Retrieves the user name as
   * known to this database.
   *
   * @return String
   *
   * @throws DbcException
   *
   */
  String getUserName()
  throws DbcException;

  /**
   * Retrieves a description of a table's
   * columns that are automatically updated
   * when any value in a row is updated.
   *
   * @param catalog
   * @param schema
   * @param table
   *
   * @return ResultSet
   *
   * @throws DbcException
   *
   */
  ResultSet getVersionColumns(String catalog, String schema, String table)
  throws DbcException;

  /**
   * Retrieves whether or not a visible
   * row insert can be detected by calling
   * the method ResultSet.rowInserted.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean insertsAreDetected(int type)
  throws DbcException;

  /**
   * Retrieves whether a catalog appears
   * at the start of a fully qualified
   * table name.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean isCatalogAtStart()
  throws DbcException;

  /**
   * Retrieves whether this database
   * is in read-only mode.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean isReadOnly()
  throws DbcException;

  /**
   * Indicates whether updates made
   * to a LOB are made on a copy or
   * directly to the LOB.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean locatorsUpdateCopy()
  throws DbcException;

  /**
   * Retrieves whether this database
   * supports concatenations between
   * NULL and non-NULL values being NULL.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean nullPlusNonNullIsNull()
  throws DbcException;

  /**
   * Retrieves whether NULL values are
   * sorted at the end regardless of
   * sort order.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean nullsAreSortedAtEnd()
  throws DbcException;

  /**
   * Retrieves whether NULL values are
   * sorted at the start regardless of
   * sort order.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean nullsAreSortedAtStart()
  throws DbcException;

  /**
   * Retrieves whether NULL values are
   * sorted high.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean nullsAreSortedHigh()
  throws DbcException;

  /**
   * Retrieves whether NULL values are
   * sorted low.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean nullsAreSortedLow()
  throws DbcException;

  /**
   * Retrieves whether deletes made by
   * others are visible.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean othersDeletesAreVisible(int type)
  throws DbcException;

  /**
   * Retrieves whether inserts made by
   * others are visible.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean othersInsertsAreVisible(int type)
  throws DbcException;

  /**
   * Retrieves whether updates made by
   * others are visible.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean othersUpdatesAreVisible(int type)
  throws DbcException;

  /**
   * Retrieves whether a result set's
   * own deletes are visible.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean ownDeletesAreVisible(int type)
  throws DbcException;

  /**
   * Retrieves whether a result set's
   * own inserts are visible.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean ownInsertsAreVisible(int type)
  throws DbcException;

  /**
   * Retrieves whether for the given
   * type of ResultSet object, the result
   * set's own updates are visible.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean ownUpdatesAreVisible(int type)
  throws DbcException;

  /**
   * Retrieves whether this database treats
   * mixed case unquoted SQL identifiers as
   * case insensitive and stores them in
   * lower case.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean storesLowerCaseIdentifiers()
  throws DbcException;

  /**
   * Retrieves whether this database treats
   * mixed case quoted SQL identifiers as
   * case insensitive and stores them in
   * lower case.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean storesLowerCaseQuotedIdentifiers()
  throws DbcException;

  /**
   * Retrieves whether this database treats
   * mixed case unquoted SQL identifiers as
   * case insensitive and stores them in
   * mixed case.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean storesMixedCaseIdentifiers()
  throws DbcException;

  /**
   * Retrieves whether this database treats
   * mixed case quoted SQL identifiers as
   * case insensitive and stores them in
   * mixed case.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean storesMixedCaseQuotedIdentifiers()
  throws DbcException;

  /**
   * Retrieves whether this database treats
   * mixed case unquoted SQL identifiers as
   * case insensitive and stores them in
   * upper case.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean storesUpperCaseIdentifiers()
  throws DbcException;

  /**
   * Retrieves whether this database treats
   * mixed case quoted SQL identifiers as
   * case insensitive and stores them in
   * upper case.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean storesUpperCaseQuotedIdentifiers()
  throws DbcException;

  /**
   * Retrieves whether this database
   * supports ALTER TABLE with add column.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsAlterTableWithAddColumn()
  throws DbcException;

  /**
   * Retrieves whether this database
   * supports ALTER TABLE with drop column.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsAlterTableWithDropColumn()
  throws DbcException;

  /**
   * Retrieves whether this database
   * supports the ANSI92 entry level
   * SQL grammar.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsANSI92EntryLevelSQL()
  throws DbcException;

  /**
   * Retrieves whether this database
   * supports the ANSI92 full SQL
   * grammar supported.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsANSI92FullSQL()
  throws DbcException;

  /**
   * Retrieves whether this database
   * supports the ANSI92 intermediate
   * SQL grammar supported.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsANSI92IntermediateSQL()
  throws DbcException;

  /**
   * Retrieves whether this database
   * supports batch updates.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsBatchUpdates()
  throws DbcException;

  /**
   * Retrieves whether a catalog name can
   * be used in a data manipulation statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsCatalogsInDataManipulation()
  throws DbcException;

  /**
   * Retrieves whether a catalog name can
   * be used in an index definition statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsCatalogsInIndexDefinitions()
  throws DbcException;

  /**
   * Retrieves whether a catalog name can
   * be used in a privilege definition statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsCatalogsInPrivilegeDefinitions()
  throws DbcException;

  /**
   * Retrieves whether a catalog name can
   * be used in a procedure call statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsCatalogsInProcedureCalls()
  throws DbcException;

  /**
   * Retrieves whether a catalog name can
   * be used in a table definition statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsCatalogsInTableDefinitions()
  throws DbcException;

  /**
   * Retrieves whether this database
   * supports column aliasing.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsColumnAliasing()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the CONVERT function between SQL types.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsConvert()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the CONVERT for two given SQL types.
   *
   * @param fromType
   * @param toType
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsConvert(int fromType, int toType)
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the ODBC Core SQL grammar.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsCoreSQLGrammar()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * correlated subqueries.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsCorrelatedSubqueries()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * both data definition and data manipulation
   * statements within a transaction.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsDataDefinitionAndDataManipulationTransactions()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * only data manipulation statements within
   * a transaction.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsDataManipulationTransactionsOnly()
  throws DbcException;

  /**
   * Retrieves whether, when table correlation
   * names are supported, they are restricted
   * to being different from the names of the
   * tables.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsDifferentTableCorrelationNames()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * expressions in ORDER BY lists.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsExpressionsInOrderBy()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the ODBC Extended SQL grammar.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsExtendedSQLGrammar()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * full nested outer joins.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsFullOuterJoins()
  throws DbcException;

  /**
   * Retrieves whether auto-generated keys
   * can be retrieved after a statement has
   * been executed.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsGetGeneratedKeys()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * some form of GROUP BY clause.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsGroupBy()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * using columns not included in the SELECT
   * statement in a GROUP BY clause provided
   * that all of the columns in the SELECT
   * statement are included in the GROUP BY
   * clause.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsGroupByBeyondSelect()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * using a column that is not in the SELECT
   * statement in a GROUP BY clause.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsGroupByUnrelated()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the SQL Integrity Enhancement Facility.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsIntegrityEnhancementFacility()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * specifying a LIKE escape clause.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsLikeEscapeClause()
  throws DbcException;

  /**
   * Retrieves whether this database provides
   * limited support for outer joins.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsLimitedOuterJoins()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the ODBC Minimum SQL grammar.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsMinimumSQLGrammar()
  throws DbcException;

  /**
   * Retrieves whether this database treats
   * mixed case unquoted SQL identifiers as
   * case sensitive and as a result stores
   * them in mixed case.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsMixedCaseIdentifiers()
  throws DbcException;

  /**
   * Retrieves whether this database treats
   * mixed case quoted SQL identifiers as case
   * sensitive and as a result stores them
   * in mixed case.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsMixedCaseQuotedIdentifiers()
  throws DbcException;

  /**
   * Retrieves whether it is possible to have
   * multiple ResultSet objects returned from
   * a CallableStatement object simultaneously.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsMultipleOpenResults()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * getting multiple ResultSet objects from a
   * single call to the method execute.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsMultipleResultSets()
  throws DbcException;

  /**
   * Retrieves whether this database allows
   * having multiple transactions open at
   * once (on different connections).
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsMultipleTransactions()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * named parameters to callable statements.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsNamedParameters()
  throws DbcException;

  /**
   * Retrieves whether columns in this
   * database may be defined as non-nullable.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsNonNullableColumns()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * keeping cursors open across commits.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsOpenCursorsAcrossCommit()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * keeping cursors open across rollbacks.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsOpenCursorsAcrossRollback()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * keeping statements open across commits.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsOpenStatementsAcrossCommit()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * keeping statements open across rollbacks.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsOpenStatementsAcrossRollback()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * using a column that is not in the SELECT
   * statement in an ORDER BY clause.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsOrderByUnrelated()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * some form of outer join.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsOuterJoins()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * positioned DELETE statements.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsPositionedDelete()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * positioned UPDATE statements.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsPositionedUpdate()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the given concurrency type in combination
   * with the given result set type.
   *
   * @param type
   * @param concurrency
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsResultSetConcurrency(int type, int concurrency)
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the given result set holdability.
   *
   * @param holdability
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsResultSetHoldability(int holdability)
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the given result set type.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsResultSetType(int type)
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * savepoints.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSavepoints()
  throws DbcException;

  /**
   * Retrieves whether a schema name can be
   * used in a data manipulation statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSchemasInDataManipulation()
  throws DbcException;

  /**
   * Retrieves whether a schema name can be
   * used in an index definition statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSchemasInIndexDefinitions()
  throws DbcException;

  /**
   * Retrieves whether a schema name can be
   * used in a privilege definition statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSchemasInPrivilegeDefinitions()
  throws DbcException;

  /**
   * Retrieves whether a schema name can be
   * used in a procedure call statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSchemasInProcedureCalls()
  throws DbcException;

  /**
   * Retrieves whether a schema name can be
   * used in a table definition statement.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSchemasInTableDefinitions()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * SELECT FOR UPDATE statements.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSelectForUpdate()
  throws DbcException;

  /**
   * Retrieves weather this database supports
   * statement pooling.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsStatementPooling()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * stored procedure calls that use the stored
   * procedure escape syntax.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsStoredProcedures()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * subqueries in comparison expressions.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSubqueriesInComparisons()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * subqueries in EXISTS expressions.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSubqueriesInExists()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * subqueries in IN statements.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSubqueriesInIns()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * subqueries in quantified expressions.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsSubqueriesInQuantifieds()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * table correlation names.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsTableCorrelationNames()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * the given transaction isolation level.
   *
   * @param level
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsTransactionIsolationLevel(int level)
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * transactions.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsTransactions()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * SQL UNION.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsUnion()
  throws DbcException;

  /**
   * Retrieves whether this database supports
   * SQL UNION ALL.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean supportsUnionAll()
  throws DbcException;

  /**
   * Retrieves whether or not a visible row
   * update can be detected by calling the
   * method ResultSet.rowUpdated.
   *
   * @param type
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean updatesAreDetected(int type)
  throws DbcException;

  /**
   * Retrieves whether this database uses
   * a file for each table.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean usesLocalFilePerTable()
  throws DbcException;

  /**
   * Retrieves whether this database
   * stores tables in a local file.
   *
   * @return boolean
   *
   * @throws DbcException
   *
   */
  boolean usesLocalFiles()
  throws DbcException;

}
