提交 84472cbd authored 作者: Thomas Mueller's avatar Thomas Mueller

Close files after tryUnlockDatabase (and tests)

上级 6cebed58
......@@ -52,6 +52,7 @@ public class FileLister {
FileChannel f = FilePath.get(fileName).open("r");
java.nio.channels.FileLock lock = f.tryLock(0, Long.MAX_VALUE, true);
lock.release();
f.close();
} catch (Exception e) {
throw DbException.get(
ErrorCode.CANNOT_CHANGE_SETTING_WHEN_OPEN_1, e, message).getSQLException();
......
......@@ -61,6 +61,7 @@ public class TestLob extends TestBase {
@Override
public void test() throws Exception {
testCleaningUpLobsOnRollback();
testClobWithRandomUnicodeChars();
testCommitOnExclusiveConnection();
testReadManyLobs();
......@@ -110,7 +111,25 @@ public class TestLob extends TestBase {
deleteDb("lob");
FileUtils.deleteRecursive(TEMP_DIR, true);
}
private void testCleaningUpLobsOnRollback() throws Exception {
deleteDb("lob");
Connection conn = getConnection("lob");
Statement stat = conn.createStatement();
stat.execute("CREATE TABLE test(id int, data CLOB)");
conn.setAutoCommit(false);
stat.executeUpdate("insert into test values (1, '" + MORE_THAN_128_CHARS + "')");
conn.rollback();
ResultSet rs = stat.executeQuery("select count(*) from test");
rs.next();
assertEquals(0, rs.getInt(1));
rs = stat.executeQuery("select * from information_schema.lobs");
rs = stat.executeQuery("select count(*) from information_schema.lob_data");
rs.next();
assertEquals(0, rs.getInt(1));
conn.close();
}
private void testReadManyLobs() throws Exception {
//
deleteDb("lob");
......
......@@ -36,6 +36,8 @@ public class TestRunscript extends TestBase implements Trigger {
@Override
public void test() throws Exception {
test(false);
test(true);
testDropReferencedUserDefinedFunction();
testDropCascade();
testScriptExcludeSchema();
......@@ -50,8 +52,6 @@ public class TestRunscript extends TestBase implements Trigger {
testCancelScript();
testEncoding();
testClobPrimaryKey();
test(false);
test(true);
deleteDb("runscript");
}
......
......@@ -471,20 +471,21 @@ public class TestTools extends TestBase {
}
private void testDeleteFiles() throws SQLException {
deleteDb("utilsMore");
Connection conn = getConnection("utilsMore");
deleteDb("testDeleteFiles");
Connection conn = getConnection("testDeleteFiles");
Statement stat = conn.createStatement();
stat.execute("create table test(c clob) as select space(10000) from dual");
conn.close();
DeleteDbFiles.execute(getBaseDir(), "utils", true);
conn = getConnection("utilsMore");
// the name starts with the same string, but does not match it
DeleteDbFiles.execute(getBaseDir(), "testDelete", true);
conn = getConnection("testDeleteFiles");
stat = conn.createStatement();
ResultSet rs;
rs = stat.executeQuery("select * from test");
rs.next();
rs.getString(1);
conn.close();
deleteDb("utilsMore");
deleteDb("testDeleteFiles");
}
private void testServerMain() throws SQLException {
......@@ -733,7 +734,7 @@ public class TestTools extends TestBase {
private void testScriptRunscriptLob() throws Exception {
org.h2.Driver.load();
String url = getURL("jdbc:h2:" + getBaseDir() + "/utils", true);
String url = getURL("jdbc:h2:" + getBaseDir() + "/testScriptRunscriptLob", true);
String user = "sa", password = "abc";
String fileName = getBaseDir() + "/b2.sql";
Connection conn = getConnection(url, user, password);
......@@ -777,9 +778,9 @@ public class TestTools extends TestBase {
conn.close();
Script.main("-url", url, "-user", user, "-password", password, "-script", fileName);
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "utils", "-quiet");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "testScriptRunscriptLob", "-quiet");
RunScript.main("-url", url, "-user", user, "-password", password, "-script", fileName);
conn = getConnection("jdbc:h2:" + getBaseDir() + "/utils", "sa", "abc");
conn = getConnection("jdbc:h2:" + getBaseDir() + "/testScriptRunscriptLob", "sa", "abc");
}
conn.close();
......@@ -787,10 +788,10 @@ public class TestTools extends TestBase {
private void testScriptRunscript() throws SQLException {
org.h2.Driver.load();
String url = getURL("jdbc:h2:" + getBaseDir() + "/utils", true);
String url = getURL("jdbc:h2:" + getBaseDir() + "/testScriptRunscript", true);
String user = "sa", password = "abc";
String fileName = getBaseDir() + "/b2.sql";
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "utils", "-quiet");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "testScriptRunscript", "-quiet");
Connection conn = getConnection(url, user, password);
conn.createStatement().execute("CREATE TABLE \u00f6()");
conn.createStatement().execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
......@@ -799,17 +800,17 @@ public class TestTools extends TestBase {
Script.main("-url", url, "-user", user, "-password", password, "-script", fileName, "-options",
"nodata", "compression", "lzf", "cipher", "xtea", "password", "'123'", "charset", "'utf-8'");
Script.main("-url", url, "-user", user, "-password", password, "-script", fileName + ".txt");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "utils", "-quiet");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "testScriptRunscript", "-quiet");
RunScript.main("-url", url, "-user", user, "-password", password, "-script", fileName,
"-options", "compression", "lzf", "cipher", "xtea", "password", "'123'", "charset", "'utf-8'");
conn = getConnection("jdbc:h2:" + getBaseDir() + "/utils", "sa", "abc");
conn = getConnection("jdbc:h2:" + getBaseDir() + "/testScriptRunscript", "sa", "abc");
ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM TEST");
assertFalse(rs.next());
rs = conn.createStatement().executeQuery("SELECT * FROM \u00f6");
assertFalse(rs.next());
conn.close();
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "utils", "-quiet");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "testScriptRunscript", "-quiet");
RunScript tool = new RunScript();
ByteArrayOutputStream buff = new ByteArrayOutputStream();
tool.setOut(new PrintStream(buff));
......@@ -820,18 +821,18 @@ public class TestTools extends TestBase {
private void testBackupRestore() throws SQLException {
org.h2.Driver.load();
String url = "jdbc:h2:" + getBaseDir() + "/utils";
String url = "jdbc:h2:" + getBaseDir() + "/testBackupRestore";
String user = "sa", password = "abc";
final String fileName = getBaseDir() + "/b2.zip";
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "utils", "-quiet");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "testBackupRestore", "-quiet");
Connection conn = getConnection(url, user, password);
conn.createStatement().execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
conn.createStatement().execute("INSERT INTO TEST VALUES(1, 'Hello')");
conn.close();
Backup.main("-file", fileName, "-dir", getBaseDir(), "-db", "utils", "-quiet");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "utils", "-quiet");
Restore.main("-file", fileName, "-dir", getBaseDir(), "-db", "utils", "-quiet");
conn = getConnection("jdbc:h2:" + getBaseDir() + "/utils", "sa", "abc");
Backup.main("-file", fileName, "-dir", getBaseDir(), "-db", "testBackupRestore", "-quiet");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "testBackupRestore", "-quiet");
Restore.main("-file", fileName, "-dir", getBaseDir(), "-db", "testBackupRestore", "-quiet");
conn = getConnection("jdbc:h2:" + getBaseDir() + "/testBackupRestore", "sa", "abc");
ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM TEST");
assertTrue(rs.next());
assertFalse(rs.next());
......@@ -839,11 +840,11 @@ public class TestTools extends TestBase {
@Override
public void test() throws SQLException {
// must fail when the database is in use
Backup.main("-file", fileName, "-dir", getBaseDir(), "-db", "utils");
Backup.main("-file", fileName, "-dir", getBaseDir(), "-db", "testBackupRestore");
}
};
conn.close();
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "utils", "-quiet");
DeleteDbFiles.main("-dir", getBaseDir(), "-db", "testBackupRestore", "-quiet");
}
private void testChangeFileEncryption(boolean split) throws SQLException {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论