/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved.
*
*/
package com.sleepycat.persist.raw;
import java.io.Closeable;
import com.sleepycat.compat.DbCompat;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.Environment;
import com.sleepycat.persist.PrimaryIndex;
import com.sleepycat.persist.SecondaryIndex;
import com.sleepycat.persist.StoreConfig;
import com.sleepycat.persist.StoreExistsException;
import com.sleepycat.persist.StoreNotFoundException;
import com.sleepycat.persist.evolve.IncompatibleClassException;
import com.sleepycat.persist.evolve.Mutations;
import com.sleepycat.persist.impl.Store;
import com.sleepycat.persist.model.EntityModel;
/**
* Provides access to the raw data in a store for use by general purpose tools.
* A RawStore provides access to stored entities without using
* entity classes or key classes. Keys are represented as simple type objects
* or, for composite keys, as {@link RawObject} instances, and entities are
* represented as {@link RawObject} instances.
*
*
{@code RawStore} objects are thread-safe. Multiple threads may safely
* call the methods of a shared {@code RawStore} object.
*
*
When using a {@code RawStore}, the current persistent class definitions
* are not used. Instead, the previously stored metadata and class definitions
* are used. This has several implications:
*
*
An {@code EntityModel} may not be specified using {@link
* StoreConfig#setModel}. In other words, the configured model must be
* null (the default).
*
When storing entities, their format will not automatically be evolved
* to the current class definition, even if the current class definition has
* changed.
*
*
* @author Mark Hayes
*/
public class RawStore
{
private Store store;
/**
* Opens an entity store for raw data access.
*
* @param env an open Berkeley DB environment.
*
* @param storeName the name of the entity store within the given
* environment.
*
* @param config the store configuration, or null to use default
* configuration properties.
*
* @throws IllegalArgumentException if the Environment is
* read-only and the config ReadOnly property is false.
*/
public RawStore(Environment env, String storeName, StoreConfig config)
throws StoreNotFoundException, DatabaseException {
try {
store = new Store(env, storeName, config, true /*rawAccess*/);
} catch (StoreExistsException e) {
/* Should never happen, ExclusiveCreate not used. */
throw DbCompat.unexpectedException(e);
} catch (IncompatibleClassException e) {
/* Should never happen, evolution is not performed. */
throw DbCompat.unexpectedException(e);
}
}
/**
* Opens the primary index for a given entity class.
*
* @throws DatabaseException the base class for all BDB exceptions.
*/
public PrimaryIndex