Пример #1
0
  @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();
    }
  }
Пример #2
0
  // 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.");
  }
Пример #3
0
  // 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.");
  }
Пример #4
0
 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;
 }
Пример #5
0
  @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.
  }
Пример #6
0
  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);
    }
  }
Пример #7
0
  @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();
    }
  }