blob: a10abd08f587a75fd173c93f2690ff601c0fff43 [file] [log] [blame]
/*-
* 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.persist;
/**
* This is package-private to hide it until we implemented unsorted access.
*
* Implemented to select keys to be returned by an unsorted {@code
* ForwardCursor}.
*
* <p>The reason for implementing a selector, rather than filtering the objects
* returned by the {@link ForwardCursor}, is to improve performance when not
* all keys are to be processed. Keys are passed to this interface without
* retrieving record data or locking, so it is less expensive to return false
* from this method than to retrieve the object from the cursor.</p>
*
* see EntityIndex#unsortedKeys
* see EntityIndex#unsortedEntities
*
* @author Mark Hayes
*/
interface KeySelector<K> {
/**
* Returns whether a given key should be returned via the cursor.
*
* <p>This method should not assume that the given key is for a committed
* record or not, nor should it assume that the key will be returned via
* the cursor if this method returns true. The record for this key will
* not be locked until this method returns. If, when the record is locked,
* the record is found to be uncommitted or deleted, the key will not be
* returned via the cursor.</p>
*/
boolean selectKey(K key);
}