From 973dfdec35cd3d39e639bead930fa9d643edb9a5 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Wed, 16 Dec 2015 19:20:16 +0100 Subject: [PATCH] Added column alter checks in DB Upgrade handler and fixed some bugs --- Zutil.jar | Bin 1188166 -> 1188224 bytes src/zutil/StringUtil.java | 4 +- src/zutil/db/DBUpgradeHandler.java | 61 ++++++++++++++++++----------- 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/Zutil.jar b/Zutil.jar index 7466c03d8516a5e5dd61c8735377271d94beb732..b5a6e746349cc1a4867c9c597b9ca173ba8b8709 100755 GIT binary patch delta 14478 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%0ARYJ5*cb_CH8nFoj}dRGXQFhli$ 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 delta 14315 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 it = list.iterator(); if(it.hasNext()) { - str.append(it.next()); + str.append(it.next().toString()); while (it.hasNext()) { - str.append(delimiter).append(it.next()); + str.append(delimiter).append(it.next().toString()); } } return str.toString(); diff --git a/src/zutil/db/DBUpgradeHandler.java b/src/zutil/db/DBUpgradeHandler.java index 5e7c5c9..505e350 100755 --- a/src/zutil/db/DBUpgradeHandler.java +++ b/src/zutil/db/DBUpgradeHandler.java @@ -57,14 +57,14 @@ public class DBUpgradeHandler { * * @param enable */ - public void forceDBUpgrade(boolean enable){ + public void setForcedDBUpgrade(boolean enable){ this.forceUpgradeEnabled = enable; } public void upgrade() throws SQLException { try { logger.fine("Starting upgrade transaction..."); - target.exec("BEGIN IMMEDIATE TRANSACTION"); + target.getConnection().setAutoCommit(false); upgradeRenameTables(); upgradeCreateTables(); @@ -72,14 +72,12 @@ public class DBUpgradeHandler { upgradeAlterTables(); logger.fine("Committing upgrade transaction..."); - target.exec("COMMIT TRANSACTION"); + target.getConnection().commit(); } catch(SQLException e){ - try { - target.exec("ROLLBACK TRANSACTION"); - } catch (SQLException secondary_e) { - logger.log(Level.SEVERE, null, secondary_e); - } + target.getConnection().rollback(); throw e; + } finally { + target.getConnection().setAutoCommit(true); } } @@ -90,7 +88,7 @@ public class DBUpgradeHandler { for (String oldTableName : tableRenameMap.keySet()) { if (targetTables.contains(oldTableName)) { String newTableName = tableRenameMap.get(oldTableName); - logger.fine("Renaming table from: " + oldTableName + ", to: " + newTableName); + logger.fine(String.format("Renaming table from: '%s' to: '%s'", oldTableName, newTableName)); target.exec(String.format( "ALTER TABLE %s RENAME TO %s", oldTableName, newTableName)); } @@ -104,7 +102,7 @@ public class DBUpgradeHandler { for(String table : refTables){ if(!targetTables.contains(table)){ - logger.fine("Creating new table: "+ table); + logger.fine(String.format("Creating new table: '%s'", table)); // Get reference create sql String sql = getTableSql(reference, table); // Execute sql on target @@ -119,7 +117,7 @@ public class DBUpgradeHandler { for(String table : targetTables){ if(!refTables.contains(table)){ - logger.fine("Dropping table: " + table); + logger.fine(String.format("Dropping table: '%s'", table)); target.exec("DROP TABLE " + table); } } @@ -137,38 +135,51 @@ public class DBUpgradeHandler { List targetStruct = getColumnList(target, table); // Check unnecessary columns - boolean forcedUpgrade = false; + boolean execForcedUpgrade = false; for(DBColumn column : targetStruct) { - if(!refStruct.contains(column)) { - if(forceUpgradeEnabled) - forcedUpgrade = true; + if(refStruct.contains(column)) { + DBColumn refColumn = refStruct.get(refStruct.indexOf(column)); + // Check if the columns have the same type + if(!column.type.equals(refColumn.type)){ + if(forceUpgradeEnabled) + execForcedUpgrade = true; + else + logger.warning(String.format( + "Skipping alter(%s -> %s) column: '%s.%s' (no SQLite support, forced upgrade needed)", + column.type, refColumn.type, table, column.name)); + } + } + else { // Column does not exist in reference DB, column should be removed + if (forceUpgradeEnabled) + execForcedUpgrade = true; else - logger.warning("Unable to drop column: '" + column.name + "' from table: "+ table - +" (SQLite does not support dropping columns)"); + logger.warning(String.format( + "Skipping drop column: '%s.%s' (no SQLite support, forced upgrade needed)", + table, column.name)); } } // Do a forced upgrade where we create a new table and migrate the old data - if(forcedUpgrade){ + if(execForcedUpgrade){ // Backup table String backupTable = table+"_temp"; - logger.fine("Forced Upgrade: Backing up table: "+table+", to: "+backupTable); + logger.fine(String.format("Forced Upgrade: Backing up table: '%s' to: '%s'", table, backupTable)); target.exec(String.format("ALTER TABLE %s RENAME TO %s", table, backupTable)); // Creating new table - logger.fine("Forced Upgrade: Creating new table: "+table); + logger.fine(String.format("Forced Upgrade: Creating new table: '%s'", table)); String sql = getTableSql(reference, table); target.exec(sql); // Restoring data - logger.fine("Forced Upgrade: Restoring data for table: "+table); + logger.fine(String.format("Forced Upgrade: Restoring data for table: '%s'", table)); String cols = StringUtil.join(refStruct, ","); target.exec(String.format( "INSERT INTO %s (%s) SELECT %s FROM %s", table, cols, cols, backupTable)); // Remove backup table - logger.fine("Forced Upgrade: Removing backup table: "+backupTable); + logger.fine(String.format("Forced Upgrade: Dropping backup table: '%s'", backupTable)); target.exec("DROP TABLE " + backupTable); } // Do a @@ -176,7 +187,7 @@ public class DBUpgradeHandler { // Add new columns for(DBColumn column : refStruct) { if(!targetStruct.contains(column)) { - logger.fine("Adding column '" + column.name + "' to table: " + table); + logger.fine(String.format("Adding column '%s.%s'", table, column.name)); target.exec( String.format("ALTER TABLE %s ADD COLUMN %s %s %s%s%s", table, @@ -218,6 +229,10 @@ public class DBUpgradeHandler { return obj instanceof DBColumn && name.equals(((DBColumn)obj).name); } + + public String toString(){ + return name; + } } private static class TableStructureResultHandler implements SQLResultHandler>{