FTEQW
Documentation of the FTE engine source tree.
sv_sql.h
Go to the documentation of this file.
1#ifndef SV_SQL_H
2#define SV_SQL_H
3
4#ifdef USE_MYSQL
5 #ifdef _WIN32
6 #include <windows.h>
7 #endif
8 #include <mysql/mysql.h>
9#endif
10#ifdef USE_SQLITE
11typedef struct
12{
13 char *ptr;
14 int len;
16#endif
17
18#define SQL_CONNECT_STRUCTPARAMS 2
19#define SQL_CONNECT_PARAMS 4
20
21typedef enum
22{
24 SQLDRV_SQLITE, /* NOT IN YET */
27
28typedef struct queryrequest_s
29{
30 int srvid;
31 int num; /* query number reference */
32 struct queryrequest_s *nextqueue; /* next request in queue */
33 struct queryrequest_s *nextreq; /* next request in queue */
34 struct queryresult_s *results; /* chain of received results */
35 enum
36 {
40 SR_FINISHED, //waiting for close
41 SR_ABORTED //don't notify. destroy on finish.
42 } state; //maintained by main thread. worker *may* check for aborted state as a way to quickly generate an error.
43 qboolean (*callback)(struct queryrequest_s *req, int firstrow, int numrows, int numcols, qboolean eof); /* called on main thread once complete */
44 struct
45 {
46 qboolean persistant; /* persistant query */
47 int qccallback; /* callback function reference */
48 int selfent; /* self entity on call */
49 float selfid; /* self entity id on call */
50 int otherent; /* other entity on call */
51 float otherid; /* other entity id on call */
52 void *thread;
53 } user; /* sql code does not write anything in this struct */
54 char query[1]; /* query to run */
56
57typedef struct queryresult_s
58{
59 struct queryrequest_s *request; /* corresponding request */
60 struct queryresult_s *next; /* next result in queue */
61 int rows; /* rows contained in single result set */
62 int firstrow; /* 0 on first result block */
63 int columns; /* fields */
64 qboolean eof; /* end of query reached */
65 void *result; /* result set from mysql */
66#if 0
67 char **resultset; /* stored result set from partial fetch */
68#endif
69 char error[1]; /* error string, "" if none */
71
72typedef struct sqlserver_s
73{
74 void *thread; /* worker thread for server */
75 sqldrv_t driver; /* driver type */
76#ifdef USE_MYSQL
77 MYSQL *mysql; /* mysql server */
78#endif
79#ifdef USE_SQLITE
80 struct sqlite3 *sqlite;
81#endif
82 volatile qboolean active; /* set to false to kill thread */
83 volatile qboolean terminated; /* set by the worker to say that it won't block (for long) and can be joined */
84 void *requestcondv; /* lock and conditional variable for queue read/write */
85 void *resultlock; /* mutex for queue read/write */
86 int querynum; /* next reference number for queries */
87 queryrequest_t *requests; /* list of pending and persistant requests */
88 queryrequest_t *requestqueue; /* query requests queue */
89 queryrequest_t *requestslast; /* query requests queue last link */
90 queryresult_t *results; /* query results queue */
91 queryresult_t *resultslast; /* query results queue last link */
92 queryresult_t *serverresult; /* most recent (orphaned) server error result */
93 char **connectparams; /* connect parameters (0 = host, 1 = user, 2 = pass, 3 = defaultdb) */
95
96/* prototypes */
97void SQL_Init(void);
98void SQL_KillServers(void *owner);
99void SQL_DeInit(void);
100
101sqlserver_t *SQL_GetServer (void *owner, int serveridx, qboolean inactives);
102queryrequest_t *SQL_GetQueryRequest (sqlserver_t *server, int queryidx);
103queryresult_t *SQL_GetQueryResult (sqlserver_t *server, int queryidx, int row);
104//void SQL_DeallocResult(sqlserver_t *server, queryresult_t *qres);
106void SQL_CloseResult(sqlserver_t *server, queryresult_t *qres);
107void SQL_CloseRequest(sqlserver_t *server, queryrequest_t *qres, qboolean force);
109char *SQL_ReadField (sqlserver_t *server, queryresult_t *qres, int row, int col, qboolean fields, size_t *resultsize);
110int SQL_NewServer(void *owner, const char *driver, const char **paramstr);
111int SQL_NewQuery(sqlserver_t *server, qboolean (*callback)(queryrequest_t *req, int firstrow, int numrows, int numcols, qboolean eof), const char *str, queryrequest_t **reqout); //callback will be called on the main thread once the result is back
112void SQL_Disconnect(sqlserver_t *server);
113void SQL_Escape(sqlserver_t *server, const char *src, char *dst, int dstlen);
114const char *SQL_Info(sqlserver_t *server);
116void SQL_ServerCycle (void);
117
118extern cvar_t sql_driver;
119extern cvar_t sql_host;
120extern cvar_t sql_username;
121extern cvar_t sql_password;
122extern cvar_t sql_defaultdb;
123
124#define SQLCVAROPTIONS "SQL Defaults"
125
126#endif
qboolean
Definition: api_menu.h:34
void dNearCallback * callback
Definition: com_phys_ode.c:655
unsigned int col
Definition: gl_ngraph.c:39
unsigned int owner
Definition: pr_menu.c:103
QCC_ddef_t * fields
Definition: qccmain.c:100
struct sqlite3 sqlite3
Definition: sqlite3.h:228
Definition: cvar.h:59
Definition: sv_sql.h:29
int qccallback
Definition: sv_sql.h:47
struct queryrequest_s::@408 user
float selfid
Definition: sv_sql.h:49
int selfent
Definition: sv_sql.h:48
struct queryrequest_s * nextqueue
Definition: sv_sql.h:32
qboolean persistant
Definition: sv_sql.h:46
@ SR_NEW
Definition: sv_sql.h:37
@ SR_PENDING
Definition: sv_sql.h:38
@ SR_PARTIAL
Definition: sv_sql.h:39
@ SR_ABORTED
Definition: sv_sql.h:41
@ SR_FINISHED
Definition: sv_sql.h:40
qboolean(* callback)(struct queryrequest_s *req, int firstrow, int numrows, int numcols, qboolean eof)
Definition: sv_sql.h:43
struct queryrequest_s * nextreq
Definition: sv_sql.h:33
void * thread
Definition: sv_sql.h:52
char query[1]
Definition: sv_sql.h:54
struct queryresult_s * results
Definition: sv_sql.h:34
int num
Definition: sv_sql.h:31
int srvid
Definition: sv_sql.h:30
enum queryrequest_s::@405 state
int otherent
Definition: sv_sql.h:50
float otherid
Definition: sv_sql.h:51
Definition: sv_sql.h:58
int columns
Definition: sv_sql.h:63
void * result
Definition: sv_sql.h:65
int firstrow
Definition: sv_sql.h:62
char ** resultset
Definition: sv_sql.h:67
qboolean eof
Definition: sv_sql.h:64
struct queryresult_s * next
Definition: sv_sql.h:60
int rows
Definition: sv_sql.h:61
char error[1]
Definition: sv_sql.h:69
struct queryrequest_s * request
Definition: sv_sql.h:59
Definition: sv_sql.h:12
int len
Definition: sv_sql.h:14
char * ptr
Definition: sv_sql.h:13
Definition: sv_sql.h:73
void * requestcondv
Definition: sv_sql.h:84
void * resultlock
Definition: sv_sql.h:85
queryrequest_t * requestslast
Definition: sv_sql.h:89
void * thread
Definition: sv_sql.h:74
int querynum
Definition: sv_sql.h:86
queryrequest_t * requests
Definition: sv_sql.h:87
sqldrv_t driver
Definition: sv_sql.h:75
queryresult_t * results
Definition: sv_sql.h:90
volatile qboolean terminated
Definition: sv_sql.h:83
volatile qboolean active
Definition: sv_sql.h:82
queryresult_t * resultslast
Definition: sv_sql.h:91
char ** connectparams
Definition: sv_sql.h:93
queryrequest_t * requestqueue
Definition: sv_sql.h:88
queryresult_t * serverresult
Definition: sv_sql.h:92
MYSQL * mysql
Definition: sv_sql.h:77
struct sqlite3 * sqlite
Definition: sv_sql.h:80
void SQL_CloseResult(sqlserver_t *server, queryresult_t *qres)
Definition: sv_sql.c:604
void SQL_CloseAllResults(sqlserver_t *server)
void SQL_Escape(sqlserver_t *server, const char *src, char *dst, int dstlen)
Definition: sv_sql.c:972
sqlserver_t * SQL_GetServer(void *owner, int serveridx, qboolean inactives)
Definition: sv_sql.c:513
cvar_t sql_password
Definition: sv_sql.c:108
void SQL_Init(void)
Definition: sv_sql.c:1291
cvar_t sql_driver
Definition: sv_sql.c:105
sqldrv_t
Definition: sv_sql.h:22
@ SQLDRV_INVALID
Definition: sv_sql.h:25
@ SQLDRV_MYSQL
Definition: sv_sql.h:23
@ SQLDRV_SQLITE
Definition: sv_sql.h:24
void SQL_KillServers(void *owner)
Definition: sv_sql.c:1306
cvar_t sql_username
Definition: sv_sql.c:107
struct queryrequest_s queryrequest_t
void SQL_CloseRequest(sqlserver_t *server, queryrequest_t *qres, qboolean force)
Definition: sv_sql.c:620
queryrequest_t * SQL_GetQueryRequest(sqlserver_t *server, int queryidx)
Definition: sv_sql.c:526
const char * SQL_Info(sqlserver_t *server)
Definition: sv_sql.c:1010
cvar_t sql_host
Definition: sv_sql.c:106
struct queryresult_s queryresult_t
void SQL_ServerCycle(void)
Definition: sv_sql.c:1194
void SQL_Disconnect(sqlserver_t *server)
Definition: sv_sql.c:964
char * SQL_ReadField(sqlserver_t *server, queryresult_t *qres, int row, int col, qboolean fields, size_t *resultsize)
Definition: sv_sql.c:681
qboolean SQL_Available(void)
Definition: sv_sql.c:1034
void SQL_ClosePersistantResult(sqlserver_t *server, queryresult_t *qres)
queryresult_t * SQL_GetQueryResult(sqlserver_t *server, int queryidx, int row)
Definition: sv_sql.c:538
int SQL_NewServer(void *owner, const char *driver, const char **paramstr)
Definition: sv_sql.c:810
cvar_t sql_defaultdb
Definition: sv_sql.c:109
void SQL_DeInit(void)
Definition: sv_sql.c:1331
struct sqlserver_s sqlserver_t
int SQL_NewQuery(sqlserver_t *server, qboolean(*callback)(queryrequest_t *req, int firstrow, int numrows, int numcols, qboolean eof), const char *str, queryrequest_t **reqout)
Definition: sv_sql.c:924