From ba1b060cbe71089a5bc1da220c7c58c4554c7f7a Mon Sep 17 00:00:00 2001 From: nwrl Date: Thu, 14 Aug 2025 21:45:40 -0500 Subject: Work on db bugs --- nameblocker.sp | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) (limited to 'nameblocker.sp') diff --git a/nameblocker.sp b/nameblocker.sp index abc5d26..c6686c2 100644 --- a/nameblocker.sp +++ b/nameblocker.sp @@ -69,12 +69,12 @@ enum OperatingMode { ArrayList regexlist; ArrayList patternlist; -#define DBTABLENAME "163687013_SMNameBlocker" +#define DBTABLENAME "\"163687013_SMNameBlocker\"" #define DBCREATETABLE "CREATE TABLE IF NOT EXISTS " ... DBTABLENAME ... " (id INTEGER NOT NULL, regexstr TEXT NOT NULL ON CONFLICT IGNORE, steamid64 TEXT NOT NULL ON CONFLICT IGNORE, dateof TEXT DEFAULT CURRENT_DATE, timeof TEXT DEFAULT CURRENT_TIME, PRIMARY KEY (id), UNIQUE (regexstr));" #define DBINSERTSTATEMENT "INSERT OR IGNORE INTO " ... DBTABLENAME ... " (regexstr, steamid64) VALUES (?, ?);" #define DBDELETESTATEMENT "DELETE FROM " ... DBTABLENAME ... " WHERE regexstr=?;" #define DBREPLACESTATEMENT "UPDATE OR IGNORE " ... DBTABLENAME ... " SET regexstr=?, steamid64=? WHERE regexstr=?;" -#define DBPOPULATESTATEMENT "SELECT regexstr FROM " ... DBTABLENAME +#define DBPOPULATESTATEMENT "SELECT regexstr FROM " ... DBTABLENAME ... ";" Database db; DBStatement dbInsert; @@ -135,11 +135,32 @@ void xRegisterIntConVar(ConVar& cv, int defaultVal, const char[] name, const cha -int initPrepStatements() { +void initDatabase() { + // Get database handle + char sqlerr[256 + 1]; + bool err = false; + + db = SQLite_UseDatabase("sourcemod-local", sqlerr, sizeof(sqlerr)); + if(db == null) logAndFail("Could not connect to sql database: %s", sqlerr); + + // Prep table + SQL_LockDatabase(db); + if(!SQL_FastQuery(db, DBCREATETABLE)) { + SQL_GetError(db, sqlerr, sizeof(sqlerr)); + err = true; + } + SQL_UnlockDatabase(db); + + if(err) logAndFail("Could not create table: %s", sqlerr); + + return; +} + +void initPrepStatements() { char sqlerr[256 + 1]; int err = 0; - SQL_LockDatabase(db); // crashes lol, invalid database handle + SQL_LockDatabase(db); if((dbInsert = SQL_PrepareQuery(db, DBINSERTSTATEMENT, sqlerr, sizeof(sqlerr))) == null && !err) err = 1; @@ -154,16 +175,16 @@ int initPrepStatements() { SQL_UnlockDatabase(db); switch(err) { - case 1: {logAndFail("Could not prepare insert statement: %s", sqlerr);} + case 1: {logAndFail("Could not prepare insert statement: %s", sqlerr);} // Doesn't recognize "163687013_SMNameBlocker" as a valid token case 2: {logAndFail("Could not prepare delete statement: %s", sqlerr);} case 3: {logAndFail("Could not prepare replace statement: %s", sqlerr);} case 4: {logAndFail("Could not prepare populate statement: %s", sqlerr);} } - return 0; + return; } -int loadFromDatabase() { +void loadFromDatabase() { // Initialize and populate datatypes regexlist = new ArrayList(ByteCountToCells(HANDLE_SIZE)); if(regexlist == null) logAndFail("Could not initialize regexlist ArrayList"); @@ -176,10 +197,6 @@ int loadFromDatabase() { char sqlerr[256 + 1]; SQL_LockDatabase(db); - if(!SQL_FastQuery(db, DBCREATETABLE)) { - SQL_GetError(db, sqlerr, sizeof(sqlerr)); - err = 1; - } // select patterns from nameblock table/database if(SQL_Execute(dbPopulate) && !err) { @@ -210,17 +227,13 @@ int loadFromDatabase() { } } - return 0; + return; } public void OnAllPluginsLoaded() { - // Get database handle - char sqlerr[256 + 1]; - db = SQLite_UseDatabase("sourcemod-local", sqlerr, sizeof(sqlerr)); - if(db == null) logAndFail("Could not connect to sql database: %s", sqlerr); - + initDatabase(); initPrepStatements(); loadFromDatabase(); -- cgit v1.2.3