aboutsummaryrefslogtreecommitdiff
path: root/src/sql.c
blob: 4b1a02b14dce13c2a58aa5407db81ea8da44247a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <mysql/mysql.h>
#include "trans.h"

MYSQL mysql;
MYSQL_RES *result;

void
sql_connect()
{
	if (!mysql_real_connect(&mysql, 
				sql_host, sql_user,
				sql_password, sql_database, sql_port,
				NULL, 0)) {
		fprintf(stderr,
		        "cannot connect to MySQL server: %s\n",
			mysql_error(&mysql));
		exit(1);
	}
	
}

void
sql_close()
{
	mysql_close(&mysql);
}

int
va_sql_query(char *fmt, va_list ap)
{
	char *buf = NULL;
	int rc;

	if (result) {
		mysql_free_result(result);
		result = NULL;
	}
	
	vasprintf(&buf, fmt, ap);
	if (debug)
		fprintf(stderr, "Executing query: %s\n", buf);
	rc = mysql_query(&mysql, buf);
	if (rc) {
		fprintf(stderr, "MySQL Error: %s\n", mysql_error(&mysql));
		if (!debug)
			fprintf(stderr, "The failed query was: %s\n", buf);
	} else {
		result = mysql_store_result(&mysql);
		if (result) {
			if (debug) 
				fprintf(stderr, "Query returned %lu rows\n",
					mysql_num_rows(result));
		} else {
			if (mysql_field_count(&mysql) == 0) {
				/* query does not return data */
				if (debug) 
					fprintf(stderr,
						"Query affected %lu rows\n",
						mysql_affected_rows(&mysql));
			} else {
				fprintf(stderr,
					"MySQL Error: %s\n",
					mysql_error(&mysql));
				if (!debug)
					fprintf(stderr,
						"The failed query was: %s\n",
						buf);
				rc = 1;
			}
		}
 	}

	free(buf);
	return rc;
}

int
sql_query(char *fmt, ...)
{
	va_list ap;
	int rc;
	va_start(ap, fmt);
	rc = va_sql_query(fmt, ap);
	va_end(ap);
	return rc;
}

int
sql_query_n(unsigned long *pret, char *fmt, ...)
{
	va_list ap;
	int rc;
	va_start(ap, fmt);
	rc = va_sql_query(fmt, ap);
	va_end(ap);
	if (rc == 0) {
		MYSQL_ROW row = mysql_fetch_row(result);
		if (row)
			*pret = strtoul (row[0], NULL, 0);
		else
			rc = 1;
	}
	return rc;
}

Return to:

Send suggestions and report system problems to the System administrator.