@@ -30,7 +30,8 @@ namespace sqlite {
3030
3131 class sqlite_exception : public std ::runtime_error {
3232 public:
33- sqlite_exception (const char * msg, char code): runtime_error(msg), code(code) {}
33+ sqlite_exception (const char * msg, char code = -1 ): runtime_error(msg), code(code) {}
34+ sqlite_exception (char code): runtime_error(sqlite3_errstr(code)), code(code) {}
3435 char get_code () {return code;}
3536 private:
3637 char code;
@@ -74,33 +75,33 @@ namespace sqlite {
7475 class no_rows : public sqlite_exception { using sqlite_exception::sqlite_exception; };
7576
7677 static void throw_sqlite_error (const int & 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);
78+ if (error_code == SQLITE_ERROR) throw exceptions::error (error_code);
79+ else if (error_code == SQLITE_INTERNAL) throw exceptions::internal (error_code);
80+ else if (error_code == SQLITE_PERM) throw exceptions::perm (error_code);
81+ else if (error_code == SQLITE_ABORT) throw exceptions::abort (error_code);
82+ else if (error_code == SQLITE_BUSY) throw exceptions::busy (error_code);
83+ else if (error_code == SQLITE_LOCKED) throw exceptions::locked (error_code);
84+ else if (error_code == SQLITE_NOMEM) throw exceptions::nomem (error_code);
85+ else if (error_code == SQLITE_READONLY) throw exceptions::readonly (error_code);
86+ else if (error_code == SQLITE_INTERRUPT) throw exceptions::interrupt (error_code);
87+ else if (error_code == SQLITE_IOERR) throw exceptions::ioerr (error_code);
88+ else if (error_code == SQLITE_CORRUPT) throw exceptions::corrupt (error_code);
89+ else if (error_code == SQLITE_NOTFOUND) throw exceptions::notfound (error_code);
90+ else if (error_code == SQLITE_FULL) throw exceptions::full (error_code);
91+ else if (error_code == SQLITE_CANTOPEN) throw exceptions::cantopen (error_code);
92+ else if (error_code == SQLITE_PROTOCOL) throw exceptions::protocol (error_code);
93+ else if (error_code == SQLITE_EMPTY) throw exceptions::empty (error_code);
94+ else if (error_code == SQLITE_SCHEMA) throw exceptions::schema (error_code);
95+ else if (error_code == SQLITE_TOOBIG) throw exceptions::toobig (error_code);
96+ else if (error_code == SQLITE_CONSTRAINT) throw exceptions::constraint (error_code);
97+ else if (error_code == SQLITE_MISMATCH) throw exceptions::mismatch (error_code);
98+ else if (error_code == SQLITE_MISUSE) throw exceptions::misuse (error_code);
99+ else if (error_code == SQLITE_NOLFS) throw exceptions::nolfs (error_code);
100+ else if (error_code == SQLITE_AUTH) throw exceptions::auth (error_code);
101+ else if (error_code == SQLITE_FORMAT) throw exceptions::format (error_code);
102+ else if (error_code == SQLITE_RANGE) throw exceptions::range (error_code);
103+ else if (error_code == SQLITE_NOTADB) throw exceptions::notadb (error_code);
104+ else throw sqlite_exception (error_code);
104105 }
105106 }
106107
@@ -187,11 +188,11 @@ namespace sqlite {
187188 if ((hresult = sqlite3_step (_stmt.get ())) == SQLITE_ROW) {
188189 call_back ();
189190 } else if (hresult == SQLITE_DONE) {
190- throw exceptions::no_rows (" no rows to extract: exactly 1 row expected" , - 1 );
191+ throw exceptions::no_rows (" no rows to extract: exactly 1 row expected" );
191192 }
192193
193194 if ((hresult = sqlite3_step (_stmt.get ())) == SQLITE_ROW) {
194- throw exceptions::more_rows (" not all rows extracted" , - 1 );
195+ throw exceptions::more_rows (" not all rows extracted" );
195196 }
196197
197198 if (hresult != SQLITE_DONE) {
0 commit comments