From f02cb7bf4978ec0fa1eea4ed0b21460b7637d741 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sun, 18 Sep 2022 00:00:07 -0400 Subject: Add batching for get_signature(). --- signature_db.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'signature_db.cpp') diff --git a/signature_db.cpp b/signature_db.cpp index 429581d..393b756 100644 --- a/signature_db.cpp +++ b/signature_db.cpp @@ -14,6 +14,7 @@ const int SIGDB_VERSION = 3; enum batch_status { none = 0, + getsig, putsub, findsub, setpar, @@ -169,11 +170,20 @@ size_t signature_db::put_signature(const fs::path &path, const signature &sig,si return static_cast(sqlite3_last_insert_rowid(p->db)); } +void signature_db::batch_get_signature_begin() +{ + if (!p->db) [[ unlikely ]] return; + sqlite3_prepare_v2(p->db, "select path, signature from images where id = ?;", -1, &p->bst[batch_status::getsig], 0); +} + std::pair signature_db::get_signature(size_t id) { if (!p->db) [[ unlikely ]] return std::make_pair(fs::path(), signature()); - sqlite3_stmt *st; - sqlite3_prepare_v2(p->db, "select path, signature from images where id = ?;", -1, &st, 0); + sqlite3_stmt *st = nullptr; + if (p->bst[batch_status::getsig]) + st = p->bst[batch_status::getsig]; + else + sqlite3_prepare_v2(p->db, "select path, signature from images where id = ?;", -1, &st, 0); sqlite3_bind_int(st, 1, id); int rr = sqlite3_step(st); if (rr == SQLITE_ROW) @@ -184,15 +194,25 @@ std::pair signature_db::get_signature(size_t id) fs::path path((char*)sqlite3_column_text(st, 0)); #endif std::string sigs((char*)sqlite3_column_text(st, 1)); - sqlite3_finalize(st); + if (p->bst[batch_status::getsig]) + sqlite3_reset(st); + else + sqlite3_finalize(st); return std::make_pair(path, signature::from_string(std::move(sigs))); } else { - sqlite3_finalize(st); + if (p->bst[batch_status::getsig]) + sqlite3_reset(st); + else + sqlite3_finalize(st); return std::make_pair(fs::path(), signature()); } } +void signature_db::batch_get_signature_end() +{ + p->batch_end(batch_status::getsig); +} void signature_db::batch_put_subslice_begin() { -- cgit v1.2.3