/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.jdbc.metadata;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* This interface provides access to the (metadata) capabilities of a JDBC driver
*
* @since 8.0
*/
public interface Capabilities {
// =========================================================================
// Specialized (non-JDBC) methods
// =========================================================================
/**
* Retrieves whether this database supports catalogs.
* @return true if the database supports catalogs.
* @throws SQLException if there is an error obtaining the information
*/
public boolean supportsCatalogs() throws SQLException;
/**
* Retrieves whether this database supports schemas.
* @return true if the database supports schemas.
* @throws SQLException if there is an error obtaining the information
*/
public boolean supportsSchemas() throws SQLException;
/**
* Return the list of all table types supported by the JDBC database.
* @return the list of supported table types; never null, but possibly empty
* @throws SQLException if there is an error obtaining the information
*/
public String[] getTableTypes() throws SQLException;
// =========================================================================
// Standard JDBC DatabaseMetaData methods
// =========================================================================
/**
* Can all the procedures returned by getProcedures be called by the current user?
* @throws SQLException if there is an error
*/
boolean allProceduresAreCallable() throws SQLException;
/**
* Can all the tables returned by getTable be SELECTed by the current user?
* @throws SQLException if there is an error
*/
boolean allTablesAreSelectable() throws SQLException;
/**
* Does a data definition statement within a transaction force the transaction to commit?
* @throws SQLException if there is an error
*/
boolean dataDefinitionCausesTransactionCommit() throws SQLException;
/**
* Is a data definition statement within a transaction ignored?
* @throws SQLException if there is an error
*/
boolean dataDefinitionIgnoredInTransactions() throws SQLException;
/**
* Indicates whether or not a visible row delete can be detected by calling ResultSet.rowDeleted() throws SQLException;.
* @throws SQLException if there is an error
*/
boolean deletesAreDetected(int type) throws SQLException;
/**
* Did getMaxRowSize() throws SQLException; include LONGVARCHAR and LONGVARBINARY blobs?
* @throws SQLException if there is an error
*/
boolean doesMaxRowSizeIncludeBlobs() throws SQLException;
/**
* What's the separator between catalog and table name?
* @throws SQLException if there is an error
*/
String getCatalogSeparator() throws SQLException;
/**
* What's the database vendor's preferred term for "catalog"?
* @throws SQLException if there is an error
*/
String getCatalogTerm() throws SQLException;
/**
* Gets all the "extra" characters that can be used in unquoted identifier names (those beyond a-z, A-Z, 0-9 and _).
* @throws SQLException if there is an error
*/
String getExtraNameCharacters() throws SQLException;
/**
* What's the string used to quote SQL identifiers? This returns a space " " if identifier quoting isn't supported.
* @throws SQLException if there is an error
*/
String getIdentifierQuoteString() throws SQLException;
/**
* How many hex characters can you have in an inline binary literal?
* @throws SQLException if there is an error
*/
int getMaxBinaryLiteralLength() throws SQLException;
/**
* What's the maximum length of a catalog name?
* @throws SQLException if there is an error
*/
int getMaxCatalogNameLength() throws SQLException;
/**
* What's the max length for a character literal?
* @throws SQLException if there is an error
*/
int getMaxCharLiteralLength() throws SQLException;
/**
* What's the limit on column name length?
* @throws SQLException if there is an error
*/
int getMaxColumnNameLength() throws SQLException;
/**
* What's the maximum number of columns in a "GROUP BY" clause?
* @throws SQLException if there is an error
*/
int getMaxColumnsInGroupBy() throws SQLException;
/**
* What's the maximum number of columns allowed in an index?
* @throws SQLException if there is an error
*/
int getMaxColumnsInIndex() throws SQLException;
/**
* What's the maximum number of columns in an "ORDER BY" clause?
* @throws SQLException if there is an error
*/
int getMaxColumnsInOrderBy() throws SQLException;
/**
* What's the maximum number of columns in a "SELECT" list?
* @throws SQLException if there is an error
*/
int getMaxColumnsInSelect() throws SQLException;
/**
* What's the maximum number of columns in a table?
* @throws SQLException if there is an error
*/
int getMaxColumnsInTable() throws SQLException;
/**
* How many active connections can we have at a time to this database?
* @throws SQLException if there is an error
*/
int getMaxConnections() throws SQLException;
/**
* What's the maximum cursor name length?
* @throws SQLException if there is an error
*/
int getMaxCursorNameLength() throws SQLException;
/**
* Retrieves the maximum number of bytes for an index, including all of the parts of the index.
* @throws SQLException if there is an error
*/
int getMaxIndexLength() throws SQLException;
/**
* What's the maximum length of a procedure name?
* @throws SQLException if there is an error
*/
int getMaxProcedureNameLength() throws SQLException;
/**
* What's the maximum length of a single row?
* @throws SQLException if there is an error
*/
int getMaxRowSize() throws SQLException;
/**
* What's the maximum length allowed for a schema name?
* @throws SQLException if there is an error
*/
int getMaxSchemaNameLength() throws SQLException;
/**
* What's the maximum length of an SQL statement?
* @throws SQLException if there is an error
*/
int getMaxStatementLength() throws SQLException;
/**
* How many active statements can we have open at one time to this database?
* @throws SQLException if there is an error
*/
int getMaxStatements() throws SQLException;
/**
* What's the maximum length of a table name?
* @throws SQLException if there is an error
*/
int getMaxTableNameLength() throws SQLException;
/**
* What's the maximum number of tables in a SELECT statement?
* @throws SQLException if there is an error
*/
int getMaxTablesInSelect() throws SQLException;
/**
* What's the maximum length of a user name?
* @throws SQLException if there is an error
*/
int getMaxUserNameLength() throws SQLException;
/**
* Gets a comma-separated list of math functions.
* @throws SQLException if there is an error
*/
String getNumericFunctions() throws SQLException;
/**
* What's the database vendor's preferred term for "procedure"?
* @throws SQLException if there is an error
*/
String getProcedureTerm() throws SQLException;
/**
* What's the database vendor's preferred term for "schema"?
* @throws SQLException if there is an error
*/
String getSchemaTerm() throws SQLException;
/**
* Gets the string that can be used to escape wildcard characters.
* @throws SQLException if there is an error
*/
String getSearchStringEscape() throws SQLException;
/**
* Gets a comma-separated list of all a database's SQL keywords that are NOT also SQL92 keywords.
* @throws SQLException if there is an error
*/
String getSQLKeywords() throws SQLException;
/**
* Gets a comma-separated list of string functions.
* @throws SQLException if there is an error
*/
String getStringFunctions() throws SQLException;
/**
* Gets a comma-separated list of system functions.
* @throws SQLException if there is an error
*/
String getSystemFunctions() throws SQLException;
/**
* Gets a comma-separated list of time and date functions.
* @throws SQLException if there is an error
*/
String getTimeDateFunctions() throws SQLException;
/**
* Gets a description of all the standard SQL types supported by this database.
* @throws SQLException if there is an error
*/
ResultSet getTypeInfo() throws SQLException;
/**
* Indicates whether or not a visible row insert can be detected by calling {@link java.sql.ResultSet.rowInserted()}.
* @throws SQLException if there is an error
*/
boolean insertsAreDetected(int type) throws SQLException;
/**
* Does a catalog appear at the start of a qualified table name? (Otherwise it appears at the end)
* @throws SQLException if there is an error
*/
boolean isCatalogAtStart() throws SQLException;
/**
* Is the database in read-only mode?
* @throws SQLException if there is an error
*/
boolean isReadOnly() throws SQLException;
/**
* Are concatenations between NULL and non-NULL values NULL? For SQL-92 compliance, a JDBC technology-enabled driver will return true.
* @throws SQLException if there is an error
*/
boolean nullPlusNonNullIsNull() throws SQLException;
/**
* Are NULL values sorted at the end regardless of sort order?
* @throws SQLException if there is an error
*/
boolean nullsAreSortedAtEnd() throws SQLException;
/**
* Are NULL values sorted at the start regardless of sort order?
* @throws SQLException if there is an error
*/
boolean nullsAreSortedAtStart() throws SQLException;
/**
* Are NULL values sorted high?
* @throws SQLException if there is an error
*/
boolean nullsAreSortedHigh() throws SQLException;
/**
* Are NULL values sorted low?
* @throws SQLException if there is an error
*/
boolean nullsAreSortedLow() throws SQLException;
/**
* Indicates whether deletes made by others are visible.
* @throws SQLException if there is an error
*/
boolean othersDeletesAreVisible(int type) throws SQLException;
/**
* Indicates whether inserts made by others are visible.
* @throws SQLException if there is an error
*/
boolean othersInsertsAreVisible(int type) throws SQLException;
/**
* Indicates whether updates made by others are visible.
* @throws SQLException if there is an error
*/
boolean othersUpdatesAreVisible(int type) throws SQLException;
/**
* Indicates whether a result set's own deletes are visible.
* @throws SQLException if there is an error
*/
boolean ownDeletesAreVisible(int type) throws SQLException;
/**
* Indicates whether a result set's own inserts are visible.
* @throws SQLException if there is an error
*/
boolean ownInsertsAreVisible(int type) throws SQLException;
/**
* Indicates whether a result set's own updates are visible.
* @throws SQLException if there is an error
*/
boolean ownUpdatesAreVisible(int type) throws SQLException;
/**
* Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in lower case?
* @throws SQLException if there is an error
*/
boolean storesLowerCaseIdentifiers() throws SQLException;
/**
* Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in lower case?
* @throws SQLException if there is an error
*/
boolean storesLowerCaseQuotedIdentifiers() throws SQLException;
/**
* Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in mixed case?
* @throws SQLException if there is an error
*/
boolean storesMixedCaseIdentifiers() throws SQLException;
/**
* Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in mixed case?
* @throws SQLException if there is an error
*/
boolean storesMixedCaseQuotedIdentifiers() throws SQLException;
/**
* Does the database treat mixed case unquoted SQL identifiers as case insensitive and store them in upper case?
* @throws SQLException if there is an error
*/
boolean storesUpperCaseIdentifiers() throws SQLException;
/**
* Does the database treat mixed case quoted SQL identifiers as case insensitive and store them in upper case?
* @throws SQLException if there is an error
*/
boolean storesUpperCaseQuotedIdentifiers() throws SQLException;
/**
* Is "ALTER TABLE" with add column supported?
* @throws SQLException if there is an error
*/
boolean supportsAlterTableWithAddColumn() throws SQLException;
/**
* Is "ALTER TABLE" with drop column supported?
* @throws SQLException if there is an error
*/
boolean supportsAlterTableWithDropColumn() throws SQLException;
/**
* Is the ANSI92 entry level SQL grammar supported? All JDBC CompliantTM drivers must return true.
* @throws SQLException if there is an error
*/
boolean supportsANSI92EntryLevelSQL() throws SQLException;
/**
* Is the ANSI92 full SQL grammar supported?
* @throws SQLException if there is an error
*/
boolean supportsANSI92FullSQL() throws SQLException;
/**
* Is the ANSI92 intermediate SQL grammar supported?
* @throws SQLException if there is an error
*/
boolean supportsANSI92IntermediateSQL() throws SQLException;
/**
* Indicates whether the driver supports batch updates.
* @throws SQLException if there is an error
*/
boolean supportsBatchUpdates() throws SQLException;
/**
* Can a catalog name be used in a data manipulation statement?
* @throws SQLException if there is an error
*/
boolean supportsCatalogsInDataManipulation() throws SQLException;
/**
* Can a catalog name be used in an index definition statement?
* @throws SQLException if there is an error
*/
boolean supportsCatalogsInIndexDefinitions() throws SQLException;
/**
* Can a catalog name be used in a privilege definition statement?
* @throws SQLException if there is an error
*/
boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException;
/**
* Can a catalog name be used in a procedure call statement?
* @throws SQLException if there is an error
*/
boolean supportsCatalogsInProcedureCalls() throws SQLException;
/**
* Can a catalog name be used in a table definition statement?
* @throws SQLException if there is an error
*/
boolean supportsCatalogsInTableDefinitions() throws SQLException;
/**
* Is column aliasing supported?
* @throws SQLException if there is an error
*/
boolean supportsColumnAliasing() throws SQLException;
/**
* Is the CONVERT function between SQL types supported?
* @throws SQLException if there is an error
*/
boolean supportsConvert() throws SQLException;
/**
* Is CONVERT between the given SQL types supported?
* @throws SQLException if there is an error
*/
boolean supportsConvert(int fromType, int toType) throws SQLException;
/**
* Is the ODBC Core SQL grammar supported?
* @throws SQLException if there is an error
*/
boolean supportsCoreSQLGrammar() throws SQLException;
/**
* Are correlated subqueries supported? A JDBC CompliantTM driver always returns true.
* @throws SQLException if there is an error
*/
boolean supportsCorrelatedSubqueries() throws SQLException;
/**
* Are both data definition and data manipulation statements within a transaction supported?
* @throws SQLException if there is an error
*/
boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException;
/**
* Are only data manipulation statements within a transaction supported?
* @throws SQLException if there is an error
*/
boolean supportsDataManipulationTransactionsOnly() throws SQLException;
/**
* If table correlation names are supported, are they restricted to be different from the names of the tables?
* @throws SQLException if there is an error
*/
boolean supportsDifferentTableCorrelationNames() throws SQLException;
/**
* Are expressions in "ORDER BY" lists supported?
* @throws SQLException if there is an error
*/
boolean supportsExpressionsInOrderBy() throws SQLException;
/**
* Is the ODBC Extended SQL grammar supported?
* @throws SQLException if there is an error
*/
boolean supportsExtendedSQLGrammar() throws SQLException;
/**
* Are full nested outer joins supported?
* @throws SQLException if there is an error
*/
boolean supportsFullOuterJoins() throws SQLException;
/**
* Is some form of "GROUP BY" clause supported?
* @throws SQLException if there is an error
*/
boolean supportsGroupBy() throws SQLException;
/**
* Can a "GROUP BY" clause add columns not in the SELECT provided it specifies all the columns in the SELECT?
* @throws SQLException if there is an error
*/
boolean supportsGroupByBeyondSelect() throws SQLException;
/**
* Can a "GROUP BY" clause use columns not in the SELECT?
* @throws SQLException if there is an error
*/
boolean supportsGroupByUnrelated() throws SQLException;
/**
* Is the SQL Integrity Enhancement Facility supported?
* @throws SQLException if there is an error
*/
boolean supportsIntegrityEnhancementFacility() throws SQLException;
/**
* Is the escape character in "LIKE" clauses supported? A JDBC CompliantTM driver always returns true.
* @throws SQLException if there is an error
*/
boolean supportsLikeEscapeClause() throws SQLException;
/**
* Is there limited support for outer joins? (This will be true if supportFullOuterJoins is true.)
* @throws SQLException if there is an error
*/
boolean supportsLimitedOuterJoins() throws SQLException;
/**
* Is the ODBC Minimum SQL grammar supported? All JDBC CompliantTM drivers must return true.
* @throws SQLException if there is an error
*/
boolean supportsMinimumSQLGrammar() throws SQLException;
/**
* Does the database treat mixed case unquoted SQL identifiers as case sensitive and as a result store them in mixed case? A JDBC CompliantTM driver will always return false.
* @throws SQLException if there is an error
*/
boolean supportsMixedCaseIdentifiers() throws SQLException;
/**
* Does the database treat mixed case quoted SQL identifiers as case sensitive and as a result store them in mixed case? A JDBC CompliantTM driver will always return true.
* @throws SQLException if there is an error
*/
boolean supportsMixedCaseQuotedIdentifiers() throws SQLException;
/**
* Are multiple ResultSet from a single execute supported?
* @throws SQLException if there is an error
*/
boolean supportsMultipleResultSets() throws SQLException;
/**
* Can we have multiple transactions open at once (on different connections)?
* @throws SQLException if there is an error
*/
boolean supportsMultipleTransactions() throws SQLException;
/**
* Can columns be defined as non-nullable? A JDBC CompliantTM driver always returns true.
* @throws SQLException if there is an error
*/
boolean supportsNonNullableColumns() throws SQLException;
/**
* Can cursors remain open across commits?
* @throws SQLException if there is an error
*/
boolean supportsOpenCursorsAcrossCommit() throws SQLException;
/**
* Can cursors remain open across rollbacks?
* @throws SQLException if there is an error
*/
boolean supportsOpenCursorsAcrossRollback() throws SQLException;
/**
* Can statements remain open across commits?
* @throws SQLException if there is an error
*/
boolean supportsOpenStatementsAcrossCommit() throws SQLException;
/**
* Can statements remain open across rollbacks?
* @throws SQLException if there is an error
*/
boolean supportsOpenStatementsAcrossRollback() throws SQLException;
/**
* Can an "ORDER BY" clause use columns not in the SELECT statement?
* @throws SQLException if there is an error
*/
boolean supportsOrderByUnrelated() throws SQLException;
/**
* Is some form of outer join supported?
* @throws SQLException if there is an error
*/
boolean supportsOuterJoins() throws SQLException;
/**
* Is positioned DELETE supported?
* @throws SQLException if there is an error
*/
boolean supportsPositionedDelete() throws SQLException;
/**
* Is positioned UPDATE supported?
* @throws SQLException if there is an error
*/
boolean supportsPositionedUpdate() throws SQLException;
/**
* Does the database support the concurrency type in combination with the given result set type?
* @throws SQLException if there is an error
*/
boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException;
/**
* Does the database support the given result set type?
* @throws SQLException if there is an error
*/
boolean supportsResultSetType(int type) throws SQLException;
/**
* Can a schema name be used in a data manipulation statement?
* @throws SQLException if there is an error
*/
boolean supportsSchemasInDataManipulation() throws SQLException;
/**
* Can a schema name be used in an index definition statement?
* @throws SQLException if there is an error
*/
boolean supportsSchemasInIndexDefinitions() throws SQLException;
/**
* Can a schema name be used in a privilege definition statement?
* @throws SQLException if there is an error
*/
boolean supportsSchemasInPrivilegeDefinitions() throws SQLException;
/**
* Can a schema name be used in a procedure call statement?
* @throws SQLException if there is an error
*/
boolean supportsSchemasInProcedureCalls() throws SQLException;
/**
* Can a schema name be used in a table definition statement?
* @throws SQLException if there is an error
*/
boolean supportsSchemasInTableDefinitions() throws SQLException;
/**
* Is SELECT for UPDATE supported?
* @throws SQLException if there is an error
*/
boolean supportsSelectForUpdate() throws SQLException;
/**
* Are stored procedure calls using the stored procedure escape syntax supported?
* @throws SQLException if there is an error
*/
boolean supportsStoredProcedures() throws SQLException;
/**
* Are subqueries in comparison expressions supported? A JDBC CompliantTM driver always returns true.
* @throws SQLException if there is an error
*/
boolean supportsSubqueriesInComparisons() throws SQLException;
/**
* Are subqueries in 'exists' expressions supported? A JDBC CompliantTM driver always returns true.
* @throws SQLException if there is an error
*/
boolean supportsSubqueriesInExists() throws SQLException;
/**
* Are subqueries in 'in' statements supported? A JDBC CompliantTM driver always returns true.
* @throws SQLException if there is an error
*/
boolean supportsSubqueriesInIns() throws SQLException;
/**
* Are subqueries in quantified expressions supported? A JDBC CompliantTM driver always returns true.
* @throws SQLException if there is an error
*/
boolean supportsSubqueriesInQuantifieds() throws SQLException;
/**
* Are table correlation names supported? A JDBC CompliantTM driver always returns true.
* @throws SQLException if there is an error
*/
boolean supportsTableCorrelationNames() throws SQLException;
/**
* Does this database support the given transaction isolation level?
* @throws SQLException if there is an error
*/
boolean supportsTransactionIsolationLevel(int level) throws SQLException;
/**
* Are transactions supported? If not, invoking the method commit is a noop and the isolation level is TRANSACTION_NONE.
* @throws SQLException if there is an error
*/
boolean supportsTransactions() throws SQLException;
/**
* Is SQL UNION supported?
* @throws SQLException if there is an error
*/
boolean supportsUnion() throws SQLException;
/**
* Is SQL UNION ALL supported?
* @throws SQLException if there is an error
*/
boolean supportsUnionAll() throws SQLException;
/**
* Indicates whether or not a visible row update can be detected by calling the method ResultSet.rowUpdated.
* @throws SQLException if there is an error
*/
boolean updatesAreDetected(int type) throws SQLException;
/**
* Does the database use a file for each table?
* @throws SQLException if there is an error
*/
boolean usesLocalFilePerTable() throws SQLException;
/**
* Does the database store tables in a local file?
* @throws SQLException if there is an error
*/
boolean usesLocalFiles() throws SQLException;
}