1 5 package org.h2.test.db; 6 7 import java.sql.Connection ; 8 import java.sql.ResultSet ; 9 import java.sql.Statement ; 10 import java.util.ArrayList ; 11 12 import org.h2.test.TestBase; 13 14 public class TestTwoPhaseCommit extends TestBase { 15 public void test() throws Exception { 16 if(config.memory || config.networked || config.logMode==0) { 17 return; 18 } 19 20 deleteDb("twoPhaseCommit"); 21 22 prepare(); 23 openWith(true); 24 test(true); 25 26 prepare(); 27 openWith(false); 28 test(false); 29 } 30 31 void test(boolean rolledBack) throws Exception { 32 Connection conn = getConnection("twoPhaseCommit"); 33 Statement stat = conn.createStatement(); 34 stat.execute("SET WRITE_DELAY 0"); 35 ResultSet rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID"); 36 rs.next(); 37 check(rs.getInt(1), 1); 38 check(rs.getString(2), "Hello"); 39 if(rolledBack) { 40 } else { 41 rs.next(); 42 check(rs.getInt(1), 2); 43 check(rs.getString(2), "World"); 44 } 45 checkFalse(rs.next()); 46 conn.close(); 47 } 48 49 void openWith(boolean rollback) throws Exception { 50 Connection conn = getConnection("twoPhaseCommit"); 51 Statement stat = conn.createStatement(); 52 ArrayList list = new ArrayList (); 53 ResultSet rs = stat.executeQuery("SELECT * FROM INFORMATION_SCHEMA.IN_DOUBT"); 54 while(rs.next()) { 55 list.add(rs.getString("TRANSACTION")); 56 } 57 for(int i=0; i<list.size(); i++) { 58 String s = (String )list.get(i); 59 if(rollback) { 60 stat.execute("ROLLBACK TRANSACTION " + s); 61 } else { 62 stat.execute("COMMIT TRANSACTION " + s); 63 } 64 } 65 conn.close(); 66 } 67 68 void prepare() throws Exception { 69 deleteDb("twoPhaseCommit"); 70 Connection conn = getConnection("twoPhaseCommit"); 71 Statement stat = conn.createStatement(); 72 stat.execute("SET WRITE_DELAY 0"); 73 conn.setAutoCommit(false); 74 stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)"); 75 stat.execute("INSERT INTO TEST VALUES(1, 'Hello')"); 76 conn.commit(); 77 stat.execute("INSERT INTO TEST VALUES(2, 'World')"); 78 stat.execute("PREPARE COMMIT XID_TEST_TRANSACTION_WITH_LONG_NAME"); 79 crash(conn); 80 } 81 } 82 | Popular Tags |