Chromium Code Reviews| Index: sql/connection.cc |
| diff --git a/sql/connection.cc b/sql/connection.cc |
| index cc7e69dba741f0fdae3e23713c0a2104a6d6ad21..bfe8bb7447f23bf24d9d4266ee73f3670c0d53db 100644 |
| --- a/sql/connection.cc |
| +++ b/sql/connection.cc |
| @@ -725,7 +725,8 @@ scoped_refptr<Connection::StatementRef> Connection::GetUniqueStatement( |
| int rc = sqlite3_prepare_v2(db_, sql, -1, &stmt, NULL); |
| if (rc != SQLITE_OK) { |
| // This is evidence of a syntax error in the incoming SQL. |
|
maniscalco
2015/04/08 22:40:27
I'm thinking about this comment and the one in Get
Scott Hess - ex-Googler
2015/04/08 22:49:20
Maybe, it depends. Corruption can cause almost an
maniscalco
2015/04/09 15:11:08
That makes sense to me.
|
| - DLOG(FATAL) << "SQL compile error " << GetErrorMessage(); |
| + DLOG_IF(FATAL, !ShouldIgnoreSqliteError(rc)) |
|
maniscalco
2015/04/09 20:40:52
I just realized that ShouldIgnoreSqliteError is no
Scott Hess - ex-Googler
2015/04/09 20:46:30
At this site, OnSqliteError() should call ShouldIg
|
| + << "SQL compile error " << GetErrorMessage(); |
| // It could also be database corruption. |
| OnSqliteError(rc, NULL, sql); |
| @@ -744,7 +745,8 @@ scoped_refptr<Connection::StatementRef> Connection::GetUntrackedStatement( |
| int rc = sqlite3_prepare_v2(db_, sql, -1, &stmt, NULL); |
| if (rc != SQLITE_OK) { |
| // This is evidence of a syntax error in the incoming SQL. |
| - DLOG(FATAL) << "SQL compile error " << GetErrorMessage(); |
| + DLOG_IF(FATAL, !ShouldIgnoreSqliteError(rc)) |
| + << "SQL compile error " << GetErrorMessage(); |
| return new StatementRef(NULL, NULL, false); |
| } |
| return new StatementRef(NULL, stmt, true); |
| @@ -798,8 +800,15 @@ bool Connection::DoesIndexExist(const char* index_name) const { |
| bool Connection::DoesTableOrIndexExist( |
| const char* name, const char* type) const { |
| - const char* kSql = "SELECT name FROM sqlite_master WHERE type=? AND name=?"; |
| + const char* kSql = |
| + "SELECT name FROM sqlite_master WHERE type=? AND name=? COLLATE NOCASE"; |
| Statement statement(GetUntrackedStatement(kSql)); |
| + |
| + // This can happen if the database is corrupt and the error is being ignored |
| + // for testing purposes. |
| + if (!statement.is_valid()) |
| + return false; |
| + |
| statement.BindString(0, type); |
| statement.BindString(1, name); |
| @@ -813,8 +822,14 @@ bool Connection::DoesColumnExist(const char* table_name, |
| sql.append(")"); |
| Statement statement(GetUntrackedStatement(sql.c_str())); |
| + |
| + // This can happen if the database is corrupt and the error is being ignored |
| + // for testing purposes. |
| + if (!statement.is_valid()) |
| + return false; |
| + |
| while (statement.Step()) { |
| - if (!statement.ColumnString(1).compare(column_name)) |
| + if (!base::strcasecmp(statement.ColumnString(1).c_str(), column_name)) |
| return true; |
| } |
| return false; |