I want to catch a dupe key error in my code using con.errnum(). I use
exceptions for everything and would like to use them, but the errnum()
in the catch is always zero. I assume this is because when the BadQuery
exception is constructed calls error() which calls mysql_error() but
that clears out the errornum() (mysql_errno()). To get the error
number, I have to turn off exceptions. Any tricks to get it to work?
If not, adding an unsigned int to the BadQuery exception class and
having it call errnum() first would fix it, which I'd be willing to do.
Here's a snip that I wanted to work.
...
query.reset();
query << "insert into test values (1)"; // one int col,
unique key
query.execute();
query.reset();
query << "insert into test values (1)";
query.execute();
}
catch (const mysqlpp::BadQuery& er) {
cerr << "Got errnum of " << con.errnum() << endl; ///
<--- always prints zero
...
If I turn off exceptions, con.errnum() returns the correct error number.
mysqlpp::NoExceptions ne( query );
query << "insert into test values (1)";
query.execute();
unsigned int ret = con.errnum(); <-- get 1062, dupe key
cerr << con.error() << endl; <-- correct err msg