/* * ModeShape (http://www.modeshape.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.modeshape.connector.meta.jdbc; import java.sql.Connection; import java.util.List; /** * The {@code MetadataCollector} provides hooks for DBMS-specific implementations of metadata retrieval methods. These methods * largely duplicate what is provided in {@link java.sql.DatabaseMetaData the JDBC metadata interface}, but allow a pluggable way to work * around JDBC driver-specific shortcomings. * <p> * For convenience, a {@link JdbcMetadataCollector} default implementation} of this interface is provided that is based on * {@link java.sql.DatabaseMetaData}. * </p> * * @see JdbcMetadataCollector */ public interface MetadataCollector { /** * Return metadata information about the database to which {@code connection} is connected. * * @param conn the connection to the database; must not be non-null and must be open. This connection should not be closed by * this method. * @return An {@link DBMetadata} instance, never {@code null} * @throws JdbcMetadataException if the metadata cannot be retrieved */ DBMetadata getDatabaseMetadata( Connection conn ) throws JdbcMetadataException; /** * Return the list of catalog names that currently exist in the database to which {@code connection} is connected. The names * must be sorted in a manner that is stable between successive calls to this method. * * @param conn the connection to the database; must not be non-null and must be open. This connection should not be closed by * this method. * @return An ordered list of the catalogs in the database, or an empty list if no catalogs exist; may not be null * @throws JdbcMetadataException if the catalog names cannot be retrieved * @see java.sql.DatabaseMetaData#getCatalogs() */ List<String> getCatalogNames( Connection conn ) throws JdbcMetadataException; /** * Return the list of schema names that currently exist in the database to which {@code connection} is connected within the * named catalog. If {@code catalogName} is null, then all schema names should be returned regardless of the catalog with * which they are associated. The schema names must be sorted in a manner that is stable between successive calls to this * method. * * @param conn the connection to the database; must not be non-null and must be open. This connection should not be closed by * this method. * @param catalogName the name of the catalog to which returned schemas must belong, or null if all schemas are to be returned * @return An ordered list of the schemas in the database, or an empty list if no schemas exist; may not be null * @throws JdbcMetadataException if the schema names cannot be retrieved * @see java.sql.DatabaseMetaData#getSchemas() */ List<String> getSchemaNames( Connection conn, String catalogName ) throws JdbcMetadataException; /** * Return the list of tables that currently exist in the database to which {@code connection} is connected within the named * catalog (if {@code catalogName} is non-null) and named schema (if {@code schemaName} is non-null). If {@code tableName} is * null, then all tables which conform to the catalog and schema restriction noted previously should be returned. If {@code * tableName} is non-null, then only the table(s) that exactly match that name should be returned. The table metadata must be * sorted in a manner that is stable between successive calls to this method. * * @param conn the connection to the database; must not be non-null and must be open. This connection should not be closed by * this method. * @param catalogName the name of the catalog to which returned tables must belong, or null if tables are to be returned * without regard to their catalog * @param schemaName the name of the schema to which returned tables must belong, or null if tables are to be returned without * regard to their schema * @param tableName the name of the table to be returned, or null if all tables within the given catalog and schema are to be * returned * @return An ordered list of the tables in the database that match the given constraints, or an empty list if no tables exist * that match the given constraints; may not be null * @throws JdbcMetadataException if the table metadata cannot be retrieved * @see java.sql.DatabaseMetaData#getTables(String, String, String, String[]) */ List<TableMetadata> getTables( Connection conn, String catalogName, String schemaName, String tableName ) throws JdbcMetadataException; /** * Return the list of columns that currently exist in the database to which {@code connection} is connected within the named * catalog (if {@code catalogName} is non-null), named schema (if {@code schemaName} is non-null), and named table. If {@code * columnName} is null, then all columns which conform to the catalog, schema, and table restrictions noted previously should * be returned. If {@code columnName} is non-null, then only the column that exactly matches that name should be returned. The * column metadata must be sorted in a manner that is stable between successive calls to this method. * * @param conn the connection to the database; must not be non-null and must be open. This connection should not be closed by * this method. * @param catalogName the name of the catalog to which returned columns must belong, or null if columns are to be returned * without regard to their catalog * @param schemaName the name of the schema to which returned columns must belong, or null if columns are to be returned * without regard to their schema * @param tableName the name of the table to which returned columns must belong; may not be null * @param columnName the name of the column to be returned, or null if all columns within the given catalog, schema, and table * are to be returned * @return An ordered list of the columns in the database that match the given constraints, or an empty list if no columns * exist that match the given constraints; may not be null * @throws JdbcMetadataException if the column metadata cannot be retrieved * @see java.sql.DatabaseMetaData#getColumns(String, String, String, String) */ List<ColumnMetadata> getColumns( Connection conn, String catalogName, String schemaName, String tableName, String columnName ) throws JdbcMetadataException; /** * Return the list of procedures that currently exist in the database to which {@code connection} is connected within the * named catalog (if {@code catalogName} is non-null) and named schema (if {@code schemaName} is non-null). If {@code * procedureName} is null, then all procedures which conform to the catalog and schema restriction noted previously should be * returned. If {@code procedureName} is non-null, then only the procedure(s) that exactly match that name should be returned. * The procedure metadata must be sorted in a manner that is stable between successive calls to this method. * * @param conn the connection to the database; must not be non-null and must be open. This connection should not be closed by * this method. * @param catalogName the name of the catalog to which returned procedures must belong, or null if procedures are to be * returned without regard to their catalog * @param schemaName the name of the schema to which returned procedures must belong, or null if procedures are to be returned * without regard to their schema * @param procedureName the name of the procedure(s) to be returned, or null if all procedures within the given catalog and * schema are to be returned * @return An ordered list of the procedures in the database that match the given constraints, or an empty list if no * procedures exist that match the given constraints; may not be null * @throws JdbcMetadataException if the procedure metadata cannot be retrieved */ List<ProcedureMetadata> getProcedures( Connection conn, String catalogName, String schemaName, String procedureName ) throws JdbcMetadataException; /** * Return the list of foreign keys import by a table that currently exist in the database to which * {@code connection} is connected within the named catalog (if {@code catalogName} is non-null), * named schema (if {@code schemaName} is non-null), and named table. * * @param conn the connection to the database; must not be non-null and must be open. This connection should not be closed by * this method. * @param catalogName the name of the catalog to which returned columns must belong, or null if columns are to be returned * without regard to their catalog * @param schemaName the name of the schema to which returned columns must belong, or null if columns are to be returned * without regard to their schema * @param tableName the name of the table to which returned columns must belong; may not be null * @param fkColumnName the name of the foreign key column for which to retrieve metadata; may be null. If that is the case, * all the foreign keys will be retrieved. * @return An ordered list of the foreign keys that are exported by the given table, or an empty list if no columns * exist that match the given constraints; may not be null * @throws JdbcMetadataException if the column metadata cannot be retrieved * @see java.sql.DatabaseMetaData#getImportedKeys(String, String, String) */ List<ForeignKeyMetadata> getForeignKeys( Connection conn, String catalogName, String schemaName, String tableName, String fkColumnName ) throws JdbcMetadataException; }