package org.hibernate.cfg.reveng.dialect; import java.util.Iterator; import java.util.Map; import org.hibernate.cfg.reveng.ReverseEngineeringRuntimeInfo; /** * Interface for fetching metadata from databases. * The dialect is configured with a ConnectionProvider but is not * required to actually use any connections. * * The metadata methods all returns Iterator and allows for more efficient and partial reads * for those databases that has "flakey" JDBC metadata implementions. * * @author Max Rydahl Andersen * */ public interface MetaDataDialect { /** * Configure the metadatadialect. * @param info a {@link ReverseEngineeringRuntimeInfo} to extract Connection and SQLExceptionConverter and other runtime info */ public void configure(ReverseEngineeringRuntimeInfo info); /** * Return iterator over the tables that mathces catalog, schema and table * * @param catalog name or null * @param schema name or null * @param table name or null * @return iterator with map elements that has "TABLE_NAME", "TABLE_SCHEMA", "TABLE_CAT", "TABLE_TYPE" keys. */ Iterator<Map<String,Object>> getTables(String catalog, String schema, String table); /** * Close the iterator. * @param iterator an iterator returned from one of methods on this dialect */ void close(Iterator<?> iterator); /** * Return iterator over the indexes that mathces catalog, schema and table * * @param catalog name or null * @param schema name or null * @param table name or null * @return iterator with map elements that has "TABLE_NAME", "TABLE_SCHEMA", "TABLE_CAT", "INDEX_NAME", "COLUMN_NAME", "NON_UNIQUE", "TYPE" keys. */ Iterator<Map<String, Object>> getIndexInfo(String catalog, String schema, String table); /** * Return iterator over the columns that mathces catalog, schema and table * * @param catalog name or null * @param schema name or null * @param table name or null * @param column name or null * @return iterator with map elements that has "TABLE_NAME", "TABLE_SCHEMA", "TABLE_CAT", "DATA_TYPE", "TYPE_NAME", "COLUMN_NAME", "NULLABLE", "COLUMN_SIZE", "DECIMAL_DIGITS" */ Iterator<Map<String, Object>> getColumns(String catalog, String schema, String table, String column); /** * Return iterator over the columns that mathces catalog, schema and table * * @param catalog name or null * @param schema name or null * @param table name or null * @return iterator with map elements that has "TABLE_NAME", "TABLE_SCHEMA", "TABLE_CAT", "COLUMN_NAME", "KEY_SEQ", "PK_NAME", */ Iterator<Map<String, Object>> getPrimaryKeys(String catalog, String schema, String name); /** * Return iterator over the exported foreign keys that mathces catalog, schema and table * * @param catalog name or null * @param schema name or null * @param table name or null * @return iterator with map elements that has "TABLE_NAME", "TABLE_SCHEMA", "TABLE_CAT", "FKTABLE_CAT", "FKTABLE_SCHEM", "FKTABLE_NAME", "FK_NAME", "KEY_SEQ" */ Iterator<Map<String, Object>> getExportedKeys(String catalog, String schema, String table); /** * Does this name need quoting * * @param name * @return */ boolean needQuote(String name); /** * Close any resources this dialect might have used. */ void close(); /** * Use database (possible native) metadata to suggest identifier strategy. * * @param catalog * @param schema * @param name * @return iterator with map elements that has "TABLE_NAME", "TABLE_SCHEMA", "TABLE_CAT", "HIBERNATE_STRATEGY" (null if no possible to determine strategy, otherwise return hibernate identifier strategy name/classname) */ public Iterator<Map<String, Object>> getSuggestedPrimaryKeyStrategyName(String catalog, String schema, String table); }