|  | // Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>. | 
|  | // | 
|  | // Use of this source code is governed by an MIT-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package sqlite3 | 
|  |  | 
|  | import "C" | 
|  |  | 
|  | // ErrNo inherit errno. | 
|  | type ErrNo int | 
|  |  | 
|  | // ErrNoMask is mask code. | 
|  | const ErrNoMask C.int = 0xff | 
|  |  | 
|  | // ErrNoExtended is extended errno. | 
|  | type ErrNoExtended int | 
|  |  | 
|  | // Error implement sqlite error code. | 
|  | type Error struct { | 
|  | Code         ErrNo         /* The error code returned by SQLite */ | 
|  | ExtendedCode ErrNoExtended /* The extended error code returned by SQLite */ | 
|  | err          string        /* The error string returned by sqlite3_errmsg(), | 
|  | this usually contains more specific details. */ | 
|  | } | 
|  |  | 
|  | // result codes from http://www.sqlite.org/c3ref/c_abort.html | 
|  | var ( | 
|  | ErrError      = ErrNo(1)  /* SQL error or missing database */ | 
|  | ErrInternal   = ErrNo(2)  /* Internal logic error in SQLite */ | 
|  | ErrPerm       = ErrNo(3)  /* Access permission denied */ | 
|  | ErrAbort      = ErrNo(4)  /* Callback routine requested an abort */ | 
|  | ErrBusy       = ErrNo(5)  /* The database file is locked */ | 
|  | ErrLocked     = ErrNo(6)  /* A table in the database is locked */ | 
|  | ErrNomem      = ErrNo(7)  /* A malloc() failed */ | 
|  | ErrReadonly   = ErrNo(8)  /* Attempt to write a readonly database */ | 
|  | ErrInterrupt  = ErrNo(9)  /* Operation terminated by sqlite3_interrupt() */ | 
|  | ErrIoErr      = ErrNo(10) /* Some kind of disk I/O error occurred */ | 
|  | ErrCorrupt    = ErrNo(11) /* The database disk image is malformed */ | 
|  | ErrNotFound   = ErrNo(12) /* Unknown opcode in sqlite3_file_control() */ | 
|  | ErrFull       = ErrNo(13) /* Insertion failed because database is full */ | 
|  | ErrCantOpen   = ErrNo(14) /* Unable to open the database file */ | 
|  | ErrProtocol   = ErrNo(15) /* Database lock protocol error */ | 
|  | ErrEmpty      = ErrNo(16) /* Database is empty */ | 
|  | ErrSchema     = ErrNo(17) /* The database schema changed */ | 
|  | ErrTooBig     = ErrNo(18) /* String or BLOB exceeds size limit */ | 
|  | ErrConstraint = ErrNo(19) /* Abort due to constraint violation */ | 
|  | ErrMismatch   = ErrNo(20) /* Data type mismatch */ | 
|  | ErrMisuse     = ErrNo(21) /* Library used incorrectly */ | 
|  | ErrNoLFS      = ErrNo(22) /* Uses OS features not supported on host */ | 
|  | ErrAuth       = ErrNo(23) /* Authorization denied */ | 
|  | ErrFormat     = ErrNo(24) /* Auxiliary database format error */ | 
|  | ErrRange      = ErrNo(25) /* 2nd parameter to sqlite3_bind out of range */ | 
|  | ErrNotADB     = ErrNo(26) /* File opened that is not a database file */ | 
|  | ErrNotice     = ErrNo(27) /* Notifications from sqlite3_log() */ | 
|  | ErrWarning    = ErrNo(28) /* Warnings from sqlite3_log() */ | 
|  | ) | 
|  |  | 
|  | // Error return error message from errno. | 
|  | func (err ErrNo) Error() string { | 
|  | return Error{Code: err}.Error() | 
|  | } | 
|  |  | 
|  | // Extend return extended errno. | 
|  | func (err ErrNo) Extend(by int) ErrNoExtended { | 
|  | return ErrNoExtended(int(err) | (by << 8)) | 
|  | } | 
|  |  | 
|  | // Error return error message that is extended code. | 
|  | func (err ErrNoExtended) Error() string { | 
|  | return Error{Code: ErrNo(C.int(err) & ErrNoMask), ExtendedCode: err}.Error() | 
|  | } | 
|  |  | 
|  | // Error return error message. | 
|  | func (err Error) Error() string { | 
|  | if err.err != "" { | 
|  | return err.err | 
|  | } | 
|  | return errorString(err) | 
|  | } | 
|  |  | 
|  | // result codes from http://www.sqlite.org/c3ref/c_abort_rollback.html | 
|  | var ( | 
|  | ErrIoErrRead              = ErrIoErr.Extend(1) | 
|  | ErrIoErrShortRead         = ErrIoErr.Extend(2) | 
|  | ErrIoErrWrite             = ErrIoErr.Extend(3) | 
|  | ErrIoErrFsync             = ErrIoErr.Extend(4) | 
|  | ErrIoErrDirFsync          = ErrIoErr.Extend(5) | 
|  | ErrIoErrTruncate          = ErrIoErr.Extend(6) | 
|  | ErrIoErrFstat             = ErrIoErr.Extend(7) | 
|  | ErrIoErrUnlock            = ErrIoErr.Extend(8) | 
|  | ErrIoErrRDlock            = ErrIoErr.Extend(9) | 
|  | ErrIoErrDelete            = ErrIoErr.Extend(10) | 
|  | ErrIoErrBlocked           = ErrIoErr.Extend(11) | 
|  | ErrIoErrNoMem             = ErrIoErr.Extend(12) | 
|  | ErrIoErrAccess            = ErrIoErr.Extend(13) | 
|  | ErrIoErrCheckReservedLock = ErrIoErr.Extend(14) | 
|  | ErrIoErrLock              = ErrIoErr.Extend(15) | 
|  | ErrIoErrClose             = ErrIoErr.Extend(16) | 
|  | ErrIoErrDirClose          = ErrIoErr.Extend(17) | 
|  | ErrIoErrSHMOpen           = ErrIoErr.Extend(18) | 
|  | ErrIoErrSHMSize           = ErrIoErr.Extend(19) | 
|  | ErrIoErrSHMLock           = ErrIoErr.Extend(20) | 
|  | ErrIoErrSHMMap            = ErrIoErr.Extend(21) | 
|  | ErrIoErrSeek              = ErrIoErr.Extend(22) | 
|  | ErrIoErrDeleteNoent       = ErrIoErr.Extend(23) | 
|  | ErrIoErrMMap              = ErrIoErr.Extend(24) | 
|  | ErrIoErrGetTempPath       = ErrIoErr.Extend(25) | 
|  | ErrIoErrConvPath          = ErrIoErr.Extend(26) | 
|  | ErrLockedSharedCache      = ErrLocked.Extend(1) | 
|  | ErrBusyRecovery           = ErrBusy.Extend(1) | 
|  | ErrBusySnapshot           = ErrBusy.Extend(2) | 
|  | ErrCantOpenNoTempDir      = ErrCantOpen.Extend(1) | 
|  | ErrCantOpenIsDir          = ErrCantOpen.Extend(2) | 
|  | ErrCantOpenFullPath       = ErrCantOpen.Extend(3) | 
|  | ErrCantOpenConvPath       = ErrCantOpen.Extend(4) | 
|  | ErrCorruptVTab            = ErrCorrupt.Extend(1) | 
|  | ErrReadonlyRecovery       = ErrReadonly.Extend(1) | 
|  | ErrReadonlyCantLock       = ErrReadonly.Extend(2) | 
|  | ErrReadonlyRollback       = ErrReadonly.Extend(3) | 
|  | ErrReadonlyDbMoved        = ErrReadonly.Extend(4) | 
|  | ErrAbortRollback          = ErrAbort.Extend(2) | 
|  | ErrConstraintCheck        = ErrConstraint.Extend(1) | 
|  | ErrConstraintCommitHook   = ErrConstraint.Extend(2) | 
|  | ErrConstraintForeignKey   = ErrConstraint.Extend(3) | 
|  | ErrConstraintFunction     = ErrConstraint.Extend(4) | 
|  | ErrConstraintNotNull      = ErrConstraint.Extend(5) | 
|  | ErrConstraintPrimaryKey   = ErrConstraint.Extend(6) | 
|  | ErrConstraintTrigger      = ErrConstraint.Extend(7) | 
|  | ErrConstraintUnique       = ErrConstraint.Extend(8) | 
|  | ErrConstraintVTab         = ErrConstraint.Extend(9) | 
|  | ErrConstraintRowID        = ErrConstraint.Extend(10) | 
|  | ErrNoticeRecoverWAL       = ErrNotice.Extend(1) | 
|  | ErrNoticeRecoverRollback  = ErrNotice.Extend(2) | 
|  | ErrWarningAutoIndex       = ErrWarning.Extend(1) | 
|  | ) |