// handles escape quotes std::string pDB::sql_string(pStringRef val, bool allowNull) { if (!val.empty()) { std::string conv; int quotes = val.count('\''); // get room for doubling up the quotes conv.reserve(val.size()+quotes+2); // +2 is outer quotes conv.push_back('\''); for (pStringRef::iterator i = val.begin(); i != val.end(); ++i) { if (*i == '\'') { conv.push_back('\''); conv.push_back('\''); } else { conv.push_back(*i); } } conv.push_back('\''); return conv; } else { if (allowNull) return "NULL"; else return "''"; } }
void pModel::sql_execute(pStringRef ref, pStringRef query) { char *errMsg; if (trace_) { std::cerr << "TRACE: " << query.str() << std::endl; } int rc = sqlite3_exec(db_, query.begin(), NULL, NULL, &errMsg); if (rc != SQLITE_OK) { std::cerr << "sqlite error in " << ref.str() << ": " << query.str() << "\n" << errMsg << "\n"; exit(1); } }
void pDB::sql_execute(pStringRef query) const { char *errMsg; int rc = sqlite3_exec(db_, query.begin(), NULL, NULL, &errMsg); if (rc != SQLITE_OK) { std::cerr << "sqlite error: " << query.str() << "\n" << errMsg << "\n"; sqlite3_free(errMsg); exit(1); } else if (trace_) { std::cerr << "TRACE: " << query.str() << std::endl; } }