1use crate::{open::journal, row, sys};
2use cartel_core::deadline;
3use dope_core::driver::schedule::clock::timer;
4use o3::alloc;
5use std::{mem, str};
6
7#[derive(Debug)]
8pub enum Error {
9 Sqlite {
10 action: sys::Action,
11 code: sys::Code,
12 },
13 QueryReturnedNoRows,
14 ParameterItems {
15 required: usize,
16 available: usize,
17 },
18 ParameterBytes {
19 required: usize,
20 available: usize,
21 },
22 ParameterU64 {
23 value: u64,
24 },
25 ParameterUsize {
26 value: usize,
27 },
28 ScanRows {
29 capacity: usize,
30 },
31 RowBytes {
32 required: usize,
33 available: usize,
34 },
35 RowLayout {
36 required: usize,
37 available: usize,
38 },
39 ColumnCount {
40 expected: usize,
41 actual: usize,
42 },
43 ColumnType {
44 column: i32,
45 expected: row::Class,
46 actual: row::Kind,
47 },
48 ColumnI32 {
49 column: i32,
50 value: i64,
51 },
52 ColumnUtf8 {
53 column: i32,
54 error: str::Utf8Error,
55 },
56 CollectRows {
57 required: usize,
58 available: usize,
59 },
60 CollectRowBytes {
61 required: usize,
62 available: usize,
63 },
64 CollectValueBytes {
65 required: usize,
66 available: usize,
67 },
68 PrepareSqlBytes {
69 actual: usize,
70 },
71 PragmaBytes {
72 start: usize,
73 added: usize,
74 },
75 StatementSqlLimit {
76 requested: i32,
77 available: i32,
78 },
79 StatementBytes {
80 required: usize,
81 available: usize,
82 },
83 StatementMissing {
84 bytes: usize,
85 },
86 StatementTail {
87 offset: usize,
88 },
89 CatalogStatementSql {
90 statement: usize,
91 },
92 WorkLimit {
93 action: sys::Action,
94 code: sys::Code,
95 },
96 WorkExhausted,
98 Busy {
99 action: sys::Action,
100 code: sys::Code,
101 },
102 TransactionBusy {
103 action: sys::Action,
104 code: sys::Code,
105 },
106 TransactionAborted {
107 action: sys::Action,
108 code: sys::Code,
109 },
110 Savepoints {
111 required: usize,
112 available: usize,
113 },
114 Locked {
115 action: sys::Action,
116 code: sys::Code,
117 },
118 RequestTimeout {
119 elapsed: deadline::Elapsed,
120 action: sys::Action,
121 code: sys::Code,
122 },
123 ReentrantQuery,
124 ConnectionPoisoned,
125 Journal {
126 expected: journal::Mode,
127 actual: journal::Mode,
128 },
129 MemoryJournal,
130 Mapped {
131 expected: i64,
132 actual: i64,
133 },
134 TemporaryStore {
135 actual: i64,
136 },
137 MainCache {
138 expected: i64,
139 actual: i64,
140 },
141 TemporaryCache {
142 expected: i64,
143 actual: i64,
144 },
145 LocalAllocatorOccupied,
146 LocalConnectionBorrowed,
147 LocalConnectionClosed,
148 TimerCapacity(timer::Exhausted),
149 Allocation(alloc::Error),
150 NegativeLimit {
151 value: i64,
152 },
153 NegativeOffset {
154 value: i64,
155 },
156 UnexpectedRows {
157 expected: usize,
158 minimum: usize,
159 },
160 ParameterCount {
161 expected: usize,
162 actual: usize,
163 },
164 PathNul(usize),
165 PathBytes {
166 actual: usize,
167 capacity: usize,
168 },
169 StatementNul {
170 offset: usize,
171 },
172 ForeignKeys {
173 actual: i32,
174 },
175 Defensive {
176 actual: i32,
177 },
178 TrustedSchema {
179 actual: i32,
180 },
181 JournalBytes {
182 value: u64,
183 },
184 CheckpointPages {
185 value: u32,
186 },
187 MappedBytes {
188 value: u64,
189 },
190 JournalMode,
192}
193
194impl From<timer::Exhausted> for Error {
195 fn from(error: timer::Exhausted) -> Self {
196 Self::TimerCapacity(error)
197 }
198}
199
200const _: () = {
201 assert!(!mem::needs_drop::<Error>());
202 assert!(mem::size_of::<Error>() <= 3 * mem::size_of::<usize>());
203};