153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)// found in the LICENSE file. 453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "sql/error_delegate_util.h" 65267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "third_party/sqlite/sqlite3.h" 8a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 9a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochnamespace sql { 10a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 1153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool IsErrorCatastrophic(int error) { 1253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) switch (error) { 1353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case SQLITE_DONE: 14a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case SQLITE_OK: 15a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // Theoretically, the wrapped delegate might have resolved the error, and 1653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // we would end up here. 1753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return false; 1853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case SQLITE_CORRUPT: 2053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case SQLITE_NOTADB: 2153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // Highly unlikely we would ever recover from these. 2253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return true; 2353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case SQLITE_CANTOPEN: 2553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // TODO(erikwright): Figure out what this means. 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return false; 275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 28bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) case SQLITE_IOERR: 29bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // This could be broken blocks, in which case deleting the DB would be a 30bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // good idea. But it might also be transient. 31bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // TODO(erikwright): Figure out if we can distinguish between the two, 32bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // or determine through metrics analysis to what extent these failures are 33bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // transient. 34bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return false; 35bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 36bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) case SQLITE_BUSY: 37bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // Presumably transient. 38bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return false; 39bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 40bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) case SQLITE_TOOBIG: 41bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) case SQLITE_FULL: 42bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) case SQLITE_NOMEM: 43a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // Not a problem with the database. 44bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return false; 45bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 46a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch case SQLITE_READONLY: 47bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // Presumably either transient or we don't have the privileges to 48bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // move/delete the file anyway. 49bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return false; 50bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 51bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) case SQLITE_CONSTRAINT: 52bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) case SQLITE_ERROR: 53bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // These probgably indicate a programming error or a migration failure 54bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // that we prefer not to mask. 55bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return false; 5651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 57197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_LOCKED: 58197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_INTERNAL: 59197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_PERM: 60197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_ABORT: 61197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_INTERRUPT: 62197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_NOTFOUND: 63197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_PROTOCOL: 64197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_EMPTY: 65197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_SCHEMA: 66197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_MISMATCH: 67197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_MISUSE: 68197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_NOLFS: 69197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_AUTH: 70197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_FORMAT: 71197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_RANGE: 72197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case SQLITE_ROW: 73197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // None of these appear in error reports, so for now let's not try to 74197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // guess at how to handle them. 75197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 76197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 77197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 7881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)} 79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace sql 81a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch