提交 e139ecde authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Add a test case

上级 b82fd151
......@@ -74,6 +74,7 @@ public class TestMultiThread extends TestBase implements Runnable {
testViews();
testConcurrentInsert();
testConcurrentUpdate();
testConcurrentUpdate2();
}
private void testConcurrentSchemaChange() throws Exception {
......@@ -490,4 +491,64 @@ public class TestMultiThread extends TestBase implements Runnable {
deleteDb("lockMode");
}
private final class ConcurrentUpdate2 extends Thread {
private final String column;
Throwable exception;
ConcurrentUpdate2(String column) {
this.column = column;
}
@Override
public void run() {
try {
Connection c = getConnection("concurrentUpdate2");
PreparedStatement ps = c.prepareStatement("UPDATE TEST SET V = ? WHERE " + column + " = ?");
for (int test = 0; test < 1000; test++) {
for (int i = 0; i < 16; i++) {
ps.setInt(1, test);
ps.setInt(2, i);
assertEquals(16, ps.executeUpdate());
}
}
} catch (Throwable e) {
exception = e;
}
}
}
private void testConcurrentUpdate2() throws Exception {
deleteDb("concurrentUpdate2");
Connection c = getConnection("concurrentUpdate2");
Statement s = c.createStatement();
s.execute("CREATE TABLE TEST(A INT, B INT, V INT, PRIMARY KEY(A, B))");
PreparedStatement ps = c.prepareStatement("INSERT INTO TEST VALUES (?, ?, ?)");
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
ps.setInt(1, i);
ps.setInt(2, j);
ps.setInt(3, 0);
ps.executeUpdate();
}
}
ConcurrentUpdate2 a = new ConcurrentUpdate2("A");
ConcurrentUpdate2 b = new ConcurrentUpdate2("B");
a.start();
b.start();
a.join();
b.join();
deleteDb("concurrentUpdate2");
Throwable e = a.exception;
if (e == null) {
e = b.exception;
}
if (e != null) {
if (e instanceof Exception) {
throw (Exception) e;
}
throw (Error) e;
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论