package com.sleepycat.je.log.entry;
import java.nio.ByteBuffer;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.dbi.DatabaseId;
import com.sleepycat.je.log.LogEntryType;
import com.sleepycat.je.log.LogUtils;
import com.sleepycat.je.tree.Key;
import com.sleepycat.je.tree.LN;
import com.sleepycat.je.txn.Txn;
import de.ovgu.cide.jakutil.*;
/**
* DupDeletedLNEntry encapsulates a deleted dupe LN entry. This contains all
* the regular transactional LN log entry fields and an extra key, which is the
* nulled out data field of the LN (which becomes the key in the duplicate
* tree.
*/
public class DeletedDupLNLogEntry extends LNLogEntry {
private byte[] dataAsKey;
/**
* Constructor to read an entry.
*/
public DeletedDupLNLogEntry( boolean isTransactional){
super(com.sleepycat.je.tree.LN.class,isTransactional);
}
/**
* Constructor to make an object that can write this entry.
*/
public DeletedDupLNLogEntry( LogEntryType entryType, LN ln, DatabaseId dbId, byte[] key, byte[] dataAsKey, long abortLsn, boolean abortKnownDeleted, Txn txn){
super(entryType,ln,dbId,key,abortLsn,abortKnownDeleted,txn);
this.dataAsKey=dataAsKey;
}
/**
* Extends its super class to read in the extra dup key.
* @see LNLogEntry#readEntry
*/
public void readEntry( ByteBuffer entryBuffer, int entrySize, byte entryTypeVersion, boolean readFullItem) throws DatabaseException {
super.readEntry(entryBuffer,entrySize,entryTypeVersion,readFullItem);
if (readFullItem) {
dataAsKey=LogUtils.readByteArray(entryBuffer);
}
else {
dataAsKey=null;
}
}
/**
* Extends super class to dump out extra key.
* @see LNLogEntry#dumpEntry
*/
public StringBuffer dumpEntry( StringBuffer sb, boolean verbose){
super.dumpEntry(sb,verbose);
sb.append(Key.dumpString(dataAsKey,0));
return sb;
}
/**
* Extend super class to add in extra key.
* @see LNLogEntry#getLogSize
*/
public int getLogSize(){
return super.getLogSize() + LogUtils.getByteArrayLogSize(dataAsKey);
}
/**
* @see LNLogEntry#writeToLog
*/
public void writeToLog( ByteBuffer destBuffer){
super.writeToLog(destBuffer);
LogUtils.writeByteArray(destBuffer,dataAsKey);
}
/**
* Get the data-as-key out of the entry.
*/
public byte[] getDupKey(){
return dataAsKey;
}
}