com.sleepycat.persist.KeysIndex 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.persist;
import java.util.Map;
import java.util.SortedMap;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.collections.StoredSortedMap;
import com.sleepycat.compat.DbCompat;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
/* */
import com.sleepycat.je.DbInternal;
import com.sleepycat.je.Get;
/* */
import com.sleepycat.je.LockMode;
/* */
import com.sleepycat.je.OperationResult;
/* */
import com.sleepycat.je.OperationStatus;
/* */
import com.sleepycat.je.ReadOptions;
/* */
import com.sleepycat.je.Transaction;
/**
* The EntityIndex returned by SecondaryIndex.keysIndex(). This index maps
* secondary key to primary key. In Berkeley DB internal terms, this is a
* secondary database that is opened without associating it with a primary.
*
* @author Mark Hayes
*/
class KeysIndex extends BasicIndex {
private EntryBinding pkeyBinding;
private SortedMap map;
KeysIndex(Database db,
Class keyClass,
EntryBinding keyBinding,
Class pkeyClass,
EntryBinding pkeyBinding)
throws DatabaseException {
super(db, keyClass, keyBinding,
new DataValueAdapter(pkeyClass, pkeyBinding));
this.pkeyBinding = pkeyBinding;
}
/*
* Of the EntityIndex methods only get()/map()/sortedMap() are implemented
* here. All other methods are implemented by BasicIndex.
*/
public PK get(SK key)
throws DatabaseException {
return get(null, key, null);
}
public PK get(Transaction txn, SK key, LockMode lockMode)
throws DatabaseException {
/* */
if (DbCompat.IS_JE) {
EntityResult result = get(
txn, key, Get.SEARCH, DbInternal.getReadOptions(lockMode));
return result != null ? result.value() : null;
}
/* */
DatabaseEntry keyEntry = new DatabaseEntry();
DatabaseEntry pkeyEntry = new DatabaseEntry();
keyBinding.objectToEntry(key, keyEntry);
OperationStatus status = db.get(txn, keyEntry, pkeyEntry, lockMode);
if (status == OperationStatus.SUCCESS) {
return (PK) pkeyBinding.entryToObject(pkeyEntry);
} else {
return null;
}
}
/* */
public EntityResult get(Transaction txn,
SK key,
Get getType,
ReadOptions options)
throws DatabaseException {
checkGetType(getType);
DatabaseEntry keyEntry = new DatabaseEntry();
DatabaseEntry pkeyEntry = new DatabaseEntry();
keyBinding.objectToEntry(key, keyEntry);
OperationResult result = db.get(
txn, keyEntry, pkeyEntry, getType, options);
if (result != null) {
return new EntityResult<>(
(PK) pkeyBinding.entryToObject(pkeyEntry),
result);
} else {
return null;
}
}
/* */
public Map map() {
return sortedMap();
}
public synchronized SortedMap sortedMap() {
if (map == null) {
map = new StoredSortedMap(db, keyBinding, pkeyBinding, false);
}
return map;
}
boolean isUpdateAllowed() {
return false;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy