#include "sqlhelper.h" #include "console.h" #include "threading.h" static char lasterror[deflen]=""; const char* sqllasterror() { return lasterror; } bool sqlexec(sqlite3* db, const char* query) { lock(WAITID_USERDB); char* errorText=0; if(sqlite3_exec(db, query, 0, 0, &errorText)!=SQLITE_OK) //error { if(errorText) strcpy(lasterror, errorText); sqlite3_free(errorText); unlock(WAITID_USERDB); return false; } *lasterror=0; unlock(WAITID_USERDB); return true; } bool sqlhasresult(sqlite3* db, const char* query) { lock(WAITID_USERDB); sqlite3_stmt* stmt; if(sqlite3_prepare_v2(db, query, -1, &stmt, 0)!=SQLITE_OK) { sqlite3_finalize(stmt); unlock(WAITID_USERDB); return false; } if(sqlite3_step(stmt)!=SQLITE_ROW) { sqlite3_finalize(stmt); unlock(WAITID_USERDB); return false; } sqlite3_finalize(stmt); unlock(WAITID_USERDB); return true; } bool sqlgettext(sqlite3* db, const char* query, char* result) { if(!result) return false; lock(WAITID_USERDB); sqlite3_stmt* stmt; if(sqlite3_prepare_v2(db, query, -1, &stmt, 0)!=SQLITE_OK) { sqlite3_finalize(stmt); unlock(WAITID_USERDB); return false; } if(sqlite3_step(stmt)!=SQLITE_ROW) { sqlite3_finalize(stmt); unlock(WAITID_USERDB); return false; } strcpy(result, (const char*)sqlite3_column_text(stmt, 0)); sqlite3_finalize(stmt); unlock(WAITID_USERDB); return true; } bool sqlgetint(sqlite3* db, const char* query, int* result) { if(!result) return false; lock(WAITID_USERDB); sqlite3_stmt* stmt; if(sqlite3_prepare_v2(db, query, -1, &stmt, 0)!=SQLITE_OK) { sqlite3_finalize(stmt); unlock(WAITID_USERDB); return false; } if(sqlite3_step(stmt)!=SQLITE_ROW) { sqlite3_finalize(stmt); unlock(WAITID_USERDB); return false; } *result=sqlite3_column_int(stmt, 0); sqlite3_finalize(stmt); unlock(WAITID_USERDB); return true; } bool sqlgetuint(sqlite3* db, const char* query, uint* result) { if(!result) return false; lock(WAITID_USERDB); sqlite3_stmt* stmt; if(sqlite3_prepare_v2(db, query, -1, &stmt, 0)!=SQLITE_OK) { sqlite3_finalize(stmt); unlock(WAITID_USERDB); return false; } if(sqlite3_step(stmt)!=SQLITE_ROW) { sqlite3_finalize(stmt); unlock(WAITID_USERDB); return false; } #ifdef _WIN64 *result=sqlite3_column_int64(stmt, 0); #else *result=sqlite3_column_int(stmt, 0); #endif // _WIN64 sqlite3_finalize(stmt); unlock(WAITID_USERDB); return true; } void sqlstringescape(const char* string, char* escaped_string) { if(!string or !escaped_string) return; int len=strlen(string); *escaped_string=0; for(int i=0,j=0; i