int rc;
const char *tail;
- rc = sqlite3_prepare(db, sql, strlen(sql), &stmt, &tail);
+ rc = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, &tail);
if (rc != SQLITE_OK) {
throw IOException(string("Error preparing statement: ") + sql);
}
return stmt;
}
+void LocalDb::ReportError(int rc)
+{
+ fprintf(stderr, "Result code: %d\n", rc);
+ fprintf(stderr, "Error message: %s\n", sqlite3_errmsg(db));
+}
+
void LocalDb::Open(const char *path, const char *snapshot_name,
const char *snapshot_scheme)
{
throw IOException("Error starting transaction");
}
+ sqlite3_extended_result_codes(db, 1);
+
/* Insert this snapshot into the database, and determine the integer key
* which will be used to identify it. */
sqlite3_stmt *stmt = Prepare("insert into "
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
+ ReportError(rc);
sqlite3_close(db);
throw IOException("Database execution error!");
}
snapshotid = sqlite3_last_insert_rowid(db);
sqlite3_finalize(stmt);
if (snapshotid == 0) {
+ ReportError(rc);
sqlite3_close(db);
throw IOException("Find snapshot id");
}
int rc;
rc = sqlite3_exec(db, "commit", NULL, NULL, NULL);
if (rc != SQLITE_OK) {
- fprintf(stderr, "Can't commit database!\n");
+ fprintf(stderr, "DATABASE ERROR: Can't commit database!\n");
+ ReportError(rc);
}
sqlite3_close(db);
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Could not execute INSERT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
(const char *)sqlite3_column_text(stmt, 1));
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
*age = sqlite3_column_double(stmt, 2);
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
found = true;
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Could not execute INSERT statement!\n");
+ ReportError(rc);
+ }
+
+ sqlite3_finalize(stmt);
+}
+
+void LocalDb::SetSegmentChecksum(const std::string &segment,
+ const std::string &path,
+ const std::string &checksum)
+{
+ int rc;
+ sqlite3_stmt *stmt;
+
+ stmt = Prepare("update segments set path = ?, checksum = ? "
+ "where segmentid = ?");
+ sqlite3_bind_text(stmt, 1, path.c_str(), path.size(),
+ SQLITE_TRANSIENT);
+ sqlite3_bind_text(stmt, 2, checksum.c_str(), checksum.size(),
+ SQLITE_TRANSIENT);
+ sqlite3_bind_int64(stmt, 3, SegmentToId(segment));
+
+ rc = sqlite3_step(stmt);
+ if (rc != SQLITE_DONE) {
+ fprintf(stderr, "Could not update segment checksum in database!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);