@SuppressWarnings("unchecked") private void addTableInfo(QueryEntity queryEntity, SchemaDefinitionContext context, String tableName) { Namespace namespace = context.getDatabase().getDefaultNamespace(); Optional<Table> tableOptional = namespace.getTables().stream().filter( currentTable -> currentTable.getName().equals( tableName ) ).findFirst(); if ( tableOptional.isPresent() ) { Table table = tableOptional.get(); for ( Iterator<Column> columnIterator = table.getColumnIterator(); columnIterator.hasNext(); ) { Column currentColumn = columnIterator.next(); String fieldType = fieldType( currentColumn ); queryEntity.addQueryField( currentColumn.getName(), fieldType, null ); } } }
private static void populateDatabaseModel(MetadataImplementor metadata, ExplicitSqmDomainMetamodel domainMetamodel) { final Database database = metadata.getDatabase(); final DatabaseModelImpl databaseModel = (DatabaseModelImpl) domainMetamodel.getDatabaseModel(); // todo : apply PhysicalNamingStrategy here, rather than as we create the "mapping model"? // todo : we need DatabaseModel to incorporate catalogs/schemas in some fashion // either like org.hibernate.boot.model.relational.Database does // or via catalogs/schemas-specific names for ( Namespace namespace : database.getNamespaces() ) { for ( Table mappingTable : namespace.getTables() ) { // todo : incorporate mapping Table's isAbstract indicator final org.hibernate.orm.persister.common.spi.Table table; if ( mappingTable instanceof DenormalizedTable ) { // this is akin to a UnionSubclassTable throw new NotYetImplementedException( "DenormalizedTable support not yet implemented" ); } else if ( mappingTable.getSubselect() != null ) { table = new DerivedTable( mappingTable.getSubselect() ); } else { // final JdbcEnvironment jdbcEnvironment = sessionFactory.getJdbcServices().getJdbcEnvironment(); // final String qualifiedTableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( // mappingTable.getQualifiedTableName(), // jdbcEnvironment.getDialect() // ); final String qualifiedTableName = mappingTable.getQualifiedTableName().render(); table = new PhysicalTable( qualifiedTableName ); } databaseModel.registerTable( table ); } } }
@Test public void testDatabaseMetadata() { for(Namespace namespace : MetadataExtractorIntegrator.INSTANCE.getDatabase().getNamespaces()) { for( Table table : namespace.getTables()) { LOGGER.info( "Table {} has the following columns: {}", table, StreamSupport.stream( Spliterators.spliteratorUnknownSize( table.getColumnIterator(), Spliterator.ORDERED), false) .collect( Collectors.toList()) ); } } }