[Half-Life AMXX] / testsuite / sqlxtest.sma Repository:
ViewVC logotype

Annotation of /testsuite/sqlxtest.sma

Parent Directory Parent Directory | Revision Log Revision Log


Revision 17 - (view) (download)

1 : ian 1 #include <amxmodx>
2 :     #include <amxmisc>
3 :     #include <dbi>
4 :     #include <sqlx>
5 :    
6 :     new Handle:g_DbInfo
7 :     new g_QueryNum
8 :     new bool:g_TestEnd = false
9 :    
10 :     public plugin_init()
11 :     {
12 :     register_plugin("SQLX Test", "1.0", "BAILOPAN")
13 :     register_srvcmd("sqlx_test_normal", "SqlxTest_Normal")
14 :     register_srvcmd("sqlx_test_thread", "SqlxTest_Thread")
15 : ian 17 register_srvcmd("sqlx_test_proc", "SqlxTest_Proc")
16 : ian 1 register_srvcmd("sqlx_test_old1", "SqlxTest_Old1")
17 :     register_srvcmd("sqlx_test_old2", "SqlxTest_Old2")
18 :     register_srvcmd("sqlx_test_thread_end", "SqlxTest_ThreadEnd")
19 :     register_srvcmd("sqlx_test_bad", "SqlxTest_Bad")
20 : ian 17 register_srvcmd("sqlx_test_quote", "SqlxTest_Quote")
21 :     register_srvcmd("sqlx_test_affinity", "SqlxTest_Affinity")
22 : ian 1
23 :     new configsDir[64]
24 :     get_configsdir(configsDir, 63)
25 :    
26 :     server_cmd("exec %s/sql.cfg", configsDir)
27 : ian 17
28 :     set_task(2.0, "start_map")
29 : ian 1 }
30 :    
31 :     DoBasicInfo(affinities=0)
32 :     {
33 :     new type[12]
34 :     new affinity[12]
35 :     new wanted_type[12]
36 :    
37 :     dbi_type(type, 11)
38 :    
39 :     server_print("DBI type: %s", type)
40 :    
41 :     if (!affinities)
42 :     return
43 :    
44 :     SQL_GetAffinity(affinity, 11);
45 :     server_print("SQLX Affinity: %s", affinity)
46 :    
47 :     get_cvar_string("amx_sql_type", wanted_type, 11)
48 :     if (!equal(wanted_type, affinity))
49 :     {
50 :     if (g_DbInfo)
51 :     {
52 :     SQL_FreeHandle(g_DbInfo)
53 :     g_DbInfo = Empty_Handle
54 :     }
55 :     new res = SQL_SetAffinity(wanted_type)
56 :     server_print("Setting affinity from %s to %s: %s",
57 :     affinity,
58 :     wanted_type,
59 :     res ? "Success" : "Failed")
60 :     SQL_GetAffinity(affinity, 11)
61 : ian 17 start_map()
62 : ian 1 server_print("Verification: %s", affinity)
63 :     }
64 :     }
65 :    
66 : ian 17 public start_map()
67 : ian 1 {
68 :     new host[64]
69 :     new user[64]
70 :     new pass[64]
71 :     new db[64]
72 :    
73 :     get_cvar_string("amx_sql_host", host, 63)
74 :     get_cvar_string("amx_sql_user", user, 63)
75 :     get_cvar_string("amx_sql_pass", pass, 63)
76 :     get_cvar_string("amx_sql_db", db, 63)
77 :    
78 :     g_DbInfo = SQL_MakeDbTuple(host, user, pass, db)
79 :     }
80 :    
81 :     public SqlxTest_Bad()
82 :     {
83 :     new errnum, error[255]
84 :     new Handle:tempinfo = SQL_MakeDbTuple("1.2.3.4", "asdf", "gasdf", "gaben", 2)
85 :     new Handle:db = SQL_Connect(tempinfo, errnum, error, 254)
86 :    
87 :     if (db == Empty_Handle)
88 :     {
89 :     server_print(" --> Errored out! %d, %s", errnum, error)
90 :     } else {
91 :     server_print(" --> Something is wrong here.")
92 :     }
93 :    
94 :     return PLUGIN_HANDLED
95 :     }
96 :    
97 :     /**
98 :     * Note that this function works for both threaded and non-threaded queries.
99 :     */
100 :     PrintQueryData(Handle:query)
101 :     {
102 :     new columns = SQL_NumColumns(query)
103 :     new rows = SQL_NumResults(query)
104 :     static querystring[2048]
105 :    
106 :     SQL_GetQueryString(query, querystring, 2047)
107 :    
108 :     server_print("Original query string: %s", querystring)
109 :     server_print("Query columns: %d rows: %d", columns, rows)
110 :    
111 :     new num
112 :     new row
113 :     new str[32]
114 :     new cols[2][32]
115 :     SQL_FieldNumToName(query, 0, cols[0], 31)
116 :     SQL_FieldNumToName(query, 1, cols[1], 31)
117 :     while (SQL_MoreResults(query))
118 :     {
119 :     num = SQL_ReadResult(query, 0)
120 :     SQL_ReadResult(query, 1, str, 31)
121 :     server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str)
122 :     SQL_NextRow(query)
123 :     row++
124 :     }
125 :     }
126 :    
127 :     /**
128 :     * Handler for when a threaded query is resolved.
129 :     */
130 :     public GetMyStuff(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
131 :     {
132 :     server_print(" --> Resolved query %d, took %f seconds", data[0], queuetime)
133 :     if (failstate)
134 :     {
135 :     if (failstate == TQUERY_CONNECT_FAILED)
136 :     {
137 :     server_print(" --> Connection failed!")
138 :     } else if (failstate == TQUERY_QUERY_FAILED) {
139 :     server_print(" --> Query failed!")
140 :     }
141 :     server_print(" --> Error code: %d (Message: ^"%s^")", errnum, error)
142 :    
143 :     new querystring[1024]
144 :     SQL_GetQueryString(query, querystring, 1023)
145 :     server_print(" --> Original query: %s", querystring)
146 :     } else {
147 :     PrintQueryData(query)
148 :     }
149 :     }
150 :    
151 : ian 17 public SqlxTest_Affinity()
152 :     {
153 :     server_print("[Access Manager] try SetAffinity to sqlite");
154 :     SQL_SetAffinity("sqlite");
155 :     server_print("[Access Manager] try SetAffinity to mysql");
156 :     SQL_SetAffinity("mysql");
157 :     server_print("[Access Manager] try SetAffinity to sqlite again");
158 :     SQL_SetAffinity("sqlite");
159 :     }
160 :    
161 : ian 1 /**
162 :     * Starts a threaded query.
163 :     */
164 :     public SqlxTest_Thread()
165 :     {
166 :     new query[512]
167 :     new data[1]
168 :    
169 :     data[0] = g_QueryNum
170 :     format(query, 511, "SELECT * FROM gaben")
171 :    
172 :     DoBasicInfo(1)
173 :    
174 :     server_print("Adding to %d queue at: %f", g_QueryNum, get_gametime())
175 :     SQL_ThreadQuery(g_DbInfo, "GetMyStuff", query, data, 1)
176 :    
177 :     g_QueryNum++
178 :     }
179 :    
180 :     /**
181 : ian 17 * Tests string quoting
182 :     */
183 :     public SqlxTest_Quote()
184 :     {
185 :     DoBasicInfo(1)
186 :    
187 :     new errno, error[255]
188 :    
189 :     new Handle:db = SQL_Connect(g_DbInfo, errno, error, sizeof(error)-1)
190 :     if (!db)
191 :     {
192 :     server_print("Query failure: [%d] %s", errno, error)
193 :     return
194 :     }
195 :    
196 :     new buffer[500], num
197 :     num = SQL_QuoteString(db, buffer, sizeof(buffer)-1, "Hi y'all! C\lam")
198 :    
199 :     server_print("num: %d str: %s", num, buffer)
200 :    
201 :     SQL_FreeHandle(db)
202 :     }
203 :    
204 :     public SqlxTest_Proc()
205 :     {
206 :     new errnum, error[255]
207 :    
208 :     DoBasicInfo(1)
209 :    
210 :     new Handle:db = SQL_Connect(g_DbInfo, errnum, error, 254)
211 :     if (!db)
212 :     {
213 :     server_print("Query failure: [%d] %s", errnum, error)
214 :     return
215 :     }
216 :    
217 :     new Handle:query = SQL_PrepareQuery(db, "CALL ExampleProc()")
218 :     if (!SQL_Execute(query))
219 :     {
220 :     errnum = SQL_QueryError(query, error, 254)
221 :     server_print("Query failure: [%d] %s", errnum, error)
222 :     SQL_FreeHandle(query)
223 :     SQL_FreeHandle(db)
224 :     return
225 :     }
226 :    
227 :     PrintQueryData(query)
228 :    
229 :     server_print("Next result: %d", SQL_NextResultSet(query));
230 :    
231 :     PrintQueryData(query)
232 :    
233 :     SQL_FreeHandle(query)
234 :     SQL_FreeHandle(db)
235 :     }
236 :    
237 :     /**
238 : ian 1 * Does a normal query.
239 :     */
240 :     public SqlxTest_Normal()
241 :     {
242 :     new errnum, error[255]
243 :    
244 :     DoBasicInfo(1)
245 :    
246 :     new Handle:db = SQL_Connect(g_DbInfo, errnum, error, 254)
247 :     if (!db)
248 :     {
249 :     server_print("Query failure: [%d] %s", errnum, error)
250 :     return
251 :     }
252 :    
253 :     new Handle:query = SQL_PrepareQuery(db, "SELECT * FROM gaben")
254 :     if (!SQL_Execute(query))
255 :     {
256 :     errnum = SQL_QueryError(query, error, 254)
257 :     server_print("Query failure: [%d] %s", errnum, error)
258 :     SQL_FreeHandle(query)
259 :     SQL_FreeHandle(db)
260 :     return
261 :     }
262 :    
263 :     PrintQueryData(query)
264 :    
265 : ian 17 server_print("Next result: %d", SQL_NextResultSet(query));
266 :    
267 : ian 1 SQL_FreeHandle(query)
268 :     SQL_FreeHandle(db)
269 :     }
270 :    
271 :     /**
272 :     * Wrapper for an old-style connection.
273 :     */
274 :     Sql:OldInitDatabase()
275 :     {
276 :     new host[64]
277 :     new user[64]
278 :     new pass[64]
279 :     new db[64]
280 :    
281 :     get_cvar_string("amx_sql_host", host, 63)
282 :     get_cvar_string("amx_sql_user", user, 63)
283 :     get_cvar_string("amx_sql_pass", pass, 63)
284 :     get_cvar_string("amx_sql_db", db, 63)
285 :    
286 :     new error[255]
287 :     new Sql:sql = dbi_connect(host, user, pass, db, error, 254)
288 :     if (sql < SQL_OK)
289 :     {
290 :     server_print("Connection failure: %s", error)
291 :     return SQL_FAILED
292 :     }
293 :    
294 :     return sql
295 :     }
296 :    
297 :     /**
298 :     * Tests index-based lookup
299 :     */
300 :     public SqlxTest_Old1()
301 :     {
302 :     DoBasicInfo()
303 :     new Sql:sql = OldInitDatabase()
304 :     if (sql < SQL_OK)
305 :     return
306 :    
307 :     new Result:res = dbi_query(sql, "SELECT * FROM gaben")
308 :    
309 :     if (res == RESULT_FAILED)
310 :     {
311 :     new error[255]
312 :     new code = dbi_error(sql, error, 254)
313 :     server_print("Result failed! [%d]: %s", code, error)
314 :     } else if (res == RESULT_NONE) {
315 :     server_print("No result set returned.")
316 :     } else {
317 :     new cols[2][32]
318 :     new str[32]
319 :     new row, num
320 :     new rows = dbi_num_rows(res)
321 :     new columns = dbi_num_fields(res)
322 :    
323 :     dbi_field_name(res, 1, cols[0], 31)
324 :     dbi_field_name(res, 2, cols[1], 31)
325 :     server_print("Query columns: %d rows: %d", columns, rows)
326 :     while (dbi_nextrow(res) > 0)
327 :     {
328 :     num = dbi_field(res, 1)
329 :     dbi_field(res, 2, str, 31)
330 :     server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str)
331 :     row++
332 :     }
333 :     dbi_free_result(res)
334 :     }
335 :    
336 :     dbi_close(sql)
337 :     }
338 :    
339 :    
340 :     /**
341 :     * Tests name-based lookup
342 :     */
343 :     public SqlxTest_Old2()
344 :     {
345 :     DoBasicInfo()
346 :     new Sql:sql = OldInitDatabase()
347 :     if (sql < SQL_OK)
348 :     return
349 :    
350 :     new Result:res = dbi_query(sql, "SELECT * FROM gaben")
351 :    
352 :     if (res == RESULT_FAILED)
353 :     {
354 :     new error[255]
355 :     new code = dbi_error(sql, error, 254)
356 :     server_print("Result failed! [%d]: %s", code, error)
357 :     } else if (res == RESULT_NONE) {
358 :     server_print("No result set returned.")
359 :     } else {
360 :     new cols[2][32]
361 :     new str[32]
362 :     new row, num
363 :     new rows = dbi_num_rows(res)
364 :     new columns = dbi_num_fields(res)
365 :    
366 :     dbi_field_name(res, 1, cols[0], 31)
367 :     dbi_field_name(res, 2, cols[1], 31)
368 :     server_print("Query columns: %d rows: %d", columns, rows)
369 :     while (dbi_nextrow(res) > 0)
370 :     {
371 :     num = dbi_result(res, cols[0])
372 :     dbi_result(res, cols[1], str, 31)
373 :     server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str)
374 :     row++
375 :     }
376 :     dbi_free_result(res)
377 :     }
378 :    
379 :     dbi_close(sql)
380 :     }
381 :    
382 :     public SqlxTest_ThreadEnd()
383 :     {
384 :     if (read_argc() < 2)
385 :     {
386 :     server_print("Requires mapname!")
387 :     } else {
388 :     new mapname[64]
389 :    
390 :     read_argv(1, mapname, 63)
391 :     if (!is_map_valid(mapname))
392 :     {
393 :     server_print("Invalid map: %s", mapname)
394 :     } else {
395 :     g_TestEnd = true
396 :     server_cmd("changelevel %s", mapname)
397 :     }
398 :     }
399 :    
400 :     return PLUGIN_HANDLED
401 :     }
402 :    
403 :    
404 :     public plugin_end()
405 :     {
406 :     if (g_TestEnd)
407 :     {
408 :     SqlxTest_Thread()
409 :     } else {
410 :     SQL_FreeHandle(g_DbInfo)
411 :     }
412 :     }

Contact
ViewVC Help
Powered by ViewVC 1.0.4