public static void MergeRolledBackTransaction(Session session, long timestamp, object[] list, int start, int limit) { int index = start; while (index < limit) { RowAction action = (RowAction)list[index]; Row memoryRow = action.MemoryRow; if (memoryRow != null) { goto Label_003F; } if (action.type != 0) { memoryRow = (Row)action.Store.Get(action.GetPos(), false); goto Label_003F; } Label_0039: index++; continue; Label_003F: if (memoryRow == null) { goto Label_0039; } lock (memoryRow) { action.MergeRollback(session, timestamp, memoryRow); goto Label_0039; } } }
public void RollbackPartial(Session session, int start, long timestamp) { object[] objArray = session.RowActionList.ToArray(); int count = session.RowActionList.Count; if (start != count) { for (int i = count - 1; i >= start; i--) { RowAction action = (RowAction)objArray[i]; if (((action != null) && (action.type != 0)) && (action.type != 3)) { Row memoryRow = action.MemoryRow; if (memoryRow == null) { memoryRow = (Row)action.Store.Get(action.GetPos(), false); } if (memoryRow != null) { action.Rollback(session, timestamp); int changeAction = action.MergeRollback(session, timestamp, memoryRow); action.Store.RollbackRow(session, memoryRow, changeAction, base.TxModel); } } } session.RowActionList.RemoveRange(start, session.RowActionList.Count - start); } }