aboutsummaryrefslogtreecommitdiff
path: root/src/sql.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sql.c')
-rw-r--r--src/sql.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/sql.c b/src/sql.c
new file mode 100644
index 0000000..4b1a02b
--- /dev/null
+++ b/src/sql.c
@@ -0,0 +1,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.