]> pd.if.org Git - zpackage/blob - lib/dbquery.c
separate zpm library database create and open
[zpackage] / lib / dbquery.c
1 #include <stdarg.h>
2 #include <string.h>
3
4 #include "sqlite3.h"
5 #include "zpm.h"
6
7 #define SQLERROR(x) fprintf(stderr, "%s %d: %s\n", __func__, __LINE__, (x))
8 sqlite3_stmt *zpm_dbquery(struct zpm *zpm, char *query, ...) {
9         sqlite3 *db;
10         char *sql;
11         va_list args;
12         sqlite3_stmt *st;
13         int rv;
14
15         if (!zpm || zpm->error || !zpm->db) {
16                 zpm->error = 1;
17                 return 0;
18         }
19
20         db = zpm->db;
21
22         va_start(args, query);
23         sql = sqlite3_vmprintf(query, args);
24         va_end(args);
25
26         if (!sql) {
27                 zpm->error = 1;
28                 return 0;
29         }
30
31         fprintf(stderr, "preparing query: %s\n", sql);
32         rv = sqlite3_prepare_v2(db, sql, strlen(sql), &st, NULL);
33         if (rv != SQLITE_OK) {
34                 SQLERROR(sqlite3_errmsg(db));
35                 zpm->error = rv;
36                 return 0;
37         }
38
39         return st;
40 }