org.hsqldb.jdbc
Class jdbcDatabaseMetaData

java.lang.Object
  extended byorg.hsqldb.jdbc.jdbcDatabaseMetaData
All Implemented Interfaces:
java.sql.DatabaseMetaData

public class jdbcDatabaseMetaData
extends java.lang.Object
implements java.sql.DatabaseMetaData

Comprehensive information about the database as a whole.

This interface is implemented by driver vendors to let users know the capabilities of a Database Management System (DBMS) in combination with the driver based on JDBCTM technology ("JDBC driver") that is used with it. Different relational DBMSs often support different features, implement features in different ways, and use different data types. In addition, a driver may implement a feature on top of what the DBMS offers. Information returned by methods in this interface applies to the capabilities of a particular driver and a particular DBMS working together. Note that as used in this documentation, the term "database" is used generically to refer to both the driver and DBMS.

A user for this interface is commonly a tool that needs to discover how to deal with the underlying DBMS. This is especially true for applications that are intended to be used with more than one DBMS. For example, a tool might use the method getTypeInfo to find out what data types can be used in a CREATE TABLE statement. Or a user might call the method supportsCorrelatedSubqueries to see if it is possible to use a correlated subquery or supportsBatchUpdates to see if it is possible to use batch updates.

Some DatabaseMetaData methods return lists of information in the form of ResultSet objects. Regular ResultSet methods, such as getString and getInt, can be used to retrieve the data from these ResultSet objects. If a given form of metadata is not available, the ResultSet getter methods throw an SQLException.

Some DatabaseMetaData methods take arguments that are String patterns. These arguments all have names such as fooPattern. Within a pattern String, "%" means match any substring of 0 or more characters, and "_" means match any one character. Only metadata entries matching the search pattern are returned. If a search pattern argument is set to null, that argument's criterion will be dropped from the search.

A method that gets information about a feature that the driver does not support will throw an SQLException. In the case of methods that return a ResultSet object, either a ResultSet object (which may be empty) is returned or an SQLException is thrown.

HSQLDB-Specific Information:

Starting with HSQLDB 1.7.2, an option is provided to allow alternate system table production implementations. In this distribution, there are three implementations whose behaviour ranges from producing no system tables at all to producing a richer and more complete body of information about an HSQLDB database than was previously available. The information provided through the default implementation is, unlike previous versions, accessible to all database users, regardless of admin status. This is now possible because the table content it produces for each user is pre-filtered, based on the user's access rights. That is, each system table now acts like a security-aware View.

The process of installing a system table production class is transparent and occurs dynamically at runtime during the opening sequence of a Database instance, in the newDatabaseInformation() factory method of the revised DatabaseInformation class, using the following steps:

  1. If a class whose fully qualified name is org.hsqldb.DatabaseInformationFull can be found and it has an accesible constructor that takes an org.hsqldb.Database object as its single parameter, then an instance of that class is reflectively instantiated and is used by the database instance to produce its system tables.

  2. If 1.) fails, then the process is repeated, attempting to create an instance of org.hsqldb.DatabaseInformationMain (which provides just the core set of system tables required to service this class, but now does so in a more security aware and comprehensive fashion).

  3. If 2.) fails, then an instance of org.hsqldb.DatabaseInformation is installed (that, by default, produces no system tables, meaning that calls to all related methods in this class will fail, throwing an SQLException stating that a required system table is not found).

The process of searching for alternate implementations of database support classes, ending with the installation of a minimal but functional default will be refered to henceforth as graceful degradation. This process is advantageous in that it allows developers and administrators to easily choose packaging options, simply by adding to or deleting concerned classes from an HSQLDB installation, without worry over providing complex initialization properties or disrupting the core operation of the engine. In this particular context, graceful degradation allows easy choices regarding database metadata, spanning the range of full (design-time), custom-written, minimal (production-time) or null (space-constrained) system table production implementations.

In the default full implementation, a number of new system tables are provided that, although not used directly by this class, present previously unavailable information about the database, such as about its triggers and aliases.

In order to better support graphical database exploration tools and as an experimental intermediate step toward more fully supporting SQL9n and SQL200n, the default installed DatabaseInformation implementation is also capable of reporting pseudo name space information, such as the catalog (database URI) of database objects.

The catalog reporting feature is turned off by default but can be turned on by providing the appropriate entries in the database properties file (see the advanced topics section of the product documentation).

When the feature is turned on, catalog is reported using the following conventions:

  1. All objects are reported as having a catalog equal to the URI of the database, which is equivalent to the catenation of the <type> and <path> portions of the HSQLDB internal JDBC connection URL.

    Examples:

         "jdbc:hsqldb:file:test"      => "file:test"
         "jdbc:hsqldb:mem:."          => "mem:."
         "jdbc:hsqldb:hsql:/host/..." => URI of aliased database
         "jdbc:hsqldb:http:/host/..." => URI of aliased database
         
    Note: No provision is made for qualifying database objects by catalog in DML or DDL SQL. This feature is functional only with respect to browsing the database through the DatabaseMetaData and system table interfaces.

Again, it should be well understood that this feature provide an emulation of catalog support and is intended only as an experimental implementation to enhance the browsing experience when using graphical database explorers and to make a first foray into tackling the issue of implementing true catalog support in the future.

Due the nature of the new database system table production process, fewer assumptions can be made by this class about what information is made available in the system tables supporting DatabaseMetaData methods. Because of this, the SQL queries behind the ResultSet producing methods have been cleaned up and made to adhere more strictly to the JDBC contracts specified in relation to the method parameters.

One of the remaining assumptions concerns the approximate argument of getIndexInfo(). This parameter is still ignored since there is not yet any process in place to internally gather and persist table and index statistics. A primitive version of a statistics gathering and reporting subsystem may be introduced some time in the 1.7.x series of releases, but no hard decision has yet been made.

Another assumption is that simple select queries against certain system tables will return rows in JDBC contract order in the absence of an "ORDER BY" clause. The reason for this is that results come back much faster when no "ORDER BY" clause is used. Developers wishing to extend or replace an existing system table production class should be aware of this, either adding the contract "ORDER BY" clause to the SQL in corresponding methods in this class, or, better, by maintaing rows in the correct order in the underlying system tables, prefereably by creating appropriate primary indices.


JRE 1.1.x Notes:

In general, JDBC 2 support requires Java 1.2 and above, and JDBC3 requires Java 1.4 and above. In HSQLDB, support for methods introduced in different versions of JDBC depends on the JDK version used for compiling and building HSQLDB.

Since 1.7.0, it is possible to build the product so that all JDBC 2 methods can be called while executing under the version 1.1.x Java Runtime EnvironmentTM. However, some of these method calls require int values that are defined only in the JDBC 2 or greater version of the ResultSet interface. For this reason, when the product is compiled under JDK 1.1.x, these values are defined in jdbcResultSet.

In a JRE 1.1.x environment, calling JDBC 2 methods that take or return the JDBC2-only ResultSet values can be achieved by referring to them in parameter specifications and return value comparisons, respectively, as follows:

 jdbcResultSet.FETCH_FORWARD
 jdbcResultSet.TYPE_FORWARD_ONLY
 jdbcResultSet.TYPE_SCROLL_INSENSITIVE
 jdbcResultSet.CONCUR_READ_ONLY
 // etc
 
However, please note that code written in such a manner will not be compatible for use with other JDBC 2 drivers, since they expect and use ResultSet, rather than jdbcResultSet. Also note, this feature is offered solely as a convenience to developers who must work under JDK 1.1.x due to operating constraints, yet wish to use some of the more advanced features available under the JDBC 2 specification.

(fredt@users)
(boucherb@users)

Author:
boucherb@users, fredt@users
See Also:
DatabaseInformation, DatabaseInformationMain, DatabaseInformationFull

Field Summary
 
Fields inherited from interface java.sql.DatabaseMetaData
attributeNoNulls, attributeNullable, attributeNullableUnknown, bestRowNotPseudo, bestRowPseudo, bestRowSession, bestRowTemporary, bestRowTransaction, bestRowUnknown, columnNoNulls, columnNullable, columnNullableUnknown, importedKeyCascade, importedKeyInitiallyDeferred, importedKeyInitiallyImmediate, importedKeyNoAction, importedKeyNotDeferrable, importedKeyRestrict, importedKeySetDefault, importedKeySetNull, procedureColumnIn, procedureColumnInOut, procedureColumnOut, procedureColumnResult, procedureColumnReturn, procedureColumnUnknown, procedureNoNulls, procedureNoResult, procedureNullable, procedureNullableUnknown, procedureResultUnknown, procedureReturnsResult, sqlStateSQL99, sqlStateXOpen, tableIndexClustered, tableIndexHashed, tableIndexOther, tableIndexStatistic, typeNoNulls, typeNullable, typeNullableUnknown, typePredBasic, typePredChar, typePredNone, typeSearchable, versionColumnNotPseudo, versionColumnPseudo, versionColumnUnknown
 
Method Summary
 boolean allProceduresAreCallable()
          Retrieves whether the current user can call all the procedures returned by the method getProcedures.
 boolean allTablesAreSelectable()
          Retrieves whether the current user can use all the tables returned by the method getTables in a SELECT statement.
 boolean dataDefinitionCausesTransactionCommit()
          Retrieves whether a data definition statement within a transaction forces the transaction to commit.
 boolean dataDefinitionIgnoredInTransactions()
          Retrieves whether this database ignores a data definition statement within a transaction.
 boolean deletesAreDetected(int type)
          Retrieves whether or not a visible row delete can be detected by calling the method ResultSet.rowDeleted.
 boolean doesMaxRowSizeIncludeBlobs()
          Retrieves whether the return value for the method getMaxRowSize includes the SQL data types LONGVARCHAR and LONGVARBINARY.
 java.sql.ResultSet getAttributes(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String typeNamePattern, java.lang.String attributeNamePattern)
          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.
 java.sql.ResultSet getBestRowIdentifier(java.lang.String catalog, java.lang.String schema, java.lang.String table, int scope, boolean nullable)
          Retrieves a description of a table's optimal set of columns that uniquely identifies a row.
 java.sql.ResultSet getCatalogs()
          Retrieves the catalog names available in this database.
 java.lang.String getCatalogSeparator()
          Retrieves the String that this database uses as the separator between a catalog and table name.
 java.lang.String getCatalogTerm()
          Retrieves the database vendor's preferred term for "catalog".
 java.sql.ResultSet getColumnPrivileges(java.lang.String catalog, java.lang.String schema, java.lang.String table, java.lang.String columnNamePattern)
          Retrieves a description of the access rights for a table's columns.
 java.sql.ResultSet getColumns(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern, java.lang.String columnNamePattern)
          Retrieves a description of table columns available in the specified catalog.
 java.sql.Connection getConnection()
          Retrieves the connection that produced this metadata object.
 java.sql.ResultSet getCrossReference(java.lang.String primaryCatalog, java.lang.String primarySchema, java.lang.String primaryTable, java.lang.String foreignCatalog, java.lang.String foreignSchema, java.lang.String foreignTable)
          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).
 int getDatabaseMajorVersion()
          Retrieves the major version number of the underlying database.
 int getDatabaseMinorVersion()
          Retrieves the minor version number of the underlying database.
 java.lang.String getDatabaseProductName()
          Retrieves the name of this database product.
 java.lang.String getDatabaseProductVersion()
          Retrieves the version number of this database product.
 int getDefaultTransactionIsolation()
          Retrieves this database's default transaction isolation level.
 int getDriverMajorVersion()
          Retrieves this JDBC driver's major version number.
 int getDriverMinorVersion()
          Retrieves this JDBC driver's minor version number.
 java.lang.String getDriverName()
          Retrieves the name of this JDBC driver.
 java.lang.String getDriverVersion()
          Retrieves the version number of this JDBC driver as a String.
 java.sql.ResultSet getExportedKeys(java.lang.String catalog, java.lang.String schema, java.lang.String table)
          Retrieves a description of the foreign key columns that reference the given table's primary key columns (the foreign keys exported by a table).
 java.lang.String getExtraNameCharacters()
          Retrieves all the "extra" characters that can be used in unquoted identifier names (those beyond a-z, A-Z, 0-9 and _).
 java.lang.String getIdentifierQuoteString()
          Retrieves the string used to quote SQL identifiers.
 java.sql.ResultSet getImportedKeys(java.lang.String catalog, java.lang.String schema, java.lang.String table)
          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).
 java.sql.ResultSet getIndexInfo(java.lang.String catalog, java.lang.String schema, java.lang.String table, boolean unique, boolean approximate)
          Retrieves a description of the given table's indices and statistics.
 int getJDBCMajorVersion()
          Retrieves the major JDBC version number for this driver.
 int getJDBCMinorVersion()
          Retrieves the minor JDBC version number for this driver.
 int getMaxBinaryLiteralLength()
          Retrieves the maximum number of hex characters this database allows in an inline binary literal.
 int getMaxCatalogNameLength()
          Retrieves the maximum number of characters that this database allows in a catalog name.
 int getMaxCharLiteralLength()
          Retrieves the maximum number of characters this database allows for a character literal.
 int getMaxColumnNameLength()
          Retrieves the maximum number of characters this database allows for a column name.
 int getMaxColumnsInGroupBy()
          Retrieves the maximum number of columns this database allows in a GROUP BY clause.
 int getMaxColumnsInIndex()
          Retrieves the maximum number of columns this database allows in an index.
 int getMaxColumnsInOrderBy()
          Retrieves the maximum number of columns this database allows in an ORDER BY clause.
 int getMaxColumnsInSelect()
          Retrieves the maximum number of columns this database allows in a SELECT list.
 int getMaxColumnsInTable()
          Retrieves the maximum number of columns this database allows in a table.
 int getMaxConnections()
          Retrieves the maximum number of concurrent connections to this database that are possible.
 int getMaxCursorNameLength()
          Retrieves the maximum number of characters that this database allows in a cursor name.
 int getMaxIndexLength()
          Retrieves the maximum number of bytes this database allows for an index, including all of the parts of the index.
 int getMaxProcedureNameLength()
          Retrieves the maximum number of characters that this database allows in a procedure name.
 int getMaxRowSize()
          Retrieves the maximum number of bytes this database allows in a single row.
 int getMaxSchemaNameLength()
          Retrieves the maximum number of characters that this database allows in a schema name.
 int getMaxStatementLength()
          Retrieves the maximum number of characters this database allows in an SQL statement.
 int getMaxStatements()
          Retrieves the maximum number of active statements to this database that can be open at the same time.
 int getMaxTableNameLength()
          Retrieves the maximum number of characters this database allows in a table name.
 int getMaxTablesInSelect()
          Retrieves the maximum number of tables this database allows in a SELECT statement.
 int getMaxUserNameLength()
          Retrieves the maximum number of characters this database allows in a user name.
 java.lang.String getNumericFunctions()
          Retrieves a comma-separated list of math functions available with this database.
 java.sql.ResultSet getPrimaryKeys(java.lang.String catalog, java.lang.String schema, java.lang.String table)
          Retrieves a description of the given table's primary key columns.
 java.sql.ResultSet getProcedureColumns(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String procedureNamePattern, java.lang.String columnNamePattern)
          Retrieves a description of the given catalog's stored procedure parameter and result columns.
 java.sql.ResultSet getProcedures(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String procedureNamePattern)
          Retrieves a description of the stored procedures available in the given catalog.
 java.lang.String getProcedureTerm()
          Retrieves the database vendor's preferred term for "procedure".
 int getResultSetHoldability()
          Retrieves the default holdability of this ResultSet object.
 java.sql.ResultSet getSchemas()
          Retrieves the schema names available in this database.
 java.lang.String getSchemaTerm()
          Retrieves the database vendor's preferred term for "schema".
 java.lang.String getSearchStringEscape()
          Retrieves the string that can be used to escape wildcard characters.
 java.lang.String getSQLKeywords()
          Retrieves a comma-separated list of all of this database's SQL keywords that are NOT also SQL92 keywords.
 int getSQLStateType()
          Indicates whether the SQLSTATEs returned by SQLException.getSQLState is X/Open (now known as Open Group) SQL CLI or SQL99.
 java.lang.String getStringFunctions()
          Retrieves a comma-separated list of string functions available with this database.
 java.sql.ResultSet getSuperTables(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern)
          Retrieves a description of the table hierarchies defined in a particular schema in this database.
 java.sql.ResultSet getSuperTypes(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String typeNamePattern)
          Retrieves a description of the user-defined type (UDT) hierarchies defined in a particular schema in this database.
 java.lang.String getSystemFunctions()
          Retrieves a comma-separated list of system functions available with this database.
 java.sql.ResultSet getTablePrivileges(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern)
          Retrieves a description of the access rights for each table available in a catalog.
 java.sql.ResultSet getTables(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern, java.lang.String[] types)
          Retrieves a description of the tables available in the given catalog.
 java.sql.ResultSet getTableTypes()
          Retrieves the table types available in this database.
 java.lang.String getTimeDateFunctions()
          Retrieves a comma-separated list of the time and date functions available with this database.
 java.sql.ResultSet getTypeInfo()
          Retrieves a description of all the standard SQL types supported by this database.
 java.sql.ResultSet getUDTs(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String typeNamePattern, int[] types)
          Retrieves a description of the user-defined types (UDTs) defined in a particular schema.
 java.lang.String getURL()
          Retrieves the URL for this DBMS.
 java.lang.String getUserName()
          Retrieves the user name as known to this database.
 java.sql.ResultSet getVersionColumns(java.lang.String catalog, java.lang.String schema, java.lang.String table)
          Retrieves a description of a table's columns that are automatically updated when any value in a row is updated.
 boolean insertsAreDetected(int type)
          Retrieves whether or not a visible row insert can be detected by calling the method ResultSet.rowInserted.
 boolean isCatalogAtStart()
          Retrieves whether a catalog appears at the start of a fully qualified table name.
 boolean isReadOnly()
          Retrieves whether this database is in read-only mode.
 boolean locatorsUpdateCopy()
          Indicates whether updates made to a LOB are made on a copy or directly to the LOB.
 boolean nullPlusNonNullIsNull()
          Retrieves whether this database supports concatenations between NULL and non-NULL values being NULL.
 boolean nullsAreSortedAtEnd()
          Retrieves whether NULL values are sorted at the end regardless of sort order.
 boolean nullsAreSortedAtStart()
          Retrieves whether NULL values are sorted at the start regardless of sort order.
 boolean nullsAreSortedHigh()
          Retrieves whether NULL values are sorted high.
 boolean nullsAreSortedLow()
          Retrieves whether NULL values are sorted low.
 boolean othersDeletesAreVisible(int type)
          Retrieves whether deletes made by others are visible.
 boolean othersInsertsAreVisible(int type)
          Retrieves whether inserts made by others are visible.
 boolean othersUpdatesAreVisible(int type)
          Retrieves whether updates made by others are visible.
 boolean ownDeletesAreVisible(int type)
          Retrieves whether a result set's own deletes are visible.
 boolean ownInsertsAreVisible(int type)
          Retrieves whether a result set's own inserts are visible.
 boolean ownUpdatesAreVisible(int type)
          Retrieves whether for the given type of ResultSet object, the result set's own updates are visible.
 boolean storesLowerCaseIdentifiers()
          Retrieves whether this database treats mixed case unquoted SQL identifiers as case insensitive and stores them in lower case.
 boolean storesLowerCaseQuotedIdentifiers()
          Retrieves whether this database treats mixed case quoted SQL identifiers as case insensitive and stores them in lower case.
 boolean storesMixedCaseIdentifiers()
          Retrieves whether this database treats mixed case unquoted SQL identifiers as case insensitive and stores them in mixed case.
 boolean storesMixedCaseQuotedIdentifiers()
          Retrieves whether this database treats mixed case quoted SQL identifiers as case insensitive and stores them in mixed case.
 boolean storesUpperCaseIdentifiers()
          Retrieves whether this database treats mixed case unquoted SQL identifiers as case insensitive and stores them in upper case.
 boolean storesUpperCaseQuotedIdentifiers()
          Retrieves whether this database treats mixed case quoted SQL identifiers as case insensitive and stores them in upper case.
 boolean supportsAlterTableWithAddColumn()
          Retrieves whether this database supports ALTER TABLE with add column.
 boolean supportsAlterTableWithDropColumn()
          Retrieves whether this database supports ALTER TABLE with drop column.
 boolean supportsANSI92EntryLevelSQL()
          Retrieves whether this database supports the ANSI92 entry level SQL grammar.
 boolean supportsANSI92FullSQL()
          Retrieves whether this database supports the ANSI92 full SQL grammar supported.
 boolean supportsANSI92IntermediateSQL()
          Retrieves whether this database supports the ANSI92 intermediate SQL grammar supported.
 boolean supportsBatchUpdates()
          Retrieves whether this database supports batch updates.
 boolean supportsCatalogsInDataManipulation()
          Retrieves whether a catalog name can be used in a data manipulation statement.
 boolean supportsCatalogsInIndexDefinitions()
          Retrieves whether a catalog name can be used in an index definition statement.
 boolean supportsCatalogsInPrivilegeDefinitions()
          Retrieves whether a catalog name can be used in a privilege definition statement.
 boolean supportsCatalogsInProcedureCalls()
          Retrieves whether a catalog name can be used in a procedure call statement.
 boolean supportsCatalogsInTableDefinitions()
          Retrieves whether a catalog name can be used in a table definition statement.
 boolean supportsColumnAliasing()
          Retrieves whether this database supports column aliasing.
 boolean supportsConvert()
          Retrieves whether this database supports the CONVERT function between SQL types.
 boolean supportsConvert(int fromType, int toType)
          Retrieves whether this database supports the CONVERT for two given SQL types.
 boolean supportsCoreSQLGrammar()
          Retrieves whether this database supports the ODBC Core SQL grammar.
 boolean supportsCorrelatedSubqueries()
          Retrieves whether this database supports correlated subqueries.
 boolean supportsDataDefinitionAndDataManipulationTransactions()
          Retrieves whether this database supports both data definition and data manipulation statements within a transaction.
 boolean supportsDataManipulationTransactionsOnly()
          Retrieves whether this database supports only data manipulation statements within a transaction.
 boolean supportsDifferentTableCorrelationNames()
          Retrieves whether, when table correlation names are supported, they are restricted to being different from the names of the tables.
 boolean supportsExpressionsInOrderBy()
          Retrieves whether this database supports expressions in ORDER BY lists.
 boolean supportsExtendedSQLGrammar()
          Retrieves whether this database supports the ODBC Extended SQL grammar.
 boolean supportsFullOuterJoins()
          Retrieves whether this database supports full nested outer joins.
 boolean supportsGetGeneratedKeys()
          Retrieves whether auto-generated keys can be retrieved after a statement has been executed.
 boolean supportsGroupBy()
          Retrieves whether this database supports some form of GROUP BY clause.
 boolean supportsGroupByBeyondSelect()
          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.
 boolean supportsGroupByUnrelated()
          Retrieves whether this database supports using a column that is not in the SELECT statement in a GROUP BY clause.
 boolean supportsIntegrityEnhancementFacility()
          Retrieves whether this database supports the SQL Integrity Enhancement Facility.
 boolean supportsLikeEscapeClause()
          Retrieves whether this database supports specifying a LIKE escape clause.
 boolean supportsLimitedOuterJoins()
          Retrieves whether this database provides limited support for outer joins.
 boolean supportsMinimumSQLGrammar()
          Retrieves whether this database supports the ODBC Minimum SQL grammar.
 boolean supportsMixedCaseIdentifiers()
          Retrieves whether this database treats mixed case unquoted SQL identifiers as case sensitive and as a result stores them in mixed case.
 boolean supportsMixedCaseQuotedIdentifiers()
          Retrieves whether this database treats mixed case quoted SQL identifiers as case sensitive and as a result stores them in mixed case.
 boolean supportsMultipleOpenResults()
          Retrieves whether it is possible to have multiple ResultSet objects returned from a CallableStatement object simultaneously.
 boolean supportsMultipleResultSets()
          Retrieves whether this database supports getting multiple ResultSet objects from a single call to the method execute.
 boolean supportsMultipleTransactions()
          Retrieves whether this database allows having multiple transactions open at once (on different connections).
 boolean supportsNamedParameters()
          Retrieves whether this database supports named parameters to callable statements.
 boolean supportsNonNullableColumns()
          Retrieves whether columns in this database may be defined as non-nullable.
 boolean supportsOpenCursorsAcrossCommit()
          Retrieves whether this database supports keeping cursors open across commits.
 boolean supportsOpenCursorsAcrossRollback()
          Retrieves whether this database supports keeping cursors open across rollbacks.
 boolean supportsOpenStatementsAcrossCommit()
          Retrieves whether this database supports keeping statements open across commits.
 boolean supportsOpenStatementsAcrossRollback()
          Retrieves whether this database supports keeping statements open across rollbacks.
 boolean supportsOrderByUnrelated()
          Retrieves whether this database supports using a column that is not in the SELECT statement in an ORDER BY clause.
 boolean supportsOuterJoins()
          Retrieves whether this database supports some form of outer join.
 boolean supportsPositionedDelete()
          Retrieves whether this database supports positioned DELETE statements.
 boolean supportsPositionedUpdate()
          Retrieves whether this database supports positioned UPDATE statements.
 boolean supportsResultSetConcurrency(int type, int concurrency)
          Retrieves whether this database supports the given concurrency type in combination with the given result set type.
 boolean supportsResultSetHoldability(int holdability)
          Retrieves whether this database supports the given result set holdability.
 boolean supportsResultSetType(int type)
          Retrieves whether this database supports the given result set type.
 boolean supportsSavepoints()
          Retrieves whether this database supports savepoints.
 boolean supportsSchemasInDataManipulation()
          Retrieves whether a schema name can be used in a data manipulation statement.
 boolean supportsSchemasInIndexDefinitions()
          Retrieves whether a schema name can be used in an index definition statement.
 boolean supportsSchemasInPrivilegeDefinitions()
          Retrieves whether a schema name can be used in a privilege definition statement.
 boolean supportsSchemasInProcedureCalls()
          Retrieves whether a schema name can be used in a procedure call statement.
 boolean supportsSchemasInTableDefinitions()
          Retrieves whether a schema name can be used in a table definition statement.
 boolean supportsSelectForUpdate()
          Retrieves whether this database supports SELECT FOR UPDATE statements.
 boolean supportsStatementPooling()
          Retrieves whether this database supports statement pooling.
 boolean supportsStoredProcedures()
          Retrieves whether this database supports stored procedure calls that use the stored procedure escape syntax.
 boolean supportsSubqueriesInComparisons()
          Retrieves whether this database supports subqueries in comparison expressions.
 boolean supportsSubqueriesInExists()
          Retrieves whether this database supports subqueries in EXISTS expressions.
 boolean supportsSubqueriesInIns()
          JDBC4 correction: Retrieves whether this database supports subqueries in IN expressions.
 boolean supportsSubqueriesInQuantifieds()
          Retrieves whether this database supports subqueries in quantified expressions.
 boolean supportsTableCorrelationNames()
          Retrieves whether this database supports table correlation names.
 boolean supportsTransactionIsolationLevel(int level)
          Retrieves whether this database supports the given transaction isolation level.
 boolean supportsTransactions()
          Retrieves whether this database supports transactions.
 boolean supportsUnion()
          Retrieves whether this database supports SQL UNION.
 boolean supportsUnionAll()
          Retrieves whether this database supports SQL UNION ALL.
 boolean updatesAreDetected(int type)
          Retrieves whether or not a visible row update can be detected by calling the method ResultSet.rowUpdated.
 boolean usesLocalFilePerTable()
          Retrieves whether this database uses a file for each table.
 boolean usesLocalFiles()
          Retrieves whether this database stores tables in a local file.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

allProceduresAreCallable

public boolean allProceduresAreCallable()
                                 throws java.sql.SQLException
Retrieves whether the current user can call all the procedures returned by the method getProcedures.

HSQLDB-Specific Information:

This method still always returns true.

In a future release, the plugin interface may be modified to allow implementors to report different values here, based on their implementations.

Specified by:
allProceduresAreCallable in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

allTablesAreSelectable

public boolean allTablesAreSelectable()
                               throws java.sql.SQLException
Retrieves whether the current user can use all the tables returned by the method getTables in a SELECT statement.

HSQLDB-Specific Information:

HSQLDB always reports true.

Please note that the default 1.7.2 getTables behaviour is omit from the list of requested tables only those to which the invoking user has no access of any kind.

Specified by:
allTablesAreSelectable in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

getURL

public java.lang.String getURL()
                        throws java.sql.SQLException
Retrieves the URL for this DBMS.

Specified by:
getURL in interface java.sql.DatabaseMetaData
Returns:
the URL for this DBMS or null if it cannot be generated
Throws:
java.sql.SQLException - if a database access error occurs

getUserName

public java.lang.String getUserName()
                             throws java.sql.SQLException
Retrieves the user name as known to this database.

Specified by:
getUserName in interface java.sql.DatabaseMetaData
Returns:
the database user name
Throws:
java.sql.SQLException - if a database access error occurs

isReadOnly

public boolean isReadOnly()
                   throws java.sql.SQLException
Retrieves whether this database is in read-only mode.

HSQLDB-Specific Information:

Starting with 1.7.2, this makes an SQL call to the new Library.isReadOnlyDatabase(java.sql.Connection) method which provides correct determination of the read-only status for both local and remote database instances.

Specified by:
isReadOnly in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

nullsAreSortedHigh

public boolean nullsAreSortedHigh()
                           throws java.sql.SQLException
Retrieves whether NULL values are sorted high. Sorted high means that NULL values sort higher than any other value in a domain. In an ascending order, if this method returns true, NULL values will appear at the end. By contrast, the method nullsAreSortedAtEnd indicates whether NULL values are sorted at the end regardless of sort order.

HSQLDB-Specific Information:

HSQLDB sorts null low; this method always returns false.

Specified by:
nullsAreSortedHigh in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

nullsAreSortedLow

public boolean nullsAreSortedLow()
                          throws java.sql.SQLException
Retrieves whether NULL values are sorted low. Sorted low means that NULL values sort lower than any other value in a domain. In an ascending order, if this method returns true, NULL values will appear at the beginning. By contrast, the method nullsAreSortedAtStart indicates whether NULL values are sorted at the beginning regardless of sort order.

HSQLDB-Specific Information:

HSQLDB sorts null low; this method always returns true.

Specified by:
nullsAreSortedLow in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

nullsAreSortedAtStart

public boolean nullsAreSortedAtStart()
                              throws java.sql.SQLException
Retrieves whether NULL values are sorted at the start regardless of sort order.

HSQLDB-Specific Information:

HSQLDB sorts null low; this method always returns false.

Specified by:
nullsAreSortedAtStart in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

nullsAreSortedAtEnd

public boolean nullsAreSortedAtEnd()
                            throws java.sql.SQLException
Retrieves whether NULL values are sorted at the end regardless of sort order.

HSQLDB-Specific Information:

HSQLDB sorts null low; this method always returns false.

Specified by:
nullsAreSortedAtEnd in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

getDatabaseProductName

public java.lang.String getDatabaseProductName()
                                        throws java.sql.SQLException
Retrieves the name of this database product.

HSQLDB-Specific Information:

Starting with HSQLDB 1.7.2, this value is retrieved through an SQL call to the new Library.getDatabaseProductName() method which allows correct determination of the database product name for both local and remote database instances.

Specified by:
getDatabaseProductName in interface java.sql.DatabaseMetaData
Returns:
database product name
Throws:
java.sql.SQLException - if a database access error occurs

getDatabaseProductVersion

public java.lang.String getDatabaseProductVersion()
                                           throws java.sql.SQLException
Retrieves the version number of this database product.

HSQLDB-Specific Information:

Starting with HSQLDB 1.7.2, this value is retrieved through an SQL call to the new Library.getDatabaseProductVersion() method which allows correct determination of the database product name for both local and remote database instances.

Specified by:
getDatabaseProductVersion in interface java.sql.DatabaseMetaData
Returns:
database version number
Throws:
java.sql.SQLException - if a database access error occurs

getDriverName

public java.lang.String getDriverName()
                               throws java.sql.SQLException
Retrieves the name of this JDBC driver.

Specified by:
getDriverName in interface java.sql.DatabaseMetaData
Returns:
JDBC driver name
Throws:
java.sql.SQLException - if a database access error occurs

getDriverVersion

public java.lang.String getDriverVersion()
                                  throws java.sql.SQLException
Retrieves the version number of this JDBC driver as a String.

Specified by:
getDriverVersion in interface java.sql.DatabaseMetaData
Returns:
JDBC driver version
Throws:
java.sql.SQLException - if a database access error occurs

getDriverMajorVersion

public int getDriverMajorVersion()
Retrieves this JDBC driver's major version number.

Specified by:
getDriverMajorVersion in interface java.sql.DatabaseMetaData
Returns:
JDBC driver major version

getDriverMinorVersion

public int getDriverMinorVersion()
Retrieves this JDBC driver's minor version number.

Specified by:
getDriverMinorVersion in interface java.sql.DatabaseMetaData
Returns:
JDBC driver minor version number

usesLocalFiles

public boolean usesLocalFiles()
                       throws java.sql.SQLException
Retrieves whether this database stores tables in a local file.

HSQLDB-Specific Information:

From HSQLDB 1.7.2 it is assumed that this refers to data being stored by the JDBC client. This method always returns false.

Specified by:
usesLocalFiles in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

usesLocalFilePerTable

public boolean usesLocalFilePerTable()
                              throws java.sql.SQLException
Retrieves whether this database uses a file for each table.

HSQLDB-Specific Information:

Up to and including 1.7.2, HSQLDB does not use a file for each table. This method always returns false.

Specified by:
usesLocalFilePerTable in interface java.sql.DatabaseMetaData
Returns:
true if this database uses a local file for each table; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

supportsMixedCaseIdentifiers

public boolean supportsMixedCaseIdentifiers()
                                     throws java.sql.SQLException
Retrieves whether this database treats mixed case unquoted SQL identifiers as case sensitive and as a result stores them in mixed case.

HSQLDB-Specific Information:

HSQLDB treats unquoted identifiers as case insensitive and stores them in upper case. It treats quoted identifiers as case sensitive and stores them verbatim; this method always returns false.

Specified by:
supportsMixedCaseIdentifiers in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

storesUpperCaseIdentifiers

public boolean storesUpperCaseIdentifiers()
                                   throws java.sql.SQLException
Retrieves whether this database treats mixed case unquoted SQL identifiers as case insensitive and stores them in upper case.

HSQLDB-Specific Information:

HSQLDB treats unquoted identifiers as case insensitive and stores them in upper case. It treats quoted identifiers as case sensitive and stores them verbatim; this method always returns true.

Specified by:
storesUpperCaseIdentifiers in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

storesLowerCaseIdentifiers

public boolean storesLowerCaseIdentifiers()
                                   throws java.sql.SQLException
Retrieves whether this database treats mixed case unquoted SQL identifiers as case insensitive and stores them in lower case.

HSQLDB-Specific Information:

HSQLDB treats unquoted identifiers as case insensitive and stores them in upper case. It treats quoted identifiers as case sensitive and stores them verbatim; this method always returns false.

Specified by:
storesLowerCaseIdentifiers in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

storesMixedCaseIdentifiers

public boolean storesMixedCaseIdentifiers()
                                   throws java.sql.SQLException
Retrieves whether this database treats mixed case unquoted SQL identifiers as case insensitive and stores them in mixed case.

HSQLDB-Specific Information:

HSQLDB treats unquoted identifiers as case insensitive and stores them in upper case. It treats quoted identifiers as case sensitive and stores them verbatim; this method always returns false.

Specified by:
storesMixedCaseIdentifiers in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

supportsMixedCaseQuotedIdentifiers

public boolean supportsMixedCaseQuotedIdentifiers()
                                           throws java.sql.SQLException
Retrieves whether this database treats mixed case quoted SQL identifiers as case sensitive and as a result stores them in mixed case.

HSQLDB-Specific Information:

HSQLDB treats unquoted identifiers as case insensitive and stores them in upper case. It treats quoted identifiers as case sensitive and stores them verbatim; this method always returns true.

Specified by:
supportsMixedCaseQuotedIdentifiers in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

storesUpperCaseQuotedIdentifiers

public boolean storesUpperCaseQuotedIdentifiers()
                                         throws java.sql.SQLException
Retrieves whether this database treats mixed case quoted SQL identifiers as case insensitive and stores them in upper case.

HSQLDB-Specific Information:

HSQLDB treats unquoted identifiers as case insensitive and stores them in upper case. It treats quoted identifiers as case sensitive and stores them verbatim; this method always returns false.

Specified by:
storesUpperCaseQuotedIdentifiers in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

storesLowerCaseQuotedIdentifiers

public boolean storesLowerCaseQuotedIdentifiers()
                                         throws java.sql.SQLException
Retrieves whether this database treats mixed case quoted SQL identifiers as case insensitive and stores them in lower case.

HSQLDB-Specific Information:

HSQLDB treats unquoted identifiers as case insensitive and stores them in upper case. It treats quoted identifiers as case sensitive and stores them verbatim; this method always returns false.

Specified by:
storesLowerCaseQuotedIdentifiers in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

storesMixedCaseQuotedIdentifiers

public boolean storesMixedCaseQuotedIdentifiers()
                                         throws java.sql.SQLException
Retrieves whether this database treats mixed case quoted SQL identifiers as case insensitive and stores them in mixed case.

HSQLDB-Specific Information:

HSQLDB treats unquoted identifiers as case insensitive and stores them in upper case. It treats quoted identifiers as case sensitive and stores them verbatim; this method always returns false.

Specified by:
storesMixedCaseQuotedIdentifiers in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

getIdentifierQuoteString

public java.lang.String getIdentifierQuoteString()
                                          throws java.sql.SQLException
Retrieves the string used to quote SQL identifiers. This method returns a space " " if identifier quoting is not supported.

HSQLDB-Specific Information:

HSQLDB uses the standard SQL identifier quote character (the double quote character); this method always returns ".

Specified by:
getIdentifierQuoteString in interface java.sql.DatabaseMetaData
Returns:
the quoting string or a space if quoting is not supported
Throws:
java.sql.SQLException - if a database access error occurs

getSQLKeywords

public java.lang.String getSQLKeywords()
                                throws java.sql.SQLException
Retrieves a comma-separated list of all of this database's SQL keywords that are NOT also SQL92 keywords.

HSQLDB-Specific Information:

The list returned contains HSQLDB keywords that are not in the list of reserved words. Some of these are in the list reserved words for SQL 2003 but are not SQL92 keywords.

Specified by:
getSQLKeywords in interface java.sql.DatabaseMetaData
Returns:
the list of this database's keywords that are not also SQL92 keywords
Throws:
java.sql.SQLException - if a database access error occurs

getNumericFunctions

public java.lang.String getNumericFunctions()
                                     throws java.sql.SQLException
Retrieves a comma-separated list of math functions available with this database. These are the Open Group CLI math function names used in the JDBC function escape clause.

Specified by:
getNumericFunctions in interface java.sql.DatabaseMetaData
Returns:
the list of math functions supported by this database
Throws:
java.sql.SQLException - if a database access error occurs

getStringFunctions

public java.lang.String getStringFunctions()
                                    throws java.sql.SQLException
Retrieves a comma-separated list of string functions available with this database. These are the Open Group CLI string function names used in the JDBC function escape clause.

Specified by:
getStringFunctions in interface java.sql.DatabaseMetaData
Returns:
the list of string functions supported by this database
Throws:
java.sql.SQLException - if a database access error occurs

getSystemFunctions

public java.lang.String getSystemFunctions()
                                    throws java.sql.SQLException
Retrieves a comma-separated list of system functions available with this database. These are the Open Group CLI system function names used in the JDBC function escape clause.

Specified by:
getSystemFunctions in interface java.sql.DatabaseMetaData
Returns:
a list of system functions supported by this database
Throws:
java.sql.SQLException - if a database access error occurs

getTimeDateFunctions

public java.lang.String getTimeDateFunctions()
                                      throws java.sql.SQLException
Retrieves a comma-separated list of the time and date functions available with this database.

Specified by:
getTimeDateFunctions in interface java.sql.DatabaseMetaData
Returns:
the list of time and date functions supported by this database
Throws:
java.sql.SQLException - if a database access error occurs

getSearchStringEscape

public java.lang.String getSearchStringEscape()
                                       throws java.sql.SQLException
Retrieves the string that can be used to escape wildcard characters. This is the string that can be used to escape '_' or '%' in the catalog search parameters that are a pattern (and therefore use one of the wildcard characters).

The '_' character represents any single character; the '%' character represents any sequence of zero or more characters.

HSQLDB-Specific Information:

HSQLDB uses the "\" character to escape wildcard characters.

Specified by:
getSearchStringEscape in interface java.sql.DatabaseMetaData
Returns:
the string used to escape wildcard characters
Throws:
java.sql.SQLException - if a database access error occurs

getExtraNameCharacters

public java.lang.String getExtraNameCharacters()
                                        throws java.sql.SQLException
Retrieves all the "extra" characters that can be used in unquoted identifier names (those beyond a-z, A-Z, 0-9 and _).

HSQLDB-Specific Information:

HSQLDB does not support using any "extra" characters in unquoted identifier names; this method always returns the empty String.

Specified by:
getExtraNameCharacters in interface java.sql.DatabaseMetaData
Returns:
the string containing the extra characters
Throws:
java.sql.SQLException - if a database access error occurs

supportsAlterTableWithAddColumn

public boolean supportsAlterTableWithAddColumn()
                                        throws java.sql.SQLException
Retrieves whether this database supports ALTER TABLE with add column.

HSQLDB-Specific Information:

From 1.7.0, HSQLDB supports this type of ALTER TABLE statement; this method always returns true.

Specified by:
supportsAlterTableWithAddColumn in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

supportsAlterTableWithDropColumn

public boolean supportsAlterTableWithDropColumn()
                                         throws java.sql.SQLException
Retrieves whether this database supports ALTER TABLE with drop column.

HSQLDB-Specific Information:

From 1.7.0, HSQLDB supports this type of ALTER TABLE statement; this method always returns true.

Specified by:
supportsAlterTableWithDropColumn in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

supportsColumnAliasing

public boolean supportsColumnAliasing()
                               throws java.sql.SQLException
Retrieves whether this database supports column aliasing.

If so, the SQL AS clause can be used to provide names for computed columns or to provide alias names for columns as required.

HSQLDB-Specific Information:

HSQLDB supports column aliasing; this method always returns true.

Specified by:
supportsColumnAliasing in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

nullPlusNonNullIsNull

public boolean nullPlusNonNullIsNull()
                              throws java.sql.SQLException
Retrieves whether this database supports concatenations between NULL and non-NULL values being NULL.

HSQLDB-Specific Information:

HSQLDB supports this; this method always returns true.

Specified by:
nullPlusNonNullIsNull in interface java.sql.DatabaseMetaData
Returns:
true if so; false otherwise
Throws:
java.sql.SQLException - if a database access error occurs

supportsConvert

public boolean supportsConvert()
                        throws java.sql.SQLException
Retrieves whether this database supports the CONVERT function between