提交 98d941d3 authored 作者: christian.peter.io's avatar christian.peter.io

For unecnrypted databases, the automatic upgrade temporary script file is now unencrypted again.

上级 eab1130c
...@@ -23,6 +23,7 @@ Change Log ...@@ -23,6 +23,7 @@ Change Log
</li><li>LOG=0 is now a bit faster (previously undo log entries were still written). </li><li>LOG=0 is now a bit faster (previously undo log entries were still written).
</li><li>The command line tools now say so if the source directory of an option doesn't exist. </li><li>The command line tools now say so if the source directory of an option doesn't exist.
</li><li>It is now allowed to truncate a table if referential integrity has been disabled for this table or database. </li><li>It is now allowed to truncate a table if referential integrity has been disabled for this table or database.
</li><li>For unencrypted databases, the automatic upgrade temporary script file is now unencrypted again.
</li></ul> </li></ul>
<h2>Version 1.2.140 (2010-07-25)</h2> <h2>Version 1.2.140 (2010-07-25)</h2>
......
...@@ -140,15 +140,16 @@ public class DbUpgradeNonPageStoreToCurrent { ...@@ -140,15 +140,16 @@ public class DbUpgradeNonPageStoreToCurrent {
scriptFile = new File(oldDataFile.getAbsolutePath() + "_script.sql"); scriptFile = new File(oldDataFile.getAbsolutePath() + "_script.sql");
} }
// outputStream.println("H2 Migrating '" + oldFile.getPath() +
// "' to '" + newFile.getPath() + "' via '" + scriptFile.getPath()
// + "'");
Utils.callStaticMethod("org.h2.upgrade.v1_1.Driver.load"); Utils.callStaticMethod("org.h2.upgrade.v1_1.Driver.load");
String uuid = UUID.randomUUID().toString();
Connection connection = DriverManager.getConnection(oldUrl, info); Connection connection = DriverManager.getConnection(oldUrl, info);
Statement stmt = connection.createStatement(); Statement stmt = connection.createStatement();
stmt.execute("script to '" + scriptFile + "' CIPHER AES PASSWORD '" + uuid + "' --hide--"); boolean isEncrypted = StringUtils.toUpperEnglish(url).indexOf(";CIPHER=") >= 0;
String uuid = UUID.randomUUID().toString();
if (isEncrypted) {
stmt.execute("script to '" + scriptFile + "' CIPHER AES PASSWORD '" + uuid + "' --hide--");
} else {
stmt.execute("script to '" + scriptFile + "'");
}
stmt.close(); stmt.close();
connection.close(); connection.close();
...@@ -158,7 +159,11 @@ public class DbUpgradeNonPageStoreToCurrent { ...@@ -158,7 +159,11 @@ public class DbUpgradeNonPageStoreToCurrent {
connection = DriverManager.getConnection(newUrl, info); connection = DriverManager.getConnection(newUrl, info);
stmt = connection.createStatement(); stmt = connection.createStatement();
stmt.execute("runscript from '" + scriptFile + "' CIPHER AES PASSWORD '" + uuid + "' --hide--"); if (isEncrypted) {
stmt.execute("runscript from '" + scriptFile + "' CIPHER AES PASSWORD '" + uuid + "' --hide--");
} else {
stmt.execute("runscript from '" + scriptFile + "'");
}
stmt.execute("analyze"); stmt.execute("analyze");
stmt.execute("shutdown compact"); stmt.execute("shutdown compact");
stmt.close(); stmt.close();
...@@ -169,9 +174,6 @@ public class DbUpgradeNonPageStoreToCurrent { ...@@ -169,9 +174,6 @@ public class DbUpgradeNonPageStoreToCurrent {
backupIndexFile.delete(); backupIndexFile.delete();
FileSystem.getInstance(backupLobsDir.getAbsolutePath()).deleteRecursive(backupLobsDir.getAbsolutePath(), false); FileSystem.getInstance(backupLobsDir.getAbsolutePath()).deleteRecursive(backupLobsDir.getAbsolutePath(), false);
} }
// outputStream.println("H2 Migration of '" + oldFile.getPath() +
// "' finished successfully");
} catch (Exception e) { } catch (Exception e) {
successful = false; successful = false;
if (backupDataFile.exists()) { if (backupDataFile.exists()) {
...@@ -184,8 +186,6 @@ public class DbUpgradeNonPageStoreToCurrent { ...@@ -184,8 +186,6 @@ public class DbUpgradeNonPageStoreToCurrent {
backupLobsDir.renameTo(oldLobsDir); backupLobsDir.renameTo(oldLobsDir);
} }
newFile.delete(); newFile.delete();
// errorStream.println("H2 Migration of '" + oldFile.getPath() +
// "' finished with error: " + e.getMessage());
throw DbException.toSQLException(e); throw DbException.toSQLException(e);
} finally { } finally {
if (scriptFile != null) { if (scriptFile != null) {
......
...@@ -12,6 +12,7 @@ import java.sql.DriverManager; ...@@ -12,6 +12,7 @@ import java.sql.DriverManager;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import org.h2.test.TestBase; import org.h2.test.TestBase;
import org.h2.util.IOUtils;
import org.h2.util.Utils; import org.h2.util.Utils;
/** /**
...@@ -35,6 +36,7 @@ public class TestUpgrade extends TestBase { ...@@ -35,6 +36,7 @@ public class TestUpgrade extends TestBase {
testNoDb(); testNoDb();
testNoUpgradeOldAndNew(); testNoUpgradeOldAndNew();
testIfExists(); testIfExists();
testCipher();
} }
private void testNoDb() throws SQLException { private void testNoDb() throws SQLException {
...@@ -130,6 +132,28 @@ public class TestUpgrade extends TestBase { ...@@ -130,6 +132,28 @@ public class TestUpgrade extends TestBase {
deleteDb("upgrade"); deleteDb("upgrade");
} }
private void testCipher() throws Exception {
deleteDb("upgrade");
// Create old db
Utils.callStaticMethod("org.h2.upgrade.v1_1.Driver.load");
Connection conn = DriverManager.getConnection("jdbc:h2v1_1:data/test/upgrade;PAGE_STORE=FALSE;CIPHER=AES", "abc", "abc abc");
Statement stat = conn.createStatement();
stat.execute("create table test(id int)");
conn.close();
Utils.callStaticMethod("org.h2.upgrade.v1_1.Driver.unload");
assertTrue(new File("data/test/upgrade.data.db").exists());
// Connect to old DB with upgrade
conn = DriverManager.getConnection("jdbc:h2:data/test/upgrade;CIPHER=AES", "abc", "abc abc");
stat = conn.createStatement();
stat.executeQuery("select * from test");
conn.close();
assertTrue(new File("data/test/upgrade.h2.db").exists());
deleteDb("upgrade");
}
public void deleteDb(String dbName) throws SQLException { public void deleteDb(String dbName) throws SQLException {
super.deleteDb(dbName); super.deleteDb(dbName);
try { try {
...@@ -137,5 +161,7 @@ public class TestUpgrade extends TestBase { ...@@ -137,5 +161,7 @@ public class TestUpgrade extends TestBase {
} catch (Exception e) { } catch (Exception e) {
throw new SQLException(e.getMessage()); throw new SQLException(e.getMessage());
} }
IOUtils.delete("data/test/" + dbName + ".data.db.backup");
IOUtils.delete("data/test/" + dbName + ".index.db.backup");
} }
} }
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论