package org.rhq.core.db.upgrade;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import mazz.i18n.Logger;
import org.rhq.core.db.DatabaseType;
import org.rhq.core.db.DbUtilsI18NFactory;
import org.rhq.core.db.DbUtilsI18NResourceKeys;
/**
* Updates the subcategories in preparation of dropping the subcategories table.
*
* @author Stefan Negrea
*/
public class SubcategoryUpgradeTask implements DatabaseUpgradeTask {
private final Logger log = DbUtilsI18NFactory.getLogger(StorageNodeAddressUpgradeTask.class);
@Override
public void execute(DatabaseType databaseType, Connection connection) throws SQLException {
String sql = "SELECT RHQ_RESOURCE_TYPE.id, RHQ_RESOURCE_SUBCAT.name"
+ " FROM RHQ_RESOURCE_TYPE "
+ " LEFT JOIN RHQ_RESOURCE_SUBCAT "
+ " ON RHQ_RESOURCE_TYPE.subcategory_id = RHQ_RESOURCE_SUBCAT.id";
log.debug(DbUtilsI18NResourceKeys.EXECUTING_SQL, sql);
List<Object[]> results = databaseType.executeSelectSql(connection, sql);
Integer rowId;
String subcategoryName;
for (Object[] row : results) {
rowId = databaseType.getInteger(row[0]);
subcategoryName = (String) row[1];
if (subcategoryName != null && !subcategoryName.isEmpty()) {
log.debug(DbUtilsI18NResourceKeys.MESSAGE, "Updating resource [id= " + rowId
+ "] to have subcategory " + subcategoryName);
String update = "UPDATE RHQ_RESOURCE_TYPE SET SUBCATEGORY = '" + subcategoryName + "' WHERE id = "
+ rowId;
log.debug(DbUtilsI18NResourceKeys.EXECUTING_SQL, update);
databaseType.executeSql(connection, update);
}
}
}
}