# # # patch "ChangeLog" # from [9c33c434eabee6cc18eeba5e9dd3a617798a64f9] # to [c1047b2546b3b6ee040ae9da778de21e2211edb8] # # patch "database.cc" # from [1424c6ec5a4f4a2a7b4b50b2b281f8d1defd6e7c] # to [1a02f5ffde18b3350f69282aa05ac52e90e87f90] # # patch "database.hh" # from [0bdf8b9a13428fa4e342c3f6cb1504eb5968e0d8] # to [41d2dc5966c177a9f31f51bfb28cedabb1c07136] # # patch "database_check.cc" # from [e0b4947bd0c1533a18b84412a3e560dd63847f47] # to [b34a4fac2408818f8ad4d40df302e110536cde26] # ============================================================ --- ChangeLog 9c33c434eabee6cc18eeba5e9dd3a617798a64f9 +++ ChangeLog c1047b2546b3b6ee040ae9da778de21e2211edb8 @@ -1,3 +1,10 @@ +2006-05-06 Nathaniel Smith + + Patch contributed by 'zecke'. + * database.cc (check_integrity): + * database_check.cc (check_db_integrity_check): Add a call to + PRAGMA integrity_check to 'db check'. + 2006-05-05 Richard Levitte * po/sv.po: Retranslate a few changed strings. ============================================================ --- database.cc 1424c6ec5a4f4a2a7b4b50b2b281f8d1defd6e7c +++ database.cc 1a02f5ffde18b3350f69282aa05ac52e90e87f90 @@ -2583,6 +2583,17 @@ % blob(branch())); } +bool +database::check_integrity() +{ + results res; + fetch(res, one_col, any_rows, query("PRAGMA integrity_check")); + I(res.size() == 1); + I(res[0].size() == 1); + + return res[0][0] == "ok"; +} + // vars void ============================================================ --- database.hh 0bdf8b9a13428fa4e342c3f6cb1504eb5968e0d8 +++ database.hh 41d2dc5966c177a9f31f51bfb28cedabb1c07136 @@ -231,6 +231,9 @@ void get_revision_ids(std::set & ids); void get_roster_ids(std::set< hexenc > & ids) ; + + bool check_integrity(); + void set_app(app_state * app); // get plain version if it exists, or reconstruct version ============================================================ --- database_check.cc e0b4947bd0c1533a18b84412a3e560dd63847f47 +++ database_check.cc b34a4fac2408818f8ad4d40df302e110536cde26 @@ -114,7 +114,18 @@ cert_refs(0), parseable(false), normalized(false) {} }; +/* + * check integrity of the SQLite database + */ static void +check_db_integrity_check(app_state & app ) +{ + L(F("asking sqlite to check db integrity")); + E(app.db.check_integrity(), + F("file structure is corrupted; cannot check further")); +} + +static void check_files(app_state & app, std::map & checked_files) { std::set files; @@ -807,6 +818,7 @@ size_t unchecked_sigs = 0; size_t bad_sigs = 0; + check_db_integrity_check(app); check_files(app, checked_files); check_rosters_manifest(app, checked_rosters, checked_revisions, found_manifests, checked_files);