diff options
| author | nwrl <n/a> | 2025-08-14 21:45:40 -0500 |
|---|---|---|
| committer | nwrl <n/a> | 2025-08-14 21:45:40 -0500 |
| commit | ba1b060cbe71089a5bc1da220c7c58c4554c7f7a (patch) | |
| tree | fa3cdc574e847419fd3bf6d66821e3a09cb13bbd | |
| parent | 03eedebada9a54a7fe8f951032c4aeb71e709a77 (diff) | |
Work on db bugs
| -rw-r--r-- | nameblocker.sp | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/nameblocker.sp b/nameblocker.sp index abc5d26..c6686c2 100644 --- a/nameblocker.sp +++ b/nameblocker.sp | |||
| @@ -69,12 +69,12 @@ enum OperatingMode { | |||
| 69 | ArrayList regexlist; | 69 | ArrayList regexlist; |
| 70 | ArrayList patternlist; | 70 | ArrayList patternlist; |
| 71 | 71 | ||
| 72 | #define DBTABLENAME "163687013_SMNameBlocker" | 72 | #define DBTABLENAME "\"163687013_SMNameBlocker\"" |
| 73 | #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));" | 73 | #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));" |
| 74 | #define DBINSERTSTATEMENT "INSERT OR IGNORE INTO " ... DBTABLENAME ... " (regexstr, steamid64) VALUES (?, ?);" | 74 | #define DBINSERTSTATEMENT "INSERT OR IGNORE INTO " ... DBTABLENAME ... " (regexstr, steamid64) VALUES (?, ?);" |
| 75 | #define DBDELETESTATEMENT "DELETE FROM " ... DBTABLENAME ... " WHERE regexstr=?;" | 75 | #define DBDELETESTATEMENT "DELETE FROM " ... DBTABLENAME ... " WHERE regexstr=?;" |
| 76 | #define DBREPLACESTATEMENT "UPDATE OR IGNORE " ... DBTABLENAME ... " SET regexstr=?, steamid64=? WHERE regexstr=?;" | 76 | #define DBREPLACESTATEMENT "UPDATE OR IGNORE " ... DBTABLENAME ... " SET regexstr=?, steamid64=? WHERE regexstr=?;" |
| 77 | #define DBPOPULATESTATEMENT "SELECT regexstr FROM " ... DBTABLENAME | 77 | #define DBPOPULATESTATEMENT "SELECT regexstr FROM " ... DBTABLENAME ... ";" |
| 78 | 78 | ||
| 79 | Database db; | 79 | Database db; |
| 80 | DBStatement dbInsert; | 80 | DBStatement dbInsert; |
| @@ -135,11 +135,32 @@ void xRegisterIntConVar(ConVar& cv, int defaultVal, const char[] name, const cha | |||
| 135 | 135 | ||
| 136 | 136 | ||
| 137 | 137 | ||
| 138 | int initPrepStatements() { | 138 | void initDatabase() { |
| 139 | // Get database handle | ||
| 140 | char sqlerr[256 + 1]; | ||
| 141 | bool err = false; | ||
| 142 | |||
| 143 | db = SQLite_UseDatabase("sourcemod-local", sqlerr, sizeof(sqlerr)); | ||
| 144 | if(db == null) logAndFail("Could not connect to sql database: %s", sqlerr); | ||
| 145 | |||
| 146 | // Prep table | ||
| 147 | SQL_LockDatabase(db); | ||
| 148 | if(!SQL_FastQuery(db, DBCREATETABLE)) { | ||
| 149 | SQL_GetError(db, sqlerr, sizeof(sqlerr)); | ||
| 150 | err = true; | ||
| 151 | } | ||
| 152 | SQL_UnlockDatabase(db); | ||
| 153 | |||
| 154 | if(err) logAndFail("Could not create table: %s", sqlerr); | ||
| 155 | |||
| 156 | return; | ||
| 157 | } | ||
| 158 | |||
| 159 | void initPrepStatements() { | ||
| 139 | char sqlerr[256 + 1]; | 160 | char sqlerr[256 + 1]; |
| 140 | int err = 0; | 161 | int err = 0; |
| 141 | 162 | ||
| 142 | SQL_LockDatabase(db); // crashes lol, invalid database handle | 163 | SQL_LockDatabase(db); |
| 143 | if((dbInsert = SQL_PrepareQuery(db, DBINSERTSTATEMENT, sqlerr, sizeof(sqlerr))) == null && !err) | 164 | if((dbInsert = SQL_PrepareQuery(db, DBINSERTSTATEMENT, sqlerr, sizeof(sqlerr))) == null && !err) |
| 144 | err = 1; | 165 | err = 1; |
| 145 | 166 | ||
| @@ -154,16 +175,16 @@ int initPrepStatements() { | |||
| 154 | 175 | ||
| 155 | SQL_UnlockDatabase(db); | 176 | SQL_UnlockDatabase(db); |
| 156 | switch(err) { | 177 | switch(err) { |
| 157 | case 1: {logAndFail("Could not prepare insert statement: %s", sqlerr);} | 178 | case 1: {logAndFail("Could not prepare insert statement: %s", sqlerr);} // Doesn't recognize "163687013_SMNameBlocker" as a valid token |
| 158 | case 2: {logAndFail("Could not prepare delete statement: %s", sqlerr);} | 179 | case 2: {logAndFail("Could not prepare delete statement: %s", sqlerr);} |
| 159 | case 3: {logAndFail("Could not prepare replace statement: %s", sqlerr);} | 180 | case 3: {logAndFail("Could not prepare replace statement: %s", sqlerr);} |
| 160 | case 4: {logAndFail("Could not prepare populate statement: %s", sqlerr);} | 181 | case 4: {logAndFail("Could not prepare populate statement: %s", sqlerr);} |
| 161 | } | 182 | } |
| 162 | 183 | ||
| 163 | return 0; | 184 | return; |
| 164 | } | 185 | } |
| 165 | 186 | ||
| 166 | int loadFromDatabase() { | 187 | void loadFromDatabase() { |
| 167 | // Initialize and populate datatypes | 188 | // Initialize and populate datatypes |
| 168 | regexlist = new ArrayList(ByteCountToCells(HANDLE_SIZE)); | 189 | regexlist = new ArrayList(ByteCountToCells(HANDLE_SIZE)); |
| 169 | if(regexlist == null) logAndFail("Could not initialize regexlist ArrayList"); | 190 | if(regexlist == null) logAndFail("Could not initialize regexlist ArrayList"); |
| @@ -176,10 +197,6 @@ int loadFromDatabase() { | |||
| 176 | char sqlerr[256 + 1]; | 197 | char sqlerr[256 + 1]; |
| 177 | 198 | ||
| 178 | SQL_LockDatabase(db); | 199 | SQL_LockDatabase(db); |
| 179 | if(!SQL_FastQuery(db, DBCREATETABLE)) { | ||
| 180 | SQL_GetError(db, sqlerr, sizeof(sqlerr)); | ||
| 181 | err = 1; | ||
| 182 | } | ||
| 183 | 200 | ||
| 184 | // select patterns from nameblock table/database | 201 | // select patterns from nameblock table/database |
| 185 | if(SQL_Execute(dbPopulate) && !err) { | 202 | if(SQL_Execute(dbPopulate) && !err) { |
| @@ -210,17 +227,13 @@ int loadFromDatabase() { | |||
| 210 | } | 227 | } |
| 211 | } | 228 | } |
| 212 | 229 | ||
| 213 | return 0; | 230 | return; |
| 214 | } | 231 | } |
| 215 | 232 | ||
| 216 | 233 | ||
| 217 | 234 | ||
| 218 | public void OnAllPluginsLoaded() { | 235 | public void OnAllPluginsLoaded() { |
| 219 | // Get database handle | 236 | initDatabase(); |
| 220 | char sqlerr[256 + 1]; | ||
| 221 | db = SQLite_UseDatabase("sourcemod-local", sqlerr, sizeof(sqlerr)); | ||
| 222 | if(db == null) logAndFail("Could not connect to sql database: %s", sqlerr); | ||
| 223 | |||
| 224 | initPrepStatements(); | 237 | initPrepStatements(); |
| 225 | loadFromDatabase(); | 238 | loadFromDatabase(); |
| 226 | 239 | ||
