| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PERIDOT_BIN_LEDGER_STORAGE_PUBLIC_DB_H_ |
| #define PERIDOT_BIN_LEDGER_STORAGE_PUBLIC_DB_H_ |
| |
| #include "peridot/bin/ledger/coroutine/coroutine.h" |
| #include "peridot/bin/ledger/storage/public/iterator.h" |
| #include "peridot/bin/ledger/storage/public/object.h" |
| #include "peridot/bin/ledger/storage/public/types.h" |
| |
| namespace storage { |
| |
| class Db { |
| public: |
| class Batch { |
| public: |
| // A |Batch| can be used to execute a number of updates in |Db| atomically. |
| Batch() {} |
| virtual ~Batch() {} |
| |
| // Inserts the given key-value pair in the database. |
| FXL_WARN_UNUSED_RESULT virtual Status Put( |
| coroutine::CoroutineHandler* handler, convert::ExtendedStringView key, |
| fxl::StringView value) = 0; |
| |
| // Deletes the entry in the database with the given |key|. |
| FXL_WARN_UNUSED_RESULT virtual Status Delete( |
| coroutine::CoroutineHandler* handler, |
| convert::ExtendedStringView key) = 0; |
| |
| // Deletes all entries whose keys match the given |prefix|. |
| FXL_WARN_UNUSED_RESULT virtual Status DeleteByPrefix( |
| coroutine::CoroutineHandler* handler, |
| convert::ExtendedStringView prefix) = 0; |
| |
| // Executes this batch. No further operations in this batch are supported |
| // after a successful execution. |
| FXL_WARN_UNUSED_RESULT virtual Status Execute( |
| coroutine::CoroutineHandler* handler) = 0; |
| |
| private: |
| FXL_DISALLOW_COPY_AND_ASSIGN(Batch); |
| }; |
| |
| Db() {} |
| virtual ~Db() {} |
| |
| // Starts a new batch. The batch will be written when Execute is called on the |
| // returned object. The Db object must outlive the batch object. |
| // The handler (and the corresponding coroutine) only need to remain active |
| // until the result is returned. If the coroutine is interrupted, |
| // |INTERRUPTED| status is returned. |
| FXL_WARN_UNUSED_RESULT virtual Status StartBatch( |
| coroutine::CoroutineHandler* handler, std::unique_ptr<Batch>* batch) = 0; |
| |
| // Retrieves the value corresponding to |key|. |
| FXL_WARN_UNUSED_RESULT virtual Status Get( |
| coroutine::CoroutineHandler* handler, convert::ExtendedStringView key, |
| std::string* value) = 0; |
| |
| // Checks whether |key| is stored in this database. |
| FXL_WARN_UNUSED_RESULT virtual Status HasKey( |
| coroutine::CoroutineHandler* handler, convert::ExtendedStringView key, |
| bool* has_key) = 0; |
| |
| // Retrieves the value for the given |key| as an Object with the provided |
| // |object_identifier|. |
| FXL_WARN_UNUSED_RESULT virtual Status GetObject( |
| coroutine::CoroutineHandler* handler, convert::ExtendedStringView key, |
| ObjectIdentifier object_identifier, |
| std::unique_ptr<const Object>* object) = 0; |
| |
| // Retrieves all keys matching the given |prefix|. |key_suffixes| will be |
| // updated to contain the suffixes of corresponding keys. |
| FXL_WARN_UNUSED_RESULT virtual Status GetByPrefix( |
| coroutine::CoroutineHandler* handler, convert::ExtendedStringView prefix, |
| std::vector<std::string>* key_suffixes) = 0; |
| |
| // Retrieves all entries matching the given |prefix|. The keys of the |
| // returned entries will be updated not to contain the |prefix|. |
| FXL_WARN_UNUSED_RESULT virtual Status GetEntriesByPrefix( |
| coroutine::CoroutineHandler* handler, convert::ExtendedStringView prefix, |
| std::vector<std::pair<std::string, std::string>>* entries) = 0; |
| |
| // Retrieves an entry iterator over the entries whose keys start with |
| // |prefix|. |
| FXL_WARN_UNUSED_RESULT virtual Status GetIteratorAtPrefix( |
| coroutine::CoroutineHandler* handler, convert::ExtendedStringView prefix, |
| std::unique_ptr<Iterator<const std::pair<convert::ExtendedStringView, |
| convert::ExtendedStringView>>>* |
| iterator) = 0; |
| }; |
| |
| } // namespace storage |
| |
| #endif // PERIDOT_BIN_LEDGER_STORAGE_PUBLIC_DB_H_ |