7 #include "third_party/sqlite/sqlite3.h"
20 explicit Handle(
const std::string& filename) {
21 if (::sqlite3_initialize() != SQLITE_OK) {
26 sqlite3* db =
nullptr;
27 auto res = ::sqlite3_open(filename.c_str(), &db);
29 if (res != SQLITE_OK || db ==
nullptr) {
37 if (handle_ ==
nullptr) {
40 ::sqlite3_close(handle_);
43 ::sqlite3*
Get()
const {
return handle_; }
45 bool IsValid()
const {
return handle_ !=
nullptr; }
48 ::sqlite3* handle_ =
nullptr;
50 FML_DISALLOW_COPY_AND_ASSIGN(
Handle);
54 : handle_(
std::make_unique<
Handle>(filename)) {
55 if (!handle_->IsValid()) {
60 begin_transaction_stmt_ = std::unique_ptr<ArchiveStatement>(
63 if (!begin_transaction_stmt_->IsValid()) {
67 end_transaction_stmt_ = std::unique_ptr<ArchiveStatement>(
70 if (!end_transaction_stmt_->IsValid()) {
74 rollback_transaction_stmt_ = std::unique_ptr<ArchiveStatement>(
77 if (!rollback_transaction_stmt_->IsValid()) {
85 return handle_ !=
nullptr;
92 return ::sqlite3_last_insert_rowid(handle_->Get());
97 if (registration ==
nullptr) {
100 return registration->
IsValid() ? registration :
nullptr;
105 auto found = registrations_.find(definition.
table_name);
106 if (found != registrations_.end()) {
116 auto registration = std::unique_ptr<ArchiveClassRegistration>(
119 registrations_.emplace(definition.
table_name, std::move(registration));
129 const std::string& statementString)
const {
130 return ArchiveStatement{handle_ ? handle_->Get() :
nullptr, statementString};
134 int64_t& transactionCount) {
136 *begin_transaction_stmt_,
137 *end_transaction_stmt_,
138 *rollback_transaction_stmt_};