plugins/testsuite/sqltest.sp
author David Anderson <dvander@alliedmods.net>
Mon Aug 10 22:16:58 2009 -0400 (2009-08-10)
changeset 2767 c1f37afdcbb9
parent 2281 fcb07f41ad91
permissions -rw-r--r--
Fixed incorrect escaping in clientprefs SQLite queries (bug 3904, r+a12=pred).
ds@1952
     1
#include <sourcemod>
ds@1952
     2
ds@1952
     3
public Plugin:myinfo = 
ds@1952
     4
{
ds@1952
     5
	name = "SQL Testing Lab",
ds@1952
     6
	author = "AlliedModders LLC",
ds@1952
     7
	description = "Tests basic function calls",
ds@1952
     8
	version = "1.0.0.0",
ds@1952
     9
	url = "http://www.sourcemod.net/"
ds@1952
    10
};
ds@1952
    11
ds@1952
    12
public OnPluginStart()
ds@1952
    13
{
ds@1952
    14
	RegServerCmd("sql_test_normal", Command_TestSql1)
ds@1952
    15
	RegServerCmd("sql_test_stmt", Command_TestSql2)
ds@1952
    16
	RegServerCmd("sql_test_thread1", Command_TestSql3)
ds@1952
    17
	RegServerCmd("sql_test_thread2", Command_TestSql4)
ds@1952
    18
	RegServerCmd("sql_test_thread3", Command_TestSql5)
ds@1952
    19
}
ds@1952
    20
ds@1952
    21
PrintQueryData(Handle:query)
ds@1952
    22
{
ds@1952
    23
	if (!SQL_HasResultSet(query))
ds@1952
    24
	{
ds@1952
    25
		PrintToServer("Query Handle %x has no results", query)
ds@1952
    26
		return
ds@1952
    27
	}
ds@1952
    28
	
ds@1952
    29
	new rows = SQL_GetRowCount(query)
ds@1952
    30
	new fields = SQL_GetFieldCount(query)
ds@1952
    31
	
ds@1952
    32
	decl String:fieldNames[fields][32]
ds@1952
    33
	PrintToServer("Fields: %d", fields)
ds@1952
    34
	for (new i=0; i<fields; i++)
ds@1952
    35
	{
ds@1952
    36
		SQL_FieldNumToName(query, i, fieldNames[i], 32)
ds@1952
    37
		PrintToServer("-> Field %d: \"%s\"", i, fieldNames[i])
ds@1952
    38
	}
ds@1952
    39
	
ds@1952
    40
	PrintToServer("Rows: %d", rows)
ds@1952
    41
	decl String:result[255]
ds@1952
    42
	new row
ds@1952
    43
	while (SQL_FetchRow(query))
ds@1952
    44
	{
ds@1952
    45
		row++
ds@1952
    46
		PrintToServer("Row %d:", row)
ds@1952
    47
		for (new i=0; i<fields; i++)
ds@1952
    48
		{
ds@1952
    49
			SQL_FetchString(query, i, result, sizeof(result))
ds@1952
    50
			PrintToServer(" [%s] %s", fieldNames[i], result)
ds@1952
    51
		}
ds@1952
    52
	}
ds@1952
    53
}
ds@1952
    54
ds@1952
    55
public Action:Command_TestSql1(args)
ds@1952
    56
{
ds@1952
    57
	new String:error[255]
ds@1952
    58
	new Handle:db = SQL_DefConnect(error, sizeof(error))
ds@1952
    59
	if (db == INVALID_HANDLE)
ds@1952
    60
	{
ds@1952
    61
		PrintToServer("Failed to connect: %s", error)
ds@1952
    62
		return Plugin_Handled
ds@1952
    63
	}
ds@1952
    64
	
dvander@2281
    65
	new Handle:query = SQL_Query(db, "SELECT * FROM gab")
ds@1952
    66
	if (query == INVALID_HANDLE)
ds@1952
    67
	{
ds@1952
    68
		SQL_GetError(db, error, sizeof(error))
ds@1952
    69
		PrintToServer("Failed to query: %s", error)
ds@1952
    70
	} else {
ds@1952
    71
		PrintQueryData(query)
ds@1952
    72
		CloseHandle(query)
ds@1952
    73
	}
ds@1952
    74
	
ds@1952
    75
	CloseHandle(db)
ds@1952
    76
	
ds@1952
    77
	return Plugin_Handled;
ds@1952
    78
}
ds@1952
    79
ds@1952
    80
public Action:Command_TestSql2(args)
ds@1952
    81
{
ds@1952
    82
	new String:error[255]
ds@1952
    83
	new Handle:db = SQL_DefConnect(error, sizeof(error))
ds@1952
    84
	if (db == INVALID_HANDLE)
ds@1952
    85
	{
ds@1952
    86
		PrintToServer("Failed to connect: %s", error)
ds@1952
    87
		return Plugin_Handled
ds@1952
    88
	}
ds@1952
    89
	
dvander@2281
    90
	new Handle:stmt = SQL_PrepareQuery(db, "SELECT * FROM gab WHERE gaben > ?", error, sizeof(error))
ds@1952
    91
	if (stmt == INVALID_HANDLE)
ds@1952
    92
	{
ds@1952
    93
		PrintToServer("Failed to prepare query: %s", error)
ds@1952
    94
	} else {
ds@1952
    95
		SQL_BindParamInt(stmt, 0, 1)
ds@1952
    96
		if (!SQL_Execute(stmt))
ds@1952
    97
		{
ds@1952
    98
			SQL_GetError(stmt, error, sizeof(error))
ds@1952
    99
			PrintToServer("Failed to execute query: %s", error)
ds@1952
   100
		} else {
ds@1952
   101
			PrintQueryData(stmt)
ds@1952
   102
		}
ds@1952
   103
		CloseHandle(stmt)
ds@1952
   104
	}
ds@1952
   105
	
ds@1952
   106
	CloseHandle(db)
ds@1952
   107
	
ds@1952
   108
	return Plugin_Handled;
ds@1952
   109
}
ds@1952
   110
ds@1952
   111
new Handle:g_ThreadedHandle = INVALID_HANDLE;
ds@1952
   112
ds@1952
   113
public CallbackTest3(Handle:owner, Handle:hndl, const String:error[], any:data)
ds@1952
   114
{
ds@1952
   115
	PrintToServer("CallbackTest1() (owner %x) (hndl %x) (error \"%s\") (data %d)", owner, hndl, error, data);
ds@1952
   116
	if (g_ThreadedHandle != INVALID_HANDLE && hndl != INVALID_HANDLE)
ds@1952
   117
	{
ds@1952
   118
		CloseHandle(hndl);
ds@1952
   119
	} else {
ds@1952
   120
		g_ThreadedHandle = hndl;
ds@1952
   121
	}
ds@1952
   122
}
ds@1952
   123
ds@1952
   124
public Action:Command_TestSql3(args)
ds@1952
   125
{
ds@1952
   126
	if (g_ThreadedHandle != INVALID_HANDLE)
ds@1952
   127
	{
ds@1952
   128
		PrintToServer("A threaded connection already exists, run the next test");
ds@1952
   129
		return Plugin_Handled;
ds@1952
   130
	}
ds@1952
   131
	
ds@1952
   132
	new String:name[32];
ds@1952
   133
	GetCmdArg(1, name, sizeof(name));
ds@1952
   134
	
ds@1952
   135
	SQL_TConnect(CallbackTest3, name);
ds@1952
   136
	
ds@1952
   137
	return Plugin_Handled;
ds@1952
   138
}
ds@1952
   139
ds@1952
   140
ds@1952
   141
public Action:Command_TestSql4(args)
ds@1952
   142
{
ds@1952
   143
	SQL_LockDatabase(g_ThreadedHandle);
dvander@2281
   144
	new Handle:query = SQL_Query(g_ThreadedHandle, "SELECT * FROM gab")
ds@1952
   145
	if (query == INVALID_HANDLE)
ds@1952
   146
	{
ds@1952
   147
		new String:error[255];
ds@1952
   148
		SQL_GetError(g_ThreadedHandle, error, sizeof(error))
ds@1952
   149
		PrintToServer("Failed to query: %s", error)
ds@1952
   150
	} else {
ds@1952
   151
		PrintQueryData(query)
ds@1952
   152
		CloseHandle(query)
ds@1952
   153
	}
ds@1952
   154
	SQL_UnlockDatabase(g_ThreadedHandle);
ds@1952
   155
	
ds@1952
   156
	return Plugin_Handled;
ds@1952
   157
}
ds@1952
   158
ds@1952
   159
public CallbackTest5(Handle:owner, Handle:hndl, const String:error[], any:data)
ds@1952
   160
{
ds@1952
   161
	if (hndl == INVALID_HANDLE)
ds@1952
   162
	{
ds@1952
   163
		PrintToServer("Failed to query: %s", error)
ds@1952
   164
	} else {
ds@1952
   165
		PrintQueryData(hndl)
dvander@2281
   166
		SQL_TQuery(g_ThreadedHandle, CallbackTest6, "UPDATE gab SET `gaben` = `gaben` + 1 WHERE `gaben` >= 4", 52)
dvander@2281
   167
	}
dvander@2281
   168
}
dvander@2281
   169
dvander@2281
   170
public CallbackTest6(Handle:owner, Handle:hndl, const String:error[], any:data)
dvander@2281
   171
{
dvander@2281
   172
	if (hndl == INVALID_HANDLE)
dvander@2281
   173
	{
dvander@2281
   174
		PrintToServer("Failed to query: %s", error)
dvander@2281
   175
	} else {
dvander@2281
   176
		PrintToServer("Queried!");
dvander@2281
   177
		SQL_TQuery(g_ThreadedHandle, CallbackTest7, "UPDATE gab SET `gaben` = `gaben` + 1 WHERE `gaben` >= 4", 52)
dvander@2281
   178
	}
dvander@2281
   179
}
dvander@2281
   180
dvander@2281
   181
public CallbackTest7(Handle:owner, Handle:hndl, const String:error[], any:data)
dvander@2281
   182
{
dvander@2281
   183
	if (hndl == INVALID_HANDLE)
dvander@2281
   184
	{
dvander@2281
   185
		PrintToServer("Failed to query: %s", error)
dvander@2281
   186
	} else {
dvander@2281
   187
		PrintToServer("Queried!");
ds@1952
   188
	}
ds@1952
   189
}
ds@1952
   190
ds@1952
   191
public Action:Command_TestSql5(args)
ds@1952
   192
{
dvander@2281
   193
	SQL_TQuery(g_ThreadedHandle, CallbackTest5, "SELECT * FROM gab", 52)
dvander@2281
   194
	SQL_TQuery(g_ThreadedHandle, CallbackTest5, "SELECT * FROM gab", 52)
dvander@2281
   195
	SQL_TQuery(g_ThreadedHandle, CallbackTest5, "SELECT * FROM gab", 52)
dvander@2281
   196
	SQL_TQuery(g_ThreadedHandle, CallbackTest5, "SELECT * FROM gab", 52)
ds@1952
   197
	
ds@1952
   198
	return Plugin_Handled;
ds@1952
   199
}
ds@1952
   200