X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=localdb.cc;h=4ab828368ae247fa9c4b46d81a573d841042ea90;hb=0a76f30b578a2ace26090a4b9bbd74b04124a20e;hp=63a9f8349531e0fb13531b8ba7931dc4300c112d;hpb=ed5a047c1b8a8f5c43b0192e8e774b91497c9706;p=cumulus.git diff --git a/localdb.cc b/localdb.cc index 63a9f83..4ab8283 100644 --- a/localdb.cc +++ b/localdb.cc @@ -81,3 +81,39 @@ void LocalDb::StoreObject(const ObjectReference& ref, sqlite3_finalize(stmt); } + +ObjectReference LocalDb::FindObject(const string &checksum, int64_t size) +{ + int rc; + sqlite3_stmt *stmt; + static const char s[] = + "select segment, object from block_index " + "where checksum = ? and size = ?"; + const char *tail; + + ObjectReference ref; + + rc = sqlite3_prepare_v2(db, s, strlen(s), &stmt, &tail); + if (rc != SQLITE_OK) { + return ref; + } + + sqlite3_bind_text(stmt, 1, checksum.c_str(), checksum.size(), + SQLITE_TRANSIENT); + sqlite3_bind_int64(stmt, 2, size); + + rc = sqlite3_step(stmt); + if (rc == SQLITE_DONE) { + } else if (rc == SQLITE_ROW) { + printf("Can re-use block: %s/%s\n", + sqlite3_column_text(stmt, 0), sqlite3_column_text(stmt, 1)); + ref = ObjectReference((const char *)sqlite3_column_text(stmt, 0), + (const char *)sqlite3_column_text(stmt, 1)); + } else { + fprintf(stderr, "Could not execute SELECT statement!\n"); + } + + sqlite3_finalize(stmt); + + return ref; +}