@@ -56,32 +56,10 @@ namespace sqlite {
5656 // SQLITE_OK, SQLITE_NOTICE, SQLITE_WARNING, SQLITE_ROW, SQLITE_DONE
5757 //
5858 // Note these names are exact matches to the names of the SQLITE error codes.
59- class error : public sqlite_exception { using sqlite_exception::sqlite_exception; };
60- class internal : public sqlite_exception { using sqlite_exception::sqlite_exception; };
61- class perm : public sqlite_exception { using sqlite_exception::sqlite_exception; };
62- class abort : public sqlite_exception { using sqlite_exception::sqlite_exception; };
63- class busy : public sqlite_exception { using sqlite_exception::sqlite_exception; };
64- class locked : public sqlite_exception { using sqlite_exception::sqlite_exception; };
65- class nomem : public sqlite_exception { using sqlite_exception::sqlite_exception; };
66- class readonly : public sqlite_exception { using sqlite_exception::sqlite_exception; };
67- class interrupt : public sqlite_exception { using sqlite_exception::sqlite_exception; };
68- class ioerr : public sqlite_exception { using sqlite_exception::sqlite_exception; };
69- class corrupt : public sqlite_exception { using sqlite_exception::sqlite_exception; };
70- class notfound : public sqlite_exception { using sqlite_exception::sqlite_exception; };
71- class full : public sqlite_exception { using sqlite_exception::sqlite_exception; };
72- class cantopen : public sqlite_exception { using sqlite_exception::sqlite_exception; };
73- class protocol : public sqlite_exception { using sqlite_exception::sqlite_exception; };
74- class empty : public sqlite_exception { using sqlite_exception::sqlite_exception; };
75- class schema : public sqlite_exception { using sqlite_exception::sqlite_exception; };
76- class toobig : public sqlite_exception { using sqlite_exception::sqlite_exception; };
77- class constraint : public sqlite_exception { using sqlite_exception::sqlite_exception; };
78- class mismatch : public sqlite_exception { using sqlite_exception::sqlite_exception; };
79- class misuse : public sqlite_exception { using sqlite_exception::sqlite_exception; };
80- class nolfs : public sqlite_exception { using sqlite_exception::sqlite_exception; };
81- class auth : public sqlite_exception { using sqlite_exception::sqlite_exception; };
82- class format : public sqlite_exception { using sqlite_exception::sqlite_exception; };
83- class range : public sqlite_exception { using sqlite_exception::sqlite_exception; };
84- class notadb : public sqlite_exception { using sqlite_exception::sqlite_exception; };
59+ #define SQLITE_MODERN_CPP_ERROR_CODE (NAME,name,derived ) \
60+ class name : public sqlite_exception { using sqlite_exception::sqlite_exception; };
61+ #include " sqlite_modern_cpp/lists/error_codes.h"
62+ #undef SQLITE_MODERN_CPP_ERROR_CODE
8563
8664 // Some additional errors are here for the C++ interface
8765 class more_rows : public sqlite_exception { using sqlite_exception::sqlite_exception; };
@@ -90,33 +68,13 @@ namespace sqlite {
9068 class more_statements : public sqlite_exception { using sqlite_exception::sqlite_exception; }; // Prepared statements can only contain one statement
9169
9270 static void throw_sqlite_error (const int & error_code, const std::string &sql = " " ) {
93- if (error_code == SQLITE_ERROR) throw exceptions::error (error_code, sql);
94- else if (error_code == SQLITE_INTERNAL) throw exceptions::internal (error_code, sql);
95- else if (error_code == SQLITE_PERM) throw exceptions::perm (error_code, sql);
96- else if (error_code == SQLITE_ABORT) throw exceptions::abort (error_code, sql);
97- else if (error_code == SQLITE_BUSY) throw exceptions::busy (error_code, sql);
98- else if (error_code == SQLITE_LOCKED) throw exceptions::locked (error_code, sql);
99- else if (error_code == SQLITE_NOMEM) throw exceptions::nomem (error_code, sql);
100- else if (error_code == SQLITE_READONLY) throw exceptions::readonly (error_code, sql);
101- else if (error_code == SQLITE_INTERRUPT) throw exceptions::interrupt (error_code, sql);
102- else if (error_code == SQLITE_IOERR) throw exceptions::ioerr (error_code, sql);
103- else if (error_code == SQLITE_CORRUPT) throw exceptions::corrupt (error_code, sql);
104- else if (error_code == SQLITE_NOTFOUND) throw exceptions::notfound (error_code, sql);
105- else if (error_code == SQLITE_FULL) throw exceptions::full (error_code, sql);
106- else if (error_code == SQLITE_CANTOPEN) throw exceptions::cantopen (error_code, sql);
107- else if (error_code == SQLITE_PROTOCOL) throw exceptions::protocol (error_code, sql);
108- else if (error_code == SQLITE_EMPTY) throw exceptions::empty (error_code, sql);
109- else if (error_code == SQLITE_SCHEMA) throw exceptions::schema (error_code, sql);
110- else if (error_code == SQLITE_TOOBIG) throw exceptions::toobig (error_code, sql);
111- else if (error_code == SQLITE_CONSTRAINT) throw exceptions::constraint (error_code, sql);
112- else if (error_code == SQLITE_MISMATCH) throw exceptions::mismatch (error_code, sql);
113- else if (error_code == SQLITE_MISUSE) throw exceptions::misuse (error_code, sql);
114- else if (error_code == SQLITE_NOLFS) throw exceptions::nolfs (error_code, sql);
115- else if (error_code == SQLITE_AUTH) throw exceptions::auth (error_code, sql);
116- else if (error_code == SQLITE_FORMAT) throw exceptions::format (error_code, sql);
117- else if (error_code == SQLITE_RANGE) throw exceptions::range (error_code, sql);
118- else if (error_code == SQLITE_NOTADB) throw exceptions::notadb (error_code, sql);
119- else throw sqlite_exception (error_code, sql);
71+ switch (error_code) {
72+ #define SQLITE_MODERN_CPP_ERROR_CODE (NAME,name,derived ) \
73+ case SQLITE_ ## NAME: throw exceptions::name (error_code, sql);
74+ #include " sqlite_modern_cpp/lists/error_codes.h"
75+ #undef SQLITE_MODERN_CPP_ERROR_CODE
76+ default : throw sqlite_exception (error_code, sql);
77+ }
12078 }
12179 }
12280}
0 commit comments