package org.krakenapps.sqlengine.bdb;
import java.nio.ByteBuffer;
import org.krakenapps.codec.EncodingRule;
import org.krakenapps.sqlengine.RowKey;
import org.krakenapps.sqlengine.RowValue;
import org.krakenapps.sqlengine.TableCursor;
import org.krakenapps.sqlengine.Status;
import com.sleepycat.je.Cursor;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
public class TableCursorImpl implements TableCursor {
private Cursor cursor;
public TableCursorImpl(Cursor cursor) {
this.cursor = cursor;
}
@Override
public Status getNext(RowKey rowKey, RowValue rowValue) {
DatabaseEntry k = new DatabaseEntry();
DatabaseEntry v = new DatabaseEntry();
OperationStatus status = cursor.getNext(k, v, LockMode.DEFAULT);
if (status == OperationStatus.SUCCESS) {
ByteBuffer kbuf = ByteBuffer.wrap(k.getData());
ByteBuffer vbuf = ByteBuffer.wrap(v.getData());
Object key = EncodingRule.decode(kbuf);
Object[] value = EncodingRule.decodeArray(vbuf);
rowKey.set(key);
rowValue.set(value);
}
return StatusConverter.convert(status);
}
@Override
public void close() {
cursor.close();
}
}