Skip to content

Commit 8a461e7

Browse files
committed
Expose error codes
1 parent 1d7747f commit 8a461e7

File tree

1 file changed

+35
-31
lines changed

1 file changed

+35
-31
lines changed

hdr/sqlite_modern_cpp.h

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@
2828

2929
namespace sqlite {
3030

31-
struct sqlite_exception: public std::runtime_error {
32-
sqlite_exception(const char* msg):runtime_error(msg) {}
31+
class sqlite_exception: public std::runtime_error {
32+
public:
33+
sqlite_exception(const char* msg, char code): runtime_error(msg), code(code) {}
34+
char get_code() {return code;}
35+
private:
36+
char code;
3337
};
3438

3539
namespace exceptions {
@@ -70,33 +74,33 @@ namespace sqlite {
7074
class no_rows: public sqlite_exception { using sqlite_exception::sqlite_exception; };
7175

7276
static void throw_sqlite_error(const int& error_code) {
73-
if(error_code == SQLITE_ERROR) throw exceptions::error(sqlite3_errstr(error_code));
74-
else if(error_code == SQLITE_INTERNAL) throw exceptions::internal (sqlite3_errstr(error_code));
75-
else if(error_code == SQLITE_PERM) throw exceptions::perm(sqlite3_errstr(error_code));
76-
else if(error_code == SQLITE_ABORT) throw exceptions::abort(sqlite3_errstr(error_code));
77-
else if(error_code == SQLITE_BUSY) throw exceptions::busy(sqlite3_errstr(error_code));
78-
else if(error_code == SQLITE_LOCKED) throw exceptions::locked(sqlite3_errstr(error_code));
79-
else if(error_code == SQLITE_NOMEM) throw exceptions::nomem(sqlite3_errstr(error_code));
80-
else if(error_code == SQLITE_READONLY) throw exceptions::readonly(sqlite3_errstr(error_code));
81-
else if(error_code == SQLITE_INTERRUPT) throw exceptions::interrupt(sqlite3_errstr(error_code));
82-
else if(error_code == SQLITE_IOERR) throw exceptions::ioerr(sqlite3_errstr(error_code));
83-
else if(error_code == SQLITE_CORRUPT) throw exceptions::corrupt(sqlite3_errstr(error_code));
84-
else if(error_code == SQLITE_NOTFOUND) throw exceptions::notfound(sqlite3_errstr(error_code));
85-
else if(error_code == SQLITE_FULL) throw exceptions::full(sqlite3_errstr(error_code));
86-
else if(error_code == SQLITE_CANTOPEN) throw exceptions::cantopen(sqlite3_errstr(error_code));
87-
else if(error_code == SQLITE_PROTOCOL) throw exceptions::protocol(sqlite3_errstr(error_code));
88-
else if(error_code == SQLITE_EMPTY) throw exceptions::empty(sqlite3_errstr(error_code));
89-
else if(error_code == SQLITE_SCHEMA) throw exceptions::schema(sqlite3_errstr(error_code));
90-
else if(error_code == SQLITE_TOOBIG) throw exceptions::toobig(sqlite3_errstr(error_code));
91-
else if(error_code == SQLITE_CONSTRAINT) throw exceptions::constraint(sqlite3_errstr(error_code));
92-
else if(error_code == SQLITE_MISMATCH) throw exceptions::mismatch(sqlite3_errstr(error_code));
93-
else if(error_code == SQLITE_MISUSE) throw exceptions::misuse(sqlite3_errstr(error_code));
94-
else if(error_code == SQLITE_NOLFS) throw exceptions::nolfs(sqlite3_errstr(error_code));
95-
else if(error_code == SQLITE_AUTH) throw exceptions::auth(sqlite3_errstr(error_code));
96-
else if(error_code == SQLITE_FORMAT) throw exceptions::format(sqlite3_errstr(error_code));
97-
else if(error_code == SQLITE_RANGE) throw exceptions::range(sqlite3_errstr(error_code));
98-
else if(error_code == SQLITE_NOTADB) throw exceptions::notadb(sqlite3_errstr(error_code));
99-
else throw sqlite_exception(sqlite3_errstr(error_code));
77+
if(error_code == SQLITE_ERROR) throw exceptions::error(sqlite3_errstr(error_code), error_code);
78+
else if(error_code == SQLITE_INTERNAL) throw exceptions::internal (sqlite3_errstr(error_code), error_code);
79+
else if(error_code == SQLITE_PERM) throw exceptions::perm(sqlite3_errstr(error_code), error_code);
80+
else if(error_code == SQLITE_ABORT) throw exceptions::abort(sqlite3_errstr(error_code), error_code);
81+
else if(error_code == SQLITE_BUSY) throw exceptions::busy(sqlite3_errstr(error_code), error_code);
82+
else if(error_code == SQLITE_LOCKED) throw exceptions::locked(sqlite3_errstr(error_code), error_code);
83+
else if(error_code == SQLITE_NOMEM) throw exceptions::nomem(sqlite3_errstr(error_code), error_code);
84+
else if(error_code == SQLITE_READONLY) throw exceptions::readonly(sqlite3_errstr(error_code), error_code);
85+
else if(error_code == SQLITE_INTERRUPT) throw exceptions::interrupt(sqlite3_errstr(error_code), error_code);
86+
else if(error_code == SQLITE_IOERR) throw exceptions::ioerr(sqlite3_errstr(error_code), error_code);
87+
else if(error_code == SQLITE_CORRUPT) throw exceptions::corrupt(sqlite3_errstr(error_code), error_code);
88+
else if(error_code == SQLITE_NOTFOUND) throw exceptions::notfound(sqlite3_errstr(error_code), error_code);
89+
else if(error_code == SQLITE_FULL) throw exceptions::full(sqlite3_errstr(error_code), error_code);
90+
else if(error_code == SQLITE_CANTOPEN) throw exceptions::cantopen(sqlite3_errstr(error_code), error_code);
91+
else if(error_code == SQLITE_PROTOCOL) throw exceptions::protocol(sqlite3_errstr(error_code), error_code);
92+
else if(error_code == SQLITE_EMPTY) throw exceptions::empty(sqlite3_errstr(error_code), error_code);
93+
else if(error_code == SQLITE_SCHEMA) throw exceptions::schema(sqlite3_errstr(error_code), error_code);
94+
else if(error_code == SQLITE_TOOBIG) throw exceptions::toobig(sqlite3_errstr(error_code), error_code);
95+
else if(error_code == SQLITE_CONSTRAINT) throw exceptions::constraint(sqlite3_errstr(error_code), error_code);
96+
else if(error_code == SQLITE_MISMATCH) throw exceptions::mismatch(sqlite3_errstr(error_code), error_code);
97+
else if(error_code == SQLITE_MISUSE) throw exceptions::misuse(sqlite3_errstr(error_code), error_code);
98+
else if(error_code == SQLITE_NOLFS) throw exceptions::nolfs(sqlite3_errstr(error_code), error_code);
99+
else if(error_code == SQLITE_AUTH) throw exceptions::auth(sqlite3_errstr(error_code), error_code);
100+
else if(error_code == SQLITE_FORMAT) throw exceptions::format(sqlite3_errstr(error_code), error_code);
101+
else if(error_code == SQLITE_RANGE) throw exceptions::range(sqlite3_errstr(error_code), error_code);
102+
else if(error_code == SQLITE_NOTADB) throw exceptions::notadb(sqlite3_errstr(error_code), error_code);
103+
else throw sqlite_exception(sqlite3_errstr(error_code), error_code);
100104
}
101105
}
102106

@@ -183,11 +187,11 @@ namespace sqlite {
183187
if((hresult = sqlite3_step(_stmt.get())) == SQLITE_ROW) {
184188
call_back();
185189
} else if(hresult == SQLITE_DONE) {
186-
throw exceptions::no_rows("no rows to extract: exactly 1 row expected");
190+
throw exceptions::no_rows("no rows to extract: exactly 1 row expected", -1);
187191
}
188192

189193
if((hresult = sqlite3_step(_stmt.get())) == SQLITE_ROW) {
190-
throw exceptions::more_rows("not all rows extracted");
194+
throw exceptions::more_rows("not all rows extracted", -1);
191195
}
192196

193197
if(hresult != SQLITE_DONE) {

0 commit comments

Comments
 (0)