public applyUpdate ( RecordUpdate update ) : RecordDataUpdateResult | ||
update | RecordUpdate | |
return | RecordDataUpdateResult |
public RecordDataUpdateResult applyUpdate(RecordUpdate update)
{
if ((state == RecordDataState.FULL) || (state == RecordDataState.DELETED)) {
// throw new Exception("applyUpdate() called on fully populated record!");
Debug.WriteLine("warn: applyUpdate() called on fully populated record. ignoring.");
return RecordDataUpdateResult.FINAL;
}
switch (update.type) {
case RecordUpdateTypes.DELETION_TOMBSTONE:
this.state = RecordDataState.DELETED;
return RecordDataUpdateResult.FINAL;
case RecordUpdateTypes.FULL:
this.state = RecordDataState.FULL;
this.data = update.data;
return RecordDataUpdateResult.FINAL;
case RecordUpdateTypes.NONE:
return RecordDataUpdateResult.SUCCESS;
case RecordUpdateTypes.PARTIAL:
throw new Exception("partial update not implemented");
default:
throw new Exception("unknown update type");
}
}
public void T04_RecordTombstones() { RecordData data = new RecordData(RecordDataState.NOT_PROVIDED, new RecordKey()); Assert.AreEqual(RecordDataState.NOT_PROVIDED, data.State, "empty rec 1"); RecordDataUpdateResult result = data.applyUpdate(RecordUpdate.DeletionTombstone()); Assert.AreEqual(RecordDataUpdateResult.FINAL,result, "tomb result 1"); Assert.AreEqual(RecordDataState.DELETED, data.State, "tomb state 1"); /* NOT ANYMORE bool err = false; try { data.applyUpdate(RecordUpdate.WithPayload("2")); data.applyUpdate(RecordUpdate.DeletionTombstone()); } catch { err = true; } * Assert.AreEqual(err, true); */ // data after a tombstone should be ignored Assert.AreEqual(RecordDataUpdateResult.FINAL, data.applyUpdate(RecordUpdate.WithPayload("1"))); Assert.AreEqual(RecordDataState.DELETED, data.State, "still empty 1"); }