@Override public KeyLoadResult loadKey(int curPosition, DataBlock dataBlock) throws JasDBStorageException { KeyLoadResult loadResult = keyFactory.loadKey(curPosition, dataBlock); if(loadResult != null) { loadResult = this.multiValueKeyLoader.loadKeys(loadResult.getLoadedKey(), loadResult.getNextOffset(), loadResult.getEndBlock()); return loadResult; } else { return null; } }
@Override public KeyLoadResult loadKey(int offset, DataBlock dataBlock) throws JasDBStorageException { CompositeKey compositeKey = new CompositeKey(); KeyLoadResult result = multiKeyloader.loadKeys(compositeKey, offset, dataBlock); return new KeyLoadResultImpl(result.getLoadedKey(), result.getEndBlock(), result.getNextOffset()); }
@Override public KeyLoadResult loadKeys(Key targetKey, int offset, DataBlock dataBlock) throws JasDBStorageException { int curOffset = offset; DataBlock currentBlock = dataBlock; for(KeyFactory keyFactory : keyFactories) { KeyLoadResult valueKeyResult = keyFactory.loadKey(curOffset, currentBlock); targetKey.addKey(keyNameMapper, keyFactory.getFieldName(), valueKeyResult.getLoadedKey()); currentBlock = valueKeyResult.getEndBlock(); curOffset = valueKeyResult.getNextOffset(); } return new KeyLoadResultImpl(targetKey, currentBlock, curOffset); }
@Override public LeaveBlock loadBlock(DataBlock dataBlock) throws JasDBStorageException { LOG.debug("Loading block: {}", dataBlock); LeaveBlockImpl leaveBlock = createBlock(-1, dataBlock); LeaveBlockProperties properties = leaveBlock.getProperties(); properties.setModified(false); int amountOfKeys = dataBlock.getHeader().getInt(AMOUNT_KEY_INDEX); long nextBlock = dataBlock.getHeader().getLong(NEXT_LEAVE_INDEX); long previousBlock = dataBlock.getHeader().getLong(PREVIOUS_LEAVE_INDEX); long parent = dataBlock.getHeader().getLong(PARENT_BLOCK_INDEX); int offset = 0; DataBlock currentBlock = dataBlock; for(int i=0; i<amountOfKeys; i++) { KeyLoadResult loadedKeyResult = keyInfo.loadKey(offset, currentBlock); leaveBlock.addKey(loadedKeyResult.getLoadedKey()); currentBlock = loadedKeyResult.getEndBlock(); offset = loadedKeyResult.getNextOffset(); } properties.setNextBlock(nextBlock); properties.setPreviousBlock(previousBlock); properties.setModified(false); properties.setParentBlock(parent); return leaveBlock; }
@Override public TreeBlock loadBlock(DataBlock dataBlock) throws JasDBStorageException { TreeBlock treeBlock = createBlock(-1, dataBlock); treeBlock.setModified(false); treeBlock.setParentPointer(dataBlock.getHeader().getLong(PARENTPOINTER_INDEX)); int nrNodes = dataBlock.getHeader().getInt(NODEAMOUNT_INDEX); int offset = 0; DataBlock currentBlock = dataBlock; for(int i=0; i<nrNodes; i++) { KeyLoadResult loadedKeyResult = loadKeyResult(treeBlock, offset, currentBlock); DataBlockResult<Long> leftPointerResult = loadedKeyResult.getEndBlock().loadLong(loadedKeyResult.getNextOffset()); DataBlockResult<Long> rightPointerResult = leftPointerResult.getEndBlock().loadLong(leftPointerResult.getNextOffset()); TreeNode node = new TreeNode(loadedKeyResult.getLoadedKey(), leftPointerResult.getValue(), rightPointerResult.getValue()); treeBlock.addKey(node); LOG.trace("Loaded Key: {} with left: {} and right: {} on block: {}", node.getKey(), node.getLeft(), node.getRight(), treeBlock.getPosition()); offset = rightPointerResult.getNextOffset(); currentBlock = rightPointerResult.getEndBlock(); } return treeBlock; }