@Override public String toString() { StringBuilder b = new StringBuilder() ; if ( isLeaf ) b.append("LEAF: ") ; else b.append("NODE: ") ; String labelStr = "??" ; if ( parent >= 0 ) labelStr = Integer.toString(parent) ; else if ( parent == BPlusTreeParams.RootParent ) labelStr = "root" ; if ( isLeaf ) labelStr = labelStr + "/leaf" ; b.append(String.format("%d [%s] (size %d) -- ", getId(), labelStr, count)) ; for ( int i = 0 ; i < maxRecords() ; i++ ) { b.append(childStr(i)) ; b.append(" (") ; b.append(recstr(records, i)) ; b.append(") ") ; } b.append(childStr(params.HighPtr)) ; return b.toString() ; }
@Override public String toString() { StringBuilder b = new StringBuilder() ; if ( isLeaf ) b.append("LEAF: ") ; else b.append("NODE: ") ; String labelStr = "??" ; if ( parent >= 0 ) labelStr = Integer.toString(parent) ; else if ( parent == BPlusTreeParams.RootParent ) labelStr = "root" ; if ( isLeaf ) labelStr = labelStr + "/leaf" ; b.append(String.format("%d [%s] (size %d) -- ", getId(), labelStr, count)) ; for ( int i = 0 ; i < maxRecords() ; i++ ) { b.append(childStr(i)) ; b.append(" (") ; b.append(recstr(records, i)) ; b.append(") ") ; } b.append(childStr(params.HighPtr)) ; return b.toString() ; }
static Iterator<Pair<Integer, Record>> printIndexBlocks(Iterator<Pair<Integer, Record>> iter2, BPTreeNodeMgr bptNodeMgr) { divider() ; List<Pair<Integer, Record>> pairs = Iter.toList(iter2) ; System.out.printf(">>Packed index blocks\n") ; for ( Pair<Integer, Record> pair : pairs ) { System.out.printf(" %s\n", pair) ; BPTreeNode bpNode = bptNodeMgr.getRead(pair.car(), BPlusTreeParams.RootParent) ; bpNode.setIsLeaf(true) ; System.out.printf("BPTreeNode: %d\n", bpNode.getId()) ; System.out.println(bpNode) ; bptNodeMgr.release(bpNode) ; } System.out.printf("<<Packed index blocks\n") ; return pairs.iterator() ; }
static Iterator<Pair<Integer, Record>> printIndexBlocks(Iterator<Pair<Integer, Record>> iter2, BPTreeNodeMgr bptNodeMgr) { divider() ; List<Pair<Integer, Record>> pairs = Iter.toList(iter2) ; System.out.printf(">>Packed index blocks\n") ; for ( Pair<Integer, Record> pair : pairs ) { System.out.printf(" %s\n", pair) ; BPTreeNode bpNode = bptNodeMgr.getRead(pair.car(), BPlusTreeParams.RootParent) ; bpNode.setIsLeaf(true) ; System.out.printf("BPTreeNode: %d\n", bpNode.getId()) ; System.out.println(bpNode) ; bptNodeMgr.release(bpNode) ; } System.out.printf("<<Packed index blocks\n") ; return pairs.iterator() ; }
/** Get the page at slot idx - switch between B+Tree and records files */ /*package*/ BPTreePage get(int idx) { if ( false && logging(log) ) { String leafOrNode = isLeaf ? "L" : "N" ; log(log, "%d[%s].get(%d)", id, leafOrNode, idx) ; } int subId = ptrs.get(idx) ; PageBlockMgr<? extends BPTreePage> pbm = getPageBlockMgr() ; // Always get a "read" block - it must be promoted to a "write" block // to update it. Getting a write block is unhelpful as many blocks // during a write operation are only read. return pbm.getRead(subId, this.getId()) ; }
/** Get the page at slot idx - switch between B+Tree and records files */ /*package*/ BPTreePage get(int idx) { if ( false && logging(log) ) { String leafOrNode = isLeaf ? "L" : "N" ; log(log, "%d[%s].get(%d)", id, leafOrNode, idx) ; } int subId = ptrs.get(idx) ; PageBlockMgr<? extends BPTreePage> pbm = getPageBlockMgr() ; // Always get a "read" block - it must be promoted to a "write" block // to update it. Getting a write block is unhelpful as many blocks // during a write operation are only read. return pbm.getRead(subId, this.getId()) ; }
static Iterator<Pair<Integer, Record>> summarizeIndexBlocks(Iterator<Pair<Integer, Record>> iter2, BPTreeNodeMgr bptNodeMgr) { divider() ; List<Pair<Integer, Record>> pairs = Iter.toList(iter2) ; for ( Pair<Integer, Record> pair : pairs ) { BPTreeNode bpNode = bptNodeMgr.getRead(pair.car(), BPlusTreeParams.RootParent) ; String hr = "null" ; if ( !bpNode.getRecordBuffer().isEmpty() ) hr = bpNode.getRecordBuffer().getHigh().toString() ; System.out.printf("%s -- BPTreeNode: %d (%d) -> [%s]\n", pair, bpNode.getId(), bpNode.getCount(), hr) ; bptNodeMgr.release(bpNode) ; } return pairs.iterator() ; }
static Iterator<Pair<Integer, Record>> summarizeIndexBlocks(Iterator<Pair<Integer, Record>> iter2, BPTreeNodeMgr bptNodeMgr) { divider() ; List<Pair<Integer, Record>> pairs = Iter.toList(iter2) ; for ( Pair<Integer, Record> pair : pairs ) { BPTreeNode bpNode = bptNodeMgr.getRead(pair.car(), BPlusTreeParams.RootParent) ; String hr = "null" ; if ( !bpNode.getRecordBuffer().isEmpty() ) hr = bpNode.getRecordBuffer().getHigh().toString() ; System.out.printf("%s -- BPTreeNode: %d (%d) -> [%s]\n", pair, bpNode.getId(), bpNode.getCount(), hr) ; bptNodeMgr.release(bpNode) ; } return pairs.iterator() ; }
@Override final boolean promote() { if ( bpTree.getNodeManager().isWritable(this.getId()) ) return false ; // This calls reset is needed. // The id, records buffer and pointer buffers need resetting if the block changed. boolean promoteInPlace = bpTree.state().modifiableNodeBlock(getId()) ; if ( promoteInPlace ) { bpTree.getNodeManager().promoteInPlace(this) ; return false ; } else { Block oldBlock = block ; boolean b = bpTree.getNodeManager().promoteDuplicate(this) ; if ( b ) { bpTree.getNodeManager().getBlockMgr().release(oldBlock); } return b ; } }
@Override final boolean promote() { if ( bpTree.getNodeManager().isWritable(this.getId()) ) return false ; // This calls reset is needed. // The id, records buffer and pointer buffers need resetting if the block changed. boolean promoteInPlace = bpTree.state().modifiableNodeBlock(getId()) ; if ( promoteInPlace ) { bpTree.getNodeManager().promoteInPlace(this) ; return false ; } else { Block oldBlock = block ; boolean b = bpTree.getNodeManager().promoteDuplicate(this) ; if ( b ) { bpTree.getNodeManager().getBlockMgr().release(oldBlock); } return b ; } }
BPT.error("Not root: %d (root is id zero)", root.getId()) ; root.internalCheckNode() ; promoteRoot(root) ; BPTreeNode left = create(bpTree, root.getId(), root.isLeaf) ; BPTreeNode right = create(bpTree, root.getId(), root.isLeaf) ; root.ptrs.set(0, left.getId()) ; // slot 0 root.ptrs.set(1, right.getId()) ; // slot 1
/** Insert a record - return existing value if any, else null */ public static Record insert(BPTreeNode root, Record record) { if ( logging(log) ) { log(log, "** insert(%s) / root=%d", record, root.getId()) ; if ( DumpTree ) root.dump() ; } if ( !root.isRoot() ) throw new BPTreeException("Insert begins but this is not the root") ; if ( root.isFull() ) { // Root full - root split is a special case. splitRoot(root) ; if ( DumpTree ) root.dump() ; } AccessPath path = new AccessPath(root) ; // Root ready - call insert proper. Record result = root.internalInsert(path, record) ; root.internalCheckNodeDeep() ; if ( logging(log) ) { log(log, "** insert(%s) / finish", record) ; if ( DumpTree ) root.dump() ; } return result ; }
/** Insert a record - return existing value if any, else null */ public static Record insert(BPTreeNode root, Record record) { if ( logging(log) ) { log(log, "** insert(%s) / root=%d", record, root.getId()) ; if ( DumpTree ) root.dump() ; } if ( !root.isRoot() ) throw new BPTreeException("Insert begins but this is not the root") ; if ( root.isFull() ) { // Root full - root split is a special case. splitRoot(root) ; if ( DumpTree ) root.dump() ; } AccessPath path = new AccessPath(root) ; // Root ready - call insert proper. Record result = root.internalInsert(path, record) ; root.internalCheckNodeDeep() ; if ( logging(log) ) { log(log, "** insert(%s) / finish", record) ; if ( DumpTree ) root.dump() ; } return result ; }
int rootId = root.getId() ; if ( rootId != 0 ) throw new BPTreeException("**** Not the root: " + rootId) ;
int rootId = root.getId() ; if ( rootId != 0 ) throw new BPTreeException("**** Not the root: " + rootId) ;
int rootId = n.getId() ; nodeManager.write(n) ; nodeManager.release(n) ;
int rootId = n.getId() ; nodeManager.write(n) ; nodeManager.release(n) ;
final private void checkNode(Record min, Record max) { int id = getId() ; if ( count != records.size() ) BPT.error("Inconsistent: id=%d, count=%d, records.size()=%d : %s", id, count, records.size(), this) ;