Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: sql/connection.cc

Issue 2107493002: Offer user to send feedback from profile error dialog (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wchar_t Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sql/connection.cc
diff --git a/sql/connection.cc b/sql/connection.cc
index ab84266673330e57bb24e2496743bd9f73f3948d..929fa7548f41ab0b0bb5bb9ca124c57f75103886 100644
--- a/sql/connection.cc
+++ b/sql/connection.cc
@@ -1922,6 +1922,38 @@ bool Connection::QuickIntegrityCheck() {
return messages.size() == 1 && messages[0] == "ok";
}
+sql::DatabaseDiagnosticMap Connection::GetDiagnosticMap() {
+ sql::DatabaseDiagnosticMap result;
+ const bool has_valid_header =
+ (ExecuteAndReturnErrorCode("PRAGMA auto_vacuum") == SQLITE_OK);
+ const bool select_sqlite_master_result =
+ (ExecuteAndReturnErrorCode("SELECT COUNT(*) FROM sqlite_master") ==
+ SQLITE_OK);
+
+ // If any of the above failed, that's an indication that the file is really
+ // corrupted. Doing the integrity check or getting the schema will crash on
+ // DCHECKs on debug builds.
+ std::string integrity_check_result("Failed");
+ std::string schema("Failed");
+ if (has_valid_header && select_sqlite_master_result) {
+ std::vector<std::string> integrity_check_output;
+ if (FullIntegrityCheck(&integrity_check_output)) {
+ // we can only get the schema if the integrity check passes.
+ integrity_check_result = "Success";
+ schema = GetSchema();
+ }
+ for (const auto& line : integrity_check_output)
+ integrity_check_result += "\n\t" + line;
+ }
+
+ result["Has valid header"] = has_valid_header ? "Yes" : "No";
+ result["Master table exists"] = select_sqlite_master_result ? "Yes" : "No";
+ result["Integrity check"] = integrity_check_result;
+ result["Schema"] = schema;
+
+ return result;
+}
+
// TODO(shess): Allow specifying maximum results (default 100 lines).
bool Connection::IntegrityCheckHelper(
const char* pragma_sql,

Powered by Google App Engine
This is Rietveld 408576698