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