#include #include #include #include #include "trans.h" MYSQL mysql; MYSQL_RES *result; void sql_connect() { char *socket_path = NULL; if (sql_host && sql_host[0] == '/') { socket_path = sql_host; sql_host = "localhost"; } if (!mysql_real_connect(&mysql, sql_host, sql_user, sql_password, sql_database, sql_port, socket_path, 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; }