public Column[] getColumns() throws DataSetException { logger.debug("getColumns() - start"); if (_columns == null) { try { // qualified names support String schemaName = _qualifiedTableNameSupport.getSchema(); String tableName = _qualifiedTableNameSupport.getTable(); Connection jdbcConnection = _connection.getConnection(); DatabaseMetaData databaseMetaData = jdbcConnection.getMetaData(); DatabaseConfig config = _connection.getConfig(); IMetadataHandler metadataHandler = (IMetadataHandler) config.getProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER); ResultSet resultSet = metadataHandler.getColumns(databaseMetaData, schemaName, tableName); try { IDataTypeFactory dataTypeFactory = super.getDataTypeFactory(_connection); boolean datatypeWarning = config.getFeature(DatabaseConfig.FEATURE_DATATYPE_WARNING); List columnList = new ArrayList(); while (resultSet.next()) { // Check for exact table/schema name match because // databaseMetaData.getColumns() uses patterns for the lookup boolean match = metadataHandler.matches(resultSet, schemaName, tableName, _caseSensitiveMetaData); if (match) { Column column = SQLHelper.createColumn(resultSet, dataTypeFactory, datatypeWarning); if (column != null) { columnList.add(column); } } else { logger.debug( "Skipping <schema.table> '" + resultSet.getString(2) + "." + resultSet.getString(3) + "' because names do not exactly match."); } } if (columnList.size() == 0) { logger.warn( "No columns found for table '" + tableName + "' that are supported by dbunit. " + "Will return an empty column list"); } _columns = (Column[]) columnList.toArray(new Column[0]); } finally { resultSet.close(); } } catch (SQLException e) { throw new DataSetException(e); } } return _columns; }