//package my.test.mvstore; // //import org.h2.mvstore.MVStore; //import org.h2.mvstore.db.TransactionStore; //import org.h2.mvstore.db.TransactionStore.Transaction; //import org.h2.mvstore.db.TransactionStore.TransactionMap; // ////import org.h2.store.fs.FileUtils; // //public class TransactionStoreTest { // // public static void main(String[] args) { // String fileName = null; // fileName = "E:/H2/baseDir/TransactionStoreTest"; // MVStore s = null; // //FileUtils.deleteRecursive(fileName, true); // // s = MVStore.open(fileName); // TransactionStore ts = new TransactionStore(s); // Transaction tx; // TransactionMap<String, String> m; // long startUpdate; // @SuppressWarnings("unused") // long version; // // tx = ts.begin(); // // // start of statement // // create table test // startUpdate = tx.setSavepoint(); // tx.openMap("test"); // // // start of statement // // insert into test(id, name) values(1, 'Hello'), (2, 'World') // startUpdate = tx.setSavepoint(); // version = s.getCurrentVersion(); // m = tx.openMap("test"); // // int n = 100; // for (int i = 0; i < n; i++) { // m.put(i + "", "Hello" + i); // // if (i % 20 == 0) // s.incrementVersion(); // } // // long savepoint = tx.setSavepoint(); // m.put(2 + "", "Hello22"); // // System.out.println(m.get("2")); // // m.setSavepoint(savepoint); // // System.out.println(m.get("2")); // // System.out.println(m.trySet("1", "Hello", true)); // System.out.println(m.trySet("2", "World", true)); // // not seen yet (within the same statement) // System.out.println(m.get("1")); // System.out.println(m.get("2")); // // // start of statement // startUpdate = tx.setSavepoint(); // version = s.getCurrentVersion(); // // now we see the newest version // m = tx.openMap("test"); // System.out.println("Hello=" + m.get("1")); // System.out.println("World=" + m.get("2")); // // update test set primaryKey = primaryKey + 1 // // (this is usually a tricky cases) // System.out.println("Hello=" + m.get("1")); // System.out.println(m.trySet("1", null, true)); // System.out.println(m.trySet("2", "Hello", true)); // System.out.println("World=" + m.get("2")); // // already updated by this statement, so it has no effect // // but still returns true because it was changed by this transaction // System.out.println(m.trySet("2", null, true)); // // System.out.println(m.trySet("3", "World", true)); // // not seen within this statement // System.out.println("Hello=" + m.get("1")); // System.out.println("World=" + m.get("2")); // System.out.println(m.get("3")); // // // start of statement // startUpdate = tx.setSavepoint(); // version = s.getCurrentVersion(); // m = tx.openMap("test"); // // select * from test // System.out.println(m.get("1")); // System.out.println("Hello=" + m.get("2")); // System.out.println("World=" + m.get("3")); // // // start of statement // startUpdate = tx.setSavepoint(); // version = s.getCurrentVersion(); // m = tx.openMap("test"); // // update test set id = 1 // // should fail: duplicate key // System.out.println(m.trySet("2", null, true)); // System.out.println(m.trySet("1", "Hello", true)); // System.out.println(m.trySet("3", null, true)); // System.out.println(m.trySet("1", "World", true)); // tx.rollbackToSavepoint(startUpdate); // // version = s.getCurrentVersion(); // m = tx.openMap("test"); // System.out.println(m.get("1")); // System.out.println("Hello=" + m.get("2")); // System.out.println("World=" + m.get("3")); // // tx.commit(); // // ts.close(); // s.close(); // // } // //}