OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "sql/error_delegate_util.h" |
| 6 |
| 7 #include "third_party/sqlite/sqlite3.h" |
| 8 |
| 9 namespace sql { |
| 10 |
| 11 bool IsErrorCatastrophic(int error) { |
| 12 switch (error) { |
| 13 case SQLITE_DONE: |
| 14 case SQLITE_OK: |
| 15 // Theoretically, the wrapped delegate might have resolved the error, and |
| 16 // we would end up here. |
| 17 return false; |
| 18 |
| 19 case SQLITE_CORRUPT: |
| 20 case SQLITE_NOTADB: |
| 21 // Highly unlikely we would ever recover from these. |
| 22 return true; |
| 23 |
| 24 case SQLITE_CANTOPEN: |
| 25 // TODO(erikwright): Figure out what this means. |
| 26 return false; |
| 27 |
| 28 case SQLITE_IOERR: |
| 29 // This could be broken blocks, in which case deleting the DB would be a |
| 30 // good idea. But it might also be transient. |
| 31 // TODO(erikwright): Figure out if we can distinguish between the two, |
| 32 // or determine through metrics analysis to what extent these failures are |
| 33 // transient. |
| 34 return false; |
| 35 |
| 36 case SQLITE_BUSY: |
| 37 // Presumably transient. |
| 38 return false; |
| 39 |
| 40 case SQLITE_TOOBIG: |
| 41 case SQLITE_FULL: |
| 42 case SQLITE_NOMEM: |
| 43 // Not a problem with the database. |
| 44 return false; |
| 45 |
| 46 case SQLITE_READONLY: |
| 47 // Presumably either transient or we don't have the privileges to |
| 48 // move/delete the file anyway. |
| 49 return false; |
| 50 |
| 51 case SQLITE_CONSTRAINT: |
| 52 case SQLITE_ERROR: |
| 53 // These probgably indicate a programming error or a migration failure |
| 54 // that we prefer not to mask. |
| 55 return false; |
| 56 |
| 57 case SQLITE_LOCKED: |
| 58 case SQLITE_INTERNAL: |
| 59 case SQLITE_PERM: |
| 60 case SQLITE_ABORT: |
| 61 case SQLITE_INTERRUPT: |
| 62 case SQLITE_NOTFOUND: |
| 63 case SQLITE_PROTOCOL: |
| 64 case SQLITE_EMPTY: |
| 65 case SQLITE_SCHEMA: |
| 66 case SQLITE_MISMATCH: |
| 67 case SQLITE_MISUSE: |
| 68 case SQLITE_NOLFS: |
| 69 case SQLITE_AUTH: |
| 70 case SQLITE_FORMAT: |
| 71 case SQLITE_RANGE: |
| 72 case SQLITE_ROW: |
| 73 // None of these appear in error reports, so for now let's not try to |
| 74 // guess at how to handle them. |
| 75 return false; |
| 76 } |
| 77 return false; |
| 78 } |
| 79 |
| 80 } // namespace sql |
OLD | NEW |