package org.hibernate.tool.test; import java.util.Iterator; import java.util.Map; import java.util.Properties; import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.reveng.DefaultDatabaseCollector; import org.hibernate.cfg.reveng.ReverseEngineeringRuntimeInfo; import org.hibernate.cfg.reveng.dialect.JDBCMetaDataDialect; import org.hibernate.cfg.reveng.dialect.MetaDataDialect; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.service.ServiceRegistry; import org.hibernate.tool.JDBCMetaDataBinderTestCase; /** * Various tests to validate the "sanity" of the jdbc drivers meta data implementation. * * @author Max Rydahl Andersen * */ public class DriverMetaDataTest extends JDBCMetaDataBinderTestCase { protected String[] getCreateSQL() { return new String[] { "create table tab_master ( id char not null, name varchar(20), primary key (id) )", "create table tab_child ( childid character not null, masterref character, primary key (childid), foreign key (masterref) references tab_master(id) )", }; } protected String[] getDropSQL() { return new String[] { "drop table tab_child", "drop table tab_master", }; } public void testExportedKeys() { MetaDataDialect dialect = new JDBCMetaDataDialect(); ServiceRegistry serviceRegistry = getConfiguration().getServiceRegistry(); JdbcServices jdbcServices = serviceRegistry.getService(JdbcServices.class); ConnectionProvider connectionProvider = serviceRegistry.getService(ConnectionProvider.class); dialect.configure( ReverseEngineeringRuntimeInfo.createInstance( connectionProvider, jdbcServices.getSqlExceptionHelper().getSqlExceptionConverter(), new DefaultDatabaseCollector(dialect))); Properties properties = getConfiguration().getProperties(); String catalog = properties.getProperty(AvailableSettings.DEFAULT_CATALOG); String schema = properties.getProperty(AvailableSettings.DEFAULT_SCHEMA); Iterator<Map<String,Object>> tables = dialect.getTables( catalog, schema, identifier("tab_master") ); boolean foundMaster = false; while(tables.hasNext()) { Map<?,?> map = (Map<?,?>) tables.next(); String tableName = (String) map.get("TABLE_NAME"); String schemaName = (String) map.get("TABLE_SCHEM"); String catalogName = (String) map.get("TABLE_CAT"); if(tableName.equals(identifier("tab_master"))) { foundMaster = true; Iterator<?> exportedKeys = dialect.getExportedKeys( catalogName, schemaName, tableName ); int cnt = 0; while ( exportedKeys.hasNext() ) { exportedKeys.next(); cnt++; } assertEquals(1,cnt); } } assertTrue(foundMaster); } public void testDataType() { MetaDataDialect dialect = new JDBCMetaDataDialect(); ServiceRegistry serviceRegistry = getConfiguration().getServiceRegistry(); JdbcServices jdbcServices = serviceRegistry.getService(JdbcServices.class); ConnectionProvider connectionProvider = serviceRegistry.getService(ConnectionProvider.class); dialect.configure( ReverseEngineeringRuntimeInfo.createInstance( connectionProvider, jdbcServices.getSqlExceptionHelper().getSqlExceptionConverter(), new DefaultDatabaseCollector(dialect))); Properties properties = getConfiguration().getProperties(); String catalog = properties.getProperty(AvailableSettings.DEFAULT_CATALOG); String schema = properties.getProperty(AvailableSettings.DEFAULT_SCHEMA); Iterator<?> tables = dialect.getColumns( catalog, schema, "test", null ); while(tables.hasNext()) { Map<?,?> map = (Map<?,?>) tables.next(); System.out.println(map); } } public void testCaseTest() { MetaDataDialect dialect = new JDBCMetaDataDialect(); ServiceRegistry serviceRegistry = getConfiguration().getServiceRegistry(); JdbcServices jdbcServices = serviceRegistry.getService(JdbcServices.class); ConnectionProvider connectionProvider = serviceRegistry.getService(ConnectionProvider.class); dialect.configure( ReverseEngineeringRuntimeInfo.createInstance( connectionProvider, jdbcServices.getSqlExceptionHelper().getSqlExceptionConverter(), new DefaultDatabaseCollector(dialect))); Properties properties = getConfiguration().getProperties(); String catalog = properties.getProperty(AvailableSettings.DEFAULT_CATALOG); String schema = properties.getProperty(AvailableSettings.DEFAULT_SCHEMA); Iterator<Map<String, Object>> tables = dialect.getTables( catalog, schema, identifier( "TAB_MASTER")); assertHasNext( 1, tables ); } }