// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "sql/sqlite_result_code_values.h"

#include "third_party/sqlite/sqlite3.h"

namespace sql {

// This block ensures that the numerical values in the header match the
// constants exported by SQLite's header.

static_assert(static_cast<int>(SqliteResultCode::kOk) == SQLITE_OK);
static_assert(static_cast<int>(SqliteResultCode::kError) == SQLITE_ERROR);
static_assert(static_cast<int>(SqliteResultCode::kInternal) == SQLITE_INTERNAL);
static_assert(static_cast<int>(SqliteResultCode::kPermission) == SQLITE_PERM);
static_assert(static_cast<int>(SqliteResultCode::kAbort) == SQLITE_ABORT);
static_assert(static_cast<int>(SqliteResultCode::kBusy) == SQLITE_BUSY);
static_assert(static_cast<int>(SqliteResultCode::kLocked) == SQLITE_LOCKED);
static_assert(static_cast<int>(SqliteResultCode::kNoMemory) == SQLITE_NOMEM);
static_assert(static_cast<int>(SqliteResultCode::kReadOnly) == SQLITE_READONLY);
static_assert(static_cast<int>(SqliteResultCode::kInterrupt) ==
              SQLITE_INTERRUPT);
static_assert(static_cast<int>(SqliteResultCode::kIo) == SQLITE_IOERR);
static_assert(static_cast<int>(SqliteResultCode::kCorrupt) == SQLITE_CORRUPT);
static_assert(static_cast<int>(SqliteResultCode::kNotFound) == SQLITE_NOTFOUND);
static_assert(static_cast<int>(SqliteResultCode::kFullDisk) == SQLITE_FULL);
static_assert(static_cast<int>(SqliteResultCode::kCantOpen) == SQLITE_CANTOPEN);
static_assert(static_cast<int>(SqliteResultCode::kLockingProtocol) ==
              SQLITE_PROTOCOL);
static_assert(static_cast<int>(SqliteResultCode::kEmpty) == SQLITE_EMPTY);
static_assert(static_cast<int>(SqliteResultCode::kSchemaChanged) ==
              SQLITE_SCHEMA);
static_assert(static_cast<int>(SqliteResultCode::kTooBig) == SQLITE_TOOBIG);
static_assert(static_cast<int>(SqliteResultCode::kConstraint) ==
              SQLITE_CONSTRAINT);
static_assert(static_cast<int>(SqliteResultCode::kTypeMismatch) ==
              SQLITE_MISMATCH);
static_assert(static_cast<int>(SqliteResultCode::kApiMisuse) == SQLITE_MISUSE);
static_assert(static_cast<int>(SqliteResultCode::kNoLargeFileSupport) ==
              SQLITE_NOLFS);
static_assert(static_cast<int>(SqliteResultCode::kUnauthorized) == SQLITE_AUTH);
static_assert(static_cast<int>(SqliteResultCode::kFormat) == SQLITE_FORMAT);
static_assert(static_cast<int>(SqliteResultCode::kIndexRange) == SQLITE_RANGE);
static_assert(static_cast<int>(SqliteResultCode::kNotADatabase) ==
              SQLITE_NOTADB);
static_assert(static_cast<int>(SqliteResultCode::kLoggingNotice) ==
              SQLITE_NOTICE);
static_assert(static_cast<int>(SqliteResultCode::kLoggingWarning) ==
              SQLITE_WARNING);
static_assert(static_cast<int>(SqliteResultCode::kRow) == SQLITE_ROW);
static_assert(static_cast<int>(SqliteResultCode::kDone) == SQLITE_DONE);
static_assert(static_cast<int>(SqliteResultCode::kLoadPermanently) ==
              SQLITE_OK_LOAD_PERMANENTLY);
static_assert(static_cast<int>(SqliteResultCode::kMissingCollatingSequence) ==
              SQLITE_ERROR_MISSING_COLLSEQ);
static_assert(static_cast<int>(SqliteResultCode::kBusyRecovery) ==
              SQLITE_BUSY_RECOVERY);
static_assert(static_cast<int>(SqliteResultCode::kLockedSharedCache) ==
              SQLITE_LOCKED_SHAREDCACHE);
static_assert(static_cast<int>(SqliteResultCode::kReadOnlyRecovery) ==
              SQLITE_READONLY_RECOVERY);
static_assert(static_cast<int>(SqliteResultCode::kIoRead) == SQLITE_IOERR_READ);
static_assert(static_cast<int>(SqliteResultCode::kCorruptVirtualTable) ==
              SQLITE_CORRUPT_VTAB);
static_assert(
    static_cast<int>(SqliteResultCode::kCantOpenNoTemporaryDirectory) ==
    SQLITE_CANTOPEN_NOTEMPDIR);
static_assert(static_cast<int>(SqliteResultCode::kConstraintCheck) ==
              SQLITE_CONSTRAINT_CHECK);
static_assert(static_cast<int>(SqliteResultCode::kUnauthorizedUser) ==
              SQLITE_AUTH_USER);
static_assert(static_cast<int>(SqliteResultCode::kLoggingNoticeRecoverWal) ==
              SQLITE_NOTICE_RECOVER_WAL);
static_assert(static_cast<int>(SqliteResultCode::kLoggingWarningAutoIndex) ==
              SQLITE_WARNING_AUTOINDEX);
static_assert(static_cast<int>(SqliteResultCode::kOkSymlink) ==
              SQLITE_OK_SYMLINK);
static_assert(static_cast<int>(SqliteResultCode::kRetryPreparedStatement) ==
              SQLITE_ERROR_RETRY);
static_assert(static_cast<int>(SqliteResultCode::kAbortRollback) ==
              SQLITE_ABORT_ROLLBACK);
static_assert(static_cast<int>(SqliteResultCode::kBusySnapshot) ==
              SQLITE_BUSY_SNAPSHOT);
static_assert(static_cast<int>(SqliteResultCode::kLockedVirtualTable) ==
              SQLITE_LOCKED_VTAB);
static_assert(static_cast<int>(SqliteResultCode::kReadOnlyCantLock) ==
              SQLITE_READONLY_CANTLOCK);
static_assert(static_cast<int>(SqliteResultCode::kIoShortRead) ==
              SQLITE_IOERR_SHORT_READ);
static_assert(static_cast<int>(SqliteResultCode::kCorruptSequence) ==
              SQLITE_CORRUPT_SEQUENCE);
static_assert(static_cast<int>(SqliteResultCode::kCantOpenIsDir) ==
              SQLITE_CANTOPEN_ISDIR);
static_assert(static_cast<int>(SqliteResultCode::kConstraintCommitHook) ==
              SQLITE_CONSTRAINT_COMMITHOOK);
static_assert(
    static_cast<int>(SqliteResultCode::kLoggingNoticeRecoverRollback) ==
    SQLITE_NOTICE_RECOVER_ROLLBACK);
static_assert(static_cast<int>(SqliteResultCode::kErrorSnapshot) ==
              SQLITE_ERROR_SNAPSHOT);
static_assert(static_cast<int>(SqliteResultCode::kBusyTimeout) ==
              SQLITE_BUSY_TIMEOUT);
static_assert(static_cast<int>(SqliteResultCode::kReadOnlyRollback) ==
              SQLITE_READONLY_ROLLBACK);
static_assert(static_cast<int>(SqliteResultCode::kIoWrite) ==
              SQLITE_IOERR_WRITE);
static_assert(static_cast<int>(SqliteResultCode::kCorruptIndex) ==
              SQLITE_CORRUPT_INDEX);
static_assert(static_cast<int>(SqliteResultCode::kCantOpenFullPath) ==
              SQLITE_CANTOPEN_FULLPATH);
static_assert(static_cast<int>(SqliteResultCode::kConstraintForeignKey) ==
              SQLITE_CONSTRAINT_FOREIGNKEY);
static_assert(
    static_cast<int>(SqliteResultCode::kLoggingNoticeResumableBulkUpdate) ==
    SQLITE_NOTICE_RBU);
static_assert(static_cast<int>(SqliteResultCode::kReadOnlyDbMoved) ==
              SQLITE_READONLY_DBMOVED);
static_assert(static_cast<int>(SqliteResultCode::kIoFsync) ==
              SQLITE_IOERR_FSYNC);
static_assert(static_cast<int>(SqliteResultCode::kCantOpenConvertPath) ==
              SQLITE_CANTOPEN_CONVPATH);
static_assert(static_cast<int>(SqliteResultCode::kConstraintFunction) ==
              SQLITE_CONSTRAINT_FUNCTION);
static_assert(static_cast<int>(SqliteResultCode::kReadOnlyCantInit) ==
              SQLITE_READONLY_CANTINIT);
static_assert(static_cast<int>(SqliteResultCode::kIoDirFsync) ==
              SQLITE_IOERR_DIR_FSYNC);
static_assert(static_cast<int>(SqliteResultCode::kCantOpenDirtyWal) ==
              SQLITE_CANTOPEN_DIRTYWAL);
static_assert(static_cast<int>(SqliteResultCode::kConstraintNotNull) ==
              SQLITE_CONSTRAINT_NOTNULL);
static_assert(static_cast<int>(SqliteResultCode::kReadOnlyDirectory) ==
              SQLITE_READONLY_DIRECTORY);
static_assert(static_cast<int>(SqliteResultCode::kIoTruncate) ==
              SQLITE_IOERR_TRUNCATE);
static_assert(static_cast<int>(SqliteResultCode::kCantOpenSymlink) ==
              SQLITE_CANTOPEN_SYMLINK);
static_assert(static_cast<int>(SqliteResultCode::kConstraintPrimaryKey) ==
              SQLITE_CONSTRAINT_PRIMARYKEY);
static_assert(static_cast<int>(SqliteResultCode::kIoFstat) ==
              SQLITE_IOERR_FSTAT);
static_assert(static_cast<int>(SqliteResultCode::kConstraintTrigger) ==
              SQLITE_CONSTRAINT_TRIGGER);
static_assert(static_cast<int>(SqliteResultCode::kIoUnlock) ==
              SQLITE_IOERR_UNLOCK);
static_assert(static_cast<int>(SqliteResultCode::kConstraintUnique) ==
              SQLITE_CONSTRAINT_UNIQUE);
static_assert(static_cast<int>(SqliteResultCode::kIoReadLock) ==
              SQLITE_IOERR_RDLOCK);
static_assert(static_cast<int>(SqliteResultCode::kConstraintVirtualTable) ==
              SQLITE_CONSTRAINT_VTAB);
static_assert(static_cast<int>(SqliteResultCode::kIoDelete) ==
              SQLITE_IOERR_DELETE);
static_assert(static_cast<int>(SqliteResultCode::kConstraintRowId) ==
              SQLITE_CONSTRAINT_ROWID);
static_assert(static_cast<int>(SqliteResultCode::kIoBlocked) ==
              SQLITE_IOERR_BLOCKED);
static_assert(static_cast<int>(SqliteResultCode::kConstraintPinned) ==
              SQLITE_CONSTRAINT_PINNED);
static_assert(static_cast<int>(SqliteResultCode::kIoNoMemory) ==
              SQLITE_IOERR_NOMEM);
static_assert(static_cast<int>(SqliteResultCode::kConstraintDataType) ==
              SQLITE_CONSTRAINT_DATATYPE);
static_assert(static_cast<int>(SqliteResultCode::kIoAccess) ==
              SQLITE_IOERR_ACCESS);
static_assert(static_cast<int>(SqliteResultCode::kIoCheckReservedLock) ==
              SQLITE_IOERR_CHECKRESERVEDLOCK);
static_assert(static_cast<int>(SqliteResultCode::kIoLock) == SQLITE_IOERR_LOCK);
static_assert(static_cast<int>(SqliteResultCode::kIoClose) ==
              SQLITE_IOERR_CLOSE);
static_assert(static_cast<int>(SqliteResultCode::kIoDirClose) ==
              SQLITE_IOERR_DIR_CLOSE);
static_assert(static_cast<int>(SqliteResultCode::kIoSharedMemoryOpen) ==
              SQLITE_IOERR_SHMOPEN);
static_assert(static_cast<int>(SqliteResultCode::kIoSharedMemorySize) ==
              SQLITE_IOERR_SHMSIZE);
static_assert(static_cast<int>(SqliteResultCode::kIoSharedMemoryLock) ==
              SQLITE_IOERR_SHMLOCK);
static_assert(static_cast<int>(SqliteResultCode::kIoSharedMemoryMap) ==
              SQLITE_IOERR_SHMMAP);
static_assert(static_cast<int>(SqliteResultCode::kIoSeek) == SQLITE_IOERR_SEEK);
static_assert(static_cast<int>(SqliteResultCode::kIoDeleteNoEntry) ==
              SQLITE_IOERR_DELETE_NOENT);
static_assert(static_cast<int>(SqliteResultCode::kIoMemoryMapping) ==
              SQLITE_IOERR_MMAP);
static_assert(static_cast<int>(SqliteResultCode::kIoGetTemporaryPath) ==
              SQLITE_IOERR_GETTEMPPATH);
static_assert(static_cast<int>(SqliteResultCode::kIoConvertPath) ==
              SQLITE_IOERR_CONVPATH);
static_assert(static_cast<int>(SqliteResultCode::kIoVfsNode) ==
              SQLITE_IOERR_VNODE);
static_assert(static_cast<int>(SqliteResultCode::kIoUnauthorized) ==
              SQLITE_IOERR_AUTH);
static_assert(static_cast<int>(SqliteResultCode::kIoBeginAtomic) ==
              SQLITE_IOERR_BEGIN_ATOMIC);
static_assert(static_cast<int>(SqliteResultCode::kIoCommitAtomic) ==
              SQLITE_IOERR_COMMIT_ATOMIC);
static_assert(static_cast<int>(SqliteResultCode::kIoRollbackAtomic) ==
              SQLITE_IOERR_ROLLBACK_ATOMIC);
static_assert(static_cast<int>(SqliteResultCode::kIoData) == SQLITE_IOERR_DATA);
static_assert(static_cast<int>(SqliteResultCode::kIoCorruptFileSystem) ==
              SQLITE_IOERR_CORRUPTFS);
static_assert(static_cast<int>(SqliteResultCode::kIoInPage) ==
              SQLITE_IOERR_IN_PAGE);

}  // namespace sql
