projects
/
cumulus.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Improve reporting of database errors.
[cumulus.git]
/
localdb.cc
diff --git
a/localdb.cc
b/localdb.cc
index
5c1f7e5
..
8a5e1f1
100644
(file)
--- a/
localdb.cc
+++ b/
localdb.cc
@@
-30,7
+30,7
@@
sqlite3_stmt *LocalDb::Prepare(const char *sql)
int rc;
const char *tail;
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);
}
if (rc != SQLITE_OK) {
throw IOException(string("Error preparing statement: ") + sql);
}
@@
-38,6
+38,12
@@
sqlite3_stmt *LocalDb::Prepare(const char *sql)
return stmt;
}
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)
{
void LocalDb::Open(const char *path, const char *snapshot_name,
const char *snapshot_scheme)
{
@@
-57,6
+63,8
@@
void LocalDb::Open(const char *path, const char *snapshot_name,
throw IOException("Error starting transaction");
}
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 "
/* Insert this snapshot into the database, and determine the integer key
* which will be used to identify it. */
sqlite3_stmt *stmt = Prepare("insert into "
@@
-72,6
+80,7
@@
void LocalDb::Open(const char *path, const char *snapshot_name,
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
+ ReportError(rc);
sqlite3_close(db);
throw IOException("Database execution error!");
}
sqlite3_close(db);
throw IOException("Database execution error!");
}
@@
-79,6
+88,7
@@
void LocalDb::Open(const char *path, const char *snapshot_name,
snapshotid = sqlite3_last_insert_rowid(db);
sqlite3_finalize(stmt);
if (snapshotid == 0) {
snapshotid = sqlite3_last_insert_rowid(db);
sqlite3_finalize(stmt);
if (snapshotid == 0) {
+ ReportError(rc);
sqlite3_close(db);
throw IOException("Find snapshot id");
}
sqlite3_close(db);
throw IOException("Find snapshot id");
}
@@
-89,7
+99,8
@@
void LocalDb::Close()
int rc;
rc = sqlite3_exec(db, "commit", NULL, NULL, NULL);
if (rc != SQLITE_OK) {
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);
}
}
sqlite3_close(db);
}
@@
-179,6
+190,7
@@
void LocalDb::StoreObject(const ObjectReference& ref,
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Could not execute INSERT statement!\n");
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Could not execute INSERT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
}
sqlite3_finalize(stmt);
@@
-203,6
+215,7
@@
ObjectReference LocalDb::FindObject(const string &checksum, int64_t size)
(const char *)sqlite3_column_text(stmt, 1));
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
(const char *)sqlite3_column_text(stmt, 1));
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
}
sqlite3_finalize(stmt);
@@
-230,6
+243,7
@@
bool LocalDb::IsOldObject(const string &checksum, int64_t size, double *age)
*age = sqlite3_column_double(stmt, 2);
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
*age = sqlite3_column_double(stmt, 2);
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
}
sqlite3_finalize(stmt);
@@
-258,6
+272,7
@@
bool LocalDb::IsAvailable(const ObjectReference &ref)
found = true;
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
found = true;
} else {
fprintf(stderr, "Could not execute SELECT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
}
sqlite3_finalize(stmt);
@@
-281,6
+296,7
@@
void LocalDb::UseObject(const ObjectReference& ref)
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Could not execute INSERT statement!\n");
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Could not execute INSERT statement!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
}
sqlite3_finalize(stmt);
@@
-304,6
+320,7
@@
void LocalDb::SetSegmentChecksum(const std::string &segment,
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Could not update segment checksum in database!\n");
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
fprintf(stderr, "Could not update segment checksum in database!\n");
+ ReportError(rc);
}
sqlite3_finalize(stmt);
}
sqlite3_finalize(stmt);