Package virtuoso.jdbc4

## Class VirtuosoDatabaseMetaData

- java.lang.Object
- - virtuoso.jdbc4.VirtuosoDatabaseMetaData

All Implemented Interfaces:
  `java.sql.DatabaseMetaData`, `java.sql.Wrapper`

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

The DatabaseMetaData class is an implementation of the DatabaseMetaData interface in the JDBC API which represents the database meta data. You can have one with:

       DatabaseMetaData metaData = connection.getMetaData()

See Also:
  `DatabaseMetaData`, `Connection.getMetaData()`, `VirtuosoResultSet`

### Field Summary

Fields
`static java.lang.String` `fk_text_casemode_0`
`static java.lang.String` `fk_text_casemode_2`
`static java.lang.String` `fk_textw_casemode_0`
`static java.lang.String` `fk_textw_casemode_2`
`static java.lang.String` `getBestRowIdText_case0`
`static java.lang.String` `getBestRowIdText_case2`
`static java.lang.String` `getBestVersionColsText_case0`
`static java.lang.String` `getBestVersionColsText_case2`
`static java.lang.String` `getWideBestRowIdText_case0`
`static java.lang.String` `getWideBestRowIdText_case2`
`static java.lang.String` `getWideBestVersionColsText_case0`
`static java.lang.String` `getWideBestVersionColsText_case2`
`static java.lang.String` `sql_statistics_text_casemode_0`
`static java.lang.String` `sql_statistics_text_casemode_2`
`static java.lang.String` `sql_statistics_textw_casemode_0`
`static java.lang.String` `sql_statistics_textw_casemode_2`
`static int` `VARCHAR_UNSPEC_SIZE`

### 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`

### Method Summary

All Methods Instance Methods Concrete Methods
`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​()` Retrieves whether a `SQLException` while autoCommit is `true` inidcates that all open ResultSets are closed, even ones that are holdable.
`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?
`boolean` `generatedKeyAlwaysReturned​()` Retrieves whether a generated key will always be returned if the column name(s) or index(es) specified for the auto generated key column(s) are valid and the statement succeeds.
`java.sql.ResultSet` `getAttributes​(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String typeNamePattern, java.lang.String attributeNamePattern)` Retrieves a description of the given attribute of the given type for a user-defined type (UDT) that is available in the given schema and catalog.
`java.sql.ResultSet` `getBestRowIdentifier​(java.lang.String catalog, java.lang.String schema, java.lang.String table, int scope, boolean nullable)` Gets a description of a table's optimal set of columns that uniquely identifies a row.
`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)` Gets a description of table columns available in the specified catalog.
`java.sql.Connection` `getConnection​()` Retrieves the connection that produced this metadata object.

`java.sql.ResultSet`

`getCrossReference​(java.lang.String primaryCatalog, java.lang.String primarySchema, java.lang.String primaryTable, java.lang.String foreignCatalog, java.lang.String foreignSchema, java.lang.String foreignTable)`

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 anothere is 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.

`int` `getDatabaseMajorVersion​()` Retrieves the major version number of the underlying database.
`int` `getDatabaseMinorVersion​()` Retrieves the minor version number of the underlying database.
`java.lang.String` `getDatabaseProductName​()` Returns the name of this database product.
`java.lang.String` `getDatabaseProductVersion​()` Returns 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​()` Returns the JDBC driver's major version number.
`int` `getDriverMinorVersion​()` Returns the JDBC driver's minor version number.
`java.lang.String` `getDriverName​()` Returns the name of this JDBC driver.
`java.lang.String` `getDriverVersion​()` Returns 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​()` Retrieves the string used to quote SQL identifiers.
`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​()` Retrieves the major JDBC version number for this driver.
`int` `getJDBCMinorVersion​()` Retrieves the minor JDBC version number for this driver.
`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​()` What's the maximum length of an index (in bytes)?
`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 a 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​()` Gets a comma-separated list of math functions.
`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)` Gets a description of a catalog's stored procedure parameters 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` `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)` Retrieves a description of the pseudo or hidden columns available in a given table within the specified catalog and schema.
`int` `getResultSetHoldability​()` Retrieves the default holdability of this `ResultSet` object.
`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​()` Gets a comma-separated list of all a database's SQL keywords that are NOT also SQL92 keywords.
`int` `getSQLStateType​()` Indicates whether the SQLSTATEs returned by `SQLException.getSQLState` is X/Open (now known as Open Group) SQL CLI or SQL99.
`java.lang.String` `getStringFunctions​()` Gets a comma-separated list of string functions.
`java.sql.ResultSet` `getSuperTables​(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String tableNamePattern)` Retrieves a description of the table hierarchies defined in a particular schema in this database.
`java.sql.ResultSet` `getSuperTypes​(java.lang.String catalog, java.lang.String schemaPattern, java.lang.String typeNamePattern)` Retrieves a description of the user-defined type (UDT) hierarchies defined in a particular schema in this database.
`java.lang.String` `getSystemFunctions​()` Gets a comma-separated list of system functions.
`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)` Gets a description of tables available in a catalog.
`java.sql.ResultSet` `getTableTypes​()` Gets the table types available in this database.
`java.lang.String` `getTimeDateFunctions​()` Gets a comma-separated list of time and date functions.
`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)` Gets a description of the user-defined types defined in a particular schema.
`java.lang.String` `getURL​()` Returns the URL which permits to access the database.
`java.lang.String` `getUserName​()` Returns the 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.
`boolean` `insertsAreDetected​(int type)` Indicates whether or not a visible row insert can be detected by calling ResultSet.rowInserted().
`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)` Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does.
`boolean` `locatorsUpdateCopy​()` Indicates whether updates made to a LOB are made on a copy or directly to the LOB.
`boolean` `nullPlusNonNullIsNull​()` Retrieves whether this database supports concatenations between `NULL` and non-`NULL` values being `NULL`.
`boolean` `nullsAreSortedAtEnd​()` 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.
`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?
`boolean` `supportsAlterTableWithAddColumn​()` Is "ALTER TABLE" with add column supported?
`boolean` `supportsAlterTableWithDropColumn​()` Is "ALTER TABLE" with drop column supported?
`boolean` `supportsANSI92EntryLevelSQL​()` Retrieves whether this database supports the ANSI92 entry level SQL grammar.
`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​()` Retrieves whether this database supports column aliasing.
`boolean` `supportsConvert​()` Is the CONVERT function between SQL types supported?
`boolean` `supportsConvert​(int fromType, int toType)` Is CONVERT between the given SQL types supported?
`boolean` `supportsCoreSQLGrammar​()` Is the ODBC Core SQL grammar supported?
`boolean` `supportsCorrelatedSubqueries​()` Retrieves whether this database supports correlated subqueries.
`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​()` Are full nested outer joins supported?
`boolean` `supportsGetGeneratedKeys​()` Retrieves whether auto-generated keys can be retrieved after a statement has been executed.
`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​()` Retrieves whether this database supports specifying a `LIKE` escape clause.
`boolean` `supportsLimitedOuterJoins​()` Is there limited support for outer joins? (This will be true if supportFullOuterJoins is true.)
`boolean` `supportsMinimumSQLGrammar​()` Retrieves whether this database supports the ODBC Minimum SQL grammar.
`boolean` `supportsMixedCaseIdentifiers​()` Retrieves whether this database treats mixed case unquoted SQL identifiers as case sensitive and as a result stores them in mixed case.
`boolean` `supportsMixedCaseQuotedIdentifiers​()` Retrieves whether this database treats mixed case quoted SQL identifiers as case sensitive and as a result stores them in mixed case.
`boolean` `supportsMultipleOpenResults​()` Retrieves whether it is possible to have multiple `ResultSet` objects returned from a `CallableStatement` object simultaneously.
`boolean` `supportsMultipleResultSets​()` Are multiple ResultSets from a single execute supported?
`boolean` `supportsMultipleTransactions​()` Can we have multiple transactions open at once (on different connections)?
`boolean` `supportsNamedParameters​()` Retrieves whether this database supports named parameters to callable statements.
`boolean` `supportsNonNullableColumns​()` Retrieves whether columns in this database may be defined as non-nullable.
`boolean` `supportsOpenCursorsAcrossCommit​()` 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​()` Is some form of outer join supported?
`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 result set 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​()` Retrieves weather this database supports statement pooling.
`boolean` `supportsStoredFunctionsUsingCallSyntax​()` Retrieves whether this database supports invoking user-defined or vendor functions using the stored procedure escape syntax.
`boolean` `supportsStoredProcedures​()` Are stored procedure calls using the stored procedure escape syntax supported?
`boolean` `supportsSubqueriesInComparisons​()` Retrieves whether this database supports subqueries in comparison expressions.
`boolean` `supportsSubqueriesInExists​()` Retrieves whether this database supports subqueries in `EXISTS` expressions.
`boolean` `supportsSubqueriesInIns​()` Retrieves whether this database supports subqueries in `IN` expressions.
`boolean` `supportsSubqueriesInQuantifieds​()` Retrieves whether this database supports subqueries in quantified expressions.
`boolean` `supportsTableCorrelationNames​()` Retrieves whether this database supports table correlation names.
`boolean` `supportsTransactionIsolationLevel​(int level)` 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)` Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy.
`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 interface java.sql.DatabaseMetaData

`getMaxLogicalLobSize, supportsRefCursors, supportsSharding`

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

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

### Field Detail

#### VARCHAR_UNSPEC_SIZE

    public static final int VARCHAR_UNSPEC_SIZE

See Also:
  Constant Field Values

#### getWideBestRowIdText_case0

    public static final java.lang.String getWideBestRowIdText_case0

See Also:
  Constant Field Values

#### getWideBestRowIdText_case2

    public static final java.lang.String getWideBestRowIdText_case2

See Also:
  Constant Field Values

#### getBestRowIdText_case0

    public static final java.lang.String getBestRowIdText_case0

See Also:
  Constant Field Values

#### getBestRowIdText_case2

    public static final java.lang.String getBestRowIdText_case2

See Also:
  Constant Field Values

#### getWideBestVersionColsText_case0

    public static final java.lang.String getWideBestVersionColsText_case0

See Also:
  Constant Field Values

#### getWideBestVersionColsText_case2

    public static final java.lang.String getWideBestVersionColsText_case2

See Also:
  Constant Field Values

#### getBestVersionColsText_case0

    public static final java.lang.String getBestVersionColsText_case0

See Also:
  Constant Field Values

#### getBestVersionColsText_case2

    public static final java.lang.String getBestVersionColsText_case2

See Also:
  Constant Field Values

#### fk_text_casemode_0

    public static final java.lang.String fk_text_casemode_0

See Also:
  Constant Field Values

#### fk_text_casemode_2

    public static final java.lang.String fk_text_casemode_2

See Also:
  Constant Field Values

#### fk_textw_casemode_0

    public static final java.lang.String fk_textw_casemode_0

See Also:
  Constant Field Values

#### fk_textw_casemode_2

    public static final java.lang.String fk_textw_casemode_2

See Also:
  Constant Field Values

#### sql_statistics_text_casemode_0

    public static final java.lang.String sql_statistics_text_casemode_0

See Also:
  Constant Field Values

#### sql_statistics_text_casemode_2

    public static final java.lang.String sql_statistics_text_casemode_2

See Also:
  Constant Field Values

#### sql_statistics_textw_casemode_0

    public static final java.lang.String sql_statistics_textw_casemode_0

See Also:
  Constant Field Values

#### sql_statistics_textw_casemode_2

    public static final java.lang.String sql_statistics_textw_casemode_2

See Also:
  Constant Field Values

### Method Detail

#### getURL

    public java.lang.String getURL​()
                            throws VirtuosoException

Returns the URL which permits to access the database.

Specified by:
  `getURL` in interface `java.sql.DatabaseMetaData`
Returns:
  the url or null if it cannot be generated.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getUserName

    public java.lang.String getUserName​()
                                 throws VirtuosoException

Returns the user name as known to the database.

Specified by:
  `getUserName` in interface `java.sql.DatabaseMetaData`
Returns:
  the database user name used.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### isReadOnly

    public boolean isReadOnly​()
                       throws VirtuosoException

Is the database in read-only mode?

Specified by:
  `isReadOnly` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### nullsAreSortedHigh

    public boolean nullsAreSortedHigh​()
                               throws VirtuosoException

Are NULL values sorted high?

Specified by:
  `nullsAreSortedHigh` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### nullsAreSortedLow

    public boolean nullsAreSortedLow​()
                              throws VirtuosoException

Are NULL values sorted low?

Specified by:
  `nullsAreSortedLow` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### nullsAreSortedAtStart

    public boolean nullsAreSortedAtStart​()
                                  throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### nullsAreSortedAtEnd

    public boolean nullsAreSortedAtEnd​()
                                throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getDatabaseProductName

    public java.lang.String getDatabaseProductName​()
                                            throws VirtuosoException

Returns the name of this database product. In our case it is OpenLink Virtuoso DBMS.

Specified by:
  `getDatabaseProductName` in interface `java.sql.DatabaseMetaData`
Returns:
  the database product name.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getDatabaseProductVersion

    public java.lang.String getDatabaseProductVersion​()
                                               throws VirtuosoException

Returns the version of this database product.

Specified by:
  `getDatabaseProductVersion` in interface `java.sql.DatabaseMetaData`
Returns:
  the database version.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getDriverName

    public java.lang.String getDriverName​()
                                   throws VirtuosoException

Returns the name of this JDBC driver. In our case it is OpenLink Virtuoso JDBC pure Java.

Specified by:
  `getDriverName` in interface `java.sql.DatabaseMetaData`
Returns:
  the JDBC driver name.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getDriverVersion

    public java.lang.String getDriverVersion​()
                                      throws VirtuosoException

Returns the version of this JDBC driver.

Specified by:
  `getDriverVersion` in interface `java.sql.DatabaseMetaData`
Returns:
  the JDBC driver version.
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getDriverMajorVersion

    public int getDriverMajorVersion​()

Returns the JDBC driver's major version number.

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

#### getDriverMinorVersion

    public int getDriverMinorVersion​()

Returns the JDBC driver's minor version number.

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

#### usesLocalFiles

    public boolean usesLocalFiles​()
                           throws VirtuosoException

Does the database store tables in a local file?

Specified by:
  `usesLocalFiles` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### usesLocalFilePerTable

    public boolean usesLocalFilePerTable​()
                                  throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsMixedCaseIdentifiers

    public boolean supportsMixedCaseIdentifiers​()
                                         throws VirtuosoException

Retrieves whether this database treats mixed case unquoted SQL identifiers as case sensitive and as a result stores them in mixed case.

Specified by:
  `supportsMixedCaseIdentifiers` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### storesUpperCaseIdentifiers

    public boolean storesUpperCaseIdentifiers​()
                                       throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### storesLowerCaseIdentifiers

    public boolean storesLowerCaseIdentifiers​()
                                       throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### storesMixedCaseIdentifiers

    public boolean storesMixedCaseIdentifiers​()
                                       throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsMixedCaseQuotedIdentifiers

    public boolean supportsMixedCaseQuotedIdentifiers​()
                                               throws VirtuosoException

Retrieves whether this database treats mixed case quoted SQL identifiers as case sensitive and as a result stores them in mixed case.

Specified by:
  `supportsMixedCaseQuotedIdentifiers` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### storesUpperCaseQuotedIdentifiers

    public boolean storesUpperCaseQuotedIdentifiers​()
                                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### storesLowerCaseQuotedIdentifiers

    public boolean storesLowerCaseQuotedIdentifiers​()
                                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### storesMixedCaseQuotedIdentifiers

    public boolean storesMixedCaseQuotedIdentifiers​()
                                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getIdentifierQuoteString

    public java.lang.String getIdentifierQuoteString​()
                                              throws VirtuosoException

Retrieves the string used to quote SQL identifiers. This method returns a space " " if identifier quoting is not supported.

Specified by:
  `getIdentifierQuoteString` in interface `java.sql.DatabaseMetaData`
Returns:
  the quoting string
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getSQLKeywords

    public java.lang.String getSQLKeywords​()
                                    throws VirtuosoException

Gets a comma-separated list of all a database's SQL keywords that are NOT also SQL92 keywords.

Specified by:
  `getSQLKeywords` in interface `java.sql.DatabaseMetaData`
Returns:
  the list
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getNumericFunctions

    public java.lang.String getNumericFunctions​()
                                         throws VirtuosoException

Gets a comma-separated list of math functions. These are the X/Open CLI math function names used in the JDBC function escape clause.

Specified by:
  `getNumericFunctions` in interface `java.sql.DatabaseMetaData`
Returns:
  the list
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getStringFunctions

    public java.lang.String getStringFunctions​()
                                        throws VirtuosoException

Gets a comma-separated list of string functions. These are the X/Open CLI string function names used in the JDBC function escape clause.

Specified by:
  `getStringFunctions` in interface `java.sql.DatabaseMetaData`
Returns:
  the list
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getSystemFunctions

    public java.lang.String getSystemFunctions​()
                                        throws VirtuosoException

Gets a comma-separated list of system functions. These are the X/Open CLI system function names used in the JDBC function escape clause.

Specified by:
  `getSystemFunctions` in interface `java.sql.DatabaseMetaData`
Returns:
  the list
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getTimeDateFunctions

    public java.lang.String getTimeDateFunctions​()
                                          throws VirtuosoException

Gets a comma-separated list of time and date functions.

Specified by:
  `getTimeDateFunctions` in interface `java.sql.DatabaseMetaData`
Returns:
  the list
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getSearchStringEscape

    public java.lang.String getSearchStringEscape​()
                                           throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getExtraNameCharacters

    public java.lang.String getExtraNameCharacters​()
                                            throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsAlterTableWithAddColumn

    public boolean supportsAlterTableWithAddColumn​()
                                            throws VirtuosoException

Is "ALTER TABLE" with add column supported?

Specified by:
  `supportsAlterTableWithAddColumn` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsAlterTableWithDropColumn

    public boolean supportsAlterTableWithDropColumn​()
                                             throws VirtuosoException

Is "ALTER TABLE" with drop column supported?

Specified by:
  `supportsAlterTableWithDropColumn` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsColumnAliasing

    public boolean supportsColumnAliasing​()
                                   throws VirtuosoException

Retrieves whether this database supports column aliasing.

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

Specified by:
  `supportsColumnAliasing` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### nullPlusNonNullIsNull

    public boolean nullPlusNonNullIsNull​()
                                  throws VirtuosoException

Retrieves whether this database supports concatenations between `NULL` and non-`NULL` values being `NULL`.

Specified by:
  `nullPlusNonNullIsNull` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsConvert

    public boolean supportsConvert​()
                            throws VirtuosoException

Is the CONVERT function between SQL types supported?

Specified by:
  `supportsConvert` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsConvert

    public boolean supportsConvert​(int fromType,
                                   int toType)
                            throws VirtuosoException

Is 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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsTableCorrelationNames

    public boolean supportsTableCorrelationNames​()
                                          throws VirtuosoException

Retrieves whether this database supports table correlation names.

Specified by:
  `supportsTableCorrelationNames` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsDifferentTableCorrelationNames

    public boolean supportsDifferentTableCorrelationNames​()
                                                   throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsExpressionsInOrderBy

    public boolean supportsExpressionsInOrderBy​()
                                         throws VirtuosoException

Are expressions in "ORDER BY" lists supported?

Specified by:
  `supportsExpressionsInOrderBy` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsOrderByUnrelated

    public boolean supportsOrderByUnrelated​()
                                     throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsGroupBy

    public boolean supportsGroupBy​()
                            throws VirtuosoException

Is some form of "GROUP BY" clause supported?

Specified by:
  `supportsGroupBy` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsGroupByUnrelated

    public boolean supportsGroupByUnrelated​()
                                     throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsGroupByBeyondSelect

    public boolean supportsGroupByBeyondSelect​()
                                        throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsLikeEscapeClause

    public boolean supportsLikeEscapeClause​()
                                     throws VirtuosoException

Retrieves whether this database supports specifying a `LIKE` escape clause.

Specified by:
  `supportsLikeEscapeClause` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsMultipleResultSets

    public boolean supportsMultipleResultSets​()
                                       throws VirtuosoException

Are multiple ResultSets from a single execute supported?

Specified by:
  `supportsMultipleResultSets` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsMultipleTransactions

    public boolean supportsMultipleTransactions​()
                                         throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsNonNullableColumns

    public boolean supportsNonNullableColumns​()
                                       throws VirtuosoException

Retrieves whether columns in this database may be defined as non-nullable.

Specified by:
  `supportsNonNullableColumns` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsMinimumSQLGrammar

    public boolean supportsMinimumSQLGrammar​()
                                      throws VirtuosoException

Retrieves whether this database supports the ODBC Minimum SQL grammar.

Specified by:
  `supportsMinimumSQLGrammar` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsCoreSQLGrammar

    public boolean supportsCoreSQLGrammar​()
                                   throws VirtuosoException

Is the ODBC Core SQL grammar supported?

Specified by:
  `supportsCoreSQLGrammar` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsExtendedSQLGrammar

    public boolean supportsExtendedSQLGrammar​()
                                       throws VirtuosoException

Is the ODBC Extended SQL grammar supported?

Specified by:
  `supportsExtendedSQLGrammar` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsANSI92EntryLevelSQL

    public boolean supportsANSI92EntryLevelSQL​()
                                        throws VirtuosoException

Retrieves whether this database supports the ANSI92 entry level SQL grammar.

Specified by:
  `supportsANSI92EntryLevelSQL` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsANSI92IntermediateSQL

    public boolean supportsANSI92IntermediateSQL​()
                                          throws VirtuosoException

Is the ANSI92 intermediate SQL grammar supported?

Specified by:
  `supportsANSI92IntermediateSQL` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsANSI92FullSQL

    public boolean supportsANSI92FullSQL​()
                                  throws VirtuosoException

Is the ANSI92 full SQL grammar supported?

Specified by:
  `supportsANSI92FullSQL` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### 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:
  `VirtuosoException` - No errors returned (just an implementation question).
  `java.sql.SQLException`

#### supportsOuterJoins

    public boolean supportsOuterJoins​()
                               throws VirtuosoException

Is some form of outer join supported?

Specified by:
  `supportsOuterJoins` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsFullOuterJoins

    public boolean supportsFullOuterJoins​()
                                   throws VirtuosoException

Are full nested outer joins supported?

Specified by:
  `supportsFullOuterJoins` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsLimitedOuterJoins

    public boolean supportsLimitedOuterJoins​()
                                      throws VirtuosoException

Is there limited support for outer joins? (This will be true if supportFullOuterJoins is true.)

Specified by:
  `supportsLimitedOuterJoins` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getSchemaTerm

    public java.lang.String getSchemaTerm​()
                                   throws VirtuosoException

What's the database vendor's preferred term for "schema"?

Specified by:
  `getSchemaTerm` in interface `java.sql.DatabaseMetaData`
Returns:
  the vendor term
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getProcedureTerm

    public java.lang.String getProcedureTerm​()
                                      throws VirtuosoException

What's the database vendor's preferred term for "procedure"?

Specified by:
  `getProcedureTerm` in interface `java.sql.DatabaseMetaData`
Returns:
  the vendor term
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getCatalogTerm

    public java.lang.String getCatalogTerm​()
                                    throws VirtuosoException

What's the database vendor's preferred term for "catalog"?

Specified by:
  `getCatalogTerm` in interface `java.sql.DatabaseMetaData`
Returns:
  the vendor term
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### isCatalogAtStart

    public boolean isCatalogAtStart​()
                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getCatalogSeparator

    public java.lang.String getCatalogSeparator​()
                                         throws VirtuosoException

What's the separator between catalog and table name?

Specified by:
  `getCatalogSeparator` in interface `java.sql.DatabaseMetaData`
Returns:
  the separator string
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSchemasInDataManipulation

    public boolean supportsSchemasInDataManipulation​()
                                              throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSchemasInProcedureCalls

    public boolean supportsSchemasInProcedureCalls​()
                                            throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSchemasInTableDefinitions

    public boolean supportsSchemasInTableDefinitions​()
                                              throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSchemasInIndexDefinitions

    public boolean supportsSchemasInIndexDefinitions​()
                                              throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSchemasInPrivilegeDefinitions

    public boolean supportsSchemasInPrivilegeDefinitions​()
                                                  throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsCatalogsInDataManipulation

    public boolean supportsCatalogsInDataManipulation​()
                                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsCatalogsInProcedureCalls

    public boolean supportsCatalogsInProcedureCalls​()
                                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsCatalogsInTableDefinitions

    public boolean supportsCatalogsInTableDefinitions​()
                                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsCatalogsInIndexDefinitions

    public boolean supportsCatalogsInIndexDefinitions​()
                                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsCatalogsInPrivilegeDefinitions

    public boolean supportsCatalogsInPrivilegeDefinitions​()
                                                   throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsPositionedDelete

    public boolean supportsPositionedDelete​()
                                     throws VirtuosoException

Is positioned DELETE supported?

Specified by:
  `supportsPositionedDelete` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsPositionedUpdate

    public boolean supportsPositionedUpdate​()
                                     throws VirtuosoException

Is positioned UPDATE supported?

Specified by:
  `supportsPositionedUpdate` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSelectForUpdate

    public boolean supportsSelectForUpdate​()
                                    throws VirtuosoException

Is SELECT for UPDATE supported?

Specified by:
  `supportsSelectForUpdate` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsStoredProcedures

    public boolean supportsStoredProcedures​()
                                     throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSubqueriesInComparisons

    public boolean supportsSubqueriesInComparisons​()
                                            throws VirtuosoException

Retrieves whether this database supports subqueries in comparison expressions.

Specified by:
  `supportsSubqueriesInComparisons` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSubqueriesInExists

    public boolean supportsSubqueriesInExists​()
                                       throws VirtuosoException

Retrieves whether this database supports subqueries in `EXISTS` expressions.

Specified by:
  `supportsSubqueriesInExists` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSubqueriesInIns

    public boolean supportsSubqueriesInIns​()
                                    throws VirtuosoException

Retrieves whether this database supports subqueries in `IN` expressions.

Specified by:
  `supportsSubqueriesInIns` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsSubqueriesInQuantifieds

    public boolean supportsSubqueriesInQuantifieds​()
                                            throws VirtuosoException

Retrieves whether this database supports subqueries in quantified expressions.

Specified by:
  `supportsSubqueriesInQuantifieds` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsCorrelatedSubqueries

    public boolean supportsCorrelatedSubqueries​()
                                         throws VirtuosoException

Retrieves whether this database supports correlated subqueries.

Specified by:
  `supportsCorrelatedSubqueries` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsUnion

    public boolean supportsUnion​()
                          throws VirtuosoException

Is SQL UNION supported?

Specified by:
  `supportsUnion` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsUnionAll

    public boolean supportsUnionAll​()
                             throws VirtuosoException

Is SQL UNION ALL supported?

Specified by:
  `supportsUnionAll` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsOpenCursorsAcrossCommit

    public boolean supportsOpenCursorsAcrossCommit​()
                                            throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsOpenCursorsAcrossRollback

    public boolean supportsOpenCursorsAcrossRollback​()
                                              throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsOpenStatementsAcrossCommit

    public boolean supportsOpenStatementsAcrossCommit​()
                                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsOpenStatementsAcrossRollback

    public boolean supportsOpenStatementsAcrossRollback​()
                                                 throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxBinaryLiteralLength

    public int getMaxBinaryLiteralLength​()
                                  throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxCharLiteralLength

    public int getMaxCharLiteralLength​()
                                throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxColumnNameLength

    public int getMaxColumnNameLength​()
                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxColumnsInGroupBy

    public int getMaxColumnsInGroupBy​()
                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxColumnsInIndex

    public int getMaxColumnsInIndex​()
                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxColumnsInOrderBy

    public int getMaxColumnsInOrderBy​()
                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxColumnsInSelect

    public int getMaxColumnsInSelect​()
                              throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxColumnsInTable

    public int getMaxColumnsInTable​()
                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxConnections

    public int getMaxConnections​()
                          throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxCursorNameLength

    public int getMaxCursorNameLength​()
                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxIndexLength

    public int getMaxIndexLength​()
                          throws VirtuosoException

What's the maximum length of an index (in bytes)?

Specified by:
  `getMaxIndexLength` in interface `java.sql.DatabaseMetaData`
Returns:
  max index length in bytes; a result of zero means that there is no limit or the limit is not known
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxSchemaNameLength

    public int getMaxSchemaNameLength​()
                               throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxProcedureNameLength

    public int getMaxProcedureNameLength​()
                                  throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxCatalogNameLength

    public int getMaxCatalogNameLength​()
                                throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxRowSize

    public int getMaxRowSize​()
                      throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### doesMaxRowSizeIncludeBlobs

    public boolean doesMaxRowSizeIncludeBlobs​()
                                       throws VirtuosoException

Did getMaxRowSize() include LONGVARCHAR and LONGVARBINARY blobs?

Specified by:
  `doesMaxRowSizeIncludeBlobs` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxStatementLength

    public int getMaxStatementLength​()
                              throws VirtuosoException

What's the maximum length of a 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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxStatements

    public int getMaxStatements​()
                         throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxTableNameLength

    public int getMaxTableNameLength​()
                              throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxTablesInSelect

    public int getMaxTablesInSelect​()
                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getMaxUserNameLength

    public int getMaxUserNameLength​()
                             throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### getDefaultTransactionIsolation

    public int getDefaultTransactionIsolation​()
                                       throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).
See Also:
  `Connection`

#### supportsTransactions

    public boolean supportsTransactions​()
                                 throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsTransactionIsolationLevel

    public boolean supportsTransactionIsolationLevel​(int level)
                                              throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).
See Also:
  `Connection`

#### supportsDataDefinitionAndDataManipulationTransactions

    public boolean supportsDataDefinitionAndDataManipulationTransactions​()
                                                                  throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### supportsDataManipulationTransactionsOnly

    public boolean supportsDataManipulationTransactionsOnly​()
                                                     throws VirtuosoException

Are only data manipulation statements within a transaction supported?

Specified by:
  `supportsDataManipulationTransactionsOnly` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### dataDefinitionCausesTransactionCommit

    public boolean dataDefinitionCausesTransactionCommit​()
                                                  throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### dataDefinitionIgnoredInTransactions

    public boolean dataDefinitionIgnoredInTransactions​()
                                                throws VirtuosoException

Is a data definition statement within a transaction ignored?

Specified by:
  `dataDefinitionIgnoredInTransactions` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if so; `false` otherwise
Throws:
  `VirtuosoException` - No errors returned (just an implementation question).

#### allProceduresAreCallable

    public boolean allProceduresAreCallable​()
                                     throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### allTablesAreSelectable

    public boolean allTablesAreSelectable​()
                                   throws VirtuosoException

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:
  `VirtuosoException` - No errors returned (just an implementation question).

#### 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 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

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:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`
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

Gets a description of a catalog's stored procedure parameters and result columns.

Only descriptions matching the schema, procedure and parameter name criteria are returned. They are ordered by PROCEDURE_SCHEM and PROCEDURE_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 short => 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
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

Note: Some databases may not return the column descriptions for a procedure. Additional columns beyond REMARKS can be defined by the database.

Specified by:
  `getProcedureColumns` 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
  `columnNamePattern` - a column name pattern
Returns:
  ResultSet - each row describes a stored procedure parameter or column
Throws:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`
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

Gets a description of tables available in a catalog.

Only table descriptions matching the catalog, schema, table name and type criteria are returned. They are ordered by TABLE_TYPE, 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

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

Specified by:
  `getTables` 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
  `types` - a list of table types to include; null returns all types
Returns:
  ResultSet - each row is a table description
Throws:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`
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 column is:

1. TABLE_SCHEM String => schema name

Specified by:
  `getSchemas` in interface `java.sql.DatabaseMetaData`
Returns:
  ResultSet - each row has a single String column that is a schema name
Throws:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`

#### 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:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`

#### 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:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`

#### 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

Gets 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_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 short => 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. For char or date types this is the maximum number of characters, for numeric or decimal types this is precision.
8. BUFFER_LENGTH is not used.
9. DECIMAL_DIGITS int => the number of fractional digits
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 (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 => "NO" means column definitely does not allow NULL values; "YES" means the column might allow NULL values. An empty string means nobody knows.

Specified by:
  `getColumns` 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
  `columnNamePattern` - a column name pattern
Returns:
  ResultSet - each row is a column description
Throws:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`
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 privilege 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, REFERENCES, ...)
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:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`
See Also:
  `getSearchStringEscape()`

#### getTablePrivileges

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

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 privilege 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 privilege 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, REFERENCES, ...)
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:
  `VirtuosoException` - if a database access error occurs
See Also:
  `getSearchStringEscape()`

#### getBestRowIdentifier

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

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:
  `VirtuosoException` - 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 VirtuosoException

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:
  `VirtuosoException` - 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:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`

#### 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:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`
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:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`
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 VirtuosoException

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 anothere is 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:
  `VirtuosoException` - 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 a SQL type description
Throws:
  `VirtuosoException` - if a database access error occurs
  `java.sql.SQLException`

#### getIndexInfo

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

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 conjunction 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 tableIndexStatistic 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:
  `VirtuosoException` - if a database access error occurs

#### getConnection

    public java.sql.Connection getConnection​()
                                      throws VirtuosoException

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:
  `VirtuosoException` - if a database access error occurs

#### supportsResultSetType

    public boolean supportsResultSetType​(int type)
                                  throws VirtuosoException

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:
  `VirtuosoException` - if a database access error occurs

#### supportsResultSetConcurrency

    public boolean supportsResultSetConcurrency​(int type,
                                                int concurrency)
                                         throws VirtuosoException

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:
  `VirtuosoException` - if a database access error occurs
See Also:
  `Connection`

#### ownUpdatesAreVisible

    public boolean ownUpdatesAreVisible​(int type)
                                 throws VirtuosoException

Indicates whether a result set's own updates are visible.

Specified by:
  `ownUpdatesAreVisible` in interface `java.sql.DatabaseMetaData`
Parameters:
  `type` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  `true` if updates are visible for the result set type; `false` otherwise
Throws:
  `VirtuosoException` - if a database access error occurs

#### ownDeletesAreVisible

    public boolean ownDeletesAreVisible​(int type)
                                 throws VirtuosoException

Indicates whether a result set's own deletes are visible.

Specified by:
  `ownDeletesAreVisible` in interface `java.sql.DatabaseMetaData`
Parameters:
  `type` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  `true` if deletes are visible for the result set type; `false` otherwise
Throws:
  `VirtuosoException` - if a database access error occurs

#### ownInsertsAreVisible

    public boolean ownInsertsAreVisible​(int type)
                                 throws VirtuosoException

Indicates whether a result set's own inserts are visible.

Specified by:
  `ownInsertsAreVisible` in interface `java.sql.DatabaseMetaData`
Parameters:
  `type` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  `true` if inserts are visible for the result set type; `false` otherwise
Throws:
  `VirtuosoException` - if a database access error occurs

#### othersUpdatesAreVisible

    public boolean othersUpdatesAreVisible​(int type)
                                    throws VirtuosoException

Indicates whether updates made by others are visible.

Specified by:
  `othersUpdatesAreVisible` in interface `java.sql.DatabaseMetaData`
Parameters:
  `type` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  `true` if updates made by others are visible for the result set type; `false` otherwise
Throws:
  `VirtuosoException` - if a database access error occurs

#### othersDeletesAreVisible

    public boolean othersDeletesAreVisible​(int type)
                                    throws VirtuosoException

Indicates whether deletes made by others are visible.

Specified by:
  `othersDeletesAreVisible` in interface `java.sql.DatabaseMetaData`
Parameters:
  `type` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  `true` if deletes made by others are visible for the result set type; `false` otherwise
Throws:
  `VirtuosoException` - if a database access error occurs

#### othersInsertsAreVisible

    public boolean othersInsertsAreVisible​(int type)
                                    throws VirtuosoException

Indicates whether inserts made by others are visible.

Specified by:
  `othersInsertsAreVisible` in interface `java.sql.DatabaseMetaData`
Parameters:
  `type` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  true if updates are visible for the result set type
Throws:
  `VirtuosoException` - if a database access error occurs

#### updatesAreDetected

    public boolean updatesAreDetected​(int type)
                               throws VirtuosoException

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` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  `true` if changes are detected by the result set type; `false` otherwise
Throws:
  `VirtuosoException` - if a database access error occurs

#### deletesAreDetected

    public boolean deletesAreDetected​(int type)
                               throws VirtuosoException

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` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  true if changes are detected by the resultset type
Throws:
  `VirtuosoException` - if a database access error occurs

#### insertsAreDetected

    public boolean insertsAreDetected​(int type)
                               throws VirtuosoException

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` - set type, i.e. ResultSet.TYPE_XXX
Returns:
  true if changes are detected by the resultset type
Throws:
  `VirtuosoException` - if a database access error occurs

#### supportsBatchUpdates

    public boolean supportsBatchUpdates​()
                                 throws VirtuosoException

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:
  `VirtuosoException` - if a database access error occurs

#### getUDTs

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

Gets a description of the user-defined types defined in a particular schema. Schema-specific UDTs may have type JAVA_OBJECT, STRUCT, or DISTINCT.

Only types matching the catalog, schema, type name and type criteria are returned. They are ordered by DATA_TYPE, TYPE_SCHEM and TYPE_NAME. The type name parameter may be a fully-qualified name. In this case, the catalog and schemaPattern parameters are ignored.

Each type description has the following columns:

1. TYPE_CAT String => the type's catalog (may be null)
2. TYPE_SCHEM String => type's schema (may be null)
3. TYPE_NAME String => type name
4. CLASS_NAME String => Java class name
5. DATA_TYPE String => type value defined in java.sql.Types. One of JAVA_OBJECT, STRUCT, or DISTINCT
6. REMARKS String => explanatory comment on the type

Note: If the driver does not support UDTs, an empty result set is returned.

Specified by:
  `getUDTs` 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
  `typeNamePattern` - a type name pattern; may be a fully-qualified name
  `types` - a list of user-named types to include (JAVA_OBJECT, STRUCT, or DISTINCT); null returns all types
Returns:
  ResultSet - each row is a type description
Throws:
  `VirtuosoException` - if a database access error occurs

#### 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
Since:
  1.4

#### supportsNamedParameters

    public boolean supportsNamedParameters​()
                                    throws java.sql.SQLException

Retrieves whether this database supports named parameters to callable statements.

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
Since:
  1.4

#### 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 a `CallableStatement` object can return multiple `ResultSet` objects simultaneously; `false` otherwise
Throws:
  `java.sql.SQLException` - if a datanase access error occurs
Since:
  1.4

#### supportsGetGeneratedKeys

    public boolean supportsGetGeneratedKeys​()
                                     throws java.sql.SQLException

Retrieves whether auto-generated keys can be retrieved after a statement has been executed.

Specified by:
  `supportsGetGeneratedKeys` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if auto-generated keys can be retrieved after a statement has executed; `false` otherwise
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### getSuperTypes

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

Retrieves a description of the user-defined type (UDT) hierarchies defined in a particular schema in this database. Only the immediate super type/ sub type relationship is modeled.

Only supertype information for UDTs matching the catalog, schema, and type name is returned. The type name parameter may be a fully-qualified name. When the UDT name supplied is a fully-qualified name, the catalog and schemaPattern parameters are ignored.

If a UDT does not have a direct super type, it is not listed here. A row of the `ResultSet` object returned by this method describes the designated UDT and a direct supertype. A row has the following columns:

1. TYPE_CAT String => the UDT's catalog (may be `null`)
2. TYPE_SCHEM String => UDT's schema (may be `null`)
3. TYPE_NAME String => type name of the UDT
4. SUPERTYPE_CAT String => the direct super type's catalog (may be `null`)
5. SUPERTYPE_SCHEM String => the direct super type's schema (may be `null`)
6. SUPERTYPE_NAME String => the direct super type's name

Note: If the driver does not support type hierarchies, an empty result set is returned.

Specified by:
  `getSuperTypes` 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
  `typeNamePattern` - a UDT name pattern; may be a fully-qualified name
Returns:
  a `ResultSet` object in which a row gives information about the designated UDT
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### getSuperTables

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

Retrieves a description of the table hierarchies defined in a particular schema in this database.

Only supertable information for tables matching the catalog, schema and table name are returned. The table name parameter may be a fully- qualified name, in which case, the catalog and schemaPattern parameters are ignored. If a table does not have a super table, it is not listed here. Supertables have to be defined in the same catalog and schema as the sub tables. Therefore, the type description does not need to include this information for the supertable.

Each type description has the following columns:

1. TABLE_CAT String => the type's catalog (may be `null`)
2. TABLE_SCHEM String => type's schema (may be `null`)
3. TABLE_NAME String => type name
4. SUPERTABLE_NAME String => the direct super type's name

Note: If the driver does not support type hierarchies, an empty result set is returned.

Specified by:
  `getSuperTables` 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; may be a fully-qualified name
Returns:
  a `ResultSet` object in which each row is a type description
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### 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

Retrieves a description of the given attribute of the given type for a user-defined type (UDT) that is available in the given schema and catalog.

Descriptions are returned only for attributes of UDTs matching the catalog, schema, type, and attribute name criteria. They are ordered by TYPE_SCHEM, TYPE_NAME and ORDINAL_POSITION. This description does not contain inherited attributes.

The `ResultSet` object that is returned has the following columns:

1. TYPE_CAT String => type catalog (may be `null`)
2. TYPE_SCHEM String => type schema (may be `null`)
3. TYPE_NAME String => type name
4. ATTR_NAME String => attribute name
5. DATA_TYPE short => attribute type SQL type from java.sql.Types
6. ATTR_TYPE_NAME String => Data source dependent type name. For a UDT, the type name is fully qualified. For a REF, the type name is fully qualified and represents the target type of the reference type.
7. ATTR_SIZE int => column size. For char or date types this is the maximum number of characters; for numeric or decimal types this is precision.
8. DECIMAL_DIGITS int => the number of fractional digits
9. NUM_PREC_RADIX int => Radix (typically either 10 or 2)
10. NULLABLE int => whether NULL is allowed
    - attributeNoNulls - might not allow NULL values
    - attributeNullable - definitely allows NULL values
    - attributeNullableUnknown - nullability unknown
11. REMARKS String => comment describing column (may be `null`)
12. ATTR_DEF String => default value (may be `null`)
13. SQL_DATA_TYPE int => unused
14. SQL_DATETIME_SUB int => unused
15. CHAR_OCTET_LENGTH int => for char types the maximum number of bytes in the column
16. ORDINAL_POSITION int => index of column in table (starting at 1)
17. IS_NULLABLE String => "NO" means column definitely does not allow NULL values; "YES" means the column might allow NULL values. An empty string means unknown.
18. SCOPE_CATALOG String => catalog of table that is the scope of a reference attribute (`null` if DATA_TYPE is not REF)
19. SCOPE_SCHEMA String => schema of table that is the scope of a reference attribute (`null` if DATA_TYPE is not REF)
20. SCOPE_TABLE String => table name that is the scope of a reference attribute (`null` if the DATA_TYPE is not REF)
21. 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 is not DISTINCT or user-generated REF)

Specified by:
  `getAttributes` 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
  `typeNamePattern` - a type name pattern; must match the type name as it is stored in the database
  `attributeNamePattern` - an attribute name pattern; must match the attribute name as it is declared in the database
Returns:
  a `ResultSet` object in which each row is an attribute description
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### supportsResultSetHoldability

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

Retrieves whether this database supports the given result set 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 so; `false` otherwise
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4
See Also:
  `Connection`

#### getResultSetHoldability

    public int getResultSetHoldability​()
                                throws java.sql.SQLException

Retrieves the default holdability of this `ResultSet` object.

Specified by:
  `getResultSetHoldability` in interface `java.sql.DatabaseMetaData`
Returns:
  the default holdability; either `ResultSet.HOLD_CURSORS_OVER_COMMIT` or `ResultSet.CLOSE_CURSORS_AT_COMMIT`
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### getDatabaseMajorVersion

    public int getDatabaseMajorVersion​()
                                throws java.sql.SQLException

Retrieves the major version number of the underlying database.

Specified by:
  `getDatabaseMajorVersion` in interface `java.sql.DatabaseMetaData`
Returns:
  the underlying database's major version
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### getDatabaseMinorVersion

    public int getDatabaseMinorVersion​()
                                throws java.sql.SQLException

Retrieves the minor version number of the underlying database.

Specified by:
  `getDatabaseMinorVersion` in interface `java.sql.DatabaseMetaData`
Returns:
  underlying database's minor version
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### getJDBCMajorVersion

    public int getJDBCMajorVersion​()
                            throws java.sql.SQLException

Retrieves the major JDBC version number for this driver.

Specified by:
  `getJDBCMajorVersion` in interface `java.sql.DatabaseMetaData`
Returns:
  JDBC version major number
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### getJDBCMinorVersion

    public int getJDBCMinorVersion​()
                            throws java.sql.SQLException

Retrieves the minor JDBC version number for this driver.

Specified by:
  `getJDBCMinorVersion` in interface `java.sql.DatabaseMetaData`
Returns:
  JDBC version minor number
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### 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, one of: sqlStateXOpen or sqlStateSQL99
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### locatorsUpdateCopy

    public boolean locatorsUpdateCopy​()
                               throws java.sql.SQLException

Indicates whether updates made to a LOB are made on a copy or directly to the LOB.

Specified by:
  `locatorsUpdateCopy` in interface `java.sql.DatabaseMetaData`
Returns:
  `true` if updates are made to a copy of the LOB; `false` if updates are made directly to the LOB
Throws:
  `java.sql.SQLException` - if a database access error occurs
Since:
  1.4

#### supportsStatementPooling

    public boolean supportsStatementPooling​()
                                     throws java.sql.SQLException

Retrieves weather this database supports statement pooling.

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

#### 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

#### 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()`

#### supportsStoredFunctionsUsingCallSyntax

    public boolean supportsStoredFunctionsUsingCallSyntax​()
                                                   throws java.sql.SQLException

Retrieves whether this database supports invoking user-defined or vendor functions using the stored procedure escape syntax.

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

#### autoCommitFailureClosesAllResultSets

    public boolean autoCommitFailureClosesAllResultSets​()
                                                 throws java.sql.SQLException

Retrieves whether a `SQLException` while autoCommit is `true` inidcates that all open ResultSets are closed, even ones that are holdable. When a `SQLException` occurs while autocommit is `true`, it is vendor specific whether the JDBC driver responds with a commit operation, a rollback operation, or by doing neither a commit nor a rollback. A potential result of this difference is in whether or not holdable ResultSets are closed.

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

#### 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

#### 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()`

#### 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()`

#### unwrap

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

Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy. If the receiver implements the interface then the result is the receiver or a proxy for the receiver. If the receiver is a wrapper and the wrapped object implements the interface then the result is the wrapped object or a proxy for the wrapped object. Otherwise return the the result of calling `unwrap` recursively on the wrapped object or a proxy for that result. If the receiver is not a wrapper and does not implement the interface, then an `SQLException` is thrown.

Specified by:
  `unwrap` in interface `java.sql.Wrapper`
Parameters:
  `iface` - A Class defining an interface that the result must implement.
Returns:
  an object that implements the interface. May be a proxy for the actual implementing object.
Throws:
  `java.sql.SQLException` - If no object found that implements the interface
Since:
  1.6

#### isWrapperFor

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

Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does. Returns false otherwise. If this implements the interface then return true, else if this is a wrapper then return the result of recursively calling `isWrapperFor` on the wrapped object. If this does not implement the interface and is not a wrapper, return false. This method should be implemented as a low-cost operation compared to `unwrap` so that callers can use this method to avoid expensive `unwrap` calls that may fail. If this method returns true then calling `unwrap` with the same argument should succeed.

Specified by:
  `isWrapperFor` in interface `java.sql.Wrapper`
Parameters:
  `iface` - a Class defining an interface.
Returns:
  true if this implements the interface or directly or indirectly wraps an object that does.
Throws:
  `java.sql.SQLException` - if an error occurs while determining whether this is a wrapper for an object with the given interface.
Since:
  1.6

#### 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

Retrieves a description of the pseudo or hidden columns available in a given table within the specified catalog and schema. Pseudo or hidden columns may not always be stored within a table and are not visible in a ResultSet unless they are specified in the query's outermost SELECT list. Pseudo or hidden columns may not necessarily be able to be modified. If there are no pseudo or hidden columns, an empty ResultSet is returned.

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 `COLUMN_NAME`.

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. COLUMN_SIZE int => column size.
7. DECIMAL_DIGITS int => the number of fractional digits. Null is returned for data types where DECIMAL_DIGITS is not applicable.
8. NUM_PREC_RADIX int => Radix (typically either 10 or 2)
9. COLUMN_USAGE String => The allowed usage for the column. The value returned will correspond to the enum name returned by PseudoColumnUsage#name
10. REMARKS String => comment describing column (may be `null`)
11. CHAR_OCTET_LENGTH int => for char types the maximum number of bytes in the column
12. 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

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:
  `getPseudoColumns` 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
Since:
  1.7

#### generatedKeyAlwaysReturned

    public boolean generatedKeyAlwaysReturned​()
                                       throws java.sql.SQLException

Retrieves whether a generated key will always be returned if the column name(s) or index(es) specified for the auto generated key column(s) are valid and the statement succeeds. The key that is returned may or may not be based on the column(s) for the auto generated key. Consult your JDBC driver documentation for additional details.

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