Adding logic to the batabase upgrade.
1. Introduced a new db table "db_version_history" to hal-default.db. The table contains a list of db version. Every version has some parameters: - 'db-version' (int) - A db version number. table 'conf', key 'db_version' points to this. - 'force-upgrade' (default:0) - If 1 then force the upgrade to this version - 'clear-internal-aggr-data' (default:0) - If 1 then clear all internal aggr data before upgrade. - 'clear-external-aggr-data' (defualt:0) - If 1 then clear all external aggr data before upgrade. The db table 'conf', key 'db_version' has to point to the db version to upgrad to. Only forward upgrades are supported. 2. Modified HalContext to act accoring to the parameters in the new db table. Former-commit-id: 19bd87ade3129f3fc0c51f0e1b94f71dc854d792
This commit is contained in:
parent
b391e3a5e1
commit
275ffd97c2
2 changed files with 31 additions and 1 deletions
BIN
hal-default.db
BIN
hal-default.db
Binary file not shown.
|
|
@ -2,6 +2,7 @@ package se.koc.hal;
|
|||
|
||||
import zutil.db.DBConnection;
|
||||
import zutil.db.DBUpgradeHandler;
|
||||
import zutil.db.SQLResultHandler;
|
||||
import zutil.db.handler.PropertiesSQLResult;
|
||||
import zutil.io.file.FileUtil;
|
||||
import zutil.log.LogUtil;
|
||||
|
|
@ -9,7 +10,9 @@ import zutil.log.LogUtil;
|
|||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.Properties;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
|
@ -77,8 +80,35 @@ public class HalContext {
|
|||
logger.fine(String.format("Upgrading DB (from: v%s, to: v%s)...", dbVersion, defaultDBVersion));
|
||||
DBUpgradeHandler handler = new DBUpgradeHandler(referenceDB);
|
||||
handler.setTargetDB(db);
|
||||
//handler.setForcedDBUpgrade(true);
|
||||
|
||||
//read upgrade path preferences from the reference database
|
||||
referenceDB.exec("SELECT * FROM db_version_history"
|
||||
+ " WHERE db_version <= " + defaultDBVersion
|
||||
+ " AND db_version > " + dbVersion,
|
||||
new SQLResultHandler<Object>() {
|
||||
@Override
|
||||
public Object handleQueryResult(Statement stmt, ResultSet result) throws SQLException {
|
||||
while(result.next()){
|
||||
if(result.getBoolean("force_upgrade")){
|
||||
handler.setForcedDBUpgrade(true); //set to true if any of the intermediate db version requires it.
|
||||
}
|
||||
if(result.getBoolean("clear_external_aggr_data")){
|
||||
db.exec("DELETE FROM sensor_data_aggr WHERE sensor_id = "
|
||||
+ "(SELECT sensor_id FROM user, sensor WHERE user.external == 1 AND sensor.user_id = user.id)");
|
||||
}
|
||||
if(result.getBoolean("clear_internal_aggr_data")){
|
||||
db.exec("DELETE FROM sensor_data_aggr WHERE sensor_id = "
|
||||
+ "(SELECT sensor_id FROM user, sensor WHERE user.external == 0 AND sensor.user_id = user.id)");
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
handler.upgrade();
|
||||
|
||||
//remove table from target database. this table is supposed to only be put in the reference db.
|
||||
db.exec("DROP TABLE db_version_history");
|
||||
|
||||
logger.info("DB upgrade done");
|
||||
dbConf.setProperty(PROPERTY_DB_VERSION, defaultDBConf.getProperty(PROPERTY_DB_VERSION));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue