summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornwrl <n/a>2025-08-14 21:45:40 -0500
committernwrl <n/a>2025-08-14 21:45:40 -0500
commitba1b060cbe71089a5bc1da220c7c58c4554c7f7a (patch)
treefa3cdc574e847419fd3bf6d66821e3a09cb13bbd
parent03eedebada9a54a7fe8f951032c4aeb71e709a77 (diff)
Work on db bugs
-rw-r--r--nameblocker.sp47
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 {
69ArrayList regexlist; 69ArrayList regexlist;
70ArrayList patternlist; 70ArrayList 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
79Database db; 79Database db;
80DBStatement dbInsert; 80DBStatement dbInsert;
@@ -135,11 +135,32 @@ void xRegisterIntConVar(ConVar& cv, int defaultVal, const char[] name, const cha
135 135
136 136
137 137
138int initPrepStatements() { 138void 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
159void 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
166int loadFromDatabase() { 187void 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
218public void OnAllPluginsLoaded() { 235public 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