public BTreeNode(Transaction trans, Db4objects.Db4o.Internal.Btree.BTreeNode firstChild , Db4objects.Db4o.Internal.Btree.BTreeNode secondChild) : this(firstChild._btree , 2, false, 0, 0, 0) { _keys[0] = firstChild._keys[0]; _children[0] = firstChild; _keys[1] = secondChild._keys[0]; _children[1] = secondChild; Write(trans.SystemTransaction()); firstChild.SetParentID(trans, GetID()); secondChild.SetParentID(trans, GetID()); }
public BTree(Transaction trans, BTreeConfiguration config, int id, IIndexable4 keyHandler , int treeNodeSize) : base(config._idSystem) { _config = config; if (null == keyHandler) { throw new ArgumentNullException(); } _nodeSize = treeNodeSize; _nodeCache = CacheFactory.NewLRUIntCache(config._cacheSize); _halfNodeSize = _nodeSize / 2; _nodeSize = _halfNodeSize * 2; _keyHandler = keyHandler; SetID(id); if (IsNew()) { SetStateDirty(); _root = new BTreeNode(this, 0, true, 0, 0, 0); _root.Write(trans.SystemTransaction()); AddNode(_root); Write(trans.SystemTransaction()); } else { SetStateDeactivated(); } }
private void EnsureActive(Transaction trans) { if (!IsActive()) { Read(trans.SystemTransaction()); } }
private void FinishTransaction(Transaction trans) { Transaction systemTransaction = trans.SystemTransaction(); WriteAllNodes(systemTransaction); Write(systemTransaction); Purge(); }
public virtual void Add(Transaction trans, IPreparedComparison preparedComparison , object key) { EnsureActive(trans); Enlist(trans); BTreeNode rootOrSplit = _root.Add(trans, preparedComparison, key); if (rootOrSplit != null && rootOrSplit != _root) { EnsureDirty(trans); _root = new BTreeNode(trans, _root, rootOrSplit); _root.Write(trans.SystemTransaction()); AddNode(_root); } ConvertCacheEvictedNodesToReadMode(); }
internal void PrepareWrite(Transaction trans) { if (_dead) { return; } BTreeNodeCacheEntry cacheEntry = Btree().CacheEntry(this); if (CanWrite()) { return; } ByteArrayBuffer buffer = cacheEntry.Buffer(); if (buffer != null) { buffer.Seek(0); Read(trans.SystemTransaction(), buffer); cacheEntry.Buffer(null); } else { Read(trans.SystemTransaction()); } _btree.AddToProcessing(this); }
internal ByteArrayBuffer PrepareRead(Transaction trans) { BTreeNodeCacheEntry cacheEntry = Btree().CacheEntry(this); if (CanWrite()) { return null; } if (IsNew()) { return null; } Transaction systemTransaction = trans.SystemTransaction(); ByteArrayBuffer buffer = cacheEntry.Buffer(); if (buffer != null) { // Cache hit, still unread buffer.Seek(0); Read(systemTransaction, buffer); cacheEntry.Buffer(null); _btree.AddToProcessing(this); return null; } buffer = ProduceReadBuffer(systemTransaction); ReadNodeHeader(buffer); cacheEntry.Buffer(buffer); return buffer; }
private Db4objects.Db4o.Internal.Btree.BTreeNode Split(Transaction trans) { Db4objects.Db4o.Internal.Btree.BTreeNode res = new Db4objects.Db4o.Internal.Btree.BTreeNode (_btree, _btree._halfNodeSize, _isLeaf, _parentID, GetID(), _nextID); System.Array.Copy(_keys, _btree._halfNodeSize, res._keys, 0, _btree._halfNodeSize ); for (int i = _btree._halfNodeSize; i < _keys.Length; i++) { _keys[i] = null; } if (_children != null) { res._children = new object[_btree.NodeSize()]; System.Array.Copy(_children, _btree._halfNodeSize, res._children, 0, _btree._halfNodeSize ); for (int i = _btree._halfNodeSize; i < _children.Length; i++) { _children[i] = null; } } _count = _btree._halfNodeSize; res.Write(trans.SystemTransaction()); _btree.AddNode(res); int splitID = res.GetID(); PointNextTo(trans, splitID); SetNextID(trans, splitID); if (_children != null) { for (int i = 0; i < _btree._halfNodeSize; i++) { if (res._children[i] == null) { break; } res.Child(i).SetParentID(trans, splitID); } } _btree.NotifySplit(trans, this, res); return res; }
// do nothing. public override BTree GetIndex(Transaction trans) { return(((LocalTransaction)trans.SystemTransaction()).CommitTimestampSupport().TimestampToId ()); }
// do nothing. public override BTree GetIndex(Transaction trans) { return ((LocalTransaction)trans.SystemTransaction()).CommitTimestampSupport().TimestampToId (); }