/[LeafOK_CVS]/pvpgn-1.7.4/src/bnetd/sql_mysql.c
ViewVC logotype

Contents of /pvpgn-1.7.4/src/bnetd/sql_mysql.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Tue Jun 6 03:41:37 2006 UTC (19 years, 9 months ago) by sysadm
Branch point for: GNU, MAIN
Content type: text/x-csrc
Initial revision

1 /*
2 * Copyright (C) 2002,2003 Mihai RUSU (dizzy@rdsnet.ro)
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19 #ifdef WITH_SQL_MYSQL
20 #include "common/setup_before.h"
21 #ifdef WIN32
22 #include <windows.h>
23 #include <mysql/mysql.h>
24 #else
25 #include <mysql.h>
26 #endif
27 #include <stdlib.h>
28 #include "common/eventlog.h"
29 #include "common/xalloc.h"
30 #include "storage_sql.h"
31 #include "sql_mysql.h"
32 #include "common/setup_after.h"
33
34 static int sql_mysql_init(const char *, const char *, const char *, const char *, const char *, const char *);
35 static int sql_mysql_close(void);
36 static t_sql_res * sql_mysql_query_res(const char *);
37 static int sql_mysql_query(const char *);
38 static t_sql_row * sql_mysql_fetch_row(t_sql_res *);
39 static void sql_mysql_free_result(t_sql_res *);
40 static unsigned int sql_mysql_num_rows(t_sql_res *);
41 static unsigned int sql_mysql_num_fields(t_sql_res *);
42 static unsigned int sql_mysql_affected_rows(void);
43 static t_sql_field * sql_mysql_fetch_fields(t_sql_res *);
44 static int sql_mysql_free_fields(t_sql_field *);
45 static void sql_mysql_escape_string(char *, const char *, int);
46
47 t_sql_engine sql_mysql = {
48 sql_mysql_init,
49 sql_mysql_close,
50 sql_mysql_query_res,
51 sql_mysql_query,
52 sql_mysql_fetch_row,
53 sql_mysql_free_result,
54 sql_mysql_num_rows,
55 sql_mysql_num_fields,
56 sql_mysql_affected_rows,
57 sql_mysql_fetch_fields,
58 sql_mysql_free_fields,
59 sql_mysql_escape_string
60 };
61
62 static MYSQL *mysql = NULL;
63
64 static int sql_mysql_init(const char *host, const char *port, const char *socket, const char *name, const char *user, const char *pass)
65 {
66 if (name == NULL || user == NULL) {
67 eventlog(eventlog_level_error, __FUNCTION__, "got NULL parameter");
68 return -1;
69 }
70
71 if ((mysql = mysql_init(NULL)) == NULL) {
72 eventlog(eventlog_level_error, __FUNCTION__, "got error from mysql_init");
73 return -1;
74 }
75
76 if (mysql_real_connect(mysql, host, user, pass, name, port ? atoi(port) : 0, socket, CLIENT_FOUND_ROWS) == NULL) {
77 eventlog(eventlog_level_error, __FUNCTION__, "error connecting to database (db said: '%s')", mysql_error(mysql));
78 mysql_close(mysql);
79 return -1;
80 }
81
82 return 0;
83 }
84
85 static int sql_mysql_close(void)
86 {
87 if (mysql) {
88 mysql_close(mysql);
89 mysql = NULL;
90 }
91
92 return 0;
93 }
94
95 static t_sql_res * sql_mysql_query_res(const char * query)
96 {
97 t_sql_res *res;
98
99 if (mysql == NULL) {
100 eventlog(eventlog_level_error, __FUNCTION__, "mysql driver not initilized");
101 return NULL;
102 }
103
104 if (query == NULL) {
105 eventlog(eventlog_level_error, __FUNCTION__, "got NULL query");
106 return NULL;
107 }
108
109 if (mysql_query(mysql, query)) {
110 // eventlog(eventlog_level_debug, __FUNCTION__, "got error from query (%s)", query);
111 return NULL;
112 }
113
114 res = mysql_store_result(mysql);
115 if (res == NULL) {
116 eventlog(eventlog_level_error, __FUNCTION__, "got error from store result");
117 return NULL;
118 }
119
120 return res;
121 }
122
123 static int sql_mysql_query(const char * query)
124 {
125 if (mysql == NULL) {
126 eventlog(eventlog_level_error, __FUNCTION__, "mysql driver not initilized");
127 return -1;
128 }
129
130 if (query == NULL) {
131 eventlog(eventlog_level_error, __FUNCTION__, "got NULL query");
132 return -1;
133 }
134
135 return mysql_query(mysql, query) == 0 ? 0 : -1;
136 }
137
138 static t_sql_row * sql_mysql_fetch_row(t_sql_res *result)
139 {
140 if (result == NULL) {
141 eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
142 return NULL;
143 }
144
145 return mysql_fetch_row((MYSQL_RES *)result);
146 }
147
148 static void sql_mysql_free_result(t_sql_res *result)
149 {
150 if (result == NULL) {
151 eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
152 return;
153 }
154
155 mysql_free_result((MYSQL_RES *)result);
156 }
157
158 static unsigned int sql_mysql_num_rows(t_sql_res *result)
159 {
160 if (result == NULL) {
161 eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
162 return 0;
163 }
164
165 return mysql_num_rows((MYSQL_RES *)result);
166 }
167
168 static unsigned int sql_mysql_num_fields(t_sql_res *result)
169 {
170 if (result == NULL) {
171 eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
172 return 0;
173 }
174
175 return mysql_num_fields((MYSQL_RES *)result);
176 }
177
178 static unsigned int sql_mysql_affected_rows(void)
179 {
180 return mysql_affected_rows(mysql);
181 }
182
183 static t_sql_field * sql_mysql_fetch_fields(t_sql_res *result)
184 {
185 MYSQL_FIELD *fields;
186 unsigned fieldno, i;
187 t_sql_field *rfields;
188
189 if (result == NULL) {
190 eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
191 return NULL;
192 }
193
194 fieldno = mysql_num_fields((MYSQL_RES *)result);
195 fields = mysql_fetch_fields((MYSQL_RES *)result);
196
197 rfields = xmalloc(sizeof(t_sql_field) * (fieldno + 1));
198 for(i = 0; i < fieldno; i++)
199 rfields[i] = fields[i].name;
200 rfields[i] = NULL;
201
202 return rfields;
203 }
204
205 static int sql_mysql_free_fields(t_sql_field *fields)
206 {
207 if (fields == NULL) {
208 eventlog(eventlog_level_error, __FUNCTION__, "got NULL fields");
209 return -1;
210 }
211
212 xfree((void*)fields);
213 return 0; /* mysql_free_result() should free the rest properly */
214 }
215
216 static void sql_mysql_escape_string(char *escape, const char *from, int len)
217 {
218 if (mysql == NULL) {
219 eventlog(eventlog_level_error, __FUNCTION__, "mysql driver not initilized");
220 return;
221 }
222 mysql_real_escape_string(mysql, escape, from, len);
223 }
224
225 #endif /* WITH_SQL_MYSQL */

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1