Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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);
            }
        }