/*
* Copyright (c) 2016 OBiBa. All rights reserved.
*
* This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.obiba.runtime.upgrade.support;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.jdbc.support.DatabaseMetaDataCallback;
import org.springframework.jdbc.support.JdbcUtils;
import org.springframework.jdbc.support.MetaDataAccessException;
public class DatabaseMetadataUtil {
//
// Instance Variables
//
private final DataSource dataSource;
//
// Constructors
//
public DatabaseMetadataUtil(DataSource dataSource) {
this.dataSource = dataSource;
}
//
// Methods
//
/**
* Returns the database product name.
*
* @return database product name
*/
public String getDatabaseProductName() {
String databaseProductName;
try {
databaseProductName = (String) JdbcUtils.extractDatabaseMetaData(dataSource, new DatabaseMetaDataCallback() {
@Override
public Object processMetaData(DatabaseMetaData dbmd) throws SQLException, MetaDataAccessException {
return dbmd.getDatabaseProductName();
}
});
} catch(MetaDataAccessException e) {
throw new RuntimeException(e);
}
return databaseProductName;
}
/**
* Indicates whether the specified table exists.
*
* @param tableName the table name
* @return <code>true</code> if the table exists
*/
public boolean isTableExists(final String tableName) {
boolean tablePresent = false;
try {
tablePresent = (Boolean) JdbcUtils.extractDatabaseMetaData(dataSource, new DatabaseMetaDataCallback() {
@Override
public Object processMetaData(DatabaseMetaData dbmd) throws SQLException, MetaDataAccessException {
return dbmd.getTables(null, null, tableName, null).next();
}
});
} catch(MetaDataAccessException ex) {
throw new RuntimeException(ex);
}
return tablePresent;
}
/**
* Indicates whether the specified table contains the specified column.
*
* @param tableName the table name
* @param columnName the column name
* @return <code>true</code> if the column exists in the table
*/
public boolean hasColumn(final String tableName, final String columnName) {
boolean columnPresent = false;
try {
columnPresent = (Boolean) JdbcUtils.extractDatabaseMetaData(dataSource, new DatabaseMetaDataCallback() {
@Override
public Object processMetaData(DatabaseMetaData dbmd) throws SQLException, MetaDataAccessException {
return dbmd.getColumns(null, null, tableName, columnName).next();
}
});
} catch(MetaDataAccessException ex) {
throw new RuntimeException(ex);
}
return columnPresent;
}
}