Beispiel #1
0
        public bool RemoveEntry(LowLevelTransaction lltx, long key, out FixedSizeTreeNodeEntry entry)
        {
            var page = GetPageForUpdate(lltx, key, Constants.BTreeLeafPageDepth);

            if (page == null)
            {
                entry = FixedSizeTreeNodeEntry.Empty;
                return(false);
            }

            if (true)
            {
                page.Search(key);
            }

            if (page.LastMatch != 0 || page.LastMatchIndex < 0)
            {
                entry = FixedSizeTreeNodeEntry.Empty;
                return(false);
            }

            if (page.FixedHeader.Count == 1)
            {
                lltx.WriteMultiLogBegin();
            }

            if (true)
            {
                entry = page.RemoveEntry(lltx, page.LastMatchIndex);
            }

            if (page.FixedHeader.Count == 0)
            {
                RemovePageRecursion(lltx, page, entry.Key);
                lltx.WriteMultiLogEnd();
            }

            return(true);
        }
Beispiel #2
0
        public bool TryGetEntry(LowLevelTransaction lltx, long key, out FixedSizeTreeNodeEntry nodeEntry)
        {
            var page = GetPageForQuery(lltx, key, Constants.BTreeLeafPageDepth);

            if (page == null)
            {
                nodeEntry = FixedSizeTreeNodeEntry.Empty;
                return(false);
            }

            if (true)
            {
                page.Search(key);
            }

            if (page.LastMatch != 0 || page.LastMatchIndex < 0)
            {
                nodeEntry = FixedSizeTreeNodeEntry.Empty;
                return(false);
            }

            nodeEntry = page.GetNodeEntry(page.LastMatchIndex);
            return(true);
        }
Beispiel #3
0
 public bool MoveNext(LowLevelTransaction lltx, out FixedSizeTreeNodeEntry entry)
 {
     ref var fixedHeader = ref Current.FixedHeader;