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

Close files after tryUnlockDatabase (and tests)

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