com.sleepycat.collections.MyRangeCursor Maven / Gradle / Ivy
The newest version!
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.collections;
import com.sleepycat.compat.DbCompat;
import com.sleepycat.je.Cursor;
import com.sleepycat.je.CursorConfig;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.util.keyrange.KeyRange;
import com.sleepycat.util.keyrange.RangeCursor;
class MyRangeCursor extends RangeCursor {
private DataView view;
private boolean isRecnoOrQueue;
private boolean writeCursor;
MyRangeCursor(KeyRange range,
CursorConfig config,
DataView view,
boolean writeAllowed)
throws DatabaseException {
super(range, view.dupsRange, view.dupsOrdered,
openCursor(view, config, writeAllowed));
this.view = view;
isRecnoOrQueue = view.recNumAllowed && !view.btreeRecNumDb;
writeCursor = isWriteCursor(config, writeAllowed);
}
/**
* Returns true if a write cursor is requested by the user via the cursor
* config, or if this is a writable cursor and the user has not specified a
* cursor config. For CDB, a special cursor must be created for writing.
* See CurrentTransaction.openCursor.
*/
private static boolean isWriteCursor(CursorConfig config,
boolean writeAllowed) {
return DbCompat.getWriteCursor(config) ||
(config == CursorConfig.DEFAULT && writeAllowed);
}
private static Cursor openCursor(DataView view,
CursorConfig config,
boolean writeAllowed)
throws DatabaseException {
return view.currentTxn.openCursor
(view.db, config, isWriteCursor(config, writeAllowed),
view.useTransaction());
}
protected Cursor dupCursor(Cursor cursor, boolean samePosition)
throws DatabaseException {
return view.currentTxn.dupCursor(cursor, writeCursor, samePosition);
}
protected void closeCursor(Cursor cursor)
throws DatabaseException {
view.currentTxn.closeCursor(cursor);
}
protected boolean checkRecordNumber() {
return isRecnoOrQueue;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy