gemini-search

A simple search engine for Geminispace
git clone git://git.laack.co/gemini-search.git
Log | Files | Refs | README

error.go (6117B)


      1 // Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>.
      2 //
      3 // Use of this source code is governed by an MIT-style
      4 // license that can be found in the LICENSE file.
      5 
      6 package sqlite3
      7 
      8 /*
      9 #ifndef USE_LIBSQLITE3
     10 #include "sqlite3-binding.h"
     11 #else
     12 #include <sqlite3.h>
     13 #endif
     14 */
     15 import "C"
     16 import "syscall"
     17 
     18 // ErrNo inherit errno.
     19 type ErrNo int
     20 
     21 // ErrNoMask is mask code.
     22 const ErrNoMask C.int = 0xff
     23 
     24 // ErrNoExtended is extended errno.
     25 type ErrNoExtended int
     26 
     27 // Error implement sqlite error code.
     28 type Error struct {
     29 	Code         ErrNo         /* The error code returned by SQLite */
     30 	ExtendedCode ErrNoExtended /* The extended error code returned by SQLite */
     31 	SystemErrno  syscall.Errno /* The system errno returned by the OS through SQLite, if applicable */
     32 	err          string        /* The error string returned by sqlite3_errmsg(),
     33 	this usually contains more specific details. */
     34 }
     35 
     36 // result codes from http://www.sqlite.org/c3ref/c_abort.html
     37 var (
     38 	ErrError      = ErrNo(1)  /* SQL error or missing database */
     39 	ErrInternal   = ErrNo(2)  /* Internal logic error in SQLite */
     40 	ErrPerm       = ErrNo(3)  /* Access permission denied */
     41 	ErrAbort      = ErrNo(4)  /* Callback routine requested an abort */
     42 	ErrBusy       = ErrNo(5)  /* The database file is locked */
     43 	ErrLocked     = ErrNo(6)  /* A table in the database is locked */
     44 	ErrNomem      = ErrNo(7)  /* A malloc() failed */
     45 	ErrReadonly   = ErrNo(8)  /* Attempt to write a readonly database */
     46 	ErrInterrupt  = ErrNo(9)  /* Operation terminated by sqlite3_interrupt() */
     47 	ErrIoErr      = ErrNo(10) /* Some kind of disk I/O error occurred */
     48 	ErrCorrupt    = ErrNo(11) /* The database disk image is malformed */
     49 	ErrNotFound   = ErrNo(12) /* Unknown opcode in sqlite3_file_control() */
     50 	ErrFull       = ErrNo(13) /* Insertion failed because database is full */
     51 	ErrCantOpen   = ErrNo(14) /* Unable to open the database file */
     52 	ErrProtocol   = ErrNo(15) /* Database lock protocol error */
     53 	ErrEmpty      = ErrNo(16) /* Database is empty */
     54 	ErrSchema     = ErrNo(17) /* The database schema changed */
     55 	ErrTooBig     = ErrNo(18) /* String or BLOB exceeds size limit */
     56 	ErrConstraint = ErrNo(19) /* Abort due to constraint violation */
     57 	ErrMismatch   = ErrNo(20) /* Data type mismatch */
     58 	ErrMisuse     = ErrNo(21) /* Library used incorrectly */
     59 	ErrNoLFS      = ErrNo(22) /* Uses OS features not supported on host */
     60 	ErrAuth       = ErrNo(23) /* Authorization denied */
     61 	ErrFormat     = ErrNo(24) /* Auxiliary database format error */
     62 	ErrRange      = ErrNo(25) /* 2nd parameter to sqlite3_bind out of range */
     63 	ErrNotADB     = ErrNo(26) /* File opened that is not a database file */
     64 	ErrNotice     = ErrNo(27) /* Notifications from sqlite3_log() */
     65 	ErrWarning    = ErrNo(28) /* Warnings from sqlite3_log() */
     66 )
     67 
     68 // Error return error message from errno.
     69 func (err ErrNo) Error() string {
     70 	return Error{Code: err}.Error()
     71 }
     72 
     73 // Extend return extended errno.
     74 func (err ErrNo) Extend(by int) ErrNoExtended {
     75 	return ErrNoExtended(int(err) | (by << 8))
     76 }
     77 
     78 // Error return error message that is extended code.
     79 func (err ErrNoExtended) Error() string {
     80 	return Error{Code: ErrNo(C.int(err) & ErrNoMask), ExtendedCode: err}.Error()
     81 }
     82 
     83 func (err Error) Error() string {
     84 	var str string
     85 	if err.err != "" {
     86 		str = err.err
     87 	} else {
     88 		str = C.GoString(C.sqlite3_errstr(C.int(err.Code)))
     89 	}
     90 	if err.SystemErrno != 0 {
     91 		str += ": " + err.SystemErrno.Error()
     92 	}
     93 	return str
     94 }
     95 
     96 // result codes from http://www.sqlite.org/c3ref/c_abort_rollback.html
     97 var (
     98 	ErrIoErrRead              = ErrIoErr.Extend(1)
     99 	ErrIoErrShortRead         = ErrIoErr.Extend(2)
    100 	ErrIoErrWrite             = ErrIoErr.Extend(3)
    101 	ErrIoErrFsync             = ErrIoErr.Extend(4)
    102 	ErrIoErrDirFsync          = ErrIoErr.Extend(5)
    103 	ErrIoErrTruncate          = ErrIoErr.Extend(6)
    104 	ErrIoErrFstat             = ErrIoErr.Extend(7)
    105 	ErrIoErrUnlock            = ErrIoErr.Extend(8)
    106 	ErrIoErrRDlock            = ErrIoErr.Extend(9)
    107 	ErrIoErrDelete            = ErrIoErr.Extend(10)
    108 	ErrIoErrBlocked           = ErrIoErr.Extend(11)
    109 	ErrIoErrNoMem             = ErrIoErr.Extend(12)
    110 	ErrIoErrAccess            = ErrIoErr.Extend(13)
    111 	ErrIoErrCheckReservedLock = ErrIoErr.Extend(14)
    112 	ErrIoErrLock              = ErrIoErr.Extend(15)
    113 	ErrIoErrClose             = ErrIoErr.Extend(16)
    114 	ErrIoErrDirClose          = ErrIoErr.Extend(17)
    115 	ErrIoErrSHMOpen           = ErrIoErr.Extend(18)
    116 	ErrIoErrSHMSize           = ErrIoErr.Extend(19)
    117 	ErrIoErrSHMLock           = ErrIoErr.Extend(20)
    118 	ErrIoErrSHMMap            = ErrIoErr.Extend(21)
    119 	ErrIoErrSeek              = ErrIoErr.Extend(22)
    120 	ErrIoErrDeleteNoent       = ErrIoErr.Extend(23)
    121 	ErrIoErrMMap              = ErrIoErr.Extend(24)
    122 	ErrIoErrGetTempPath       = ErrIoErr.Extend(25)
    123 	ErrIoErrConvPath          = ErrIoErr.Extend(26)
    124 	ErrLockedSharedCache      = ErrLocked.Extend(1)
    125 	ErrBusyRecovery           = ErrBusy.Extend(1)
    126 	ErrBusySnapshot           = ErrBusy.Extend(2)
    127 	ErrCantOpenNoTempDir      = ErrCantOpen.Extend(1)
    128 	ErrCantOpenIsDir          = ErrCantOpen.Extend(2)
    129 	ErrCantOpenFullPath       = ErrCantOpen.Extend(3)
    130 	ErrCantOpenConvPath       = ErrCantOpen.Extend(4)
    131 	ErrCorruptVTab            = ErrCorrupt.Extend(1)
    132 	ErrReadonlyRecovery       = ErrReadonly.Extend(1)
    133 	ErrReadonlyCantLock       = ErrReadonly.Extend(2)
    134 	ErrReadonlyRollback       = ErrReadonly.Extend(3)
    135 	ErrReadonlyDbMoved        = ErrReadonly.Extend(4)
    136 	ErrAbortRollback          = ErrAbort.Extend(2)
    137 	ErrConstraintCheck        = ErrConstraint.Extend(1)
    138 	ErrConstraintCommitHook   = ErrConstraint.Extend(2)
    139 	ErrConstraintForeignKey   = ErrConstraint.Extend(3)
    140 	ErrConstraintFunction     = ErrConstraint.Extend(4)
    141 	ErrConstraintNotNull      = ErrConstraint.Extend(5)
    142 	ErrConstraintPrimaryKey   = ErrConstraint.Extend(6)
    143 	ErrConstraintTrigger      = ErrConstraint.Extend(7)
    144 	ErrConstraintUnique       = ErrConstraint.Extend(8)
    145 	ErrConstraintVTab         = ErrConstraint.Extend(9)
    146 	ErrConstraintRowID        = ErrConstraint.Extend(10)
    147 	ErrNoticeRecoverWAL       = ErrNotice.Extend(1)
    148 	ErrNoticeRecoverRollback  = ErrNotice.Extend(2)
    149 	ErrWarningAutoIndex       = ErrWarning.Extend(1)
    150 )