// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). #pragma once #ifndef ROCKSDB_LITE #include #include #include "rocksdb/comparator.h" #include "rocksdb/db.h" namespace rocksdb { class Transaction; // Database with Transaction support. // // See optimistic_transaction.h and examples/transaction_example.cc // Options to use when starting an Optimistic Transaction struct OptimisticTransactionOptions { // Setting set_snapshot=true is the same as calling SetSnapshot(). bool set_snapshot = false; // Should be set if the DB has a non-default comparator. // See comment in WriteBatchWithIndex constructor. const Comparator* cmp = BytewiseComparator(); }; class OptimisticTransactionDB { public: // Open an OptimisticTransactionDB similar to DB::Open(). static Status Open(const Options& options, const std::string& dbname, OptimisticTransactionDB** dbptr); static Status Open(const DBOptions& db_options, const std::string& dbname, const std::vector& column_families, std::vector* handles, OptimisticTransactionDB** dbptr); virtual ~OptimisticTransactionDB() {} // Starts a new Transaction. // // Caller is responsible for deleting the returned transaction when no // longer needed. // // If old_txn is not null, BeginTransaction will reuse this Transaction // handle instead of allocating a new one. This is an optimization to avoid // extra allocations when repeatedly creating transactions. virtual Transaction* BeginTransaction( const WriteOptions& write_options, const OptimisticTransactionOptions& txn_options = OptimisticTransactionOptions(), Transaction* old_txn = nullptr) = 0; // Return the underlying Database that was opened virtual DB* GetBaseDB() = 0; protected: // To Create an OptimisticTransactionDB, call Open() explicit OptimisticTransactionDB(DB* db) {} OptimisticTransactionDB() {} private: // No copying allowed OptimisticTransactionDB(const OptimisticTransactionDB&); void operator=(const OptimisticTransactionDB&); }; } // namespace rocksdb #endif // ROCKSDB_LITE