From 275ffd97c2398d59e0b8b0968e76470b8e9d61f6 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 21 Dec 2015 14:09:51 +0100 Subject: [PATCH] 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 --- hal-default.db | Bin 11264 -> 13312 bytes src/se/koc/hal/HalContext.java | 32 +++++++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/hal-default.db b/hal-default.db index 0e84aae8b8c1bfc4e1f573dd3f9f3c2bc20f7794..cd99a46dfab9d70c1ac022eae6b600c0713a2eb8 100755 GIT binary patch delta 712 zcma)4OKTHR6uxK9on&TeF)=ZzSY#9|?X-ao)lI=gY)1)yIM6X8^U6lhj>PGV%1U;v+C9VU3Qv;3Xzb&gRk6)xmUS5>A#az(X@h0B&P#YMN;-lA(S->!R3 z&HayV-Z+=H%(6N?2wrTuj%PPof$O!LrtQ@0o?UYSXMZ~P{$E{gUqWSKPKjkJI=eGD zG8vuO)}!13zUOCbOPg1^>7jVGQh_INc2CpTV{J(3Se(k`pnHS87EZ!2d#9z@C*dLG o%Qe|e%p?>pr?^Y-2fwvF+~ptk0W%^3P&%-P11kuKvdk~^7j9g^NB{r; delta 246 zcmZq3Xo#2~EjWXLfq@%{*?^c4h|4GH7&Fe;m@uE2k#!Rf3(H~_9x&!&Vt&oQ{EhiF z^MTERESs1o9}pIv%%&|a#=yzUEXh%vnpd1(#KFic%3oTXT4bcvoKC&U@l>r$@m<|uw>K(T4*}4QI3~`mA%o0m0es?lCddy;;U8SItmGH znW;G`<_Vmhej%>zu0fhW?NcXiSKX|sSirb>CQ}mQ=HJR}EWAKrW~QYK%u|@NnU(@w kX2rzSq`<*09v;rvEI;|Pmg!_>Z7CKm=OEY3RtnLK036Xe9{>OV diff --git a/src/se/koc/hal/HalContext.java b/src/se/koc/hal/HalContext.java index 2e5888d6..584df40c 100755 --- a/src/se/koc/hal/HalContext.java +++ b/src/se/koc/hal/HalContext.java @@ -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() { + @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));