public void ReleaseTableWriteLock(ITable table, Transaction transaction)
        {
            if (transaction.IsolationLevel == IsolationLevels.ReadCommited ||
                transaction.IsolationLevel == IsolationLevels.RepetableRead)
            {
                return;
            }

            ILock tableLock = this.tableLocks[table];
            var   lockInfo  = this.lockInventory.GetLockInformation(tableLock, transaction);

            if (lockInfo.IsWriteLockHeld)
            {
                if (lockInfo.IsReadLockHeld)
                {
                    tableLock.Downgrade();
                }
                else
                {
                    tableLock.ExitWrite();
                    // TODO: OnReleased
                }

                lockInfo.IsWriteLockHeld = false;
            }
        }