| // Copyright 2013 The Flutter 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 FLUTTER_IMPELLER_ARCHIVIST_ARCHIVE_DATABASE_H_ |
| #define FLUTTER_IMPELLER_ARCHIVIST_ARCHIVE_DATABASE_H_ |
| |
| #include <map> |
| #include <memory> |
| #include <string> |
| |
| #include "impeller/archivist/archive_transaction.h" |
| |
| namespace impeller { |
| |
| class ArchiveStatement; |
| class ArchiveClassRegistration; |
| struct ArchiveDef; |
| |
| //------------------------------------------------------------------------------ |
| /// @brief A handle to the underlying database connection for an archive. |
| /// |
| class ArchiveDatabase { |
| public: |
| explicit ArchiveDatabase(const std::string& filename); |
| |
| ~ArchiveDatabase(); |
| |
| bool IsValid() const; |
| |
| int64_t GetLastInsertRowID(); |
| |
| const ArchiveClassRegistration* GetRegistrationForDefinition( |
| const ArchiveDef& definition); |
| |
| ArchiveTransaction CreateTransaction(int64_t& transactionCount); |
| |
| private: |
| struct Handle; |
| std::unique_ptr<Handle> handle_; |
| std::map<std::string, std::unique_ptr<ArchiveClassRegistration>> |
| registrations_; |
| std::unique_ptr<ArchiveStatement> begin_transaction_stmt_; |
| std::unique_ptr<ArchiveStatement> end_transaction_stmt_; |
| std::unique_ptr<ArchiveStatement> rollback_transaction_stmt_; |
| |
| friend class ArchiveClassRegistration; |
| |
| ArchiveStatement CreateStatement(const std::string& statementString) const; |
| |
| ArchiveDatabase(const ArchiveDatabase&) = delete; |
| |
| ArchiveDatabase& operator=(const ArchiveDatabase&) = delete; |
| }; |
| |
| } // namespace impeller |
| |
| #endif // FLUTTER_IMPELLER_ARCHIVIST_ARCHIVE_DATABASE_H_ |