@Test public void mustAllowDoubleCommitAndRollback() { SharedGroup db = new SharedGroup(testFile, SharedGroup.Durability.FULL, null); { WriteTransaction trans = db.beginWrite(); Table tbl = trans.getTable("EmployeeTable"); tbl.addColumn(RealmFieldType.STRING, "name"); tbl.addColumn(RealmFieldType.INTEGER, "number"); // allow commit before any changes assertEquals(0, tbl.size()); tbl.add("Hello", 1); trans.commit(); } { WriteTransaction trans = db.beginWrite(); Table tbl = trans.getTable("EmployeeTable"); // allow double rollback tbl.add("Hello", 2); assertEquals(2, tbl.size()); trans.rollback(); trans.rollback(); trans.rollback(); trans.rollback(); } { ReadTransaction trans = db.beginRead(); Table tbl = trans.getTable("EmployeeTable"); assertEquals(1, tbl.size()); trans.endRead(); } }
// Test that primary key constraints are actually removed @Test public void removingPrimaryKeyRemovesConstraint_typeSetters() { SharedGroup db = new SharedGroup(testFile, SharedGroup.Durability.FULL, null); WriteTransaction trans = db.beginWrite(); Table tbl = trans.getTable("EmployeeTable"); tbl.addColumn(RealmFieldType.STRING, "name"); tbl.setPrimaryKey("name"); // Create first entry with name "foo" tbl.setString(0, tbl.addEmptyRow(), "Foo"); long rowIndex = tbl.addEmptyRow(); try { tbl.setString(0, rowIndex, "Foo"); // Try to create 2nd entry with name Foo } catch (RealmPrimaryKeyConstraintException e1) { tbl.setPrimaryKey(""); // Primary key check worked, now remove it and try again. try { tbl.setString(0, rowIndex, "Foo"); return; } catch (RealmException e2) { fail("Primary key not removed"); } } fail("Primary key not enforced."); }
// Test that primary key constraints are actually removed @Test public void removingPrimaryKeyRemovesConstraint() { SharedGroup db = new SharedGroup(testFile, SharedGroup.Durability.FULL, null); WriteTransaction trans = db.beginWrite(); Table tbl = trans.getTable("EmployeeTable"); tbl.addColumn(RealmFieldType.STRING, "name"); tbl.addColumn(RealmFieldType.INTEGER, "number"); tbl.setPrimaryKey("name"); tbl.add("Foo", 42); try { tbl.add("Foo", 41); } catch (RealmPrimaryKeyConstraintException e1) { // Primary key check worked, now remove it and try again. tbl.setPrimaryKey(""); try { tbl.add("Foo", 41); return; } catch (RealmException e2) { fail("Primary key not removed"); } } fail("Primary key not enforced."); }
private Table getTableWithIntegerPrimaryKey() { SharedGroup db = new SharedGroup(testFile, SharedGroup.Durability.FULL, null); WriteTransaction trans = db.beginWrite(); Table t = trans.getTable("TestTable"); t.addColumn(RealmFieldType.INTEGER, "colName"); t.setPrimaryKey("colName"); return t; }
@Test public void mustRollback() { SharedGroup db = new SharedGroup(testFile, SharedGroup.Durability.FULL, null); writeOneTransaction(db, 1); WriteTransaction trans = db.beginWrite(); Table tbl = trans.getTable("EmployeeTable"); tbl.add("Hello", 1); assertEquals(2, tbl.size()); trans.rollback(); checkRead(db, 1); // Only 1 row now. }
protected void writeOneTransaction(SharedGroup db, long rows) { WriteTransaction trans = db.beginWrite(); Table tbl = trans.getTable("EmployeeTable"); tbl.addColumn(RealmFieldType.STRING, "name"); tbl.addColumn(RealmFieldType.INTEGER, "number"); for (long row = 0; row < rows; row++) tbl.add("Hi", 1); assertEquals(rows, tbl.size()); trans.commit(); // must throw exception as table is invalid now. try { assertEquals(1, tbl.size()); fail(); } catch (IllegalStateException e) { assertNotNull(e); } }
@Test public void onlyOneCommit() { SharedGroup db = new SharedGroup(testFile, SharedGroup.Durability.FULL, null); WriteTransaction trans = db.beginWrite(); try { Table tbl = trans.getTable("EmployeeTable"); tbl.addColumn(RealmFieldType.STRING, "name"); trans.commit(); try { trans.commit(); // should throw fail(); } catch (IllegalStateException e) { assertNotNull(e); } } catch (Throwable t) { trans.rollback(); } }