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

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: Yet more compile errors 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..a566843f8489211bd60b34ab54d3943e62248120 100644
--- a/sql/connection.cc
+++ b/sql/connection.cc
@@ -1922,6 +1922,40 @@ 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);
+ result["Has valid header"] = has_valid_header ? "Yes" : "No";
+ const bool select_sqlite_master_result =
+ (ExecuteAndReturnErrorCode("SELECT COUNT(*) FROM sqlite_master") ==
+ SQLITE_OK);
+ result["\"SELECT COUNT(*) FROM sqlite_master\" succeeds"] =
+ select_sqlite_master_result ? "Yes" : "No";
Scott Hess - ex-Googler 2016/07/10 05:16:52 Gross. You're running the SELECT to determine som
afakhry 2016/07/11 16:47:46 That's because I didn't know what that statement d
Scott Hess - ex-Googler 2016/07/13 01:18:46 Do you expect the master table to not exist? Earl
afakhry 2016/07/13 19:57:58 Well, I'm not the sql expert here, so I don't know
+
+ // 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) {
michaeln 2016/07/12 20:05:32 instead of dropping errors on the floor with a Nul
afakhry 2016/07/13 19:57:58 Done. I'm actually using the same code in Connecti
+ std::vector<std::string> integrity_check_output;
+ if (FullIntegrityCheck(&integrity_check_output)) {
+ integrity_check_result = "";
+ for (const auto& line : integrity_check_output)
michaeln 2016/07/09 03:00:38 The output is uninteresting in the success case, i
afakhry 2016/07/11 16:47:45 Done.
+ integrity_check_result += line + "\n";
+
+ // we can only get the schema if the integrity check passes.
+ schema = GetSchema();
+ }
+ }
+
+ result["Integrity check"] = integrity_check_result;
+ result["Schema"] = schema;
michaeln 2016/07/09 03:00:38 nit: for readability, might be nice to set all fou
Scott Hess - ex-Googler 2016/07/10 05:16:52 Note that |schema| and the integrity check results
afakhry 2016/07/11 16:47:45 Done.
afakhry 2016/07/11 16:47:46 For the integrity check, multilines are handled ab
michaeln 2016/07/12 20:05:32 i think i'd vote for a basic string too, i don't t
Scott Hess - ex-Googler 2016/07/13 01:18:46 IMHO having callers depend on keys would be really
Scott Hess - ex-Googler 2016/07/13 01:18:46 Multilines are handled above by injecting newlines
afakhry 2016/07/13 19:57:58 Done. Using a string now.
afakhry 2016/07/13 19:57:58 Now I'm using whatever CollectCorruptionInfo() or
afakhry 2016/07/13 19:57:58 Done.
afakhry 2016/07/13 19:57:58 Agreed, formatting is not really the primary conce
+
+ return result;
+}
+
// TODO(shess): Allow specifying maximum results (default 100 lines).
bool Connection::IntegrityCheckHelper(
const char* pragma_sql,
« sql/connection.h ('K') | « sql/connection.h ('k') | sql/db_diagnostic_map.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698