org.firebirdsql.jdbc

## Class FBDatabaseMetaData

- java.lang.Object
- - org.firebirdsql.jdbc.FBDatabaseMetaData

- All Implemented Interfaces:
    java.sql.DatabaseMetaData, java.sql.Wrapper, FirebirdDatabaseMetaData

      public class FBDatabaseMetaData
      extends java.lang.Object
      implements FirebirdDatabaseMetaData

  Comprehensive information about the database as a whole.

  Many of the methods here return lists of information in the form of `ResultSet` objects. You can use the normal `ResultSet` methods such as getString and getInt to retrieve the data from these `ResultSet`. If a given form of metadata is not available, these methods should throw an SQLException.

  Some of these 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 a null ref, that argument's criteria will be dropped from the search.

  An `SQLException` will be thrown if a driver does not support a meta data method. In the case of methods that return a `ResultSet`, either a `ResultSet` (which may be empty) is returned or a SQLException is thrown.

  Author:
    David Jencks, Mark Rotteveel

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected static class` | `FBDatabaseMetaData.Clause`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static java.lang.String[]` | `ALL_TYPES`
    `static java.lang.String[]` | `ALL_TYPES_2_1` Table types supported for Firebird 2.1 and lower
    `static java.lang.String[]` | `ALL_TYPES_2_5` Table types supported for Firebird 2.5 and up (will also work with 2.1 and earlier though)
    `protected static DatatypeCoder` | `datatypeCoder`
    `static java.lang.String` | `GET_COLUMNS_END`
    `static java.lang.String` | `GLOBAL_TEMPORARY`
    `static java.lang.String` | `SYSTEM_TABLE`
    `static java.lang.String` | `TABLE`
    `static java.lang.String` | `VIEW`

    - ### Fields inherited from interface java.sql.DatabaseMetaData

      `attributeNoNulls, attributeNullable, attributeNullableUnknown, bestRowNotPseudo, bestRowPseudo, bestRowSession, bestRowTemporary, bestRowTransaction, bestRowUnknown, columnNoNulls, columnNullable, columnNullableUnknown, functionColumnIn, functionColumnInOut, functionColumnOut, functionColumnResult, functionColumnUnknown, functionNoNulls, functionNoTable, functionNullable, functionNullableUnknown, functionResultUnknown, functionReturn, functionReturnsTable, importedKeyCascade, importedKeyInitiallyDeferred, importedKeyInitiallyImmediate, importedKeyNoAction, importedKeyNotDeferrable, importedKeyRestrict, importedKeySetDefault, importedKeySetNull, procedureColumnIn, procedureColumnInOut, procedureColumnOut, procedureColumnResult, procedureColumnReturn, procedureColumnUnknown, procedureNoNulls, procedureNoResult, procedureNullable, procedureNullableUnknown, procedureResultUnknown, procedureReturnsResult, sqlStateSQL, sqlStateSQL99, sqlStateXOpen, tableIndexClustered, tableIndexHashed, tableIndexOther, tableIndexStatistic, typeNoNulls, typeNullable, typeNullableUnknown, typePredBasic, typePredChar, typePredNone, typeSearchable, versionColumnNotPseudo, versionColumnPseudo, versionColumnUnknown`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `FBDatabaseMetaData(FBConnection c)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `allProceduresAreCallable()` Can all the procedures returned by getProcedures be called by the current user?
    `boolean` | `allTablesAreSelectable()` Can all the tables returned by getTable be SELECTed by the current user?
    `boolean` | `autoCommitFailureClosesAllResultSets()`
    `protected RowDescriptor` | `buildTablePrivilegeRSMetaData()`
    `void` | `close()` Closes any cached metadata statements held by this database metadata implementation.
    `boolean` | `dataDefinitionCausesTransactionCommit()` Does a data definition statement within a transaction force the transaction to commit?
    `boolean` | `dataDefinitionIgnoredInTransactions()` Is a data definition statement within a transaction ignored?
    `boolean` | `deletesAreDetected(int type)` Indicates whether or not a visible row delete can be detected by calling ResultSet.rowDeleted().
    `boolean` | `doesMaxRowSizeIncludeBlobs()` Did getMaxRowSize() include LONGVARCHAR and LONGVARBINARY blobs?
    `protected java.sql.ResultSet` | `doQuery(java.lang.String sql, java.util.List<java.lang.String> params)` Execute an sql query with a given set of parameters.
    `protected java.sql.ResultSet` | `doQuery(java.lang.String sql, java.util.List<java.lang.String> params, boolean standalone)` Execute an sql query with a given set of parameters.
    `static java.lang.String` | `escapeWildcards(java.lang.String objectName)` Escapes the like wildcards and escape (`\_%` in the provided search string with a `\`.
    `boolean` | `generatedKeyAlwaysReturned()`
    `java.sql.ResultSet` | `getAttributes(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String typeNamePattern, java.lang.String attributeNamePattern)` UDTs are not supported by Firebird.
    `java.sql.ResultSet` | `getBestRowIdentifier(java.lang.String catalog, java.lang.String schema, java.lang.String table, int scope, boolean nullable)` Gets a description of a table's optimal set of columns that uniquely identifies a row.
    `protected static byte[]` | `getBytes(java.lang.String value)`
    `java.sql.ResultSet` | `getCatalogs()` Gets the catalog names available in this database.
    `java.lang.String` | `getCatalogSeparator()` What's the separator between catalog and table name?
    `java.lang.String` | `getCatalogTerm()` What's the database vendor's preferred term for "catalog"?
    `java.sql.ResultSet` | `getClientInfoProperties()` Retrieves a list of the client info properties that the driver supports.
    `java.sql.ResultSet` | `getColumnPrivileges(java.lang.String catalog, java.lang.String schema, java.lang.String table, java.lang.String columnNamePattern)` Gets 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.
    `int` | `getConnectionDialect()` Get the dialect of the connection.
    `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)` Gets a description of the foreign key columns in the foreign key table that reference the primary key columns of the primary key table (describe how one table imports another's key).
    `int` | `getDatabaseDialect()` Get the dialect of the database.
    `int` | `getDatabaseMajorVersion()`
    `int` | `getDatabaseMinorVersion()`
    `java.lang.String` | `getDatabaseProductName()` What's the name of this database product?
    `java.lang.String` | `getDatabaseProductVersion()` What's the version of this database product?
    `int` | `getDefaultTransactionIsolation()` What's the database's default transaction isolation level? The values are defined in `java.sql.Connection`.
    `int` | `getDriverMajorVersion()` What's this JDBC driver's major version number?
    `int` | `getDriverMinorVersion()` What's this JDBC driver's minor version number?
    `java.lang.String` | `getDriverName()` What's the name of this JDBC driver?
    `java.lang.String` | `getDriverVersion()` What's the version of this JDBC driver?
    `java.sql.ResultSet` | `getExportedKeys(java.lang.String catalog, java.lang.String schema, java.lang.String table)` Gets a description of the foreign key columns that reference a table's primary key columns (the foreign keys exported by a table).
    `java.lang.String` | `getExtraNameCharacters()` Gets all the "extra" characters that can be used in unquoted identifier names (those beyond a-z, A-Z, 0-9 and _).
    `java.sql.ResultSet` | `getFunctionColumns(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String functionNamePattern, java.lang.String columnNamePattern)` Retrieves a description of the given catalog's system or user function parameters and return type.
    `java.sql.ResultSet` | `getFunctions(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String functionNamePattern)` Retrieves a description of the system and user functions available in the given catalog.
    `java.lang.String` | `getIdentifierQuoteString()` What's the string used to quote SQL identifiers? This returns a space " " if identifier quoting isn't supported.
    `java.sql.ResultSet` | `getImportedKeys(java.lang.String catalog, java.lang.String schema, java.lang.String table)` Gets 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)` Gets a description of a table's indices and statistics.
    `int` | `getJDBCMajorVersion()`
    `int` | `getJDBCMinorVersion()`
    `int` | `getMaxBinaryLiteralLength()` How many hex characters can you have in an inline binary literal?
    `int` | `getMaxCatalogNameLength()` What's the maximum length of a catalog name?
    `int` | `getMaxCharLiteralLength()` What's the max length for a character literal?
    `int` | `getMaxColumnNameLength()` What's the limit on column name length?
    `int` | `getMaxColumnsInGroupBy()` What's the maximum number of columns in a "GROUP BY" clause?
    `int` | `getMaxColumnsInIndex()` What's the maximum number of columns allowed in an index?
    `int` | `getMaxColumnsInOrderBy()` What's the maximum number of columns in an "ORDER BY" clause?
    `int` | `getMaxColumnsInSelect()` What's the maximum number of columns in a "SELECT" list?
    `int` | `getMaxColumnsInTable()` What's the maximum number of columns in a table?
    `int` | `getMaxConnections()` How many active connections can we have at a time to this database?
    `int` | `getMaxCursorNameLength()` What's the maximum cursor name length?
    `int` | `getMaxIndexLength()` Retrieves the maximum number of bytes for an index, including all of the parts of the index.
    `int` | `getMaxProcedureNameLength()` What's the maximum length of a procedure name?
    `int` | `getMaxRowSize()` What's the maximum length of a single row?
    `int` | `getMaxSchemaNameLength()` What's the maximum length allowed for a schema name?
    `int` | `getMaxStatementLength()` What's the maximum length of an SQL statement?
    `int` | `getMaxStatements()` How many active statements can we have open at one time to this database?
    `int` | `getMaxTableNameLength()` What's the maximum length of a table name?
    `int` | `getMaxTablesInSelect()` What's the maximum number of tables in a SELECT statement?
    `int` | `getMaxUserNameLength()` What's the maximum length of a user name?
    `java.lang.String` | `getNumericFunctions()` NOTE: Some of the functions listed may only work on Firebird 2.1 or higher, or when equivalent UDFs are installed.
    `int` | `getOdsMajorVersion()` Get the major version of the ODS (On-Disk Structure) of the database.
    `int` | `getOdsMinorVersion()` Get the minor version of the ODS (On-Disk Structure) of the database.
    `java.sql.ResultSet` | `getPrimaryKeys(java.lang.String catalog, java.lang.String schema, java.lang.String table)` Gets a description of a 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)` Gets a description of the stored procedures available in a catalog.
    `java.lang.String` | `getProcedureSourceCode(java.lang.String procedureName)` Get the source of a stored procedure.
    `java.lang.String` | `getProcedureTerm()` What's the database vendor's preferred term for "procedure"?
    `java.sql.ResultSet` | `getPseudoColumns(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern, java.lang.String columnNamePattern)`
    `int` | `getResultSetHoldability()` Retrieves the default holdability of this `ResultSet`.
    `java.sql.RowIdLifetime` | `getRowIdLifetime()` Indicates whether or not this data source supports the SQL `ROWID` type, and if so the lifetime for which a `RowId` object remains valid.
    `java.sql.ResultSet` | `getSchemas()` Gets the schema names available in this database.
    `java.sql.ResultSet` | `getSchemas(java.lang.String catalog, java.lang.String schemaPattern)` Retrieves the schema names available in this database.
    `java.lang.String` | `getSchemaTerm()` What's the database vendor's preferred term for "schema"?
    `java.lang.String` | `getSearchStringEscape()` Gets the string that can be used to escape wildcard characters.
    `java.lang.String` | `getSQLKeywords()`
    `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()` NOTE: Some of the functions listed may only work on Firebird 2.1 or higher, or when equivalent UDFs are installed.
    `java.sql.ResultSet` | `getSuperTables(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern)` Supertables are not supported by Firebird.
    `java.sql.ResultSet` | `getSuperTypes(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern)` Supertypes are not supported by Firebird.
    `java.lang.String` | `getSystemFunctions()` NOTE: Some of the functions listed may only work on Firebird 2.1 or higher, or when equivalent UDFs are installed.
    `java.sql.ResultSet` | `getTablePrivileges(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern)` Gets 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()` Gets the table types available in this database.
    `java.lang.String` | `getTimeDateFunctions()` NOTE: Some of the functions listed may only work on Firebird 2.1 or higher, or when equivalent UDFs are installed.
    `java.lang.String` | `getTriggerSourceCode(java.lang.String triggerName)` Get the source of a trigger.
    `java.sql.ResultSet` | `getTypeInfo()` Gets 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)` UDTs are not supported by Firebird.
    `java.lang.String` | `getURL()` What's the url for this database?
    `java.lang.String` | `getUserName()` What's our user name as known to the database?
    `java.sql.ResultSet` | `getVersionColumns(java.lang.String catalog, java.lang.String schema, java.lang.String table)` Gets a description of a table's columns that are automatically updated when any value in a row is updated.
    `java.lang.String` | `getViewSourceCode(java.lang.String viewName)` Get the source of a view.
    `protected java.lang.String` | `getWantsSystemTables(java.lang.String[] types)`
    `protected java.lang.String` | `getWantsTables(java.lang.String[] types)`
    `protected java.lang.String` | `getWantsViews(java.lang.String[] types)`
    `static boolean` | `hasNoWildcards(java.lang.String pattern)` Determine if there are no SQL wildcard characters ('%' or '_') in the given pattern.
    `boolean` | `insertsAreDetected(int type)` Indicates whether or not a visible row insert can be detected by calling ResultSet.rowInserted().
    `protected static boolean` | `isAllCondition(java.lang.String pattern)`
    `boolean` | `isCatalogAtStart()` Does a catalog appear at the start of a qualified table name? (Otherwise it appears at the end)
    `boolean` | `isReadOnly()` Is the database in read-only mode?
    `boolean` | `isWrapperFor(java.lang.Class<?> iface)`
    `boolean` | `locatorsUpdateCopy()`
    `boolean` | `nullPlusNonNullIsNull()` Retrieves whether concatenations between NULL and non-NULL values equal NULL.
    `boolean` | `nullsAreSortedAtEnd()` Are NULL values sorted at the end regardless of sort order?
    `boolean` | `nullsAreSortedAtStart()` Are NULL values sorted at the start regardless of sort order?
    `boolean` | `nullsAreSortedHigh()` Are NULL values sorted high?
    `boolean` | `nullsAreSortedLow()` Are NULL values sorted low?
    `boolean` | `othersDeletesAreVisible(int type)` Indicates whether deletes made by others are visible.
    `boolean` | `othersInsertsAreVisible(int type)` Indicates whether inserts made by others are visible.
    `boolean` | `othersUpdatesAreVisible(int type)` Indicates whether updates made by others are visible.
    `boolean` | `ownDeletesAreVisible(int type)` Indicates whether a result set's own deletes are visible.
    `boolean` | `ownInsertsAreVisible(int type)` Indicates whether a result set's own inserts are visible.
    `boolean` | `ownUpdatesAreVisible(int type)` Indicates whether a result set's own updates are visible.
    `protected FBResultSet` | `processTablePrivileges(RowDescriptor rowDescriptor, java.sql.ResultSet fbTablePrivileges)`
    `boolean` | `storesLowerCaseIdentifiers()` Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in lower case?
    `boolean` | `storesLowerCaseQuotedIdentifiers()` Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in lower case?
    `boolean` | `storesMixedCaseIdentifiers()` Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in mixed case?
    `boolean` | `storesMixedCaseQuotedIdentifiers()` Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in mixed case?
    `boolean` | `storesUpperCaseIdentifiers()` Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in upper case?
    `boolean` | `storesUpperCaseQuotedIdentifiers()` Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in upper case?
    `static java.lang.String` | `stripEscape(java.lang.String pattern)` Strips all backslash-escapes from a string.
    `boolean` | `supportsAlterTableWithAddColumn()` Is "ALTER TABLE" with add column supported?
    `boolean` | `supportsAlterTableWithDropColumn()` Is "ALTER TABLE" with drop column supported?
    `boolean` | `supportsANSI92EntryLevelSQL()` Is the ANSI92 entry level SQL grammar supported? All JDBC CompliantTM drivers must return true.
    `boolean` | `supportsANSI92FullSQL()` Is the ANSI92 full SQL grammar supported?
    `boolean` | `supportsANSI92IntermediateSQL()` Is the ANSI92 intermediate SQL grammar supported?
    `boolean` | `supportsBatchUpdates()` Indicates whether the driver supports batch updates.
    `boolean` | `supportsCatalogsInDataManipulation()` Can a catalog name be used in a data manipulation statement?
    `boolean` | `supportsCatalogsInIndexDefinitions()` Can a catalog name be used in an index definition statement?
    `boolean` | `supportsCatalogsInPrivilegeDefinitions()` Can a catalog name be used in a privilege definition statement?
    `boolean` | `supportsCatalogsInProcedureCalls()` Can a catalog name be used in a procedure call statement?
    `boolean` | `supportsCatalogsInTableDefinitions()` Can a catalog name be used in a table definition statement?
    `boolean` | `supportsColumnAliasing()` Is column aliasing supported?
    `boolean` | `supportsConvert()` Is the CONVERT function between SQL types supported?
    `boolean` | `supportsConvert(int fromType, int toType)` Retrieves whether CONVERT between the given SQL types supported.
    `boolean` | `supportsCoreSQLGrammar()` Is the ODBC Core SQL grammar supported?
    `boolean` | `supportsCorrelatedSubqueries()` Are correlated subqueries supported? A JDBC CompliantTM driver always returns true.
    `boolean` | `supportsDataDefinitionAndDataManipulationTransactions()` Are both data definition and data manipulation statements within a transaction supported?
    `boolean` | `supportsDataManipulationTransactionsOnly()` Are only data manipulation statements within a transaction supported?
    `boolean` | `supportsDifferentTableCorrelationNames()` If table correlation names are supported, are they restricted to be different from the names of the tables?
    `boolean` | `supportsExpressionsInOrderBy()` Are expressions in "ORDER BY" lists supported?
    `boolean` | `supportsExtendedSQLGrammar()` Is the ODBC Extended SQL grammar supported?
    `boolean` | `supportsFullOuterJoins()`
    `boolean` | `supportsGetGeneratedKeys()` Retrieves whether auto-generated keys can be retrieved after creation.
    `boolean` | `supportsGroupBy()` Is some form of "GROUP BY" clause supported?
    `boolean` | `supportsGroupByBeyondSelect()` Can a "GROUP BY" clause add columns not in the SELECT provided it specifies all the columns in the SELECT?
    `boolean` | `supportsGroupByUnrelated()` Can a "GROUP BY" clause use columns not in the SELECT?
    `boolean` | `supportsIntegrityEnhancementFacility()` Is the SQL Integrity Enhancement Facility supported?
    `boolean` | `supportsLikeEscapeClause()` Is the escape character in "LIKE" clauses supported? A JDBC CompliantTM driver always returns true.
    `boolean` | `supportsLimitedOuterJoins()`
    `boolean` | `supportsMinimumSQLGrammar()` Is the ODBC Minimum SQL grammar supported? All JDBC CompliantTM drivers must return true.
    `boolean` | `supportsMixedCaseIdentifiers()` Does the database treat mixed case unquoted SQL identifiers as case sensitive and as a result store them in mixed case? A JDBC CompliantTM driver will always return false.
    `boolean` | `supportsMixedCaseQuotedIdentifiers()` Does the database treat mixed case quoted SQL identifiers as case sensitive and as a result store them in mixed case? A JDBC CompliantTM driver will always return true.
    `boolean` | `supportsMultipleOpenResults()` Retrieves whether it is possible to have multiple `ResultSet` objects returned from a `CallableStatement` object simultaneously.
    `boolean` | `supportsMultipleResultSets()` Are multiple `ResultSet` from a single execute supported?
    `boolean` | `supportsMultipleTransactions()` Can we have multiple transactions open at once (on different connections)?
    `boolean` | `supportsNamedParameters()` Retrieve whether this database supports named parameters.
    `boolean` | `supportsNonNullableColumns()` Can columns be defined as non-nullable? A JDBC CompliantTM driver always returns true.
    `boolean` | `supportsOpenCursorsAcrossCommit()` Can cursors remain open across commits?
    `boolean` | `supportsOpenCursorsAcrossRollback()` Can cursors remain open across rollbacks?
    `boolean` | `supportsOpenStatementsAcrossCommit()` Can statements remain open across commits?
    `boolean` | `supportsOpenStatementsAcrossRollback()` Can statements remain open across rollbacks?
    `boolean` | `supportsOrderByUnrelated()` Can an "ORDER BY" clause use columns not in the SELECT statement?
    `boolean` | `supportsOuterJoins()`
    `boolean` | `supportsPositionedDelete()` Is positioned DELETE supported?
    `boolean` | `supportsPositionedUpdate()` Is positioned UPDATE supported?
    `boolean` | `supportsResultSetConcurrency(int type, int concurrency)` Does the database support the concurrency type in combination with the given result set type?
    `boolean` | `supportsResultSetHoldability(int holdability)` Retrieves whether this database supports the given results holdability.
    `boolean` | `supportsResultSetType(int type)` Does the database support the given result set type?
    `boolean` | `supportsSavepoints()` Retrieves whether this database supports savepoints.
    `boolean` | `supportsSchemasInDataManipulation()` Can a schema name be used in a data manipulation statement?
    `boolean` | `supportsSchemasInIndexDefinitions()` Can a schema name be used in an index definition statement?
    `boolean` | `supportsSchemasInPrivilegeDefinitions()` Can a schema name be used in a privilege definition statement?
    `boolean` | `supportsSchemasInProcedureCalls()` Can a schema name be used in a procedure call statement?
    `boolean` | `supportsSchemasInTableDefinitions()` Can a schema name be used in a table definition statement?
    `boolean` | `supportsSelectForUpdate()` Is SELECT for UPDATE supported?
    `boolean` | `supportsStatementPooling()`
    `boolean` | `supportsStoredFunctionsUsingCallSyntax()`
    `boolean` | `supportsStoredProcedures()` Are stored procedure calls using the stored procedure escape syntax supported?
    `boolean` | `supportsSubqueriesInComparisons()` Are subqueries in comparison expressions supported? A JDBC CompliantTM driver always returns true.
    `boolean` | `supportsSubqueriesInExists()` Are subqueries in 'exists' expressions supported? A JDBC CompliantTM driver always returns true.
    `boolean` | `supportsSubqueriesInIns()` Are subqueries in 'in' statements supported? A JDBC CompliantTM driver always returns true.
    `boolean` | `supportsSubqueriesInQuantifieds()` Are subqueries in quantified expressions supported? A JDBC CompliantTM driver always returns true.
    `boolean` | `supportsTableCorrelationNames()` Are table correlation names supported? A JDBC CompliantTM driver always returns true.
    `boolean` | `supportsTransactionIsolationLevel(int level)` Does this database support the given transaction isolation level?
    `boolean` | `supportsTransactions()` Are transactions supported? If not, invoking the method `commit` is a noop and the isolation level is TRANSACTION_NONE.
    `boolean` | `supportsUnion()` Is SQL UNION supported?
    `boolean` | `supportsUnionAll()` Is SQL UNION ALL supported?
    `<T> T` | `unwrap(java.lang.Class<T> iface)`
    `boolean` | `updatesAreDetected(int type)` Indicates whether or not a visible row update can be detected by calling the method `ResultSet.rowUpdated`.
    `boolean` | `usesLocalFilePerTable()` Does the database use a file for each table?
    `boolean` | `usesLocalFiles()` Does the database store tables in a local file?

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### datatypeCoder

          protected static final DatatypeCoder datatypeCoder

    - #### TABLE

          public static final java.lang.String TABLE

      See Also:
        Constant Field Values

    - #### SYSTEM_TABLE

          public static final java.lang.String SYSTEM_TABLE

      See Also:
        Constant Field Values

    - #### VIEW

          public static final java.lang.String VIEW

      See Also:
        Constant Field Values

    - #### GLOBAL_TEMPORARY

          public static final java.lang.String GLOBAL_TEMPORARY

      See Also:
        Constant Field Values

    - #### ALL_TYPES_2_5

          public static final java.lang.String[] ALL_TYPES_2_5

      Table types supported for Firebird 2.5 and up (will also work with 2.1 and earlier though)

    - #### ALL_TYPES_2_1

          public static final java.lang.String[] ALL_TYPES_2_1

      Table types supported for Firebird 2.1 and lower

    - #### ALL_TYPES

          public static final java.lang.String[] ALL_TYPES

    - #### GET_COLUMNS_END

          public static final java.lang.String GET_COLUMNS_END

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### FBDatabaseMetaData

          protected FBDatabaseMetaData(FBConnection c)
                                throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

  - ### Method Detail

    - #### close

          public void close()

      Description copied from interface: `FirebirdDatabaseMetaData`
      Closes any cached metadata statements held by this database metadata implementation.

      The database metadata object itself remains usable. Exceptions during statement close are logged and suppressed.

      Specified by:
        `close` in interface `FirebirdDatabaseMetaData`

    - #### allProceduresAreCallable

          public boolean allProceduresAreCallable()
                                           throws java.sql.SQLException

      Can all the procedures returned by getProcedures be called by the current user?
      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

      Can all the tables returned by getTable be SELECTed by the current user?
      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

      What's the url for this database?
      Specified by:
        `getURL` in interface `java.sql.DatabaseMetaData`
      Returns:
        the url 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

      What's our user name as known to the database?
      Specified by:
        `getUserName` in interface `java.sql.DatabaseMetaData`
      Returns:
        our database user name
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### isReadOnly

          public boolean isReadOnly()
                             throws java.sql.SQLException

      Is the database in read-only mode?
      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

      Are NULL values sorted high?
      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

      Are NULL values sorted low?
      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

      Are NULL values sorted at the start regardless of sort order?
      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

      Are NULL values sorted at the end regardless of sort order?
      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

      What's the name of this database product?
      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

      What's the version of this database product?
      Specified by:
        `getDatabaseProductVersion` in interface `java.sql.DatabaseMetaData`
      Returns:
        database version
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getDriverName

          public java.lang.String getDriverName()
                                         throws java.sql.SQLException

      What's 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

      What's the version of this JDBC driver?
      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()

      What's this JDBC driver's major version number?
      Specified by:
        `getDriverMajorVersion` in interface `java.sql.DatabaseMetaData`
      Returns:
        JDBC driver major version

    - #### getDriverMinorVersion

          public int getDriverMinorVersion()

      What's 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

      Does the database store tables in a local file?
      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

      Does the database use a file for each table?
      Specified by:
        `usesLocalFilePerTable` in interface `java.sql.DatabaseMetaData`
      Returns:
        true if the database uses a local file for each table
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsMixedCaseIdentifiers

          public boolean supportsMixedCaseIdentifiers()
                                               throws java.sql.SQLException

      Does the database treat mixed case unquoted SQL identifiers as case sensitive and as a result store them in mixed case? A JDBC CompliantTM driver will always return 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

    - #### supportsStatementPooling

          public boolean supportsStatementPooling()
                                           throws java.sql.SQLException

      Specified by:
        `supportsStatementPooling` in interface `java.sql.DatabaseMetaData`
      Returns:
        a `boolean` value
      Throws:
        `java.sql.SQLException` - if an error occurs TODO implement statement pooling on the server.. then in the driver

    - #### locatorsUpdateCopy

          public boolean locatorsUpdateCopy()
                                     throws java.sql.SQLException

      Specified by:
        `locatorsUpdateCopy` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### storesUpperCaseIdentifiers

          public boolean storesUpperCaseIdentifiers()
                                             throws java.sql.SQLException

      Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in upper case?
      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

      Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in lower case?
      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

      Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in mixed case?
      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

      Does the database treat mixed case quoted SQL identifiers as case sensitive and as a result store them in mixed case? A JDBC CompliantTM driver will always return 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

      Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in upper case?
      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

      Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in lower case?
      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

      Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in mixed case?
      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

      What's the string used to quote SQL identifiers? This returns a space " " if identifier quoting isn't supported. A JDBC CompliantTM driver always uses a double quote character.
      Specified by:
        `getIdentifierQuoteString` in interface `java.sql.DatabaseMetaData`
      Returns:
        the quoting string
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getSQLKeywords

          public java.lang.String getSQLKeywords()
                                          throws java.sql.SQLException

      Specified by:
        `getSQLKeywords` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getNumericFunctions

          public java.lang.String getNumericFunctions()
                                               throws java.sql.SQLException

      NOTE: Some of the functions listed may only work on Firebird 2.1 or higher, or when equivalent UDFs are installed.

      Specified by:
        `getNumericFunctions` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getStringFunctions

          public java.lang.String getStringFunctions()
                                              throws java.sql.SQLException

      NOTE: Some of the functions listed may only work on Firebird 2.1 or higher, or when equivalent UDFs are installed.

      Specified by:
        `getStringFunctions` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getSystemFunctions

          public java.lang.String getSystemFunctions()
                                              throws java.sql.SQLException

      NOTE: Some of the functions listed may only work on Firebird 2.1 or higher, or when equivalent UDFs are installed.

      Specified by:
        `getSystemFunctions` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getTimeDateFunctions

          public java.lang.String getTimeDateFunctions()
                                                throws java.sql.SQLException

      NOTE: Some of the functions listed may only work on Firebird 2.1 or higher, or when equivalent UDFs are installed.

      Specified by:
        `getTimeDateFunctions` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getSearchStringEscape

          public java.lang.String getSearchStringEscape()
                                                 throws java.sql.SQLException

      Gets the string that can be used to escape wildcard characters. This is the string that can be used to escape '_' or '%' in the string pattern style catalog search parameters.

      The '_' character represents any single character.

      The '%' character represents any sequence of zero or more 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

      Gets all the "extra" characters that can be used in unquoted identifier names (those beyond a-z, A-Z, 0-9 and _).
      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

      Is "ALTER TABLE" with add column supported?
      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

      Is "ALTER TABLE" with drop column supported?
      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

      Is column aliasing supported?

      If so, the SQL AS clause can be used to provide names for computed columns or to provide alias names for columns as required. A JDBC CompliantTM driver 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 concatenations between NULL and non-NULL values equal NULL. For SQL-92 compliance, a JDBC technology-enabled driver will return `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

      Is the CONVERT function between SQL types supported?
      Specified by:
        `supportsConvert` 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(int fromType,
                                int toType)
                                  throws java.sql.SQLException

      Retrieves whether CONVERT between the given SQL types supported.
      Specified by:
        `supportsConvert` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `fromType` - the type to convert from
        `toType` - the type to convert to
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `Types`

    - #### supportsTableCorrelationNames

          public boolean supportsTableCorrelationNames()
                                                throws java.sql.SQLException

      Are table correlation names supported? A JDBC CompliantTM driver always returns true.
      Specified by:
        `supportsTableCorrelationNames` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsDifferentTableCorrelationNames

          public boolean supportsDifferentTableCorrelationNames()
                                                         throws java.sql.SQLException

      If table correlation names are supported, are they restricted to be different from the names of the tables?
      Specified by:
        `supportsDifferentTableCorrelationNames` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsExpressionsInOrderBy

          public boolean supportsExpressionsInOrderBy()
                                               throws java.sql.SQLException

      Are expressions in "ORDER BY" lists supported?
      Specified by:
        `supportsExpressionsInOrderBy` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsOrderByUnrelated

          public boolean supportsOrderByUnrelated()
                                           throws java.sql.SQLException

      Can an "ORDER BY" clause use columns not in the SELECT statement?
      Specified by:
        `supportsOrderByUnrelated` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsGroupBy

          public boolean supportsGroupBy()
                                  throws java.sql.SQLException

      Is some form of "GROUP BY" clause supported?
      Specified by:
        `supportsGroupBy` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsGroupByUnrelated

          public boolean supportsGroupByUnrelated()
                                           throws java.sql.SQLException

      Can a "GROUP BY" clause use columns not in the SELECT?
      Specified by:
        `supportsGroupByUnrelated` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsGroupByBeyondSelect

          public boolean supportsGroupByBeyondSelect()
                                              throws java.sql.SQLException

      Can a "GROUP BY" clause add columns not in the SELECT provided it specifies all the columns in the SELECT?
      Specified by:
        `supportsGroupByBeyondSelect` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsLikeEscapeClause

          public boolean supportsLikeEscapeClause()
                                           throws java.sql.SQLException

      Is the escape character in "LIKE" clauses supported? A JDBC CompliantTM driver always returns true.
      Specified by:
        `supportsLikeEscapeClause` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsMultipleResultSets

          public boolean supportsMultipleResultSets()
                                             throws java.sql.SQLException

      Are multiple `ResultSet` from a single execute supported?
      Specified by:
        `supportsMultipleResultSets` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsMultipleTransactions

          public boolean supportsMultipleTransactions()
                                               throws java.sql.SQLException

      Can we have multiple transactions open at once (on different connections)?
      Specified by:
        `supportsMultipleTransactions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsNonNullableColumns

          public boolean supportsNonNullableColumns()
                                             throws java.sql.SQLException

      Can columns be defined as non-nullable? A JDBC CompliantTM driver always returns true.
      Specified by:
        `supportsNonNullableColumns` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsMinimumSQLGrammar

          public boolean supportsMinimumSQLGrammar()
                                            throws java.sql.SQLException

      Is the ODBC Minimum SQL grammar supported? All JDBC CompliantTM drivers must return true.
      Specified by:
        `supportsMinimumSQLGrammar` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsCoreSQLGrammar

          public boolean supportsCoreSQLGrammar()
                                         throws java.sql.SQLException

      Is the ODBC Core SQL grammar supported?
      Specified by:
        `supportsCoreSQLGrammar` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsExtendedSQLGrammar

          public boolean supportsExtendedSQLGrammar()
                                             throws java.sql.SQLException

      Is the ODBC Extended SQL grammar supported?
      Specified by:
        `supportsExtendedSQLGrammar` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsANSI92EntryLevelSQL

          public boolean supportsANSI92EntryLevelSQL()
                                              throws java.sql.SQLException

      Is the ANSI92 entry level SQL grammar supported? All JDBC CompliantTM drivers must return true.
      Specified by:
        `supportsANSI92EntryLevelSQL` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsANSI92IntermediateSQL

          public boolean supportsANSI92IntermediateSQL()
                                                throws java.sql.SQLException

      Is the ANSI92 intermediate SQL grammar supported?
      Specified by:
        `supportsANSI92IntermediateSQL` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsANSI92FullSQL

          public boolean supportsANSI92FullSQL()
                                        throws java.sql.SQLException

      Is the ANSI92 full SQL grammar supported?
      Specified by:
        `supportsANSI92FullSQL` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsIntegrityEnhancementFacility

          public boolean supportsIntegrityEnhancementFacility()
                                                       throws java.sql.SQLException

      Is the SQL Integrity Enhancement Facility supported?
      Specified by:
        `supportsIntegrityEnhancementFacility` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsOuterJoins

          public boolean supportsOuterJoins()
                                     throws java.sql.SQLException

      Specified by:
        `supportsOuterJoins` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### supportsFullOuterJoins

          public boolean supportsFullOuterJoins()
                                         throws java.sql.SQLException

      Specified by:
        `supportsFullOuterJoins` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### supportsLimitedOuterJoins

          public boolean supportsLimitedOuterJoins()
                                            throws java.sql.SQLException

      Specified by:
        `supportsLimitedOuterJoins` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getSchemaTerm

          public java.lang.String getSchemaTerm()
                                         throws java.sql.SQLException

      What's the database vendor's preferred term for "schema"?
      Specified by:
        `getSchemaTerm` in interface `java.sql.DatabaseMetaData`
      Returns:
        the vendor term, always `null` because schemas are not supported by database server (see JDBC CTS for details).
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getProcedureTerm

          public java.lang.String getProcedureTerm()
                                            throws java.sql.SQLException

      What's the database vendor's preferred term for "procedure"?
      Specified by:
        `getProcedureTerm` in interface `java.sql.DatabaseMetaData`
      Returns:
        the vendor term
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getCatalogTerm

          public java.lang.String getCatalogTerm()
                                          throws java.sql.SQLException

      What's the database vendor's preferred term for "catalog"?
      Specified by:
        `getCatalogTerm` in interface `java.sql.DatabaseMetaData`
      Returns:
        the vendor term, always `null` because catalogs are not supported by database server (see JDBC CTS for details).
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### isCatalogAtStart

          public boolean isCatalogAtStart()
                                   throws java.sql.SQLException

      Does a catalog appear at the start of a qualified table name? (Otherwise it appears at the end)
      Specified by:
        `isCatalogAtStart` in interface `java.sql.DatabaseMetaData`
      Returns:
        true if it appears at the start
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getCatalogSeparator

          public java.lang.String getCatalogSeparator()
                                               throws java.sql.SQLException

      What's the separator between catalog and table name?
      Specified by:
        `getCatalogSeparator` in interface `java.sql.DatabaseMetaData`
      Returns:
        the separator string, always `null` because catalogs are not supported by database server (see JDBC CTS for details).
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSchemasInDataManipulation

          public boolean supportsSchemasInDataManipulation()
                                                    throws java.sql.SQLException

      Can a schema name be used in a data manipulation statement?
      Specified by:
        `supportsSchemasInDataManipulation` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSchemasInProcedureCalls

          public boolean supportsSchemasInProcedureCalls()
                                                  throws java.sql.SQLException

      Can a schema name be used in a procedure call statement?
      Specified by:
        `supportsSchemasInProcedureCalls` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSchemasInTableDefinitions

          public boolean supportsSchemasInTableDefinitions()
                                                    throws java.sql.SQLException

      Can a schema name be used in a table definition statement?
      Specified by:
        `supportsSchemasInTableDefinitions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSchemasInIndexDefinitions

          public boolean supportsSchemasInIndexDefinitions()
                                                    throws java.sql.SQLException

      Can a schema name be used in an index definition statement?
      Specified by:
        `supportsSchemasInIndexDefinitions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSchemasInPrivilegeDefinitions

          public boolean supportsSchemasInPrivilegeDefinitions()
                                                        throws java.sql.SQLException

      Can a schema name be used in a privilege definition statement?
      Specified by:
        `supportsSchemasInPrivilegeDefinitions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsCatalogsInDataManipulation

          public boolean supportsCatalogsInDataManipulation()
                                                     throws java.sql.SQLException

      Can a catalog name be used in a data manipulation statement?
      Specified by:
        `supportsCatalogsInDataManipulation` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsCatalogsInProcedureCalls

          public boolean supportsCatalogsInProcedureCalls()
                                                   throws java.sql.SQLException

      Can a catalog name be used in a procedure call statement?
      Specified by:
        `supportsCatalogsInProcedureCalls` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsCatalogsInTableDefinitions

          public boolean supportsCatalogsInTableDefinitions()
                                                     throws java.sql.SQLException

      Can a catalog name be used in a table definition statement?
      Specified by:
        `supportsCatalogsInTableDefinitions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsCatalogsInIndexDefinitions

          public boolean supportsCatalogsInIndexDefinitions()
                                                     throws java.sql.SQLException

      Can a catalog name be used in an index definition statement?
      Specified by:
        `supportsCatalogsInIndexDefinitions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsCatalogsInPrivilegeDefinitions

          public boolean supportsCatalogsInPrivilegeDefinitions()
                                                         throws java.sql.SQLException

      Can a catalog name be used in a privilege definition statement?
      Specified by:
        `supportsCatalogsInPrivilegeDefinitions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsPositionedDelete

          public boolean supportsPositionedDelete()
                                           throws java.sql.SQLException

      Is positioned DELETE supported?
      Specified by:
        `supportsPositionedDelete` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsPositionedUpdate

          public boolean supportsPositionedUpdate()
                                           throws java.sql.SQLException

      Is positioned UPDATE supported?
      Specified by:
        `supportsPositionedUpdate` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSelectForUpdate

          public boolean supportsSelectForUpdate()
                                          throws java.sql.SQLException

      Is SELECT for UPDATE supported?
      Specified by:
        `supportsSelectForUpdate` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsStoredProcedures

          public boolean supportsStoredProcedures()
                                           throws java.sql.SQLException

      Are stored procedure calls using the stored procedure escape syntax supported?
      Specified by:
        `supportsStoredProcedures` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSubqueriesInComparisons

          public boolean supportsSubqueriesInComparisons()
                                                  throws java.sql.SQLException

      Are subqueries in comparison expressions supported? A JDBC CompliantTM driver always returns true.
      Specified by:
        `supportsSubqueriesInComparisons` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSubqueriesInExists

          public boolean supportsSubqueriesInExists()
                                             throws java.sql.SQLException

      Are subqueries in 'exists' expressions supported? A JDBC CompliantTM driver always returns true.
      Specified by:
        `supportsSubqueriesInExists` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSubqueriesInIns

          public boolean supportsSubqueriesInIns()
                                          throws java.sql.SQLException

      Are subqueries in 'in' statements supported? A JDBC CompliantTM driver always returns true.
      Specified by:
        `supportsSubqueriesInIns` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsSubqueriesInQuantifieds

          public boolean supportsSubqueriesInQuantifieds()
                                                  throws java.sql.SQLException

      Are subqueries in quantified expressions supported? A JDBC CompliantTM driver always returns true.
      Specified by:
        `supportsSubqueriesInQuantifieds` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsCorrelatedSubqueries

          public boolean supportsCorrelatedSubqueries()
                                               throws java.sql.SQLException

      Are correlated subqueries supported? A JDBC CompliantTM driver always returns true.
      Specified by:
        `supportsCorrelatedSubqueries` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsUnion

          public boolean supportsUnion()
                                throws java.sql.SQLException

      Is SQL UNION supported?
      Specified by:
        `supportsUnion` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsUnionAll

          public boolean supportsUnionAll()
                                   throws java.sql.SQLException

      Is SQL UNION ALL supported?
      Specified by:
        `supportsUnionAll` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsOpenCursorsAcrossCommit

          public boolean supportsOpenCursorsAcrossCommit()
                                                  throws java.sql.SQLException

      Can cursors remain open across commits?
      Specified by:
        `supportsOpenCursorsAcrossCommit` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if cursors always remain open; `false` if they might not remain open
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsOpenCursorsAcrossRollback

          public boolean supportsOpenCursorsAcrossRollback()
                                                    throws java.sql.SQLException

      Can cursors remain open across rollbacks?
      Specified by:
        `supportsOpenCursorsAcrossRollback` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if cursors always remain open; `false` if they might not remain open
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsOpenStatementsAcrossCommit

          public boolean supportsOpenStatementsAcrossCommit()
                                                     throws java.sql.SQLException

      Can statements remain open across commits?
      Specified by:
        `supportsOpenStatementsAcrossCommit` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if statements always remain open; `false` if they might not remain open
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsOpenStatementsAcrossRollback

          public boolean supportsOpenStatementsAcrossRollback()
                                                       throws java.sql.SQLException

      Can statements remain open across rollbacks?
      Specified by:
        `supportsOpenStatementsAcrossRollback` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if statements always remain open; `false` if they might not remain open
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxBinaryLiteralLength

          public int getMaxBinaryLiteralLength()
                                        throws java.sql.SQLException

      How many hex characters can you have in an inline binary literal?
      Specified by:
        `getMaxBinaryLiteralLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max binary literal length in hex characters; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxCharLiteralLength

          public int getMaxCharLiteralLength()
                                      throws java.sql.SQLException

      What's the max length for a character literal?
      Specified by:
        `getMaxCharLiteralLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max literal length; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxColumnNameLength

          public int getMaxColumnNameLength()
                                     throws java.sql.SQLException

      What's the limit on column name length?
      Specified by:
        `getMaxColumnNameLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max column name length; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxColumnsInGroupBy

          public int getMaxColumnsInGroupBy()
                                     throws java.sql.SQLException

      What's the maximum number of columns in a "GROUP BY" clause?
      Specified by:
        `getMaxColumnsInGroupBy` in interface `java.sql.DatabaseMetaData`
      Returns:
        max number of columns; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxColumnsInIndex

          public int getMaxColumnsInIndex()
                                   throws java.sql.SQLException

      What's the maximum number of columns allowed in an index?
      Specified by:
        `getMaxColumnsInIndex` in interface `java.sql.DatabaseMetaData`
      Returns:
        max number of columns; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxColumnsInOrderBy

          public int getMaxColumnsInOrderBy()
                                     throws java.sql.SQLException

      What's the maximum number of columns in an "ORDER BY" clause?
      Specified by:
        `getMaxColumnsInOrderBy` in interface `java.sql.DatabaseMetaData`
      Returns:
        max number of columns; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxColumnsInSelect

          public int getMaxColumnsInSelect()
                                    throws java.sql.SQLException

      What's the maximum number of columns in a "SELECT" list?
      Specified by:
        `getMaxColumnsInSelect` in interface `java.sql.DatabaseMetaData`
      Returns:
        max number of columns; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxColumnsInTable

          public int getMaxColumnsInTable()
                                   throws java.sql.SQLException

      What's the maximum number of columns in a table?
      Specified by:
        `getMaxColumnsInTable` in interface `java.sql.DatabaseMetaData`
      Returns:
        max number of columns; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxConnections

          public int getMaxConnections()
                                throws java.sql.SQLException

      How many active connections can we have at a time to this database?
      Specified by:
        `getMaxConnections` in interface `java.sql.DatabaseMetaData`
      Returns:
        max number of active connections; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxCursorNameLength

          public int getMaxCursorNameLength()
                                     throws java.sql.SQLException

      What's the maximum cursor name length?
      Specified by:
        `getMaxCursorNameLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max cursor name length in bytes; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxIndexLength

          public int getMaxIndexLength()
                                throws java.sql.SQLException

      Retrieves the maximum number of bytes for an index, including all of the parts of the index.
      Specified by:
        `getMaxIndexLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max index length in bytes, which includes the composite of all the constituent parts of the index; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxSchemaNameLength

          public int getMaxSchemaNameLength()
                                     throws java.sql.SQLException

      What's the maximum length allowed for a schema name?
      Specified by:
        `getMaxSchemaNameLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max name length in bytes; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxProcedureNameLength

          public int getMaxProcedureNameLength()
                                        throws java.sql.SQLException

      What's the maximum length of a procedure name?
      Specified by:
        `getMaxProcedureNameLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max name length in bytes; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxCatalogNameLength

          public int getMaxCatalogNameLength()
                                      throws java.sql.SQLException

      What's the maximum length of a catalog name?
      Specified by:
        `getMaxCatalogNameLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max name length in bytes; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxRowSize

          public int getMaxRowSize()
                            throws java.sql.SQLException

      What's the maximum length of a single row?
      Specified by:
        `getMaxRowSize` in interface `java.sql.DatabaseMetaData`
      Returns:
        max row size in bytes; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### doesMaxRowSizeIncludeBlobs

          public boolean doesMaxRowSizeIncludeBlobs()
                                             throws java.sql.SQLException

      Did getMaxRowSize() include LONGVARCHAR and LONGVARBINARY blobs?
      Specified by:
        `doesMaxRowSizeIncludeBlobs` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxStatementLength

          public int getMaxStatementLength()
                                    throws java.sql.SQLException

      What's the maximum length of an SQL statement?
      Specified by:
        `getMaxStatementLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max length in bytes; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxStatements

          public int getMaxStatements()
                               throws java.sql.SQLException

      How many active statements can we have open at one time to this database?
      Specified by:
        `getMaxStatements` in interface `java.sql.DatabaseMetaData`
      Returns:
        the maximum number of statements that can be open at one time; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxTableNameLength

          public int getMaxTableNameLength()
                                    throws java.sql.SQLException

      What's the maximum length of a table name?
      Specified by:
        `getMaxTableNameLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max name length in bytes; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxTablesInSelect

          public int getMaxTablesInSelect()
                                   throws java.sql.SQLException

      What's the maximum number of tables in a SELECT statement?
      Specified by:
        `getMaxTablesInSelect` in interface `java.sql.DatabaseMetaData`
      Returns:
        the maximum number of tables allowed in a SELECT statement; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getMaxUserNameLength

          public int getMaxUserNameLength()
                                   throws java.sql.SQLException

      What's the maximum length of a user name?
      Specified by:
        `getMaxUserNameLength` in interface `java.sql.DatabaseMetaData`
      Returns:
        max user name length in bytes; a result of zero means that there is no limit or the limit is not known
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getDefaultTransactionIsolation

          public int getDefaultTransactionIsolation()
                                             throws java.sql.SQLException

      What's the database's default transaction isolation level? The values are defined in `java.sql.Connection`.
      Specified by:
        `getDefaultTransactionIsolation` in interface `java.sql.DatabaseMetaData`
      Returns:
        the default isolation level
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `Connection`

    - #### supportsTransactions

          public boolean supportsTransactions()
                                       throws java.sql.SQLException

      Are transactions supported? If not, invoking the method `commit` is a noop and the isolation level is TRANSACTION_NONE.
      Specified by:
        `supportsTransactions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if transactions are supported; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsTransactionIsolationLevel

          public boolean supportsTransactionIsolationLevel(int level)
                                                    throws java.sql.SQLException

      Does this database support the given transaction isolation level?
      Specified by:
        `supportsTransactionIsolationLevel` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `level` - the values are defined in `java.sql.Connection`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `Connection`

    - #### supportsDataDefinitionAndDataManipulationTransactions

          public boolean supportsDataDefinitionAndDataManipulationTransactions()
                                                                        throws java.sql.SQLException

      Are both data definition and data manipulation statements within a transaction supported?
      Specified by:
        `supportsDataDefinitionAndDataManipulationTransactions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsDataManipulationTransactionsOnly

          public boolean supportsDataManipulationTransactionsOnly()
                                                           throws java.sql.SQLException

      Are only data manipulation statements within a transaction supported?
      Specified by:
        `supportsDataManipulationTransactionsOnly` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### dataDefinitionCausesTransactionCommit

          public boolean dataDefinitionCausesTransactionCommit()
                                                        throws java.sql.SQLException

      Does a data definition statement within a transaction force the transaction to commit?
      Specified by:
        `dataDefinitionCausesTransactionCommit` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### dataDefinitionIgnoredInTransactions

          public boolean dataDefinitionIgnoredInTransactions()
                                                      throws java.sql.SQLException

      Is a data definition statement within a transaction ignored?
      Specified by:
        `dataDefinitionIgnoredInTransactions` in interface `java.sql.DatabaseMetaData`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getProcedures

          public java.sql.ResultSet getProcedures(java.lang.String catalog,
                                         java.lang.String schemaPattern,
                                         java.lang.String procedureNamePattern)
                                           throws java.sql.SQLException

      Gets a description of the stored procedures available in a catalog.

      Only procedure descriptions matching the schema and procedure name criteria are returned. They are ordered by PROCEDURE_SCHEM, and PROCEDURE_NAME.

      Each procedure description has the the following columns:

      1. PROCEDURE_CAT String => procedure catalog (may be null)
      2. PROCEDURE_SCHEM String => procedure schema (may be null)
      3. PROCEDURE_NAME String => procedure name
      4. reserved for future use
      5. reserved for future use
      6. reserved for future use
      7. REMARKS String => explanatory comment on the procedure
      8. PROCEDURE_TYPE short => kind of procedure:
         - procedureResultUnknown - May return a result
         - procedureNoResult - Does not return a result
         - procedureReturnsResult - Returns a result
      9. SPECIFIC_NAME String => The name which uniquely identifies this procedure within its schema.
      Specified by:
        `getProcedures` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schemaPattern` - a schema name pattern; "" retrieves those without a schema
        `procedureNamePattern` - a procedure name pattern
      Returns:
        `ResultSet` - each row is a procedure description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getSearchStringEscape()`

    - #### getProcedureColumns

          public java.sql.ResultSet getProcedureColumns(java.lang.String catalog,
                                               java.lang.String schemaPattern,
                                               java.lang.String procedureNamePattern,
                                               java.lang.String columnNamePattern)
                                                 throws java.sql.SQLException

      Retrieves a description of the given catalog's stored procedure parameter and result columns.

      Only descriptions matching the schema, procedure and parameter name criteria are returned. They are ordered by PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME and SPECIFIC_NAME. Within this, the return value, if any, is first. Next are the parameter descriptions in call order. The column descriptions follow in column number order.

      Each row in the `ResultSet` is a parameter description or column description with the following fields:

      1. PROCEDURE_CAT String => procedure catalog (may be `null`)
      2. PROCEDURE_SCHEM String => procedure schema (may be `null`)
      3. PROCEDURE_NAME String => procedure name
      4. COLUMN_NAME String => column/parameter name
      5. COLUMN_TYPE Short => kind of column/parameter:
         - procedureColumnUnknown - nobody knows
         - procedureColumnIn - IN parameter
         - procedureColumnInOut - INOUT parameter
         - procedureColumnOut - OUT parameter
         - procedureColumnReturn - procedure return value
         - procedureColumnResult - result column in `ResultSet`
      6. DATA_TYPE int => SQL type from java.sql.Types
      7. TYPE_NAME String => SQL type name, for a UDT type the type name is fully qualified
      8. PRECISION int => precision
      9. LENGTH int => length in bytes of data
      10. SCALE short => scale - null is returned for data types where SCALE is not applicable.
      11. RADIX short => radix
      12. NULLABLE short => can it contain NULL.
          - procedureNoNulls - does not allow NULL values
          - procedureNullable - allows NULL values
          - procedureNullableUnknown - nullability unknown
      13. REMARKS String => comment describing parameter/column
      14. COLUMN_DEF String => default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be `null`)
          - The string NULL (not enclosed in quotes) - if NULL was specified as the default value
          - TRUNCATE (not enclosed in quotes) - if the specified default value cannot be represented without truncation
          - NULL - if a default value was not specified
      15. SQL_DATA_TYPE int => reserved for future use
      16. SQL_DATETIME_SUB int => reserved for future use
      17. CHAR_OCTET_LENGTH int => the maximum length of binary and character based columns. For any other datatype the returned value is a NULL
      18. ORDINAL_POSITION int => the ordinal position, starting from 1, for the input and output parameters for a procedure. A value of 0 is returned if this row describes the procedure's return value. For result set columns, it is the ordinal position of the column in the result set starting from 1. If there are multiple result sets, the column ordinal positions are implementation defined.
      19. IS_NULLABLE String => ISO rules are used to determine the nullability for a column.
          - YES --- if the parameter can include NULLs
          - NO --- if the parameter cannot include NULLs
          - empty string --- if the nullability for the parameter is unknown
      20. SPECIFIC_NAME String => the name which uniquely identifies this procedure within its schema.

      Note: Some databases may not return the column descriptions for a procedure.

      The PRECISION column represents the specified column size for the given column. For numeric data, this is the maximum precision. For character data, this is the length in characters. For datetime datatypes, this is the length in characters of the String representation (assuming the maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, this is the length in bytes. Null is returned for data types where the column size is not applicable.

      Specified by:
        `getProcedureColumns` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; `null` means that the catalog name should not be used to narrow the search
        `schemaPattern` - a schema name pattern; must match the schema name as it is stored in the database; "" retrieves those without a schema; `null` means that the schema name should not be used to narrow the search
        `procedureNamePattern` - a procedure name pattern; must match the procedure name as it is stored in the database
        `columnNamePattern` - a column name pattern; must match the column name as it is stored in the database
      Returns:
        `ResultSet` - each row describes a stored procedure parameter or column
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getSearchStringEscape()`

    - #### getTables

          public java.sql.ResultSet getTables(java.lang.String catalog,
                                     java.lang.String schemaPattern,
                                     java.lang.String tableNamePattern,
                                     java.lang.String[] types)
                                       throws java.sql.SQLException

      Retrieves a description of the tables available in the given catalog. Only table descriptions matching the catalog, schema, table name and type criteria are returned. They are ordered by `TABLE_TYPE`, `TABLE_CAT`, `TABLE_SCHEM` and `TABLE_NAME`.

      Each table description has the following columns:

      1. TABLE_CAT String `=>` table catalog (may be `null`)
      2. TABLE_SCHEM String `=>` table schema (may be `null`)
      3. TABLE_NAME String `=>` table name
      4. TABLE_TYPE String `=>` table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
      5. REMARKS String `=>` explanatory comment on the table
      6. TYPE_CAT String `=>` the types catalog (may be `null`)
      7. TYPE_SCHEM String `=>` the types schema (may be `null`)
      8. TYPE_NAME String `=>` type name (may be `null`)
      9. SELF_REFERENCING_COL_NAME String `=>` name of the designated "identifier" column of a typed table (may be `null`)
      10. REF_GENERATION String `=>` specifies how values in SELF_REFERENCING_COL_NAME are created. Values are "SYSTEM", "USER", "DERIVED". (may be `null`)

      Note: Some databases may not return information for all tables.

      Specified by:
        `getTables` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; `null` means that the catalog name should not be used to narrow the search
        `schemaPattern` - a schema name pattern; must match the schema name as it is stored in the database; "" retrieves those without a schema; `null` means that the schema name should not be used to narrow the search
        `tableNamePattern` - a table name pattern; must match the table name as it is stored in the database
        `types` - a list of table types, which must be from the list of table types returned from `getTableTypes()`,to include; `null` returns all types
      Returns:
        `ResultSet` - each row is a table description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getSearchStringEscape()`

    - #### getSchemas

          public java.sql.ResultSet getSchemas()
                                        throws java.sql.SQLException

      Gets the schema names available in this database. The results are ordered by schema name.

      The schema columns are:

      1. TABLE_SCHEM String => schema name
      2. TABLE_CATALOG String => catalog name (may be `null`)
      Specified by:
        `getSchemas` in interface `java.sql.DatabaseMetaData`
      Returns:
        `ResultSet` - each row has a single String column that is a schema name
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getCatalogs

          public java.sql.ResultSet getCatalogs()
                                         throws java.sql.SQLException

      Gets the catalog names available in this database. The results are ordered by catalog name.

      The catalog column is:

      1. TABLE_CAT String => catalog name
      Specified by:
        `getCatalogs` in interface `java.sql.DatabaseMetaData`
      Returns:
        `ResultSet` - each row has a single String column that is a catalog name
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getTableTypes

          public java.sql.ResultSet getTableTypes()
                                           throws java.sql.SQLException

      Gets the table types available in this database. The results are ordered by table type.

      The table type is:

      1. TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
      Specified by:
        `getTableTypes` in interface `java.sql.DatabaseMetaData`
      Returns:
        `ResultSet` - each row has a single String column that is a table type
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getColumns

          public java.sql.ResultSet getColumns(java.lang.String catalog,
                                      java.lang.String schemaPattern,
                                      java.lang.String tableNamePattern,
                                      java.lang.String columnNamePattern)
                                        throws java.sql.SQLException

      Retrieves a description of table columns available in the specified catalog.

      Only column descriptions matching the catalog, schema, table and column name criteria are returned. They are ordered by `TABLE_CAT`,`TABLE_SCHEM`, `TABLE_NAME`, and `ORDINAL_POSITION`.

      Each column description has the following columns:

      1. TABLE_CAT String => table catalog (may be `null`)
      2. TABLE_SCHEM String => table schema (may be `null`)
      3. TABLE_NAME String => table name
      4. COLUMN_NAME String => column name
      5. DATA_TYPE int => SQL type from java.sql.Types
      6. TYPE_NAME String => Data source dependent type name, for a UDT the type name is fully qualified
      7. COLUMN_SIZE int => column size.
      8. BUFFER_LENGTH is not used.
      9. DECIMAL_DIGITS int => the number of fractional digits. Null is returned for data types where DECIMAL_DIGITS is not applicable.
      10. NUM_PREC_RADIX int => Radix (typically either 10 or 2)
      11. NULLABLE int => is NULL allowed.
          - columnNoNulls - might not allow `NULL` values
          - columnNullable - definitely allows `NULL` values
          - columnNullableUnknown - nullability unknown
      12. REMARKS String => comment describing column (may be `null`)
      13. COLUMN_DEF String => default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be `null`)
      14. SQL_DATA_TYPE int => unused
      15. SQL_DATETIME_SUB int => unused
      16. CHAR_OCTET_LENGTH int => for char types the maximum number of bytes in the column
      17. ORDINAL_POSITION int => index of column in table (starting at 1)
      18. IS_NULLABLE String => ISO rules are used to determine the nullability for a column.
          - YES --- if the column can include NULLs
          - NO --- if the column cannot include NULLs
          - empty string --- if the nullability for the column is unknown
      19. SCOPE_CATALOG String => catalog of table that is the scope of a reference attribute (`null` if DATA_TYPE isn't REF)
      20. SCOPE_SCHEMA String => schema of table that is the scope of a reference attribute (`null` if the DATA_TYPE isn't REF)
      21. SCOPE_TABLE String => table name that this the scope of a reference attribute (`null` if the DATA_TYPE isn't REF)
      22. SOURCE_DATA_TYPE short => source type of a distinct type or user-generated Ref type, SQL type from java.sql.Types (`null` if DATA_TYPE isn't DISTINCT or user-generated REF)
      23. IS_AUTOINCREMENT String => Indicates whether this column is auto incremented
          - YES --- if the column is auto incremented
          - NO --- if the column is not auto incremented
          - empty string --- if it cannot be determined whether the column is auto incremented
      24. IS_GENERATEDCOLUMN String => Indicates whether this is a generated column
          - YES --- if this a generated column
          - NO --- if this not a generated column
          - empty string --- if it cannot be determined whether this is a generated column
      25. JB_IS_IDENTITY String => Indicates whether this column is an identity column (NOTE: Jaybird specific column; retrieve by name!). There is subtle difference with the meaning of `IS_AUTOINCREMENT`. This column indicates if the column is a true identity column.
          - YES --- if the column is an identity column
          - NO --- if the column is not an identity column
      26. JB_IDENTITY_TYPE String => Type of identity column (NOTE: Jaybird specific column; retrieve by name!)
          - ALWAYS --- for a GENERATED ALWAYS AS IDENTITY column (not yet supported in Firebird 3!)
          - BY DEFAULT --- for a GENERATED BY DEFAULT AS IDENTITY column
          - null --- if the column is not an identity type (or the identity type is unknown)

      The COLUMN_SIZE column specifies the column size for the given column. For numeric data, this is the maximum precision. For character data, this is the length in characters. For datetime datatypes, this is the length in characters of the String representation (assuming the maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, this is the length in bytes. Null is returned for data types where the column size is not applicable.

      Specified by:
        `getColumns` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; `null` means that the catalog name should not be used to narrow the search
        `schemaPattern` - a schema name pattern; must match the schema name as it is stored in the database; "" retrieves those without a schema; `null` means that the schema name should not be used to narrow the search
        `tableNamePattern` - a table name pattern; must match the table name as it is stored in the database
        `columnNamePattern` - a column name pattern; must match the column name as it is stored in the database
      Returns:
        `ResultSet` - each row is a column description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getSearchStringEscape()`

    - #### getColumnPrivileges

          public java.sql.ResultSet getColumnPrivileges(java.lang.String catalog,
                                               java.lang.String schema,
                                               java.lang.String table,
                                               java.lang.String columnNamePattern)
                                                 throws java.sql.SQLException

      Gets a description of the access rights for a table's columns.

      Only privileges matching the column name criteria are returned. They are ordered by COLUMN_NAME and PRIVILEGE.

      Each privilige description has the following columns:

      1. TABLE_CAT String => table catalog (may be null)
      2. TABLE_SCHEM String => table schema (may be null)
      3. TABLE_NAME String => table name
      4. COLUMN_NAME String => column name
      5. GRANTOR => grantor of access (may be null)
      6. GRANTEE String => grantee of access
      7. PRIVILEGE String => name of access (SELECT, INSERT, UPDATE, REFRENCES, ...)
      8. IS_GRANTABLE String => "YES" if grantee is permitted to grant to others; "NO" if not; null if unknown
      Specified by:
        `getColumnPrivileges` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schema` - a schema name; "" retrieves those without a schema
        `table` - a table name
        `columnNamePattern` - a column name pattern
      Returns:
        `ResultSet` - each row is a column privilege description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getSearchStringEscape()`

    - #### getTablePrivileges

          public java.sql.ResultSet getTablePrivileges(java.lang.String catalog,
                                              java.lang.String schemaPattern,
                                              java.lang.String tableNamePattern)
                                                throws java.sql.SQLException

      Gets a description of the access rights for each table available in a catalog. Note that a table privilege applies to one or more columns in the table. It would be wrong to assume that this priviledge applies to all columns (this may be true for some systems but is not true for all.)

      Only privileges matching the schema and table name criteria are returned. They are ordered by TABLE_SCHEM, TABLE_NAME, and PRIVILEGE.

      Each privilige description has the following columns:

      1. TABLE_CAT String => table catalog (may be null)
      2. TABLE_SCHEM String => table schema (may be null)
      3. TABLE_NAME String => table name
      4. GRANTOR => grantor of access (may be null)
      5. GRANTEE String => grantee of access
      6. PRIVILEGE String => name of access (SELECT, INSERT, UPDATE, REFRENCES, ...)
      7. IS_GRANTABLE String => "YES" if grantee is permitted to grant to others; "NO" if not; null if unknown
      Specified by:
        `getTablePrivileges` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schemaPattern` - a schema name pattern; "" retrieves those without a schema
        `tableNamePattern` - a table name pattern
      Returns:
        `ResultSet` - each row is a table privilege description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getSearchStringEscape()`

    - #### buildTablePrivilegeRSMetaData

          protected final RowDescriptor buildTablePrivilegeRSMetaData()

    - #### processTablePrivileges

          protected final FBResultSet processTablePrivileges(RowDescriptor rowDescriptor,
                                           java.sql.ResultSet fbTablePrivileges)
                                                      throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### getBestRowIdentifier

          public java.sql.ResultSet getBestRowIdentifier(java.lang.String catalog,
                                                java.lang.String schema,
                                                java.lang.String table,
                                                int scope,
                                                boolean nullable)
                                                  throws java.sql.SQLException

      Gets a description of a table's optimal set of columns that uniquely identifies a row. They are ordered by SCOPE.

      Each column description has the following columns:

      1. SCOPE short => actual scope of result
         - bestRowTemporary - very temporary, while using row
         - bestRowTransaction - valid for remainder of current transaction
         - bestRowSession - valid for remainder of current session
      2. COLUMN_NAME String => column name
      3. DATA_TYPE short => SQL data type from java.sql.Types
      4. TYPE_NAME String => Data source dependent type name, for a UDT the type name is fully qualified
      5. COLUMN_SIZE int => precision
      6. BUFFER_LENGTH int => not used
      7. DECIMAL_DIGITS short => scale
      8. PSEUDO_COLUMN short => is this a pseudo column like an Oracle ROWID
         - bestRowUnknown - may or may not be pseudo column
         - bestRowNotPseudo - is NOT a pseudo column
         - bestRowPseudo - is a pseudo column
      Specified by:
        `getBestRowIdentifier` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schema` - a schema name; "" retrieves those without a schema
        `table` - a table name
        `scope` - the scope of interest; use same values as SCOPE
        `nullable` - include columns that are nullable?
      Returns:
        `ResultSet` - each row is a column description
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getVersionColumns

          public java.sql.ResultSet getVersionColumns(java.lang.String catalog,
                                             java.lang.String schema,
                                             java.lang.String table)
                                               throws java.sql.SQLException

      Gets a description of a table's columns that are automatically updated when any value in a row is updated. They are unordered.

      Each column description has the following columns:

      1. SCOPE short => is not used
      2. COLUMN_NAME String => column name
      3. DATA_TYPE short => SQL data type from java.sql.Types
      4. TYPE_NAME String => Data source dependent type name
      5. COLUMN_SIZE int => precision
      6. BUFFER_LENGTH int => length of column value in bytes
      7. DECIMAL_DIGITS short => scale
      8. PSEUDO_COLUMN short => is this a pseudo column like an Oracle ROWID
         - versionColumnUnknown - may or may not be pseudo column
         - versionColumnNotPseudo - is NOT a pseudo column
         - versionColumnPseudo - is a pseudo column
      Specified by:
        `getVersionColumns` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schema` - a schema name; "" retrieves those without a schema
        `table` - a table name
      Returns:
        `ResultSet` - each row is a column description
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getPrimaryKeys

          public java.sql.ResultSet getPrimaryKeys(java.lang.String catalog,
                                          java.lang.String schema,
                                          java.lang.String table)
                                            throws java.sql.SQLException

      Gets a description of a table's primary key columns. They are ordered by COLUMN_NAME.

      Each primary key column description has the following columns:

      1. TABLE_CAT String => table catalog (may be null)
      2. TABLE_SCHEM String => table schema (may be null)
      3. TABLE_NAME String => table name
      4. COLUMN_NAME String => column name
      5. KEY_SEQ short => sequence number within primary key
      6. PK_NAME String => primary key name (may be null)
      Specified by:
        `getPrimaryKeys` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schema` - a schema name; "" retrieves those without a schema
        `table` - a table name
      Returns:
        `ResultSet` - each row is a primary key column description
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getImportedKeys

          public java.sql.ResultSet getImportedKeys(java.lang.String catalog,
                                           java.lang.String schema,
                                           java.lang.String table)
                                             throws java.sql.SQLException

      Gets a description of the primary key columns that are referenced by a table's foreign key columns (the primary keys imported by a table). They are ordered by PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ.

      Each primary key column description has the following columns:

      1. PKTABLE_CAT String => primary key table catalog being imported (may be null)
      2. PKTABLE_SCHEM String => primary key table schema being imported (may be null)
      3. PKTABLE_NAME String => primary key table name being imported
      4. PKCOLUMN_NAME String => primary key column name being imported
      5. FKTABLE_CAT String => foreign key table catalog (may be null)
      6. FKTABLE_SCHEM String => foreign key table schema (may be null)
      7. FKTABLE_NAME String => foreign key table name
      8. FKCOLUMN_NAME String => foreign key column name
      9. KEY_SEQ short => sequence number within foreign key
      10. UPDATE_RULE short => What happens to foreign key when primary is updated:
          - importedNoAction - do not allow update of primary key if it has been imported
          - importedKeyCascade - change imported key to agree with primary key update
          - importedKeySetNull - change imported key to NULL if its primary key has been updated
          - importedKeySetDefault - change imported key to default values if its primary key has been updated
          - importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)
      11. DELETE_RULE short => What happens to the foreign key when primary is deleted.
          - importedKeyNoAction - do not allow delete of primary key if it has been imported
          - importedKeyCascade - delete rows that import a deleted key
          - importedKeySetNull - change imported key to NULL if its primary key has been deleted
          - importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)
          - importedKeySetDefault - change imported key to default if its primary key has been deleted
      12. FK_NAME String => foreign key name (may be null)
      13. PK_NAME String => primary key name (may be null)
      14. DEFERRABILITY short => can the evaluation of foreign key constraints be deferred until commit
          - importedKeyInitiallyDeferred - see SQL92 for definition
          - importedKeyInitiallyImmediate - see SQL92 for definition
          - importedKeyNotDeferrable - see SQL92 for definition
      Specified by:
        `getImportedKeys` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schema` - a schema name; "" retrieves those without a schema
        `table` - a table name
      Returns:
        `ResultSet` - each row is a primary key column description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getExportedKeys(java.lang.String, java.lang.String, java.lang.String)`

    - #### getExportedKeys

          public java.sql.ResultSet getExportedKeys(java.lang.String catalog,
                                           java.lang.String schema,
                                           java.lang.String table)
                                             throws java.sql.SQLException

      Gets a description of the foreign key columns that reference a table's primary key columns (the foreign keys exported by a table). They are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and KEY_SEQ.

      Each foreign key column description has the following columns:

      1. PKTABLE_CAT String => primary key table catalog (may be null)
      2. PKTABLE_SCHEM String => primary key table schema (may be null)
      3. PKTABLE_NAME String => primary key table name
      4. PKCOLUMN_NAME String => primary key column name
      5. FKTABLE_CAT String => foreign key table catalog (may be null) being exported (may be null)
      6. FKTABLE_SCHEM String => foreign key table schema (may be null) being exported (may be null)
      7. FKTABLE_NAME String => foreign key table name being exported
      8. FKCOLUMN_NAME String => foreign key column name being exported
      9. KEY_SEQ short => sequence number within foreign key
      10. UPDATE_RULE short => What happens to foreign key when primary is updated:
          - importedNoAction - do not allow update of primary key if it has been imported
          - importedKeyCascade - change imported key to agree with primary key update
          - importedKeySetNull - change imported key to NULL if its primary key has been updated
          - importedKeySetDefault - change imported key to default values if its primary key has been updated
          - importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)
      11. DELETE_RULE short => What happens to the foreign key when primary is deleted.
          - importedKeyNoAction - do not allow delete of primary key if it has been imported
          - importedKeyCascade - delete rows that import a deleted key
          - importedKeySetNull - change imported key to NULL if its primary key has been deleted
          - importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)
          - importedKeySetDefault - change imported key to default if its primary key has been deleted
      12. FK_NAME String => foreign key name (may be null)
      13. PK_NAME String => primary key name (may be null)
      14. DEFERRABILITY short => can the evaluation of foreign key constraints be deferred until commit
          - importedKeyInitiallyDeferred - see SQL92 for definition
          - importedKeyInitiallyImmediate - see SQL92 for definition
          - importedKeyNotDeferrable - see SQL92 for definition
      Specified by:
        `getExportedKeys` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schema` - a schema name; "" retrieves those without a schema
        `table` - a table name
      Returns:
        `ResultSet` - each row is a foreign key column description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getImportedKeys(java.lang.String, java.lang.String, java.lang.String)`

    - #### getCrossReference

          public 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)
                                               throws java.sql.SQLException

      Gets a description of the foreign key columns in the foreign key table that reference the primary key columns of the primary key table (describe how one table imports another's key). This should normally return a single foreign key/primary key pair (most tables only import a foreign key from a table once.) They are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and KEY_SEQ.

      Each foreign key column description has the following columns:

      1. PKTABLE_CAT String => primary key table catalog (may be null)
      2. PKTABLE_SCHEM String => primary key table schema (may be null)
      3. PKTABLE_NAME String => primary key table name
      4. PKCOLUMN_NAME String => primary key column name
      5. FKTABLE_CAT String => foreign key table catalog (may be null) being exported (may be null)
      6. FKTABLE_SCHEM String => foreign key table schema (may be null) being exported (may be null)
      7. FKTABLE_NAME String => foreign key table name being exported
      8. FKCOLUMN_NAME String => foreign key column name being exported
      9. KEY_SEQ short => sequence number within foreign key
      10. UPDATE_RULE short => What happens to foreign key when primary is updated:
          - importedNoAction - do not allow update of primary key if it has been imported
          - importedKeyCascade - change imported key to agree with primary key update
          - importedKeySetNull - change imported key to NULL if its primary key has been updated
          - importedKeySetDefault - change imported key to default values if its primary key has been updated
          - importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)
      11. DELETE_RULE short => What happens to the foreign key when primary is deleted.
          - importedKeyNoAction - do not allow delete of primary key if it has been imported
          - importedKeyCascade - delete rows that import a deleted key
          - importedKeySetNull - change imported key to NULL if its primary key has been deleted
          - importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)
          - importedKeySetDefault - change imported key to default if its primary key has been deleted
      12. FK_NAME String => foreign key name (may be null)
      13. PK_NAME String => primary key name (may be null)
      14. DEFERRABILITY short => can the evaluation of foreign key constraints be deferred until commit
          - importedKeyInitiallyDeferred - see SQL92 for definition
          - importedKeyInitiallyImmediate - see SQL92 for definition
          - importedKeyNotDeferrable - see SQL92 for definition
      Specified by:
        `getCrossReference` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `primaryCatalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `primarySchema` - a schema name; "" retrieves those without a schema
        `primaryTable` - the table name that exports the key
        `foreignCatalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `foreignSchema` - a schema name; "" retrieves those without a schema
        `foreignTable` - the table name that imports the key
      Returns:
        `ResultSet` - each row is a foreign key column description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `getImportedKeys(java.lang.String, java.lang.String, java.lang.String)`

    - #### getTypeInfo

          public java.sql.ResultSet getTypeInfo()
                                         throws java.sql.SQLException

      Gets a description of all the standard SQL types supported by this database. They are ordered by DATA_TYPE and then by how closely the data type maps to the corresponding JDBC SQL type.

      Each type description has the following columns:

      1. TYPE_NAME String => Type name
      2. DATA_TYPE short => SQL data type from java.sql.Types
      3. PRECISION int => maximum precision
      4. LITERAL_PREFIX String => prefix used to quote a literal (may be null)
      5. LITERAL_SUFFIX String => suffix used to quote a literal (may be null)
      6. CREATE_PARAMS String => parameters used in creating the type (may be null)
      7. NULLABLE short => can you use NULL for this type?
         - typeNoNulls - does not allow NULL values
         - typeNullable - allows NULL values
         - typeNullableUnknown - nullability unknown
      8. CASE_SENSITIVE boolean=> is it case sensitive?
      9. SEARCHABLE short => can you use "WHERE" based on this type:
         - typePredNone - No support
         - typePredChar - Only supported with WHERE .. LIKE
         - typePredBasic - Supported except for WHERE .. LIKE
         - typeSearchable - Supported for all WHERE ..
      10. UNSIGNED_ATTRIBUTE boolean => is it unsigned?
      11. FIXED_PREC_SCALE boolean => can it be a money value?
      12. AUTO_INCREMENT boolean => can it be used for an auto-increment value?
      13. LOCAL_TYPE_NAME String => localized version of type name (may be null)
      14. MINIMUM_SCALE short => minimum scale supported
      15. MAXIMUM_SCALE short => maximum scale supported
      16. SQL_DATA_TYPE int => unused
      17. SQL_DATETIME_SUB int => unused
      18. NUM_PREC_RADIX int => usually 2 or 10
      Specified by:
        `getTypeInfo` in interface `java.sql.DatabaseMetaData`
      Returns:
        `ResultSet` - each row is an SQL type description
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getIndexInfo

          public java.sql.ResultSet getIndexInfo(java.lang.String catalog,
                                        java.lang.String schema,
                                        java.lang.String table,
                                        boolean unique,
                                        boolean approximate)
                                          throws java.sql.SQLException

      Gets a description of a table's indices and statistics. They are ordered by NON_UNIQUE, TYPE, INDEX_NAME, and ORDINAL_POSITION.

      Each index column description has the following columns:

      1. TABLE_CAT String => table catalog (may be null)
      2. TABLE_SCHEM String => table schema (may be null)
      3. TABLE_NAME String => table name
      4. NON_UNIQUE boolean => Can index values be non-unique? false when TYPE is tableIndexStatistic
      5. INDEX_QUALIFIER String => index catalog (may be null); null when TYPE is tableIndexStatistic
      6. INDEX_NAME String => index name; null when TYPE is tableIndexStatistic
      7. TYPE short => index type:
         - tableIndexStatistic - this identifies table statistics that are returned in conjuction with a table's index descriptions
         - tableIndexClustered - this is a clustered index
         - tableIndexHashed - this is a hashed index
         - tableIndexOther - this is some other style of index
      8. ORDINAL_POSITION short => column sequence number within index; zero when TYPE is tableIndexStatistic
      9. COLUMN_NAME String => column name; null when TYPE is tableIndexStatistic
      10. ASC_OR_DESC String => column sort sequence, "A" => ascending, "D" => descending, may be null if sort sequence is not supported; null when TYPE is tableIndexStatistic
      11. CARDINALITY int => When TYPE is tableIndexStatistic, then this is the number of rows in the table; otherwise, it is the number of unique values in the index.
      12. PAGES int => When TYPE is tableIndexStatisic then this is the number of pages used for the table, otherwise it is the number of pages used for the current index.
      13. FILTER_CONDITION String => Filter condition, if any. (may be null)
      Specified by:
        `getIndexInfo` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteria
        `schema` - a schema name; "" retrieves those without a schema
        `table` - a table name
        `unique` - when true, return only indices for unique values; when false, return indices regardless of whether unique or not
        `approximate` - when true, result is allowed to reflect approximate or out of data values; when false, results are requested to be accurate
      Returns:
        `ResultSet` - each row is an index column description
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsResultSetType

          public boolean supportsResultSetType(int type)
                                        throws java.sql.SQLException

      Does the database support the given result set type?
      Specified by:
        `supportsResultSetType` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - defined in `java.sql.ResultSet`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        `Connection`, What Is in the JDBC 2.0 API

    - #### supportsResultSetConcurrency

          public boolean supportsResultSetConcurrency(int type,
                                             int concurrency)
                                               throws java.sql.SQLException

      Does the database support the concurrency type in combination with the given result set type?
      Specified by:
        `supportsResultSetConcurrency` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - defined in `java.sql.ResultSet`
        `concurrency` - type defined in `java.sql.ResultSet`
      Returns:
        `true` if so; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        `Connection`, What Is in the JDBC 2.0 API

    - #### ownUpdatesAreVisible

          public boolean ownUpdatesAreVisible(int type)
                                       throws java.sql.SQLException

      Indicates whether a result set's own updates are visible.
      Specified by:
        `ownUpdatesAreVisible` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        `true` if updates are visible for the result set type; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### ownDeletesAreVisible

          public boolean ownDeletesAreVisible(int type)
                                       throws java.sql.SQLException

      Indicates whether a result set's own deletes are visible.
      Specified by:
        `ownDeletesAreVisible` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        `true` if deletes are visible for the result set type; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### ownInsertsAreVisible

          public boolean ownInsertsAreVisible(int type)
                                       throws java.sql.SQLException

      Indicates whether a result set's own inserts are visible.
      Specified by:
        `ownInsertsAreVisible` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        `true` if inserts are visible for the result set type; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### othersUpdatesAreVisible

          public boolean othersUpdatesAreVisible(int type)
                                          throws java.sql.SQLException

      Indicates whether updates made by others are visible.
      Specified by:
        `othersUpdatesAreVisible` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        `true` if updates made by others are visible for the result set type; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### othersDeletesAreVisible

          public boolean othersDeletesAreVisible(int type)
                                          throws java.sql.SQLException

      Indicates whether deletes made by others are visible.
      Specified by:
        `othersDeletesAreVisible` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        `true` if deletes made by others are visible for the result set type; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### othersInsertsAreVisible

          public boolean othersInsertsAreVisible(int type)
                                          throws java.sql.SQLException

      Indicates whether inserts made by others are visible.
      Specified by:
        `othersInsertsAreVisible` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        `true` if inserts made by others are visible for the result set type; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### updatesAreDetected

          public boolean updatesAreDetected(int type)
                                     throws java.sql.SQLException

      Indicates whether or not a visible row update can be detected by calling the method `ResultSet.rowUpdated`.
      Specified by:
        `updatesAreDetected` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        `true` if changes are detected by the result set type; `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### deletesAreDetected

          public boolean deletesAreDetected(int type)
                                     throws java.sql.SQLException

      Indicates whether or not a visible row delete can be detected by calling ResultSet.rowDeleted(). If deletesAreDetected() returns false, then deleted rows are removed from the result set.
      Specified by:
        `deletesAreDetected` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        true if changes are detected by the resultset type
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### insertsAreDetected

          public boolean insertsAreDetected(int type)
                                     throws java.sql.SQLException

      Indicates whether or not a visible row insert can be detected by calling ResultSet.rowInserted().
      Specified by:
        `insertsAreDetected` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `type` - result set type, i.e. ResultSet.TYPE_XXX
      Returns:
        true if changes are detected by the resultset type
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### supportsBatchUpdates

          public boolean supportsBatchUpdates()
                                       throws java.sql.SQLException

      Indicates whether the driver supports batch updates.
      Specified by:
        `supportsBatchUpdates` in interface `java.sql.DatabaseMetaData`
      Returns:
        true if the driver supports batch updates; false otherwise
      Throws:
        `java.sql.SQLException`
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### getUDTs

          public java.sql.ResultSet getUDTs(java.lang.String catalog,
                                   java.lang.String schemaPattern,
                                   java.lang.String typeNamePattern,
                                   int[] types)
                                     throws java.sql.SQLException

      UDTs are not supported by Firebird. This method will always return an empty ResultSet.
      Specified by:
        `getUDTs` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getConnection

          public java.sql.Connection getConnection()
                                            throws java.sql.SQLException

      Retrieves the connection that produced this metadata object.
      Specified by:
        `getConnection` in interface `java.sql.DatabaseMetaData`
      Returns:
        the connection that produced this metadata object
      Throws:
        `java.sql.SQLException`
      Since:
        1.2
      See Also:
        What Is in the JDBC 2.0 API

    - #### getAttributes

          public java.sql.ResultSet getAttributes(java.lang.String catalog,
                                         java.lang.String schemaPattern,
                                         java.lang.String typeNamePattern,
                                         java.lang.String attributeNamePattern)
                                           throws java.sql.SQLException

      UDTs are not supported by Firebird. This method will always return an empty ResultSet.
      Specified by:
        `getAttributes` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### supportsSavepoints

          public boolean supportsSavepoints()
                                     throws java.sql.SQLException

      Retrieves whether this database supports savepoints.
      Specified by:
        `supportsSavepoints` in interface `java.sql.DatabaseMetaData`
      Returns:
        true if savepoints are supported; false otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsNamedParameters

          public boolean supportsNamedParameters()
                                          throws java.sql.SQLException

      Retrieve whether this database supports named parameters.
      Specified by:
        `supportsNamedParameters` in interface `java.sql.DatabaseMetaData`
      Returns:
        true if named parameters are supported, false otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsMultipleOpenResults

          public boolean supportsMultipleOpenResults()
                                              throws java.sql.SQLException

      Retrieves whether it is possible to have multiple `ResultSet` objects returned from a `CallableStatement` object simultaneously.
      Specified by:
        `supportsMultipleOpenResults` in interface `java.sql.DatabaseMetaData`
      Returns:
        true if multiple open ResultSets are supported, false otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### supportsGetGeneratedKeys

          public boolean supportsGetGeneratedKeys()
                                           throws java.sql.SQLException

      Retrieves whether auto-generated keys can be retrieved after creation.
      Specified by:
        `supportsGetGeneratedKeys` in interface `java.sql.DatabaseMetaData`
      Returns:
        true if auto-generated keys can be retrieved, false otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getSuperTypes

          public java.sql.ResultSet getSuperTypes(java.lang.String catalog,
                                         java.lang.String schemaPattern,
                                         java.lang.String tableNamePattern)
                                           throws java.sql.SQLException

      Supertypes are not supported by Firebird. This method will always return an empty ResultSet.
      Specified by:
        `getSuperTypes` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getSuperTables

          public java.sql.ResultSet getSuperTables(java.lang.String catalog,
                                          java.lang.String schemaPattern,
                                          java.lang.String tableNamePattern)
                                            throws java.sql.SQLException

      Supertables are not supported by Firebird. This method will always return an empty ResultSet.
      Specified by:
        `getSuperTables` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### supportsResultSetHoldability

          public boolean supportsResultSetHoldability(int holdability)
                                               throws java.sql.SQLException

      Retrieves whether this database supports the given results holdability.
      Specified by:
        `supportsResultSetHoldability` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `holdability` - one of the following constants: `ResultSet.HOLD_CURSORS_OVER_COMMIT` or `ResultSet.CLOSE_CURSORS_AT_COMMIT`
      Returns:
        `true` if the holdability is supported, `false` otherwise
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getResultSetHoldability

          public int getResultSetHoldability()
                                      throws java.sql.SQLException

      Retrieves the default holdability of this `ResultSet`.
      Specified by:
        `getResultSetHoldability` in interface `java.sql.DatabaseMetaData`
      Returns:
        the default holdability
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getDatabaseMajorVersion

          public int getDatabaseMajorVersion()
                                      throws java.sql.SQLException

      Specified by:
        `getDatabaseMajorVersion` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getDatabaseMinorVersion

          public int getDatabaseMinorVersion()
                                      throws java.sql.SQLException

      Specified by:
        `getDatabaseMinorVersion` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getOdsMajorVersion

          public int getOdsMajorVersion()
                                 throws java.sql.SQLException

      Description copied from interface: `FirebirdDatabaseMetaData`
      Get the major version of the ODS (On-Disk Structure) of the database.
      Specified by:
        `getOdsMajorVersion` in interface `FirebirdDatabaseMetaData`
      Returns:
        The major version number of the database itself
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getOdsMinorVersion

          public int getOdsMinorVersion()
                                 throws java.sql.SQLException

      Description copied from interface: `FirebirdDatabaseMetaData`
      Get the minor version of the ODS (On-Disk Structure) of the database.
      Specified by:
        `getOdsMinorVersion` in interface `FirebirdDatabaseMetaData`
      Returns:
        The minor version number of the database itself
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getDatabaseDialect

          public int getDatabaseDialect()
                                 throws java.sql.SQLException

      Description copied from interface: `FirebirdDatabaseMetaData`
      Get the dialect of the database.
      Specified by:
        `getDatabaseDialect` in interface `FirebirdDatabaseMetaData`
      Returns:
        The dialect of the database
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `FirebirdDatabaseMetaData.getConnectionDialect()`

    - #### getConnectionDialect

          public int getConnectionDialect()
                                   throws java.sql.SQLException

      Description copied from interface: `FirebirdDatabaseMetaData`
      Get the dialect of the connection.

      The connection dialect may be different from the database dialect.

      Specified by:
        `getConnectionDialect` in interface `FirebirdDatabaseMetaData`
      Returns:
        The dialect of the connection
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      See Also:
        `FirebirdDatabaseMetaData.getDatabaseDialect()`

    - #### getSQLStateType

          public int getSQLStateType()
                              throws java.sql.SQLException

      Indicates whether the SQLSTATEs returned by SQLException.getSQLState is X/Open (now known as Open Group) SQL CLI or SQL99
      Specified by:
        `getSQLStateType` in interface `java.sql.DatabaseMetaData`
      Returns:
        the type of SQLSTATEs
      Throws:
        `java.sql.SQLException` - should never be thrown in this implementation

    - #### supportsStoredFunctionsUsingCallSyntax

          public boolean supportsStoredFunctionsUsingCallSyntax()
                                                         throws java.sql.SQLException

      Specified by:
        `supportsStoredFunctionsUsingCallSyntax` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### autoCommitFailureClosesAllResultSets

          public boolean autoCommitFailureClosesAllResultSets()
                                                       throws java.sql.SQLException

      Specified by:
        `autoCommitFailureClosesAllResultSets` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getClientInfoProperties

          public java.sql.ResultSet getClientInfoProperties()
                                                     throws java.sql.SQLException

      Retrieves a list of the client info properties that the driver supports. The result set contains the following columns

      1. NAME String=> The name of the client info property
      2. MAX_LEN int=> The maximum length of the value for the property
      3. DEFAULT_VALUE String=> The default value of the property
      4. DESCRIPTION String=> A description of the property. This will typically contain information as to where this property is stored in the database.

      The `ResultSet` is sorted by the NAME column

      Specified by:
        `getClientInfoProperties` in interface `java.sql.DatabaseMetaData`
      Returns:
        A `ResultSet` object; each row is a supported client info property

      Throws:
        `java.sql.SQLException` - if a database access error occurs

      Since:
        1.6

    - #### getFunctionColumns

          public java.sql.ResultSet getFunctionColumns(java.lang.String catalog,
                                              java.lang.String schemaPattern,
                                              java.lang.String functionNamePattern,
                                              java.lang.String columnNamePattern)
                                                throws java.sql.SQLException

      Retrieves a description of the given catalog's system or user function parameters and return type.

      Only descriptions matching the schema, function and parameter name criteria are returned. They are ordered by `FUNCTION_CAT`, `FUNCTION_SCHEM`, `FUNCTION_NAME` and `SPECIFIC_ NAME`. Within this, the return value, if any, is first. Next are the parameter descriptions in call order. The column descriptions follow in column number order.

      Each row in the `ResultSet` is a parameter description, column description or return type description with the following fields:

      1. FUNCTION_CAT String => function catalog (may be `null`)
      2. FUNCTION_SCHEM String => function schema (may be `null`)
      3. FUNCTION_NAME String => function name. This is the name used to invoke the function
      4. COLUMN_NAME String => column/parameter name
      5. COLUMN_TYPE Short => kind of column/parameter:
         - functionColumnUnknown - nobody knows
         - functionColumnIn - IN parameter
         - functionColumnInOut - INOUT parameter
         - functionColumnOut - OUT parameter
         - functionColumnReturn - function return value
         - functionColumnResult - Indicates that the parameter or column is a column in the `ResultSet`
      6. DATA_TYPE int => SQL type from java.sql.Types
      7. TYPE_NAME String => SQL type name, for a UDT type the type name is fully qualified
      8. PRECISION int => precision
      9. LENGTH int => length in bytes of data
      10. SCALE short => scale - null is returned for data types where SCALE is not applicable.
      11. RADIX short => radix
      12. NULLABLE short => can it contain NULL.
          - functionNoNulls - does not allow NULL values
          - functionNullable - allows NULL values
          - functionNullableUnknown - nullability unknown
      13. REMARKS String => comment describing column/parameter
      14. CHAR_OCTET_LENGTH int => the maximum length of binary and character based parameters or columns. For any other datatype the returned value is a NULL
      15. ORDINAL_POSITION int => the ordinal position, starting from 1, for the input and output parameters. A value of 0 is returned if this row describes the function's return value. For result set columns, it is the ordinal position of the column in the result set starting from 1.
      16. IS_NULLABLE String => ISO rules are used to determine the nullability for a parameter or column.
          - YES --- if the parameter or column can include NULLs
          - NO --- if the parameter or column cannot include NULLs
          - empty string --- if the nullability for the parameter or column is unknown
      17. SPECIFIC_NAME String => the name which uniquely identifies this function within its schema. This is a user specified, or DBMS generated, name that may be different then the `FUNCTION_NAME` for example with overload functions

      The PRECISION column represents the specified column size for the given parameter or column. For numeric data, this is the maximum precision. For character data, this is the length in characters. For datetime datatypes, this is the length in characters of the String representation (assuming the maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, this is the length in bytes. Null is returned for data types where the column size is not applicable.

      Specified by:
        `getFunctionColumns` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; `null` means that the catalog name should not be used to narrow the search
        `schemaPattern` - a schema name pattern; must match the schema name as it is stored in the database; "" retrieves those without a schema; `null` means that the schema name should not be used to narrow the search
        `functionNamePattern` - a procedure name pattern; must match the function name as it is stored in the database
        `columnNamePattern` - a parameter name pattern; must match the parameter or column name as it is stored in the database
      Returns:
        `ResultSet` - each row describes a user function parameter, column or return type
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.6
      See Also:
        `getSearchStringEscape()`

    - #### getFunctions

          public java.sql.ResultSet getFunctions(java.lang.String catalog,
                                        java.lang.String schemaPattern,
                                        java.lang.String functionNamePattern)
                                          throws java.sql.SQLException

      Retrieves a description of the system and user functions available in the given catalog.

      Only system and user function descriptions matching the schema and function name criteria are returned. They are ordered by `FUNCTION_CAT`, `FUNCTION_SCHEM`, `FUNCTION_NAME` and `SPECIFIC_ NAME`.

      Each function description has the the following columns:

      1. FUNCTION_CAT String => function catalog (may be `null`)
      2. FUNCTION_SCHEM String => function schema (may be `null`)
      3. FUNCTION_NAME String => function name. This is the name used to invoke the function
      4. REMARKS String => explanatory comment on the function
      5. FUNCTION_TYPE short => kind of function:
         - functionResultUnknown - Cannot determine if a return value or table will be returned
         - functionNoTable- Does not return a table
         - functionReturnsTable - Returns a table
      6. SPECIFIC_NAME String => the name which uniquely identifies this function within its schema. This is a user specified, or DBMS generated, name that may be different then the `FUNCTION_NAME` for example with overload functions

      A user may not have permission to execute any of the functions that are returned by `getFunctions`

      Specified by:
        `getFunctions` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; `null` means that the catalog name should not be used to narrow the search
        `schemaPattern` - a schema name pattern; must match the schema name as it is stored in the database; "" retrieves those without a schema; `null` means that the schema name should not be used to narrow the search
        `functionNamePattern` - a function name pattern; must match the function name as it is stored in the database
      Returns:
        `ResultSet` - each row is a function description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.6
      See Also:
        `getSearchStringEscape()`

    - #### getSchemas

          public java.sql.ResultSet getSchemas(java.lang.String catalog,
                                      java.lang.String schemaPattern)
                                        throws java.sql.SQLException

      Retrieves the schema names available in this database. The results are ordered by `TABLE_CATALOG` and `TABLE_SCHEM`.

      The schema columns are:

      1. TABLE_SCHEM String => schema name
      2. TABLE_CATALOG String => catalog name (may be `null`)
      Specified by:
        `getSchemas` in interface `java.sql.DatabaseMetaData`
      Parameters:
        `catalog` - a catalog name; must match the catalog name as it is stored in the database;"" retrieves those without a catalog; null means catalog name should not be used to narrow down the search.
        `schemaPattern` - a schema name; must match the schema name as it is stored in the database; null means schema name should not be used to narrow down the search.
      Returns:
        a `ResultSet` object in which each row is a schema description
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.6
      See Also:
        `getSearchStringEscape()`

    - #### isWrapperFor

          public boolean isWrapperFor(java.lang.Class<?> iface)
                               throws java.sql.SQLException

      Specified by:
        `isWrapperFor` in interface `java.sql.Wrapper`
      Throws:
        `java.sql.SQLException`

    - #### unwrap

          public <T> T unwrap(java.lang.Class<T> iface)
                   throws java.sql.SQLException

      Specified by:
        `unwrap` in interface `java.sql.Wrapper`
      Throws:
        `java.sql.SQLException`

    - #### isAllCondition

          protected static boolean isAllCondition(java.lang.String pattern)

    - #### hasNoWildcards

          public static boolean hasNoWildcards(java.lang.String pattern)

      Determine if there are no SQL wildcard characters ('%' or '_') in the given pattern.
      Parameters:
        `pattern` - The pattern to be checked for wildcards
      Returns:
        `true` if there are no wildcards in the pattern, `false` otherwise

    - #### stripEscape

          public static java.lang.String stripEscape(java.lang.String pattern)

      Strips all backslash-escapes from a string.
      Parameters:
        `pattern` - The string to be stripped
      Returns:
        pattern with all backslash-escapes removed

    - #### escapeWildcards

          public static java.lang.String escapeWildcards(java.lang.String objectName)

      Escapes the like wildcards and escape (`\_%` in the provided search string with a `\`.
      Parameters:
        `objectName` - Object name to escape (not `null`).
      Returns:
        Object name with wildcards escaped.

    - #### getWantsSystemTables

          protected java.lang.String getWantsSystemTables(java.lang.String[] types)

    - #### getWantsTables

          protected java.lang.String getWantsTables(java.lang.String[] types)

    - #### getWantsViews

          protected java.lang.String getWantsViews(java.lang.String[] types)

    - #### getPseudoColumns

          public java.sql.ResultSet getPseudoColumns(java.lang.String catalog,
                                            java.lang.String schemaPattern,
                                            java.lang.String tableNamePattern,
                                            java.lang.String columnNamePattern)
                                              throws java.sql.SQLException

      Specified by:
        `getPseudoColumns` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### generatedKeyAlwaysReturned

          public boolean generatedKeyAlwaysReturned()
                                             throws java.sql.SQLException

      Specified by:
        `generatedKeyAlwaysReturned` in interface `java.sql.DatabaseMetaData`
      Throws:
        `java.sql.SQLException`

    - #### getProcedureSourceCode

          public java.lang.String getProcedureSourceCode(java.lang.String procedureName)
                                                  throws java.sql.SQLException

      Description copied from interface: `FirebirdDatabaseMetaData`
      Get the source of a stored procedure.
      Specified by:
        `getProcedureSourceCode` in interface `FirebirdDatabaseMetaData`
      Parameters:
        `procedureName` - name of the stored procedure.
      Returns:
        source of the stored procedure.
      Throws:
        `java.sql.SQLException` - if specified procedure cannot be found.

    - #### getTriggerSourceCode

          public java.lang.String getTriggerSourceCode(java.lang.String triggerName)
                                                throws java.sql.SQLException

      Description copied from interface: `FirebirdDatabaseMetaData`
      Get the source of a trigger.
      Specified by:
        `getTriggerSourceCode` in interface `FirebirdDatabaseMetaData`
      Parameters:
        `triggerName` - name of the trigger.
      Returns:
        source of the trigger.
      Throws:
        `java.sql.SQLException` - if specified trigger cannot be found.

    - #### getViewSourceCode

          public java.lang.String getViewSourceCode(java.lang.String viewName)
                                             throws java.sql.SQLException

      Description copied from interface: `FirebirdDatabaseMetaData`
      Get the source of a view.
      Specified by:
        `getViewSourceCode` in interface `FirebirdDatabaseMetaData`
      Parameters:
        `viewName` - name of the view.
      Returns:
        source of the view.
      Throws:
        `java.sql.SQLException` - if specified view cannot be found.

    - #### getBytes

          protected static byte[] getBytes(java.lang.String value)

    - #### doQuery

          protected java.sql.ResultSet doQuery(java.lang.String sql,
                                   java.util.List<java.lang.String> params)
                                        throws java.sql.SQLException

      Execute an sql query with a given set of parameters.
      Parameters:
        `sql` - The sql statement to be used for the query
        `params` - The parameters to be used in the query
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### doQuery

          protected java.sql.ResultSet doQuery(java.lang.String sql,
                                   java.util.List<java.lang.String> params,
                                   boolean standalone)
                                        throws java.sql.SQLException

      Execute an sql query with a given set of parameters.
      Parameters:
        `sql` - The sql statement to be used for the query
        `params` - The parameters to be used in the query
        `standalone` - The query to be executed is a standalone query (should not be cached and be closed asap)
      Throws:
        `java.sql.SQLException` - if a database access error occurs

    - #### getRowIdLifetime

          public java.sql.RowIdLifetime getRowIdLifetime()
                                                  throws java.sql.SQLException

      Indicates whether or not this data source supports the SQL `ROWID` type, and if so the lifetime for which a `RowId` object remains valid.

      The returned int values have the following relationship:

               ROWID_UNSUPPORTED < ROWID_VALID_OTHER < ROWID_VALID_TRANSACTION
                   < ROWID_VALID_SESSION < ROWID_VALID_FOREVER

      so conditional logic such as

               if (metadata.getRowIdLifetime() > DatabaseMetaData.ROWID_VALID_TRANSACTION)

      can be used. Valid Forever means valid across all Sessions, and valid for a Session means valid across all its contained Transactions.
      Specified by:
        `getRowIdLifetime` in interface `java.sql.DatabaseMetaData`
      Returns:
        the status indicating the lifetime of a `RowId`
      Throws:
        `java.sql.SQLException` - if a database access error occurs
      Since:
        1.6

    - #### getJDBCMajorVersion

          public int getJDBCMajorVersion()

      Specified by:
        `getJDBCMajorVersion` in interface `java.sql.DatabaseMetaData`

    - #### getJDBCMinorVersion

          public int getJDBCMinorVersion()

      Specified by:
        `getJDBCMinorVersion` in interface `java.sql.DatabaseMetaData`

Copyright © 2001-2021 Jaybird (Firebird JDBC/JCA) team. All rights reserved.