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