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.DBConnection;
|
||||||
import zutil.db.DBUpgradeHandler;
|
import zutil.db.DBUpgradeHandler;
|
||||||
|
import zutil.db.SQLResultHandler;
|
||||||
import zutil.db.handler.PropertiesSQLResult;
|
import zutil.db.handler.PropertiesSQLResult;
|
||||||
import zutil.io.file.FileUtil;
|
import zutil.io.file.FileUtil;
|
||||||
import zutil.log.LogUtil;
|
import zutil.log.LogUtil;
|
||||||
|
|
@ -9,7 +10,9 @@ import zutil.log.LogUtil;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
|
@ -77,9 +80,36 @@ public class HalContext {
|
||||||
logger.fine(String.format("Upgrading DB (from: v%s, to: v%s)...", dbVersion, defaultDBVersion));
|
logger.fine(String.format("Upgrading DB (from: v%s, to: v%s)...", dbVersion, defaultDBVersion));
|
||||||
DBUpgradeHandler handler = new DBUpgradeHandler(referenceDB);
|
DBUpgradeHandler handler = new DBUpgradeHandler(referenceDB);
|
||||||
handler.setTargetDB(db);
|
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();
|
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");
|
logger.info("DB upgrade done");
|
||||||
dbConf.setProperty(PROPERTY_DB_VERSION, defaultDBConf.getProperty(PROPERTY_DB_VERSION));
|
dbConf.setProperty(PROPERTY_DB_VERSION, defaultDBConf.getProperty(PROPERTY_DB_VERSION));
|
||||||
storeProperties();
|
storeProperties();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue