/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved.
*
*/
package com.sleepycat.persist;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.LockMode;
import com.sleepycat.util.keyrange.RangeCursor;
/**
* The cursor for a SubIndex treats Dup and NoDup operations specially because
* the SubIndex never has duplicates -- the keys are primary keys. So a
* next/prevDup operation always returns null, and a next/prevNoDup operation
* actually does next/prev.
*
* @author Mark Hayes
*/
class SubIndexCursor<V> extends BasicCursor<V> {
SubIndexCursor(RangeCursor cursor, ValueAdapter<V> adapter) {
super(cursor, adapter, false/*updateAllowed*/);
}
@Override
public EntityCursor<V> dup()
throws DatabaseException {
return new SubIndexCursor<V>(cursor.dup(true), adapter);
}
@Override
public V nextDup(LockMode lockMode) {
checkInitialized();
return null;
}
@Override
public V nextNoDup(LockMode lockMode)
throws DatabaseException {
return returnValue(cursor.getNext(key, pkey, data, lockMode));
}
@Override
public V prevDup(LockMode lockMode) {
checkInitialized();
return null;
}
@Override
public V prevNoDup(LockMode lockMode)
throws DatabaseException {
return returnValue(cursor.getPrev(key, pkey, data, lockMode));
}
}