Index: sql/connection.cc |
diff --git a/sql/connection.cc b/sql/connection.cc |
index 097edd7a1ea2f57350869b2c4eaedb12db6b6bc1..14071e220c547c3f9c9567ec038db0c4b1e518f5 100644 |
--- a/sql/connection.cc |
+++ b/sql/connection.cc |
@@ -641,7 +641,7 @@ bool Connection::Execute(const char* sql) { |
int error = ExecuteAndReturnErrorCode(sql); |
if (error != SQLITE_OK) |
- error = OnSqliteError(error, NULL); |
+ error = OnSqliteError(error, NULL, sql); |
// This needs to be a FATAL log because the error case of arriving here is |
// that there's a malformed SQL statement. This can arise in development if |
@@ -702,7 +702,7 @@ scoped_refptr<Connection::StatementRef> Connection::GetUniqueStatement( |
DLOG(FATAL) << "SQL compile error " << GetErrorMessage(); |
// It could also be database corruption. |
- OnSqliteError(rc, NULL); |
+ OnSqliteError(rc, NULL, sql); |
return new StatementRef(NULL, NULL, false); |
} |
return new StatementRef(this, stmt, true); |
@@ -864,7 +864,7 @@ bool Connection::OpenInternal(const std::string& file_name, |
// purposes. |
UMA_HISTOGRAM_SPARSE_SLOWLY("Sqlite.OpenFailure", err); |
- OnSqliteError(err, NULL); |
+ OnSqliteError(err, NULL, "-- sqlite3_open()"); |
bool was_poisoned = poisoned_; |
Close(); |
@@ -1022,15 +1022,21 @@ void Connection::AddTaggedHistogram(const std::string& name, |
histogram->Add(sample); |
} |
-int Connection::OnSqliteError(int err, sql::Statement *stmt) { |
+int Connection::OnSqliteError(int err, sql::Statement *stmt, const char* sql) { |
UMA_HISTOGRAM_SPARSE_SLOWLY("Sqlite.Error", err); |
AddTaggedHistogram("Sqlite.Error", err); |
// Always log the error. |
- LOG(ERROR) << "sqlite error " << err |
+ LOG(ERROR) << histogram_tag_ << " sqlite error " << err |
<< ", errno " << GetLastErrno() |
<< ": " << GetErrorMessage(); |
+ // Also log the relevant sql statement, if possible. |
+ if (!sql && stmt) |
+ sql = stmt->GetSQLStatement(); |
+ if (sql) |
+ LOG(ERROR) << "sql: " << sql; |
Greg Spencer (Chromium)
2013/09/25 20:01:18
nits: You might want to also output "sqlite error"
Scott Hess - ex-Googler
2013/09/25 20:22:36
I'm moving it up to the same line, just to be safe
|
+ |
if (!error_callback_.is_null()) { |
// Fire from a copy of the callback in case of reentry into |
// re/set_error_callback(). |