/*
* Copyright (c) 2009 - 2011, Jan Stender, Bjoern Kolbeck, Mikael Hoegqvist,
* Felix Hupfeld, Felix Langner, Zuse Institute Berlin
*
* Licensed under the BSD License, see LICENSE file for details.
*
*/
package de.mxro.thrd.babudb05.snapshots;
import de.mxro.thrd.babudb05.BabuDBRequestResultImpl;
import de.mxro.thrd.babudb05.api.database.DatabaseRO;
import de.mxro.thrd.babudb05.api.database.DatabaseRequestResult;
import de.mxro.thrd.babudb05.api.database.ResultSet;
import de.mxro.thrd.babudb05.api.database.UserDefinedLookup;
import de.mxro.thrd.babudb05.api.dev.BabuDBInternal;
import de.mxro.thrd.babudb05.api.exception.BabuDBException;
public class Snapshot implements DatabaseRO {
private final BabuDBInternal dbs;
private BabuDBView view;
public Snapshot(BabuDBView view, BabuDBInternal dbs) {
this.view = view;
this.dbs = dbs;
}
public synchronized BabuDBView getView() {
return view;
}
public synchronized void setView(BabuDBView view) {
this.view = view;
}
/*
* (non-Javadoc)
* @see org.xtreemfs.babudb.lsmdb.DatabaseRO#shutdown()
*/
@Override
public void shutdown() throws BabuDBException {
view.shutdown();
}
/*
* (non-Javadoc)
* @see org.xtreemfs.babudb.lsmdb.DatabaseRO#lookup(int, byte[], java.lang.Object)
*/
@Override
public DatabaseRequestResult<byte[]> lookup(int indexId, byte[] key, Object context) {
BabuDBRequestResultImpl<byte[]> result =
new BabuDBRequestResultImpl<byte[]>(context, dbs.getResponseManager());
byte[] r;
try {
r = view.directLookup(indexId, key);
result.finished(r);
} catch (BabuDBException e) {
result.failed(e);
}
return result;
}
/* (non-Javadoc)
* @see org.xtreemfs.babudb.lsmdb.DatabaseRO#prefixLookup(int, byte[], java.lang.Object)
*/
@Override
public DatabaseRequestResult<ResultSet<byte[], byte[]>> prefixLookup(int indexId, byte[] key,
Object context) {
BabuDBRequestResultImpl<ResultSet<byte[], byte[]>> result =
new BabuDBRequestResultImpl<ResultSet<byte[], byte[]>>(context,
dbs.getResponseManager());
ResultSet<byte[], byte[]> r;
try {
r = view.directPrefixLookup(indexId, key, true);
result.finished(r);
} catch (BabuDBException e) {
result.failed(e);
}
return result;
}
@Override
public DatabaseRequestResult<ResultSet<byte[], byte[]>> reversePrefixLookup(int indexId, byte[] key,
Object context) {
BabuDBRequestResultImpl<ResultSet<byte[], byte[]>> result =
new BabuDBRequestResultImpl<ResultSet<byte[], byte[]>>(context,
dbs.getResponseManager());
ResultSet<byte[], byte[]> r;
try {
r = view.directPrefixLookup(indexId, key, false);
result.finished(r);
} catch (BabuDBException e) {
result.failed(e);
}
return result;
}
@Override
public DatabaseRequestResult<ResultSet<byte[], byte[]>> rangeLookup(int indexId, byte[] from,
byte[] to, Object context) {
BabuDBRequestResultImpl<ResultSet<byte[], byte[]>> result =
new BabuDBRequestResultImpl<ResultSet<byte[], byte[]>>(context,
dbs.getResponseManager());
ResultSet<byte[], byte[]> r;
try {
r = view.directRangeLookup(indexId, from, to, true);
result.finished(r);
} catch (BabuDBException e) {
result.failed(e);
}
return result;
}
@Override
public DatabaseRequestResult<ResultSet<byte[], byte[]>> reverseRangeLookup(int indexId, byte[] from,
byte[] to, Object context) {
BabuDBRequestResultImpl<ResultSet<byte[], byte[]>> result =
new BabuDBRequestResultImpl<ResultSet<byte[], byte[]>>(context,
dbs.getResponseManager());
ResultSet<byte[], byte[]> r;
try {
r = view.directRangeLookup(indexId, from, to, false);
result.finished(r);
} catch (BabuDBException e) {
result.failed(e);
}
return result;
}
/*
* (non-Javadoc)
* @see org.xtreemfs.babudb.lsmdb.DatabaseRO#userDefinedLookup(org.xtreemfs.babudb.UserDefinedLookup, java.lang.Object)
*/
@Override
public DatabaseRequestResult<Object> userDefinedLookup(UserDefinedLookup udl, Object context) {
throw new UnsupportedOperationException();
}
}