void SSQLite3::execute(const string& query) {
char *errmsg;
- int rc;
- if (sqlite3_exec(m_pDB, query.c_str(), NULL, NULL, &errmsg) == SQLITE_BUSY) {
- std::string errstr1(errmsg);
+ std::string errstr1;
+ int rc = sqlite3_exec(m_pDB, query.c_str(), NULL, NULL, &errmsg);
+ if (rc != 0) {
+ errstr1 = errmsg;
sqlite3_free(errmsg);
+ }
+ if (rc == SQLITE_BUSY) {
if (m_in_transaction) {
throw("Failed to execute query: " + errstr1);
} else {
- if ((rc = sqlite3_exec(m_pDB, query.c_str(), NULL, NULL, &errmsg) != SQLITE_OK) && rc != SQLITE_DONE && rc != SQLITE_ROW) {
- std::string errstr2(errmsg);
+ rc = sqlite3_exec(m_pDB, query.c_str(), NULL, NULL, &errmsg);
+ std::string errstr2;
+ if (rc != 0) {
+ errstr2 = errmsg;
sqlite3_free(errmsg);
+ }
+ if (rc != SQLITE_OK && rc != SQLITE_DONE && rc != SQLITE_ROW) {
throw("Failed to execute query: " + errstr2);
}
}
+ } else if (rc != 0) {
+ throw("Failed to execute query: " + errstr1);
}
}