Module org.firebirdsql.jaybird
Package org.firebirdsql.jdbc

# Class FBDatabaseMetaData

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

All Implemented Interfaces:
  `DatabaseMetaData`, `Wrapper`, `FirebirdDatabaseMetaData`

@InternalApi public class FBDatabaseMetaData extends Object implements FirebirdDatabaseMetaData
Comprehensive information about the database as a whole.

This class is internal API of Jaybird. Future versions may radically change, move, or make inaccessible this type. For the public API, refer to the `DatabaseMetaData` and `FirebirdDatabaseMetaData` interfaces.

Author:
  David Jencks, Mark Rotteveel

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `GLOBAL_TEMPORARY`
  `static final String`
  `SYSTEM_TABLE`
  `static final String`
  `TABLE`
  `static final 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
  Description
  `protected`
  `FBDatabaseMetaData(FBConnection c)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `allProceduresAreCallable()`
  `boolean`
  `allTablesAreSelectable()`
  `boolean`
  `autoCommitFailureClosesAllResultSets()`
  `void`
  `close()`
  Closes any cached metadata statements held by this database metadata implementation.
  `boolean`
  `dataDefinitionCausesTransactionCommit()`
  `boolean`
  `dataDefinitionIgnoredInTransactions()`
  `boolean`
  `deletesAreDetected(int type)`
  `boolean`
  `doesMaxRowSizeIncludeBlobs()`
  `protected ResultSet`
  `doQuery(String sql, List<String> params)`
  Execute an SQL query with a given set of parameters.
  `protected ResultSet`
  `doQuery(String sql, List<String> params, boolean standalone)`
  Execute an SQL query with a given set of parameters.
  `static String`
  `escapeWildcards(String objectName)`
  Escapes the like wildcards and escape (`\_%` in the provided search string with a `\`.
  `boolean`
  `generatedKeyAlwaysReturned()`
  `ResultSet`
  `getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern)`
  `ResultSet`
  `getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)`
  `protected static byte[]`
  `getBytes(String value)`
  `ResultSet`
  `getCatalogs()`
  `String`
  `getCatalogSeparator()`
  `String`
  `getCatalogTerm()`
  `ResultSet`
  `getClientInfoProperties()`
  `ResultSet`
  `getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern)`
  `ResultSet`
  `getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)`
  `Connection`
  `getConnection()`
  `int`
  `getConnectionDialect()`
  Get the dialect of the connection.
  `ResultSet`
  `getCrossReference(String primaryCatalog, String primarySchema, String primaryTable, String foreignCatalog, String foreignSchema, String foreignTable)`
  `int`
  `getDatabaseDialect()`
  Get the dialect of the database.
  `int`
  `getDatabaseMajorVersion()`
  `int`
  `getDatabaseMinorVersion()`
  `String`
  `getDatabaseProductName()`
  `String`
  `getDatabaseProductVersion()`
  `protected DbMetadataMediator`
  `getDbMetadataMediator()`
  `int`
  `getDefaultTransactionIsolation()`
  `int`
  `getDriverMajorVersion()`
  `int`
  `getDriverMinorVersion()`
  `String`
  `getDriverName()`
  `String`
  `getDriverVersion()`
  `ResultSet`
  `getExportedKeys(String catalog, String schema, String table)`
  `String`
  `getExtraNameCharacters()`
  `ResultSet`
  `getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern)`
  `ResultSet`
  `getFunctions(String catalog, String schemaPattern, String functionNamePattern)`
  `String`
  `getIdentifierQuoteString()`
  `ResultSet`
  `getImportedKeys(String catalog, String schema, String table)`
  `ResultSet`
  `getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)`
  `int`
  `getJDBCMajorVersion()`
  `int`
  `getJDBCMinorVersion()`
  `int`
  `getMaxBinaryLiteralLength()`
  `int`
  `getMaxCatalogNameLength()`
  `int`
  `getMaxCharLiteralLength()`
  `int`
  `getMaxColumnNameLength()`
  `int`
  `getMaxColumnsInGroupBy()`
  `int`
  `getMaxColumnsInIndex()`
  `int`
  `getMaxColumnsInOrderBy()`
  `int`
  `getMaxColumnsInSelect()`
  `int`
  `getMaxColumnsInTable()`
  `int`
  `getMaxConnections()`
  `int`
  `getMaxCursorNameLength()`
  `int`
  `getMaxIndexLength()`
  `int`
  `getMaxObjectNameLength()`
  The default maximum identifier length.
  `int`
  `getMaxProcedureNameLength()`
  `int`
  `getMaxRowSize()`
  `int`
  `getMaxSchemaNameLength()`
  `int`
  `getMaxStatementLength()`
  `int`
  `getMaxStatements()`
  `int`
  `getMaxTableNameLength()`
  `int`
  `getMaxTablesInSelect()`
  `int`
  `getMaxUserNameLength()`
  `String`
  `getNumericFunctions()`
  `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.
  `ResultSet`
  `getPrimaryKeys(String catalog, String schema, String table)`
  `ResultSet`
  `getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern)`
  `ResultSet`
  `getProcedures(String catalog, String schemaPattern, String procedureNamePattern)`
  `String`
  `getProcedureSourceCode(String procedureName)`
  Get the source of a stored procedure.
  `String`
  `getProcedureTerm()`
  `ResultSet`
  `getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)`
  `int`
  `getResultSetHoldability()`
  `RowIdLifetime`
  `getRowIdLifetime()`
  `ResultSet`
  `getSchemas()`
  `ResultSet`
  `getSchemas(String catalog, String schemaPattern)`
  `String`
  `getSchemaTerm()`
  `String`
  `getSearchStringEscape()`
  `String`
  `getSQLKeywords()`
  `int`
  `getSQLStateType()`
  `String`
  `getStringFunctions()`
  `ResultSet`
  `getSuperTables(String catalog, String schemaPattern, String tableNamePattern)`
  `ResultSet`
  `getSuperTypes(String catalog, String schemaPattern, String tableNamePattern)`
  `String`
  `getSystemFunctions()`
  `ResultSet`
  `getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern)`
  `ResultSet`
  `getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)`
  `String[]`
  `getTableTypeNames()`
  Supported table type names.
  `ResultSet`
  `getTableTypes()`
  `String`
  `getTimeDateFunctions()`
  `String`
  `getTriggerSourceCode(String triggerName)`
  Get the source of a trigger.
  `ResultSet`
  `getTypeInfo()`
  `ResultSet`
  `getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types)`
  `String`
  `getURL()`
  `String`
  `getUserName()`
  `ResultSet`
  `getVersionColumns(String catalog, String schema, String table)`
  `String`
  `getViewSourceCode(String viewName)`
  Get the source of a view.
  `boolean`
  `insertsAreDetected(int type)`
  `boolean`
  `isCatalogAtStart()`
  `boolean`
  `isReadOnly()`
  `boolean`
  `isWrapperFor(Class<?> iface)`
  `boolean`
  `locatorsUpdateCopy()`
  `boolean`
  `nullPlusNonNullIsNull()`
  `boolean`
  `nullsAreSortedAtEnd()`
  `boolean`
  `nullsAreSortedAtStart()`
  `boolean`
  `nullsAreSortedHigh()`
  `boolean`
  `nullsAreSortedLow()`
  `boolean`
  `othersDeletesAreVisible(int type)`
  `boolean`
  `othersInsertsAreVisible(int type)`
  `boolean`
  `othersUpdatesAreVisible(int type)`
  `boolean`
  `ownDeletesAreVisible(int type)`
  `boolean`
  `ownInsertsAreVisible(int type)`
  `boolean`
  `ownUpdatesAreVisible(int type)`
  `boolean`
  `storesLowerCaseIdentifiers()`
  `boolean`
  `storesLowerCaseQuotedIdentifiers()`
  `boolean`
  `storesMixedCaseIdentifiers()`
  `boolean`
  `storesMixedCaseQuotedIdentifiers()`
  `boolean`
  `storesUpperCaseIdentifiers()`
  `boolean`
  `storesUpperCaseQuotedIdentifiers()`
  `boolean`
  `supportsAlterTableWithAddColumn()`
  `boolean`
  `supportsAlterTableWithDropColumn()`
  `boolean`
  `supportsANSI92EntryLevelSQL()`
  `boolean`
  `supportsANSI92FullSQL()`
  `boolean`
  `supportsANSI92IntermediateSQL()`
  `boolean`
  `supportsBatchUpdates()`
  `boolean`
  `supportsCatalogsInDataManipulation()`
  `boolean`
  `supportsCatalogsInIndexDefinitions()`
  `boolean`
  `supportsCatalogsInPrivilegeDefinitions()`
  `boolean`
  `supportsCatalogsInProcedureCalls()`
  `boolean`
  `supportsCatalogsInTableDefinitions()`
  `boolean`
  `supportsColumnAliasing()`
  `boolean`
  `supportsConvert()`
  `boolean`
  `supportsConvert(int fromType, int toType)`
  `boolean`
  `supportsCoreSQLGrammar()`
  `boolean`
  `supportsCorrelatedSubqueries()`
  `boolean`
  `supportsDataDefinitionAndDataManipulationTransactions()`
  `boolean`
  `supportsDataManipulationTransactionsOnly()`
  `boolean`
  `supportsDifferentTableCorrelationNames()`
  `boolean`
  `supportsExpressionsInOrderBy()`
  `boolean`
  `supportsExtendedSQLGrammar()`
  `boolean`
  `supportsFullOuterJoins()`
  `boolean`
  `supportsGetGeneratedKeys()`
  `boolean`
  `supportsGroupBy()`
  `boolean`
  `supportsGroupByBeyondSelect()`
  `boolean`
  `supportsGroupByUnrelated()`
  `boolean`
  `supportsIntegrityEnhancementFacility()`
  `boolean`
  `supportsLikeEscapeClause()`
  `boolean`
  `supportsLimitedOuterJoins()`
  `boolean`
  `supportsMinimumSQLGrammar()`
  `boolean`
  `supportsMixedCaseIdentifiers()`
  `boolean`
  `supportsMixedCaseQuotedIdentifiers()`
  `boolean`
  `supportsMultipleOpenResults()`
  `boolean`
  `supportsMultipleResultSets()`
  `boolean`
  `supportsMultipleTransactions()`
  `boolean`
  `supportsNamedParameters()`
  `boolean`
  `supportsNonNullableColumns()`
  `boolean`
  `supportsOpenCursorsAcrossCommit()`
  `boolean`
  `supportsOpenCursorsAcrossRollback()`
  `boolean`
  `supportsOpenStatementsAcrossCommit()`
  `boolean`
  `supportsOpenStatementsAcrossRollback()`
  `boolean`
  `supportsOrderByUnrelated()`
  `boolean`
  `supportsOuterJoins()`
  `boolean`
  `supportsPositionedDelete()`
  `boolean`
  `supportsPositionedUpdate()`
  `boolean`
  `supportsResultSetConcurrency(int type, int concurrency)`
  `boolean`
  `supportsResultSetHoldability(int holdability)`
  `boolean`
  `supportsResultSetType(int type)`
  `boolean`
  `supportsSavepoints()`
  `boolean`
  `supportsSchemasInDataManipulation()`
  `boolean`
  `supportsSchemasInIndexDefinitions()`
  `boolean`
  `supportsSchemasInPrivilegeDefinitions()`
  `boolean`
  `supportsSchemasInProcedureCalls()`
  `boolean`
  `supportsSchemasInTableDefinitions()`
  `boolean`
  `supportsSelectForUpdate()`
  `boolean`
  `supportsStatementPooling()`
  `boolean`
  `supportsStoredFunctionsUsingCallSyntax()`
  `boolean`
  `supportsStoredProcedures()`
  `boolean`
  `supportsSubqueriesInComparisons()`
  `boolean`
  `supportsSubqueriesInExists()`
  `boolean`
  `supportsSubqueriesInIns()`
  `boolean`
  `supportsSubqueriesInQuantifieds()`
  `boolean`
  `supportsTableCorrelationNames()`
  `boolean`
  `supportsTransactionIsolationLevel(int level)`
  `boolean`
  `supportsTransactions()`
  `boolean`
  `supportsUnion()`
  `boolean`
  `supportsUnionAll()`
  `<T> T`
  `unwrap(Class<T> iface)`
  `boolean`
  `updatesAreDetected(int type)`
  `boolean`
  `usesLocalFilePerTable()`
  `boolean`
  `usesLocalFiles()`

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

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

  ### Methods inherited from interface java.sql.DatabaseMetaData

  `getMaxLogicalLobSize, supportsRefCursors, supportsSharding`

- ## Field Details

  - ### TABLE

    public static final String TABLE
    See Also:
      - Constant Field Values

  - ### SYSTEM_TABLE

    public static final String SYSTEM_TABLE
    See Also:
      - Constant Field Values

  - ### VIEW

    public static final String VIEW
    See Also:
      - Constant Field Values

  - ### GLOBAL_TEMPORARY

    public static final String GLOBAL_TEMPORARY
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### FBDatabaseMetaData

    protected FBDatabaseMetaData(FBConnection c) throws SQLException
    Throws:
      `SQLException`

- ## Method Details

  - ### 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 SQLException
    Specified by:
      `allProceduresAreCallable` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### allTablesAreSelectable

    public boolean allTablesAreSelectable() throws SQLException
    Specified by:
      `allTablesAreSelectable` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getURL

    public String getURL() throws SQLException
    Specified by:
      `getURL` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getUserName

    public String getUserName() throws SQLException
    Specified by:
      `getUserName` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### isReadOnly

    public boolean isReadOnly() throws SQLException
    Specified by:
      `isReadOnly` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### nullsAreSortedHigh

    public boolean nullsAreSortedHigh() throws SQLException
    Specified by:
      `nullsAreSortedHigh` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### nullsAreSortedLow

    public boolean nullsAreSortedLow() throws SQLException
    Specified by:
      `nullsAreSortedLow` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### nullsAreSortedAtStart

    public boolean nullsAreSortedAtStart() throws SQLException
    Specified by:
      `nullsAreSortedAtStart` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### nullsAreSortedAtEnd

    public boolean nullsAreSortedAtEnd() throws SQLException
    Specified by:
      `nullsAreSortedAtEnd` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getDatabaseProductName

    public String getDatabaseProductName() throws SQLException
    Specified by:
      `getDatabaseProductName` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getDatabaseProductVersion

    public String getDatabaseProductVersion() throws SQLException
    Specified by:
      `getDatabaseProductVersion` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getDriverName

    public String getDriverName() throws SQLException
    Specified by:
      `getDriverName` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getDriverVersion

    public String getDriverVersion() throws SQLException
    Specified by:
      `getDriverVersion` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getDriverMajorVersion

    public int getDriverMajorVersion()
    Specified by:
      `getDriverMajorVersion` in interface `DatabaseMetaData`

  - ### getDriverMinorVersion

    public int getDriverMinorVersion()
    Specified by:
      `getDriverMinorVersion` in interface `DatabaseMetaData`

  - ### usesLocalFiles

    public boolean usesLocalFiles() throws SQLException
    Specified by:
      `usesLocalFiles` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### usesLocalFilePerTable

    public boolean usesLocalFilePerTable() throws SQLException
    Specified by:
      `usesLocalFilePerTable` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsMixedCaseIdentifiers

    public boolean supportsMixedCaseIdentifiers() throws SQLException
    Specified by:
      `supportsMixedCaseIdentifiers` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsStatementPooling

    public boolean supportsStatementPooling() throws SQLException
    Specified by:
      `supportsStatementPooling` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### locatorsUpdateCopy

    public boolean locatorsUpdateCopy() throws SQLException
    Specified by:
      `locatorsUpdateCopy` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### storesUpperCaseIdentifiers

    public boolean storesUpperCaseIdentifiers() throws SQLException
    Specified by:
      `storesUpperCaseIdentifiers` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### storesLowerCaseIdentifiers

    public boolean storesLowerCaseIdentifiers() throws SQLException
    Specified by:
      `storesLowerCaseIdentifiers` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### storesMixedCaseIdentifiers

    public boolean storesMixedCaseIdentifiers() throws SQLException
    Specified by:
      `storesMixedCaseIdentifiers` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsMixedCaseQuotedIdentifiers

    public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException
    Specified by:
      `supportsMixedCaseQuotedIdentifiers` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### storesUpperCaseQuotedIdentifiers

    public boolean storesUpperCaseQuotedIdentifiers() throws SQLException
    Specified by:
      `storesUpperCaseQuotedIdentifiers` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### storesLowerCaseQuotedIdentifiers

    public boolean storesLowerCaseQuotedIdentifiers() throws SQLException
    Specified by:
      `storesLowerCaseQuotedIdentifiers` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### storesMixedCaseQuotedIdentifiers

    public boolean storesMixedCaseQuotedIdentifiers() throws SQLException
    Specified by:
      `storesMixedCaseQuotedIdentifiers` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getIdentifierQuoteString

    public String getIdentifierQuoteString() throws SQLException
    Specified by:
      `getIdentifierQuoteString` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getSQLKeywords

    public String getSQLKeywords() throws SQLException
    Specified by:
      `getSQLKeywords` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getNumericFunctions

    public String getNumericFunctions() throws 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 `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getStringFunctions

    public String getStringFunctions() throws 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 `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getSystemFunctions

    public String getSystemFunctions() throws 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 `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getTimeDateFunctions

    public String getTimeDateFunctions() throws 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 `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getSearchStringEscape

    public String getSearchStringEscape() throws SQLException
    Specified by:
      `getSearchStringEscape` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getExtraNameCharacters

    public String getExtraNameCharacters() throws SQLException
    Specified by:
      `getExtraNameCharacters` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsAlterTableWithAddColumn

    public boolean supportsAlterTableWithAddColumn() throws SQLException
    Specified by:
      `supportsAlterTableWithAddColumn` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsAlterTableWithDropColumn

    public boolean supportsAlterTableWithDropColumn() throws SQLException
    Specified by:
      `supportsAlterTableWithDropColumn` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsColumnAliasing

    public boolean supportsColumnAliasing() throws SQLException
    Specified by:
      `supportsColumnAliasing` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### nullPlusNonNullIsNull

    public boolean nullPlusNonNullIsNull() throws SQLException
    Specified by:
      `nullPlusNonNullIsNull` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsConvert

    public boolean supportsConvert() throws SQLException
    Specified by:
      `supportsConvert` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsConvert

    public boolean supportsConvert(int fromType, int toType) throws SQLException

    See also `org.firebirdsql.jdbc.escape.ConvertFunction` for caveats.

    Specified by:
      `supportsConvert` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsTableCorrelationNames

    public boolean supportsTableCorrelationNames() throws SQLException
    Specified by:
      `supportsTableCorrelationNames` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsDifferentTableCorrelationNames

    public boolean supportsDifferentTableCorrelationNames() throws SQLException
    Specified by:
      `supportsDifferentTableCorrelationNames` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsExpressionsInOrderBy

    public boolean supportsExpressionsInOrderBy() throws SQLException
    Specified by:
      `supportsExpressionsInOrderBy` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsOrderByUnrelated

    public boolean supportsOrderByUnrelated() throws SQLException
    Specified by:
      `supportsOrderByUnrelated` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsGroupBy

    public boolean supportsGroupBy() throws SQLException
    Specified by:
      `supportsGroupBy` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsGroupByUnrelated

    public boolean supportsGroupByUnrelated() throws SQLException
    Specified by:
      `supportsGroupByUnrelated` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsGroupByBeyondSelect

    public boolean supportsGroupByBeyondSelect() throws SQLException
    Specified by:
      `supportsGroupByBeyondSelect` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsLikeEscapeClause

    public boolean supportsLikeEscapeClause() throws SQLException
    Specified by:
      `supportsLikeEscapeClause` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsMultipleResultSets

    public boolean supportsMultipleResultSets() throws SQLException
    Specified by:
      `supportsMultipleResultSets` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsMultipleTransactions

    public boolean supportsMultipleTransactions() throws SQLException
    Specified by:
      `supportsMultipleTransactions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsNonNullableColumns

    public boolean supportsNonNullableColumns() throws SQLException
    Specified by:
      `supportsNonNullableColumns` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsMinimumSQLGrammar

    public boolean supportsMinimumSQLGrammar() throws SQLException
    Specified by:
      `supportsMinimumSQLGrammar` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsCoreSQLGrammar

    public boolean supportsCoreSQLGrammar() throws SQLException
    Specified by:
      `supportsCoreSQLGrammar` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsExtendedSQLGrammar

    public boolean supportsExtendedSQLGrammar() throws SQLException
    Specified by:
      `supportsExtendedSQLGrammar` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsANSI92EntryLevelSQL

    public boolean supportsANSI92EntryLevelSQL() throws SQLException
    Specified by:
      `supportsANSI92EntryLevelSQL` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsANSI92IntermediateSQL

    public boolean supportsANSI92IntermediateSQL() throws SQLException
    Specified by:
      `supportsANSI92IntermediateSQL` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsANSI92FullSQL

    public boolean supportsANSI92FullSQL() throws SQLException
    Specified by:
      `supportsANSI92FullSQL` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsIntegrityEnhancementFacility

    public boolean supportsIntegrityEnhancementFacility() throws SQLException
    Specified by:
      `supportsIntegrityEnhancementFacility` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsOuterJoins

    public boolean supportsOuterJoins() throws SQLException
    Specified by:
      `supportsOuterJoins` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsFullOuterJoins

    public boolean supportsFullOuterJoins() throws SQLException
    Specified by:
      `supportsFullOuterJoins` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsLimitedOuterJoins

    public boolean supportsLimitedOuterJoins() throws SQLException
    Specified by:
      `supportsLimitedOuterJoins` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getSchemaTerm

    public String getSchemaTerm() throws SQLException
    Specified by:
      `getSchemaTerm` in interface `DatabaseMetaData`
    Returns:
      the vendor term, always `null` because schemas are not supported by database server (see JDBC CTS for details).
    Throws:
      `SQLException`

  - ### getProcedureTerm

    public String getProcedureTerm() throws SQLException
    Specified by:
      `getProcedureTerm` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getCatalogTerm

    public String getCatalogTerm() throws SQLException
    Specified by:
      `getCatalogTerm` in interface `DatabaseMetaData`
    Returns:
      the vendor term for catalog, normally `null` because catalogs are not supported by database server (see JDBC CTS for details), or `"PACKAGE"` when `useCatalogAsPackage = true` and packages are supported.
    Throws:
      `SQLException`

  - ### isCatalogAtStart

    public boolean isCatalogAtStart() throws SQLException

    Will report `true` when `useCatalogAsPackage = true` and packages are supported.

    Specified by:
      `isCatalogAtStart` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getCatalogSeparator

    public String getCatalogSeparator() throws SQLException
    Specified by:
      `getCatalogSeparator` in interface `DatabaseMetaData`
    Returns:
      the separator string, always `null` because catalogs are not supported by database server (see JDBC CTS for details), or `"."` when `useCatalogAsPackage = true` and packages are supported.
    Throws:
      `SQLException`

  - ### supportsSchemasInDataManipulation

    public boolean supportsSchemasInDataManipulation() throws SQLException
    Specified by:
      `supportsSchemasInDataManipulation` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSchemasInProcedureCalls

    public boolean supportsSchemasInProcedureCalls() throws SQLException
    Specified by:
      `supportsSchemasInProcedureCalls` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSchemasInTableDefinitions

    public boolean supportsSchemasInTableDefinitions() throws SQLException
    Specified by:
      `supportsSchemasInTableDefinitions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSchemasInIndexDefinitions

    public boolean supportsSchemasInIndexDefinitions() throws SQLException
    Specified by:
      `supportsSchemasInIndexDefinitions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSchemasInPrivilegeDefinitions

    public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException
    Specified by:
      `supportsSchemasInPrivilegeDefinitions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsCatalogsInDataManipulation

    public boolean supportsCatalogsInDataManipulation() throws SQLException

    Will report `true` when `useCatalogAsPackage = true` and packages are supported.

    Specified by:
      `supportsCatalogsInDataManipulation` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsCatalogsInProcedureCalls

    public boolean supportsCatalogsInProcedureCalls() throws SQLException

    Will report `true` when `useCatalogAsPackage = true` and packages are supported.

    Specified by:
      `supportsCatalogsInProcedureCalls` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsCatalogsInTableDefinitions

    public boolean supportsCatalogsInTableDefinitions() throws SQLException
    Specified by:
      `supportsCatalogsInTableDefinitions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsCatalogsInIndexDefinitions

    public boolean supportsCatalogsInIndexDefinitions() throws SQLException
    Specified by:
      `supportsCatalogsInIndexDefinitions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsCatalogsInPrivilegeDefinitions

    public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException
    Specified by:
      `supportsCatalogsInPrivilegeDefinitions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsPositionedDelete

    public boolean supportsPositionedDelete() throws SQLException
    Specified by:
      `supportsPositionedDelete` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsPositionedUpdate

    public boolean supportsPositionedUpdate() throws SQLException
    Specified by:
      `supportsPositionedUpdate` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSelectForUpdate

    public boolean supportsSelectForUpdate() throws SQLException
    Specified by:
      `supportsSelectForUpdate` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsStoredProcedures

    public boolean supportsStoredProcedures() throws SQLException
    Specified by:
      `supportsStoredProcedures` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSubqueriesInComparisons

    public boolean supportsSubqueriesInComparisons() throws SQLException
    Specified by:
      `supportsSubqueriesInComparisons` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSubqueriesInExists

    public boolean supportsSubqueriesInExists() throws SQLException
    Specified by:
      `supportsSubqueriesInExists` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSubqueriesInIns

    public boolean supportsSubqueriesInIns() throws SQLException
    Specified by:
      `supportsSubqueriesInIns` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsSubqueriesInQuantifieds

    public boolean supportsSubqueriesInQuantifieds() throws SQLException
    Specified by:
      `supportsSubqueriesInQuantifieds` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsCorrelatedSubqueries

    public boolean supportsCorrelatedSubqueries() throws SQLException
    Specified by:
      `supportsCorrelatedSubqueries` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsUnion

    public boolean supportsUnion() throws SQLException
    Specified by:
      `supportsUnion` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsUnionAll

    public boolean supportsUnionAll() throws SQLException
    Specified by:
      `supportsUnionAll` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsOpenCursorsAcrossCommit

    public boolean supportsOpenCursorsAcrossCommit() throws SQLException
    Specified by:
      `supportsOpenCursorsAcrossCommit` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsOpenCursorsAcrossRollback

    public boolean supportsOpenCursorsAcrossRollback() throws SQLException
    Specified by:
      `supportsOpenCursorsAcrossRollback` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsOpenStatementsAcrossCommit

    public boolean supportsOpenStatementsAcrossCommit() throws SQLException
    Specified by:
      `supportsOpenStatementsAcrossCommit` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsOpenStatementsAcrossRollback

    public boolean supportsOpenStatementsAcrossRollback() throws SQLException
    Specified by:
      `supportsOpenStatementsAcrossRollback` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxBinaryLiteralLength

    public int getMaxBinaryLiteralLength() throws SQLException
    Specified by:
      `getMaxBinaryLiteralLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxCharLiteralLength

    public int getMaxCharLiteralLength() throws SQLException
    Specified by:
      `getMaxCharLiteralLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxColumnNameLength

    public int getMaxColumnNameLength() throws SQLException

    NOTE: This method reports the standard maximum length, and does not take into account restrictions configured through `MaxIdentifierByteLength` or `MaxIdentifierCharLength`.

    Specified by:
      `getMaxColumnNameLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxObjectNameLength

    public int getMaxObjectNameLength()
    Description copied from interface: `FirebirdDatabaseMetaData`
    The default maximum identifier length.

    NOTE: This method reports the standard maximum length, and does not take into account restrictions configured through `MaxIdentifierByteLength` or `MaxIdentifierCharLength`.

    Specified by:
      `getMaxObjectNameLength` in interface `FirebirdDatabaseMetaData`
    Returns:
      the (default) maximum identifier length

  - ### getMaxColumnsInGroupBy

    public int getMaxColumnsInGroupBy() throws SQLException
    Specified by:
      `getMaxColumnsInGroupBy` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxColumnsInIndex

    public int getMaxColumnsInIndex() throws SQLException
    Specified by:
      `getMaxColumnsInIndex` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxColumnsInOrderBy

    public int getMaxColumnsInOrderBy() throws SQLException
    Specified by:
      `getMaxColumnsInOrderBy` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxColumnsInSelect

    public int getMaxColumnsInSelect() throws SQLException
    Specified by:
      `getMaxColumnsInSelect` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxColumnsInTable

    public int getMaxColumnsInTable() throws SQLException
    Specified by:
      `getMaxColumnsInTable` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxConnections

    public int getMaxConnections() throws SQLException
    Specified by:
      `getMaxConnections` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxCursorNameLength

    public int getMaxCursorNameLength() throws SQLException
    Specified by:
      `getMaxCursorNameLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxIndexLength

    public int getMaxIndexLength() throws SQLException
    Specified by:
      `getMaxIndexLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxSchemaNameLength

    public int getMaxSchemaNameLength() throws SQLException
    Specified by:
      `getMaxSchemaNameLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxProcedureNameLength

    public int getMaxProcedureNameLength() throws SQLException

    NOTE: This method reports the standard maximum length, and does not take into account restrictions configured through `MaxIdentifierByteLength` or `MaxIdentifierCharLength`.

    Specified by:
      `getMaxProcedureNameLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxCatalogNameLength

    public int getMaxCatalogNameLength() throws SQLException

    Will normally report `0`, but non-zero when `useCatalogAsPackage = true` and packages are supported.

    Specified by:
      `getMaxCatalogNameLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxRowSize

    public int getMaxRowSize() throws SQLException
    Specified by:
      `getMaxRowSize` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### doesMaxRowSizeIncludeBlobs

    public boolean doesMaxRowSizeIncludeBlobs() throws SQLException
    Specified by:
      `doesMaxRowSizeIncludeBlobs` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxStatementLength

    public int getMaxStatementLength() throws SQLException
    Specified by:
      `getMaxStatementLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxStatements

    public int getMaxStatements() throws SQLException
    Specified by:
      `getMaxStatements` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxTableNameLength

    public int getMaxTableNameLength() throws SQLException

    NOTE: This method reports the standard maximum length, and does not take into account restrictions configured through `MaxIdentifierByteLength` or `MaxIdentifierCharLength`.

    Specified by:
      `getMaxTableNameLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxTablesInSelect

    public int getMaxTablesInSelect() throws SQLException
    Specified by:
      `getMaxTablesInSelect` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getMaxUserNameLength

    public int getMaxUserNameLength() throws SQLException

    NOTE: This method reports the standard maximum length, and does not take into account restrictions configured through `MaxIdentifierByteLength` or `MaxIdentifierCharLength`.

    Specified by:
      `getMaxUserNameLength` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getDefaultTransactionIsolation

    public int getDefaultTransactionIsolation() throws SQLException
    Specified by:
      `getDefaultTransactionIsolation` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsTransactions

    public boolean supportsTransactions() throws SQLException
    Specified by:
      `supportsTransactions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsTransactionIsolationLevel

    public boolean supportsTransactionIsolationLevel(int level) throws SQLException
    Specified by:
      `supportsTransactionIsolationLevel` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsDataDefinitionAndDataManipulationTransactions

    public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException

    Although Firebird supports both DML and DDL in transactions, it is not possible to use objects in the same transaction that defines them. For example, it is not possible to insert into a table in the same transaction that created it.

    Specified by:
      `supportsDataDefinitionAndDataManipulationTransactions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### supportsDataManipulationTransactionsOnly

    public boolean supportsDataManipulationTransactionsOnly() throws SQLException
    Specified by:
      `supportsDataManipulationTransactionsOnly` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### dataDefinitionCausesTransactionCommit

    public boolean dataDefinitionCausesTransactionCommit() throws SQLException

    Read the note on `supportsDataDefinitionAndDataManipulationTransactions()`.

    Specified by:
      `dataDefinitionCausesTransactionCommit` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### dataDefinitionIgnoredInTransactions

    public boolean dataDefinitionIgnoredInTransactions() throws SQLException

    Read the note on `supportsDataDefinitionAndDataManipulationTransactions()`.

    Specified by:
      `dataDefinitionIgnoredInTransactions` in interface `DatabaseMetaData`
    Throws:
      `SQLException`

  - ### getProcedures

    public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException

    By default, this method does not return procedures defined in packages. To also return procedures in packages, set connection property `useCatalogAsPackage` to `true`. When enabled, this method has the following differences in behaviour:

    - The `catalog` parameter will return normal and packaged procedures when `null`, only normal (non-packaged) procedures when empty string (`""`), and procedures from a specific package (exact case-sensitive match!) for other non-`null` values
    - Column `PROCEDURE_CAT` for normal procedures is empty string (`""`) instead of `null`, for packaged procedures it is the package name
    - Column `SPECIFIC_NAME` for packaged procedures will report `<quoted-package-name>.<quoted-procedure-name>` (normal procedures will report the same as column `PROCEDURE_NAME`, the unquoted name)

Specified by:
  `getProcedures` in interface `DatabaseMetaData`
Throws:
  `SQLException`

- ### getProcedureColumns

  public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws SQLException

  By default, this method does not return columns of procedures defined in packages. To also return columns of procedures in packages, set connection property `useCatalogAsPackage` to `true`. When enabled, this method has the following differences in behaviour:

  - The `catalog` parameter will return normal and packaged procedures when `null`, only normal (non-packaged) procedures when empty string (`""`), and procedures from a specific package (exact case-sensitive match!) for other non-`null` values
  - Column `PROCEDURE_CAT` for normal procedures is empty string (`""`) instead of `null`, for packaged procedures it is the package name
  - Column `SPECIFIC_NAME` for packaged procedures will report `<quoted-package-name>.<quoted-procedure-name>` (normal procedures will report the same as column `PROCEDURE_NAME`, the unquoted name)

Specified by:
  `getProcedureColumns` in interface `DatabaseMetaData`
Throws:
  `SQLException`

- ### getTables

  public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException

  Jaybird defines these additional columns:

  11. OWNER_NAME String => Owner of the table
  12. JB_RELATION_ID Short => Value of `RDB$RELATIONS.RDB$RELATION_ID` of the table
  Specified by:
    `getTables` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getSchemas

  public ResultSet getSchemas() throws SQLException
  Specified by:
    `getSchemas` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getCatalogs

  public ResultSet getCatalogs() throws SQLException

  When `useCatalogAsPackage = true` and packages are supported, this method will return the package names in column `TABLE_CAT`.

  >
  Specified by:
    `getCatalogs` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getTableTypes

  public ResultSet getTableTypes() throws SQLException
  Specified by:
    `getTableTypes` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getTableTypeNames

  public String[] getTableTypeNames() throws SQLException
  Description copied from interface: `FirebirdDatabaseMetaData`
  Supported table type names.
  Specified by:
    `getTableTypeNames` in interface `FirebirdDatabaseMetaData`
  Returns:
    An array with the supported table types names for `DatabaseMetaData.getTables(String, String, String, String[])`
  Throws:
    `SQLException` - For problems determining supported table types
  See Also:
    - `DatabaseMetaData.getTableTypes()`

- ### getColumns

  public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException

  Jaybird defines these additional columns:

  25. JB_IS_IDENTITY String => Indicates whether this column is an identity column (NOTE: Jaybird specific column; retrieve by name!). There is a 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)
  Specified by:
    `getColumns` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getColumnPrivileges

  public ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) throws SQLException

  Jaybird defines an additional column:

  9. JB_GRANTEE_TYPE String => Object type of `GRANTEE` (NOTE: Jaybird specific column; retrieve by name!).

  Privileges granted to the table as a whole are reported for each individual column.

  NOTE: This implementation returns all privileges, not just applicable to the current user. It is unclear if this complies with the JDBC requirements. This may change in the future to only return only privileges applicable to the current user, user `PUBLIC` and — maybe — active roles.

  Specified by:
    `getColumnPrivileges` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getTablePrivileges

  public ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) throws SQLException

  Jaybird defines an additional column:

  8. JB_GRANTEE_TYPE String => Object type of `GRANTEE` (NOTE: Jaybird specific column; retrieve by name!).

  NOTE: This implementation returns all privileges, not just applicable to the current user. It is unclear if this complies with the JDBC requirements. This may change in the future to only return only privileges applicable to the current user, user `PUBLIC` and — maybe — active roles.

  Specified by:
    `getTablePrivileges` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getBestRowIdentifier

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

  Jaybird considers the primary key (scoped as `bestRowSession` as the best identifier for all scopes. Pseudo column `RDB$DB_KEY` (scoped as `bestRowTransaction` is considered the second-best alternative for scopes `bestRowTemporary` and `bestRowTransaction` if `table` has no primary key.

  Jaybird currently considers `RDB$DB_KEY` to be `DatabaseMetaData.bestRowTransaction` even if the dbkey_scope is set to 1 (session). This may change in the future. See also `getRowIdLifetime()`.

  Specified by:
    `getBestRowIdentifier` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getVersionColumns

  public ResultSet getVersionColumns(String catalog, String schema, String table) throws SQLException

  Jaybird considers both `RDB$DB_KEY` and `RDB$RECORD_VERSION` (Firebird 3 and higher) as version columns.

  Jaybird only returns pseudo-column as version columns, so 'last updated' columns updated by a trigger, calculated columns, or other forms of change tracking are not reported by this method.

  Specified by:
    `getVersionColumns` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getPrimaryKeys

  public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException

  Jaybird defines these additional columns:

  7. JB_PK_INDEX_NAME String => Index backing the primary key
  Specified by:
    `getPrimaryKeys` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getImportedKeys

  public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException

  Jaybird defines these additional columns:

  15. JB_FK_INDEX_NAME String => Index backing the foreign key
  16. JB_PK_INDEX_NAME String => Index backing the primary key
  Specified by:
    `getImportedKeys` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getExportedKeys

  public ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException

  Jaybird defines these additional columns:

  15. JB_FK_INDEX_NAME String => Index backing the foreign key
  16. JB_PK_INDEX_NAME String => Index backing the primary key
  Specified by:
    `getExportedKeys` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getCrossReference

  public ResultSet getCrossReference(String primaryCatalog, String primarySchema, String primaryTable, String foreignCatalog, String foreignSchema, String foreignTable) throws SQLException

  Jaybird defines these additional columns:

  15. JB_FK_INDEX_NAME String => Index backing the foreign key
  16. JB_PK_INDEX_NAME String => Index backing the primary key
  Specified by:
    `getCrossReference` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getTypeInfo

  public ResultSet getTypeInfo() throws SQLException
  Specified by:
    `getTypeInfo` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getIndexInfo

  public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException

  Implementation note: The value of `FILTER_CONDITION` is populated with the value of `RDB$INDICES.RDB$CONDITION_SOURCE`, which includes the `WHERE` keyword and comments before the `WHERE` keyword. This is an implementation detail which may change in the future. That is, Jaybird may change in the future to only include the condition itself, not the `WHERE` keyword, and/or may remove some or all comments.

  Specified by:
    `getIndexInfo` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsResultSetType

  public boolean supportsResultSetType(int type) throws SQLException
  Specified by:
    `supportsResultSetType` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsResultSetConcurrency

  public boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException
  Specified by:
    `supportsResultSetConcurrency` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### ownUpdatesAreVisible

  public boolean ownUpdatesAreVisible(int type) throws SQLException
  Specified by:
    `ownUpdatesAreVisible` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### ownDeletesAreVisible

  public boolean ownDeletesAreVisible(int type) throws SQLException
  Specified by:
    `ownDeletesAreVisible` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### ownInsertsAreVisible

  public boolean ownInsertsAreVisible(int type) throws SQLException
  Specified by:
    `ownInsertsAreVisible` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### othersUpdatesAreVisible

  public boolean othersUpdatesAreVisible(int type) throws SQLException
  Specified by:
    `othersUpdatesAreVisible` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### othersDeletesAreVisible

  public boolean othersDeletesAreVisible(int type) throws SQLException
  Specified by:
    `othersDeletesAreVisible` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### othersInsertsAreVisible

  public boolean othersInsertsAreVisible(int type) throws SQLException
  Specified by:
    `othersInsertsAreVisible` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### updatesAreDetected

  public boolean updatesAreDetected(int type) throws SQLException
  Specified by:
    `updatesAreDetected` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### deletesAreDetected

  public boolean deletesAreDetected(int type) throws SQLException
  Specified by:
    `deletesAreDetected` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### insertsAreDetected

  public boolean insertsAreDetected(int type) throws SQLException
  Specified by:
    `insertsAreDetected` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsBatchUpdates

  public boolean supportsBatchUpdates() throws SQLException
  Specified by:
    `supportsBatchUpdates` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getUDTs

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

  UDTs are not supported by Firebird. This method will always return an empty ResultSet.

  Specified by:
    `getUDTs` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getConnection

  public Connection getConnection() throws SQLException
  Specified by:
    `getConnection` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getAttributes

  public ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) throws SQLException

  UDTs are not supported by Firebird. This method will always return an empty ResultSet.

  Specified by:
    `getAttributes` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsSavepoints

  public boolean supportsSavepoints() throws SQLException
  Specified by:
    `supportsSavepoints` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsNamedParameters

  public boolean supportsNamedParameters() throws SQLException
  Specified by:
    `supportsNamedParameters` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsMultipleOpenResults

  public boolean supportsMultipleOpenResults() throws SQLException
  Specified by:
    `supportsMultipleOpenResults` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsGetGeneratedKeys

  public boolean supportsGetGeneratedKeys() throws SQLException
  Specified by:
    `supportsGetGeneratedKeys` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getSuperTypes

  public ResultSet getSuperTypes(String catalog, String schemaPattern, String tableNamePattern) throws SQLException

  Supertypes are not supported by Firebird. This method will always return an empty ResultSet.

  Specified by:
    `getSuperTypes` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getSuperTables

  public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException

  Supertables are not supported by Firebird. This method will always return an empty ResultSet.

  Specified by:
    `getSuperTables` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsResultSetHoldability

  public boolean supportsResultSetHoldability(int holdability) throws SQLException
  Specified by:
    `supportsResultSetHoldability` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getResultSetHoldability

  public int getResultSetHoldability() throws SQLException
  Specified by:
    `getResultSetHoldability` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getDatabaseMajorVersion

  public int getDatabaseMajorVersion() throws SQLException
  Specified by:
    `getDatabaseMajorVersion` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getDatabaseMinorVersion

  public int getDatabaseMinorVersion() throws SQLException
  Specified by:
    `getDatabaseMinorVersion` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getOdsMajorVersion

  public int getOdsMajorVersion() throws 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:
    `SQLException` - if a database access error occurs

- ### getOdsMinorVersion

  public int getOdsMinorVersion() throws 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:
    `SQLException` - if a database access error occurs

- ### getDatabaseDialect

  public int getDatabaseDialect() throws 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:
    `SQLException` - if a database access error occurs
  See Also:
    - `FirebirdDatabaseMetaData.getConnectionDialect()`

- ### getConnectionDialect

  public int getConnectionDialect() throws 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:
    `SQLException` - if a database access error occurs
  See Also:
    - `FirebirdDatabaseMetaData.getDatabaseDialect()`

- ### getSQLStateType

  public int getSQLStateType() throws SQLException

  Firebird primarily uses SQL standard SQL states, but may occasionally use values from X/Open.

  Specified by:
    `getSQLStateType` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### supportsStoredFunctionsUsingCallSyntax

  public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException
  Specified by:
    `supportsStoredFunctionsUsingCallSyntax` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### autoCommitFailureClosesAllResultSets

  public boolean autoCommitFailureClosesAllResultSets() throws SQLException

  The holdable result sets remain open, others are closed, but this happens before the statement is executed.

  Specified by:
    `autoCommitFailureClosesAllResultSets` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getClientInfoProperties

  public ResultSet getClientInfoProperties() throws SQLException
  Specified by:
    `getClientInfoProperties` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getFunctionColumns

  public ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern) throws SQLException

  By default, this method does not return columns of functions defined in packages. To also return columns of functions in packages, set connection property `useCatalogAsPackage` to `true`. When enabled, this method has the following differences in behaviour:

  - The `catalog` parameter will return normal and packaged functions when `null`, only normal (non-packaged) function when empty string (`""`), and functions from a specific package (exact case-sensitive match!) for other non-`null` values
  - Column `FUNCTION_CAT` for normal functions is empty string (`""`) instead of `null`, for packaged functions it is the package name
  - Column `SPECIFIC_NAME` for packaged functions will report `<quoted-package-name>.<quoted-function-name>` (normal functions will report the same as column `FUNCTION_NAME`, the unquoted name)

Specified by:
  `getFunctionColumns` in interface `DatabaseMetaData`
Throws:
  `SQLException`

- ### getFunctions

  public ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern) throws SQLException

  Jaybird defines a number of additional columns. As these are not defined in JDBC, their position may change with revisions of JDBC. We recommend to retrieve these columns by name. The following additional columns are available:

  7. JB_FUNCTION_SOURCE String => The source of the function (for Firebird 3+ PSQL functions only)).
  8. JB_FUNCTION_KIND String => The kind of function, one of "UDF", "PSQL" (Firebird 3+) or "UDR" (Firebird 3+)
  9. JB_MODULE_NAME String => Value of `RDB$MODULE_NAME` (is `null` for PSQL)
  10. JB_ENTRYPOINT String => Value of `RDB$ENTRYPOINT` (is `null` for PSQL)
  11. JB_ENGINE_NAME String => Value of `RDB$ENGINE_NAME` (is `null` for UDF and PSQL)

  By default, this method does not return functions defined in packages. To also return functions in packages, set connection property `useCatalogAsPackage` to `true`. When enabled, this method has the following differences in behaviour:

  - The `catalog` parameter will return normal and packaged functions when `null`, only normal (non-packaged) function when empty string (`""`), and functions from a specific package (exact case-sensitive match!) for other non-`null` values
  - Column `FUNCTION_CAT` for normal functions is empty string (`""`) instead of `null`, for packaged functions it is the package name
  - Column `SPECIFIC_NAME` for packaged functions will report `<quoted-package-name>.<quoted-function-name>` (normal functions will report the same as column `FUNCTION_NAME`, the unquoted name)

Specified by:
  `getFunctions` in interface `DatabaseMetaData`
Throws:
  `SQLException`

- ### getSchemas

  public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException
  Specified by:
    `getSchemas` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### isWrapperFor

  public boolean isWrapperFor(Class<?> iface) throws SQLException
  Specified by:
    `isWrapperFor` in interface `Wrapper`
  Throws:
    `SQLException`

- ### unwrap

  public <T> T unwrap(Class<T> iface) throws SQLException
  Specified by:
    `unwrap` in interface `Wrapper`
  Throws:
    `SQLException`

- ### escapeWildcards

  public static String escapeWildcards(String objectName)
  Escapes the like wildcards and escape (`\_%` in the provided search string with a `\`.

  Primary purpose is to escape object names with wildcards for use in metadata patterns for literal matches, but it can also be used to escape for SQL `LIKE`.

  Parameters:
    `objectName` - Object name to escape.
  Returns:
    Object name with wildcards escaped.

- ### getPseudoColumns

  public ResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException
  Specified by:
    `getPseudoColumns` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### generatedKeyAlwaysReturned

  public boolean generatedKeyAlwaysReturned() throws SQLException
  Specified by:
    `generatedKeyAlwaysReturned` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getProcedureSourceCode

  public String getProcedureSourceCode(String procedureName) throws 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:
    `SQLException` - if specified procedure cannot be found.

- ### getTriggerSourceCode

  public String getTriggerSourceCode(String triggerName) throws 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:
    `SQLException` - if specified trigger cannot be found.

- ### getViewSourceCode

  public String getViewSourceCode(String viewName) throws 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:
    `SQLException` - if specified view cannot be found.

- ### getBytes

  protected static byte[] getBytes(String value)

- ### doQuery

  protected ResultSet doQuery(String sql, List<String> params) throws 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:
    `SQLException` - if a database access error occurs

- ### doQuery

  protected ResultSet doQuery(String sql, List<String> params, boolean standalone) throws 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:
    `SQLException` - if a database access error occurs

- ### getRowIdLifetime

  public RowIdLifetime getRowIdLifetime() throws SQLException

  Minimum lifetime supported by Firebird is transaction-scope, and this can be changed to session-scope with `isc_dpb_dbkey_scope` set to `1` (eg connection property `dbkey_scope=1`). This implementation, however, will always report `RowIdLifetime.ROWID_VALID_TRANSACTION`.

  Specified by:
    `getRowIdLifetime` in interface `DatabaseMetaData`
  Throws:
    `SQLException`

- ### getJDBCMajorVersion

  public int getJDBCMajorVersion()
  Specified by:
    `getJDBCMajorVersion` in interface `DatabaseMetaData`

- ### getJDBCMinorVersion

  public int getJDBCMinorVersion()
  Specified by:
    `getJDBCMinorVersion` in interface `DatabaseMetaData`

- ### getDbMetadataMediator

  protected DbMetadataMediator getDbMetadataMediator()