blob: e8376fc3701904dd258ca5f01ba424e02d0a663f [file] [log] [blame]
// 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.
#pragma once
#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