podman

Форк
0
150 строк · 6.0 Кб
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
)
151

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.