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

Annotation of /testsuite/sqlxtest.sma

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (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 :     register_srvcmd("sqlx_test_old1", "SqlxTest_Old1")
16 :     register_srvcmd("sqlx_test_old2", "SqlxTest_Old2")
17 :     register_srvcmd("sqlx_test_thread_end", "SqlxTest_ThreadEnd")
18 :     register_srvcmd("sqlx_test_bad", "SqlxTest_Bad")
19 :    
20 :     new configsDir[64]
21 :     get_configsdir(configsDir, 63)
22 :    
23 :     server_cmd("exec %s/sql.cfg", configsDir)
24 :     server_exec()
25 :     }
26 :    
27 :     DoBasicInfo(affinities=0)
28 :     {
29 :     new type[12]
30 :     new affinity[12]
31 :     new wanted_type[12]
32 :    
33 :     dbi_type(type, 11)
34 :    
35 :     server_print("DBI type: %s", type)
36 :    
37 :     if (!affinities)
38 :     return
39 :    
40 :     SQL_GetAffinity(affinity, 11);
41 :     server_print("SQLX Affinity: %s", affinity)
42 :    
43 :     get_cvar_string("amx_sql_type", wanted_type, 11)
44 :     if (!equal(wanted_type, affinity))
45 :     {
46 :     if (g_DbInfo)
47 :     {
48 :     SQL_FreeHandle(g_DbInfo)
49 :     g_DbInfo = Empty_Handle
50 :     }
51 :     new res = SQL_SetAffinity(wanted_type)
52 :     server_print("Setting affinity from %s to %s: %s",
53 :     affinity,
54 :     wanted_type,
55 :     res ? "Success" : "Failed")
56 :     SQL_GetAffinity(affinity, 11)
57 :     plugin_cfg()
58 :     server_print("Verification: %s", affinity)
59 :     }
60 :     }
61 :    
62 :     public plugin_cfg()
63 :     {
64 :     new host[64]
65 :     new user[64]
66 :     new pass[64]
67 :     new db[64]
68 :    
69 :     get_cvar_string("amx_sql_host", host, 63)
70 :     get_cvar_string("amx_sql_user", user, 63)
71 :     get_cvar_string("amx_sql_pass", pass, 63)
72 :     get_cvar_string("amx_sql_db", db, 63)
73 :    
74 :     g_DbInfo = SQL_MakeDbTuple(host, user, pass, db)
75 :     }
76 :    
77 :     public SqlxTest_Bad()
78 :     {
79 :     new errnum, error[255]
80 :     new Handle:tempinfo = SQL_MakeDbTuple("1.2.3.4", "asdf", "gasdf", "gaben", 2)
81 :     new Handle:db = SQL_Connect(tempinfo, errnum, error, 254)
82 :    
83 :     if (db == Empty_Handle)
84 :     {
85 :     server_print(" --> Errored out! %d, %s", errnum, error)
86 :     } else {
87 :     server_print(" --> Something is wrong here.")
88 :     }
89 :    
90 :     return PLUGIN_HANDLED
91 :     }
92 :    
93 :     /**
94 :     * Note that this function works for both threaded and non-threaded queries.
95 :     */
96 :     PrintQueryData(Handle:query)
97 :     {
98 :     new columns = SQL_NumColumns(query)
99 :     new rows = SQL_NumResults(query)
100 :     static querystring[2048]
101 :    
102 :     SQL_GetQueryString(query, querystring, 2047)
103 :    
104 :     server_print("Original query string: %s", querystring)
105 :     server_print("Query columns: %d rows: %d", columns, rows)
106 :    
107 :     new num
108 :     new row
109 :     new str[32]
110 :     new cols[2][32]
111 :     SQL_FieldNumToName(query, 0, cols[0], 31)
112 :     SQL_FieldNumToName(query, 1, cols[1], 31)
113 :     while (SQL_MoreResults(query))
114 :     {
115 :     num = SQL_ReadResult(query, 0)
116 :     SQL_ReadResult(query, 1, str, 31)
117 :     server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str)
118 :     SQL_NextRow(query)
119 :     row++
120 :     }
121 :     }
122 :    
123 :     /**
124 :     * Handler for when a threaded query is resolved.
125 :     */
126 :     public GetMyStuff(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
127 :     {
128 :     server_print(" --> Resolved query %d, took %f seconds", data[0], queuetime)
129 :     if (failstate)
130 :     {
131 :     if (failstate == TQUERY_CONNECT_FAILED)
132 :     {
133 :     server_print(" --> Connection failed!")
134 :     } else if (failstate == TQUERY_QUERY_FAILED) {
135 :     server_print(" --> Query failed!")
136 :     }
137 :     server_print(" --> Error code: %d (Message: ^"%s^")", errnum, error)
138 :    
139 :     new querystring[1024]
140 :     SQL_GetQueryString(query, querystring, 1023)
141 :     server_print(" --> Original query: %s", querystring)
142 :     } else {
143 :     PrintQueryData(query)
144 :     }
145 :     }
146 :    
147 :     /**
148 :     * Starts a threaded query.
149 :     */
150 :     public SqlxTest_Thread()
151 :     {
152 :     new query[512]
153 :     new data[1]
154 :    
155 :     data[0] = g_QueryNum
156 :     format(query, 511, "SELECT * FROM gaben")
157 :    
158 :     DoBasicInfo(1)
159 :    
160 :     server_print("Adding to %d queue at: %f", g_QueryNum, get_gametime())
161 :     SQL_ThreadQuery(g_DbInfo, "GetMyStuff", query, data, 1)
162 :    
163 :     g_QueryNum++
164 :     }
165 :    
166 :     /**
167 :     * Does a normal query.
168 :     */
169 :     public SqlxTest_Normal()
170 :     {
171 :     new errnum, error[255]
172 :    
173 :     DoBasicInfo(1)
174 :    
175 :     new Handle:db = SQL_Connect(g_DbInfo, errnum, error, 254)
176 :     if (!db)
177 :     {
178 :     server_print("Query failure: [%d] %s", errnum, error)
179 :     return
180 :     }
181 :    
182 :     new Handle:query = SQL_PrepareQuery(db, "SELECT * FROM gaben")
183 :     if (!SQL_Execute(query))
184 :     {
185 :     errnum = SQL_QueryError(query, error, 254)
186 :     server_print("Query failure: [%d] %s", errnum, error)
187 :     SQL_FreeHandle(query)
188 :     SQL_FreeHandle(db)
189 :     return
190 :     }
191 :    
192 :     PrintQueryData(query)
193 :    
194 :     SQL_FreeHandle(query)
195 :     SQL_FreeHandle(db)
196 :     }
197 :    
198 :     /**
199 :     * Wrapper for an old-style connection.
200 :     */
201 :     Sql:OldInitDatabase()
202 :     {
203 :     new host[64]
204 :     new user[64]
205 :     new pass[64]
206 :     new db[64]
207 :    
208 :     get_cvar_string("amx_sql_host", host, 63)
209 :     get_cvar_string("amx_sql_user", user, 63)
210 :     get_cvar_string("amx_sql_pass", pass, 63)
211 :     get_cvar_string("amx_sql_db", db, 63)
212 :    
213 :     new error[255]
214 :     new Sql:sql = dbi_connect(host, user, pass, db, error, 254)
215 :     if (sql < SQL_OK)
216 :     {
217 :     server_print("Connection failure: %s", error)
218 :     return SQL_FAILED
219 :     }
220 :    
221 :     return sql
222 :     }
223 :    
224 :     /**
225 :     * Tests index-based lookup
226 :     */
227 :     public SqlxTest_Old1()
228 :     {
229 :     DoBasicInfo()
230 :     new Sql:sql = OldInitDatabase()
231 :     if (sql < SQL_OK)
232 :     return
233 :    
234 :     new Result:res = dbi_query(sql, "SELECT * FROM gaben")
235 :    
236 :     if (res == RESULT_FAILED)
237 :     {
238 :     new error[255]
239 :     new code = dbi_error(sql, error, 254)
240 :     server_print("Result failed! [%d]: %s", code, error)
241 :     } else if (res == RESULT_NONE) {
242 :     server_print("No result set returned.")
243 :     } else {
244 :     new cols[2][32]
245 :     new str[32]
246 :     new row, num
247 :     new rows = dbi_num_rows(res)
248 :     new columns = dbi_num_fields(res)
249 :    
250 :     dbi_field_name(res, 1, cols[0], 31)
251 :     dbi_field_name(res, 2, cols[1], 31)
252 :     server_print("Query columns: %d rows: %d", columns, rows)
253 :     while (dbi_nextrow(res) > 0)
254 :     {
255 :     num = dbi_field(res, 1)
256 :     dbi_field(res, 2, str, 31)
257 :     server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str)
258 :     row++
259 :     }
260 :     dbi_free_result(res)
261 :     }
262 :    
263 :     dbi_close(sql)
264 :     }
265 :    
266 :    
267 :     /**
268 :     * Tests name-based lookup
269 :     */
270 :     public SqlxTest_Old2()
271 :     {
272 :     DoBasicInfo()
273 :     new Sql:sql = OldInitDatabase()
274 :     if (sql < SQL_OK)
275 :     return
276 :    
277 :     new Result:res = dbi_query(sql, "SELECT * FROM gaben")
278 :    
279 :     if (res == RESULT_FAILED)
280 :     {
281 :     new error[255]
282 :     new code = dbi_error(sql, error, 254)
283 :     server_print("Result failed! [%d]: %s", code, error)
284 :     } else if (res == RESULT_NONE) {
285 :     server_print("No result set returned.")
286 :     } else {
287 :     new cols[2][32]
288 :     new str[32]
289 :     new row, num
290 :     new rows = dbi_num_rows(res)
291 :     new columns = dbi_num_fields(res)
292 :    
293 :     dbi_field_name(res, 1, cols[0], 31)
294 :     dbi_field_name(res, 2, cols[1], 31)
295 :     server_print("Query columns: %d rows: %d", columns, rows)
296 :     while (dbi_nextrow(res) > 0)
297 :     {
298 :     num = dbi_result(res, cols[0])
299 :     dbi_result(res, cols[1], str, 31)
300 :     server_print("[%d]: %s=%d, %s=%s", row, cols[0], num, cols[1], str)
301 :     row++
302 :     }
303 :     dbi_free_result(res)
304 :     }
305 :    
306 :     dbi_close(sql)
307 :     }
308 :    
309 :     public SqlxTest_ThreadEnd()
310 :     {
311 :     if (read_argc() < 2)
312 :     {
313 :     server_print("Requires mapname!")
314 :     } else {
315 :     new mapname[64]
316 :    
317 :     read_argv(1, mapname, 63)
318 :     if (!is_map_valid(mapname))
319 :     {
320 :     server_print("Invalid map: %s", mapname)
321 :     } else {
322 :     g_TestEnd = true
323 :     server_cmd("changelevel %s", mapname)
324 :     }
325 :     }
326 :    
327 :     return PLUGIN_HANDLED
328 :     }
329 :    
330 :    
331 :     public plugin_end()
332 :     {
333 :     if (g_TestEnd)
334 :     {
335 :     SqlxTest_Thread()
336 :     } else {
337 :     SQL_FreeHandle(g_DbInfo)
338 :     }
339 :     }

Contact
ViewVC Help
Powered by ViewVC 1.0.4